这些内容都是摘自《深入理解操作系统》这本书,很多年前学习操作系统都是马马虎虎,突然感觉现在很需要再次深入了解操作系统,读了这本书感觉对自己有用的就记下来了,方面以后查阅。

计算机系统漫游这一章主要讲了计算机系统的主要概念和主题,主要通过研究“hello,world"这个简单程序的生命周期。

1 编译系统

 

深入理解操作系统之一 —— 计算机系统漫游_操作系统

预处理阶段:预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。  比如hello.c中第一行的#include <stdio.h>指令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入到程序文本中去。结果就得到了另一个C程序,通常是以.1作为文件扩展名。

编译阶段:编译器(cc 1)将文本文件hello.i翻译成文本文件hellos,它包含一个汇编语言程程序,汇编语言程序中的每条语句都以一种标准的文本格式确切地描述了一条低级机器语言指令。汇编语言是非常有用的,因为它为不同高级语言的不同编译器提供了通用的输出语言。 

汇编阶段:接下来,汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成为一种叫做可重定位目标程序的格式,并将结果保存在目标文件hello.o中。hello.o文件是一个了进制文件,它的字节编码是机器语言指令而不是字符。如果我们在文本编辑器中打开hello.o文件,呈现的将是一堆乱码。
链接阶段:请注意,我们的hello程序调用了printf函数,它是标准C库中的一个函数,每个c编译器都提供。printf函数存在于一个名为printf。的单独的预编译目标文件中,而这个文件必须以某种方式并入到我们的hello.o程序中。链接器(1d)就负责处理这种并入,结果
就得到hello文件,它是一个可执行目标文件(或者简称为可执行文件)。可执行文件加载到存储器后,由系统负责执行。

2 典型系统的硬件组织

 

深入理解操作系统之一 —— 计算机系统漫游_linux_02

3 高速缓存

 

深入理解操作系统之一 —— 计算机系统漫游_操作系统_03

4 执行Hello程序

首先,shell程序执行它的指令,等待我们输入命令,当我们在键盘上输入字符串”./hello"后,shell程序就逐一读取字符到寄存器,再把它存放到存储器中,如下图:

 

深入理解操作系统之一 —— 计算机系统漫游_操作系统_04

当我们在键盘上敲回车键时,shell就知道我们已经结束了命令的输入,然后shell执行一系列指令,这些指令将hello目标文件中的代码和数据从键盘拷贝到主存,从而加载hello文件,数据包括最终会被输出的字符串"hello world".

一旦hello目标文件中的代码和数据被加载到了存储器,处理器就开始执行hello程序的主程序中的机器语言指令。这些指令将“hello,world"串的字节从存储器重拷贝到寄存器文件,再从寄存器中文件拷贝到显示设备,最终显示在屏幕上,步骤如下:

 

深入理解操作系统之一 —— 计算机系统漫游_shell_05

 

深入理解操作系统之一 —— 计算机系统漫游_操作系统_06