上一篇《闲逛计算机系统(一):从helloworld说起》中,我们说了一个helloworld程序从编写到执行的整个过程。这篇我们来说说计算机硬件组成,然后结合helloworld程序来说明helloworld是怎样利用计算机硬件资源运行的。
首先介绍计算机的硬件组成,下面是一个IntelPentium系列的结构图:
- 总线
总线是贯穿整个系统的一个电子管道,用来在各个部件间传递数据信息。总线传送的字节长度是固定的,称为字。一个字中的字节数根据系统的不同而不同,在常见的32位机器上字长就是4个字节,64位机器上就是8个字节。
2. I/O设备
I/O设备就是系统与外界世界的联系通道。一般系统包括4个I/O设备:鼠标,键盘,显示器以及磁盘设备。我们编写好的helloworld程序就放在磁盘上。
每个I/O设备都有一个控制器或者适配器与I/O总线相连。他们的功能就是在I/O设备和I/O总线之间传递信息。
3. 主存
主存就是我们平常所说的内存,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存就是由一组动态随机存取存储器芯片组成的。从逻辑上来说,主存就是一个线性的字节数组,每个字节都有一个唯一的地址。
4. 处理器
处理器是计算机的核心,是解释存储在主存中指令的引擎。处理器的核心是一个字长的存储设备,称为程序计数器。在任何时刻,程序计数器都指向主存中的某条机器指令。
从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器所指向的指令,然后再更新程序计数器,再接着执行指令。处理器执行指令是围绕着主存,寄存器文件和算术/逻辑单元(ALU)进行的。寄存器文件是一个小的存储设备,由一些1字长的寄存器组成,每个寄存器有唯一的名字,ALU计算新的数据和地址值。CPU在指令的要求下可能会执行一下操作:
- 加载:把一个字节或一个字从主存复制到寄存器中,以覆盖寄存器原来的数据。
- 存储:把一个字节或一个字从寄存器复制到主存中,以覆盖主存中相应位置原来的数据。
- 操作:把两个寄存器的内容复制到ALU,ALU对这两个内容做算术操作,并把结果复制到一个寄存器中。
- 跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器中,以覆盖原来的值。
上面就是计算机硬件的基本组成部件,下面我们结合helloworld程序来看看程序是如何在硬件中运行的。
首先,我们运行helloworld程序,计算机就把保存在磁盘上的helloworld文件中的代码和数据复制到主存中,文件中的数据就包括最终要输出的字符串"hello world\n",这中间需要一个叫做直接存储器存取的技术,使得数据不需要通过处理器就能从磁盘复制到主存中。
然后,当程序代码和数据复制到主存中后,处理器就开始执行helloworld程序中的指令,通过这些指令把"hello world\n"字符串从主存复制到寄存器中,并最终显示到显示器上面。
这就是整个helloworld运行的过程,在这个过程中我们可以看到系统主要的开销都用在了转移数据上。为了跟高效的转移数据,我们需要对系统进行优化。根据机械原理,较大的存储设备要比较小的存储设备运行得慢,而运行快的设备的价格又比运行慢的设备高。比如,寄存器和主存之间的运行速度差距就比较大。为了缩小这个差距,我们就想到在主存和处理器之间加入一个更小更快的设备,就是高速缓存存储器,用来存储处理器近期可能会用到的信息。
通过在处理器和又大又慢的设备之间插入一个更小更快的存储设备的方法,可以提高处理器访问数据的速度。根据这个原理,现在每个计算机系统中的存储设备都形成的一种多层的存储器结构,如下图所示:
通过这种结构就能有效的提高处理器的执行效率。
这次的内容就写到这,下次将会介绍计算机中的信息存储。
来源:https://www.cnblogs.com/lakb248/archive/2013/03/15/2961468.html