深入理解计算机系统——第一章计算机系统漫游

通过追踪hello程序的生命周期来开始对系统的学习,从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止。


1.信息就是位+上下文

从hello.c的源文件说起,源程序(源文件)实际上由0,1组成的位(又称为比特)序列。8个位被组成一组,称为字节。每个字节表示程序中的某些文本字符。

大部分的现代计算机系统都是使用ASCII标准来表示文本字符,这种方式实际上就是用一个唯一的单字节大小的整数值来表示每个字符。

系统中的所有信息——包括磁盘文件,内存中的程序、内存中存放的用户数据以及网络上的传送数据,都是由一串比特表示的。那么如何区分不同的数据对象。
唯一方法就是我们读到这些数据对象时的上下文。

2.程序被其他程序翻译成不同的格式

在这里插入图片描述

预处理阶段:预处理器(CPP)根据#开头的命令,修改原始的C程序。结果得到另一个以.i作为文件扩展名。

编译阶段:编译器(ccl)将文本文件hello,i 翻译成文本文件hello.s,它包含一个汇编语言程序。改程序包含函数main的定义,如下图所示:
在这里插入图片描述
汇编阶段:汇编器(as)将hello.s翻译成机器语言指令,把这些文件打包成一种叫做**可重定位目标程序(relocatable object program)**的格式,并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,打开看,回事一堆乱码。

链接阶段:链接器(ld)负责处理像printf.o 和hello.o程序的这种合并,最终得到hello文件,它是一个可执行目标文件(可执行文件)。

3. 系统的硬件组成

  1. 总线
    贯穿整个系统的一组电子管到,称作总线。
  2. I/O 设备
    鼠标、键盘、显示器、磁盘
  3. 主存
    临时存储设备 ,用来存放程序和程序处理的数据。
    从物理上来讲,主存由一组动态随机存取存储器(DRAM)芯片组成。
    从逻辑上来讲,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),地址从零开始。
  4. 处理器
    中央处理单元(cpu),简称处理器,是解释(或执行)存储在主存中指令的引擎。cpu的核心是一个大小为一个字的存储设备(寄存器),称为程序计数器(PC)。在任何时候,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)

4. 运行hello 文件

当我们通过shell命令加载可执行文件时,这些指令将hello目标文件中的代码和数据从磁盘复制到主存。数据包括最终会被输出的字符串“hello,world\n”。

通过DMA(直接存储器存取),数据可以不通过处理器而直接从磁盘到达主存。

5.高速缓存

系统会设计高速缓存,作为暂时的区域,存放处理器近期可能会需要的信息。

局部性原理:程序具有访问局部区域里的数据和代码的趋势,通过让高速缓存里存放可能经常访问的数据,大部分的内存操作都能在快速的高速缓存中完成。

6.存储器层次结构

在这里插入图片描述

在某些具有分布式文件系统的网络系统中,本地磁盘就是存储在其他系统中磁盘上的数据的高速缓存。

7.虚拟内存

基本思想:就是把一个进程虚拟内存的内容存储在磁盘上,然后用主存作为磁盘的高速缓存,

8. 文件

文件就是字节序列。

猜你喜欢

转载自blog.csdn.net/shaoye_csdn1/article/details/90692517