深入理解计算机系统2–理解计算机系统的基本组成以及程序的运行
前言
前面一章简单记录了程序在计算机系统是以什么形式被存储的以及编译器编译的过程,这篇文章则会记录程序是如何被运行的,它在磁盘中是如何被读取,计算机系统将会通过那些器件来解释、理解并执行程序。
强烈建议大家看一看《深入理解计算机系统》这本书。
本文参考资料《深入理解计算机系统》
一、为什么键盘输入的指令能被计算机系统精准识别?通过什么作为媒介呢?
我们都知道我们在输入命令的时候,都是在一个GCC编译器的弹窗里面输入命令,然后计算机就会识别命令并执行,这个弹窗实际上就是shell命令解释器。我不知道shell命令解释器和GCC的关系是什么(以后再去看一下吧),我目前的理解shell命令解释器就是GCC生成的一个弹窗(这个肯定不正确,感兴趣的宝自己去查这方面的知识)。
shell命令解释器就是链接输入设备和计算机系统的媒介,我们输入的命令会先在shell命令解释器进行解读,shell命令解释器经过一系列的操作后,就会进行系统层面的操作(下面会讲到),最终计算机系统就会执行程序。
shell命令解释器有自带的命令,例如:cd、clear等等。当我们输入的第一个单词不是自带的命令时,shell命令解释器就默认这个时一个可执行文件。每当我们输入回车的时候,shell命令解释器蔡知道我们已经输入完这次的命令,并开始执行命令。
这就是shell命令解释器
二、计算机系统的基本组成
这就是一个典型的计算机系统组成。接下来我会一一讲解每部分是什么。
1.总线
在看到这个图的第一眼,我们就能看到一根贯穿整个系统的线,这个就是总线。
总线是贯穿整个系统的电子管道,是系统各部件之间信息互相传递的桥梁,所有的信息都是通过总线传递。
总线通常被设计成传输特定字节块,也就是字。不同系统的字的长度(即字长)可能会不一样。
2.IO设备
看到图片最下方的就是IO设备了。可以看到他们都是通过适配器/控制器跟总线连接在一起的。
IO设备是计算机系统和外界联系的通道。
3.主存
在右上方的主存储器简称主存。
主存是一个临时存储器。它主要存储程序被执行时的程序信息以及程序处理的数据。
从硬件层面上看,主存是由DRAM(动态随机存取存储器)芯片组成。从逻辑层面上看,主存是是由一组线性字节数组组成,每个字节都有唯一的地址。
4.处理器(CPU)
如图所示,处理器主要由四部分组成:总线接口、算术/逻辑单元(ALU)、寄存器文件、程序计数器(PC)
处理器(CPU)是解释存储在主存中指令的引擎。处理器的核心是程序计数器(PC),从系统上电直到断电为止,处理器一直在进行一个操作:读取程序计数器(PC)指向的主存指令数据,并解释指令的位,然后执行简单的操作,再让程序计数器(PC)指向下一条指令(两个指令之间不一定相邻)。
程序计数器是一个字长大小的存储单位(寄存器),程序计数器(PC)无论在任何时候都指向主存存储的一条指令。寄存器文件是一个小的存储设备,由字长大小的寄存器组成,每个寄存器都有唯一的名字。算数/逻辑单元(AUL)负责计算新的数据和地址值。
1.程序计数器(PC)
程序计数器(PC)是处理器的核心,它无时无刻都会指向主存存储的其中一条指令。
2.算术/逻辑单元(ALU)
负责计算新的数据和地址值。
3.寄存器文件
是一个小的存储设备,由一些字长大小的寄存器组成,每个寄存器都有唯一的名字。
3.程序运行过程。
1、每当我们输入字符时,shell程序就会逐一读取字符,并把字符存储到处理器的寄存器文件,处理器再将寄存器文件里的数据存储到主存。如上图所示
2、当我们在shell命令解释器上输入可执行文件的名字并按下回车后,shell命令解释器检测到命令输入完毕,开始分析命令。在shell命令解释器进行一系列操作之后,通过DMA(直接存储器存取),会把磁盘存储的可执行文件的全部数据拷贝到主存。如上图所示
3、当数据全部拷贝到主存后,处理器(CPU)会根据程序处理器(PC)指向的指令开始读取指令数据到寄存器文件,处理器根据指令内容进行简单的逻辑操作,完成这条指令后更新程序计数器(PC)让其指向下一条指令,再读取指令,直到主存中的数据被读取完。最终输出信息,处理器将需要输出到显示屏的信息传输到显示设备上显示,一个程序就被执行完成了。如上图所示
总结
只是一个典型且比较简单的计算机系统模型,更多的信息将在后续的文章更新。
持续更新中。。。