深入理解计算机系统——计算机系统漫游
(1)程序编译阶段
以hello world 程序为例,介绍计算机系统的基本组成结构和程序的编译过程。
????
#include <stdion.h>int main(){ printf("hello,world\n"); }
?该程序的执行经历这样一个过程:
?
(2)系统的硬件组成
?
计算机的硬件组成可以分为如下几个部分:
(3)hello world程序执行过程
?? 在unix系统的shell上执行下列指令:
?? unix〉./hello
??? 在键盘上输入回车键后,shell将执行一系列指令,将hello目标文件中的代码和数据从磁盘拷贝至内存,完成加载过程。处理器开始hello程序的主程序中的机器语言指令。这些指令将数据从存储器中拷贝到寄存器文件,再从寄存器中拷贝到显示器上,最终显示在屏幕上。
(4)操作系统管理硬件
?
?shell加载和运行hello程序时,程序并没有直接访问外设, 它依靠操作系统提供服务。
操作系统提供两个基本功能:防止硬件被失控的应用程序滥用;在控制复杂而通常广泛不同的低级硬件设备方面,为应用程序提供简单一致的方法。操作系统通过几个抽象概念:进程、虚拟存储器和文件 来实现上述功能。
?文件是对I/O设备的抽象,虚拟存储器是对主存和磁盘I/O设备的抽象,进程是对cpu、主存和I/O设备的抽象表示。
?
?? 操作系统通过进程为客户提供一种该程序独占处理器、主存、I/O设备的假象。
?? 1.?? 进程是操作系统对程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像独占使用硬件,这就是并发运行,也就是说一个进程的指令和另一个进程的指令是交错执行。操作系统实现这种交错执行的机制成为上下文切换。
?? 操作系统保存进程运行所需的所有状态信息,即上下文,包括许多信息,,包括PC和寄存器文件到当前值。
?? 2.?? 线程是一个进程的多个执行单元,每个线程都运行在进程的上下文中,共享同样的代码和全局数据。
?? 3.?? 虚拟存储器为每个进程提供了一个假象:每个进程都在独占使用主存。每个进程看到的存储器都是一致的,称之为虚拟地址空间。
?? 虚拟地址空间可以划分为以下几个部分:
???? 程序代码和数据:可执行目标文件
???? 堆:动态分配
???? 共享库:存放c标准库和数学库的代码和数据的区域
???? 栈:实现函数调用
???? 内河虚拟存储器:内核是操作系统总是驻留在存储器的部分。
?? 4.? 文件
??? 文件是字节序列,所有的I/O设备都可以看成文件。系统中所有的输入输出都是适用unix I/O的一小组系统函数调用读写文件实现。
?
?