深入理解计算机系统第一章学习笔记

1 一个程序的编译过程

预处理阶段:将程序中include的系统文件插入程序文本中。

编译阶段:编译器将hello.i翻译成汇编语言程序。

汇编阶段:汇编器将hello.s翻译成机器语言指令,生成二进制文件hello.o。

链接阶段:将标准库中的函数链接进来,生成可执行文件hello(在Linux下运行./hello可以执行)

2 程序运行过程


总线:携带信息字节并负责在各个部件间传递。

I/O设备:通过控制器或适配器与总线相连。

主存:就是内存,临时存储设备。

CPU:解释(或执行)存储在主存中指令的引擎。核心为大小为1个字节的程序计数器(PC),指向主存中的某条指令,ALU为计算单元。CPU常见操作:加载,存储,操作,跳转。

运行hello程序步骤:键盘读入命令到寄存器中,再存到主存中。按回车后通过DMA将hello文件和数据加载到内存中。加载完成后,CPU开始执行hello程序,将输出的数据复制到显示设备。

高速缓存:存储处理器近期可能会需要的信息,相当于一个小而快的内存,在CPU内部。



3 操作系统管理硬件:

操作系统可以看成应用软件和硬件之间的一层软件。操作系统有两个基本功能:1)防止硬件被失控的应用程序滥用。2)向应用
程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。

进程:是操作系统对一个正在运行的程序的抽象,多个进程并发运行,一个CPU会在多个进程间切换,这种机制称为上下文切换。

内核:操作系统代码常驻主存的部分,是系统管理全部进程所用的代码和数据结合的集合。

线程:一个进程有多个线程组成,共享进程的代码和全局数据。

虚拟内存:为每个进程提供一个假象,即每个进程都在独立地使用主存。每个进程看到的内存是一致的,称为虚拟地址空间。图中地址是从下往上增大的。

程序代码和数据:代码是从同一固定地址开始,紧接着的是全局变量对应的数据位置。

堆:代码和数据区之后是堆,生长方向是从低地址向高地址,动态分配。

共享库:存放C标准库和数学库。

栈:用户栈,生长方向是从高地址向低地址,编译器动态分配。

内核虚拟内存:不允许程序读写这个区域。


并发和并行:并发指一个同事具有多个活动的系统。并行是指用并发来使一个系统运行得更快。

线程级并发:超线程,允许一个CPU执行多个控制流的技术。某些硬件有多个备份,如PC和寄存器文件。

指令级并行:现代处理器可以同时执行多条指令。一个周期可以执行2-4条指令。流水线技术。

单指令、多数据并行:允许一条指令产生多个可以并行执行的操作。

猜你喜欢

转载自blog.csdn.net/u011635951/article/details/78082264