(课程链接:【CSAPP-深入理解计算机系统】1-2.计算机系统漫游_哔哩哔哩_bilibili)
前情提要:上篇文章(课程)中讲述了hello程序如何经过编译系统得到可执行目标文件hello(已存放在系统磁盘上),现在我们需要具体运行它。
在看hello程序运行之前,我们先来了解一下计算机硬件组成
一、Hardware Organization of a System(计算机硬件组成)
1.Central Processing Unit (CPU) 中央处理单元(处理器)
因CPU内部结构复杂,此刻采用简化的框图来大概示意一下整个CPU的结构。
1.1 Program Counter (PC) 直译:程序计数器
PC实质上是一个大小为一个字(32位:4个字节;64位:8个字节)的存储区域,里面存放的是某一条指令的地址。从系统上电的瞬间到系统断电,处理器就不断的在执行PC指向的指令,然后更新PC使其指向下一条要执行的指令(注意:这个下一条指令与刚刚执行的指令不一定是相邻的)。
1.2 Register file 寄存器文件
它就是CPU内部的一个存储设备,寄存器文件是由一些单字长的寄存器构成,每个寄存器都有自己唯一的名字,寄存器可以理解为一个临时存放数据的空间。
例如.我们计算两个变量a+b的和,处理器从内存中读取a的值暂存在寄存器X中,读取B的值暂存在寄存器Y中,这个操作会覆盖寄存器中原来的数值。处理器完成加载的操作后,ALU(Arithmatic/logic Unit)(算术/逻辑单元)会从复制寄存器X和Y中保存的数值,然后进行算术运算,得到的结构会保存在寄存器X或者寄存器Y中,此时寄存器中原来的数值会被新的数值覆盖(在第四章中将详细讲述处理器如何实现)
2.Main memory 主存(内存)
处理器在执行程序时,内存主要存放程序指令以及数据。从物理上讲,内存是由随机动态存储器芯片组成;从逻辑上讲,内存可以看成一个从零开始的大数组,每个字节都有相应地址。(更详细的内容在本系列视频中有详细的讲解)
3.总线
内存和处理器之间通过总线来进行数据传递,总线贯穿了整个计算机系统,它负责将信息从一个部件传递到另一个部件。通常总线被设计成传送固定长度的字节块,也就是字(word)(具体是多少字节,根据不同系统而定)
4.各种输入输出设备
包括键盘,鼠标,显示器以及磁盘等等,每一个输入输出设备都通过一个控制器或者适配器与IO总线相连,控制器与适配器的主要区别是在于他们的封装方式,无论是控制器还是适配器的功能都是在IO设备与IO总线之间传递数据(更多IO知识将在本系列视频第六章和第十章进行详细的讲解)
二、hello程序执行的具体过程
(具体过程建议看视频比较直观,原视频是动图比较容易理解,以下在视频内4:51开始)
通过键盘输入“./hello"的字符串,shell程序将输入的字符逐一读入寄存器,处理器将hello字符串放入内存中,当我们完成输入按下回车键时,shell程序就知道我们已经完成了命令的输入。
shell执行一系列的指令来加载可执行文件hello,这些指令将hello中的数据(显示输出的"hello,world\n")和代码从磁盘复制到内存,复制过程将利用DMA(Direct Memory Access 存储器直接访问)技术,数据可以不经过处理器,从磁盘直接到达内存。
当可执行文件hello中的代码和数据被加载到内存中,处理器开始执行main函数中的代码,我们的main函数非常简单,只有一个打印功能。CPU会将“hello,world\n”这个字符串从内存复制到寄存器文件,然后再从寄存器文件复制到显示设备,最终“hello,world”显示在屏幕上。
(上述描述过程省略了一些细节,我们会随着不断学习完善)
从上述过程来看,即使执行如此简单的程序,数据信息仍旧需要在磁盘、内存、处理器以及IO设备之间进行搬运,数据从一个地方搬运到另一个地方需要花费时间,系统设计人员的主要任务是缩短信息搬运花费的时间。
三、Caches Matter(缓存的重要)
一般情况下,大容量的存储设备的存取速度要比小容量的慢,运行速度更快的设备的价格相对于低俗设备要更贵。
例如,在一个系统上,磁盘的容量一般为TB级,内存的容量一般为GB级,磁盘的容量大概是内存的1000倍。对于处理器而言,从磁盘上读取一个字所花费的时间开销比从内存中读取的开销大1000万倍。寄存器文件的只能存储几百个字节的信息,而内存的可以存放十几亿的字节信息(GB级),处理器从寄存器文件读取数据比从内存读取差不读要快100倍。
针对处理器和内存之间的差异,系统设计人员在寄存器文件和内存之前引入了高速缓存(cache),新且处理能力强的处理器一般有三级高速缓存:
容量:L1<L2<L3 速度:L1>L2>L3
四、Memory Hierarchy(存储器层次结构)
从上到下,设备的访问速度越来越慢,容量越来越大,每字节的造价越来越便宜。
层次结构的主要思想:上一层存储设备是下一层存储设备的高速缓存,例如,寄存器文件就是L1的高速缓存,L1是L2的高速存储,内存是磁盘的高速缓存等等。
深入理解计算机系统中高速缓存的意义:可以利用存储器的层次结构来提升程序的性能(关于缓存更多内容将在第六章会有更详细的详解)