menu Limu's Blog
CSAPP笔记(一)——计算机系统漫游
338 浏览 | 2020-12-30 | 阅读时间: 约 4 分钟 | 分类: 笔记 | 标签:
请注意,本文编写于 129 天前,最后修改于 34 天前,其中某些信息可能已经过时。

放假了,刷了两天的BUU,感觉自己的Pwn有了门槛,在求助了诸多师傅的帮助下,我决定还是要好好的研究下《深入理解计算机系统》(csapp)这本书,也许这本书能够补充我的不足吧。
这个系列我就暂定为csapp的笔记吧,记录下自己的笔记和疑问,方便以后自己查找复习,毕竟是自己选择的路嘛,再累也要走下去。

C语言的编译系统(GCC)

基本分为了四个阶段,首先预处理器(cpp)会根据#开头的命令修改程序本身,引入修改相关的内容,然后程序会被编译器(ccl)编译成汇编的文本文件,然后在汇编器(as)的翻译下,生成一个叫做可重定位目标程序,在最后链接器(ld)将二进制程序和库文件连接起来生成一个可执行文件。

硬件组成

总线:一组电子管道,通常用于传送定长字节块,32位的是4字节,64位的是8字节。
I/O设备:鼠标、键盘、显示器、磁盘等等都属于I/O设备,它们都通过一个控制器或者是适配器与I/O总线相连,控制器是I/O设备本身或者系统的主印制电路板(通常称作主板)上的芯片组。而适配器则是一块插在主板插槽上的卡。

主存:临时储存设备,就是我们所说的运存,快速储存设备,它是由一组动态随机存取存储器(DRAM)组成的。(如果没有主存而使用的硬盘,那么信息的传递会很慢,而且断电就会丢失,为了应对主存小的原因,虚拟内存的方案就有了)
处理器:就是我们所说的CPU啦,它主要是解释或者是执行储存在主存的指令,围绕着主存、寄存器文件和算数/逻辑单元(ALU)进行着,而CPU中也存在一个类似于主存的东西,我们称之为高速缓冲储存器(cache),是使用静态随机访问存储器(SRAM)实现的,CPU有一级、二级甚至是三级高速缓存的等级划分,而对应的访问时间会随之增大。L1也就是一级高速缓存的容量位数十万甚至更高,它的访问速度和访问寄存器的速度相仿。

存储设备形成层次结构图

进程

单处理器只能执行一个进程的代码,当操作系统需要将控制权转移到一个新的进程的时候就需要进行上下文切换,也就是保存当前进程的上下文,恢复新进程的上下文,然后将控制权转移到新进程。

虚拟内存是一个抽象的概念,它为每个进程提供了一个独占主存的假象,每个进程看到的内存是一样的,称为虚拟地址空间

注:图中地址是从下往上增大的

并发与并行

线程级并发:最开始的单处理器系统,这种是通过快速切换进程实现的,而现在已经出现了多核和超线程,构建一个由单操作系统内核控制的多处理器组成的系统的时候就可以实现了(多核处理器每一个CPU核都是拥有自己的L1、L2两个高速缓存),而这个超线程的技术则是一项允许一个CPU执行多个控制流技术,它涉及CPU某些硬件有多个备份, 比如程序计数器和寄存器文件,而其他的硬件部分只有一份, 比如执行浮点算术运算的单元。常规的处理器需要大约20000个时钟周期做不同线程间的转换,而超线程的处理器可以在单个周期的基础上决定要执行哪一个线程。这使得CPU能够更好地利用它的处理资源。

指令级并行:在较低的抽象层次上, 现代处理器可以同时执行多条指令的属性称为指令级并行,如果处理器可以达到比一个周期一条指令更快的执行速率,就称之为超标量 (super­-scalar) 处理器。大多数现代处理器都支持超标量操作

单指令、多数据并行:在最低层次上,许多现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作,这种方式称为单指令、多数据,即SIMD并行。(最新的Intel和AMD处理器就支持并行的对8对float做加发的指令,这种技术多是为了提高影像声音等数据应用的执行速度)。

本书的第一章就是介绍了一些基础的概念和计算机硬件的基础。对程序的执行过程有了更好的了解。

文章转载请注明limu

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

全部评论

info 评论功能已经关闭了呐!