处理器读和处理存储在存储器中的指令
进入windows命令行管理窗口,输入hello.exe程序将被系统加载和执行,直至程序执行结束。那么在这一系列工作中计算机是如何运作的呢?
首先我们来看看下面这张图吧:
这是一个典型的计算机硬件组织,现在不要关心它很复杂,我们会一步一步了解其工作原理。
在这之前我们必须要明确几个基本概念:
位(bit):在数字电路和电脑技术中采用的是二进制的方法,它的编码只有'0'和'1',如‘1000011’就代表着7位。
字节(byte):是计算机技术用于存储容量的计量单位,1byte = 8bit
字(word):字是一串数码,它们被作为一个整体来进行处理和运算。在计算机的运算器和控制器中都是以字为单位来进行运算的。
字长:字长是指计算机的每个字所包含的位数。指CPU一次能并行处理的二进制位数。
在了解了这几个基本概念后我们继续往下看。
总线
贯穿整个系统的是一组电子管道,称作总线(BUS)。是计算机传递各个部件信息的公共通信干线。通常总线会传送定长的字(word)。
I/O设备
I/O设备(输入/输出设备)是系统与外界联系的通道。如上图,我们使用的I/O设备有:鼠标、键盘、显示器、用于长期存储数据或软件的磁盘。
每个I/O设备是通过控制器或者适配器与I/O总线连接起来的。如我们所说的网络适配器(网卡),打开了计算机与网络之间的连接通道。
控制器是指I/O设备本身,或者是主板上的芯片组。
适配器是插在主板插槽上的卡。
主存
主存是一个临时存储设备。当程序在执行时,它被用来存放程序和程序执行时的信息。
处理器
中央处理单元(CPU)简称处理器。是执行存储在主存中指令的引擎。从系统通电开始,直到系统断电,处理器一直在不停的工作。
处理器的执行步骤大致如下:
由程序计数器(PC)指定存储器的位置,并从存储器中读取指令。
对读取的指令进行解码。
执行解码完成后的指令。
更新程序计数器,使其指向下一跳指令。
以后(第四章)会对处理器的运作原理进行更详细的说明。
hello.exe被执行时发生了什么?
hello.exe是hello.c通过编译后生成的文件。
打开控制台(cmd),来到hello.exe文件目录下,在控制台中输入"hello.exe"字符串。字符会被逐一读取到cpu中的寄存器中,再把它放到主存中。此时我们未按下回车,我们输入的数据通过键盘--处理器--然后被存储到主存。
当我们按下回车时,系统已经知道命令已经结束。它把hello.exe文件中的代码和数据从磁盘拷贝到主存(通过DMA技术,数据可以不通过处理器,直接从磁盘到达主存),从而加载了hello.exe文件。
一旦hello.exe中的代码和数据被加载到了寄存器,处理器就开始执行其中的指令。这些指令将"hello world\n"从主存拷贝到寄存器,再从寄存器拷贝到显示设备。
高速缓存
了解上述计算机执行过程后,你可能会发现一个问题,我们花费了大量的时间把信息从一个地方挪到另一个地方。
寄存器存储的信息通常只有几百字节,而主存存放的信息多达几百万字节。但处理器从寄存器读取信息的速度比处理器从主存中读取的数据块几乎一百倍。为了针对寄存器和主存的差异,我们使用了高速缓存技术(SRAM),它相对于主存来说更小但也更快。(但依然可以存储数万字节)它被作为一个暂时的集结区域,用来存放处理器不久将来可能会需要的信息。
容量更大的高速缓存L2是通过一跳特殊的总线与处理器相连的,它相对于L1速度较慢,但仍比主存的访问速度快5--10倍。