您的位置:首页 > 其它

【1.4】系统漫游——系统硬件结构以及程序执行过程

2012-12-08 20:46 197 查看
如果想真正了解软件的执行过程,就必须分析它所依附的硬件平台。“计算机系统”(广义)发展这么多年,但基本模型不曾改变,不管是通用系统还是嵌入式系统等等。

1、系统硬件结构

一个典型系统的硬件组成如下图所示:



总线:连接系统各个部件的电子线路,做信号传输使用,有点类似于城市中的交通网络。总线一次传输的固定位宽大小,称为“字长”,与公路车道数类似字长越大,效率越高(真正发挥效率,需要系统软件和应用软件都是64bit)。现代计算机一般都是64bit(硬件层),但多数软件还都是32bit,所以硬件效能并没有完全发挥。嵌入式系统中,我们经常提的8bit MCU、16bit MCU、32bit MCU,指的就是它们的线宽,一般线宽与mcu内部寄存器宽度是一致的。

IO设备:也叫input/output设备,有了总线就需要有数据在总线上奔跑,数据从何而来?从IO设备中。对于输入操作,不是任何数据都是有效的,要想在总线上奔跑,必须满足一定的格式要求,那么对“原始数据”进行加工转换的设备叫做“控制器或适配器”。对于输出设备也是如此,计算机的处理结果,要经过适配器的处理才能以我们能看懂的方式展现出来。这也是“层”的概念应用,控制器的两端是计算机和人,只要保持两端接口不变,内部可以任意修改。

主存:就是PC的内存,是程序和数据的临时存储空间,“临时”是因为内存中的数据会掉电丢失;相对的是外存(硬盘),硬盘中的数据可以永久性存储。内存学名叫动态随机存取存储器(DRAM dynamic random access memory),相对的是静态随机存取存储器(SRAM static random access memory)。动态是指里边的数据必须周期性的刷新否则就会丢失;静态则不需要刷新。随机是指整个内存可以看作一个线性数组空间,每个字节都有自己的唯一地址,想取某个地址内容只需要直接给出地址即可,不需要做等待;相对的是顺序读取,就像以前的磁带(摄影机上),如果想取特定地址的内容,只能从某个地址连续的读取,直到目标地址,需要等待。

SRAM比DRAM好,可是我们的内存还只是DRAM。主要是因为SRAM工艺复杂集成度低,容量太小,不适合大容量使用,而这些缺点都是DRAM的优点。但是SRAM速度较快,所以cpu内部的L1L2缓存都用的是SRAM,一般只有10M大小。

处理器:这是系统的核心,负责读取主存中的指令并执行输出,也叫cpu(central processing unit)。cpu的核心是程序计数器PC(program counter),负责指示下一条要执行的“代码”地址。这里的“代码”不再是我们的源程序,而是cpu本身的指令集。不同的架构对应不同的指令集,例如mip指令集、51指令集、arm指令集等等。cpu内部还有一组寄存器组,负责保存临时数据,供运算单元ALU使用。

2、hello程序执行过程

大致熟悉了硬件组织之后,就开始分析程序的执行过程了。首先shell程序等待用户输入命令,我们从键盘键入“./hello”命令,shell依次读取字符到寄存器,然后保存在内存中。数据流如下:



数据流:鼠标、键盘-》io总线-》寄存器-》系统总线-》主存中

当键入“回车键”,shell认为命令输入完成,解析命令。把hello程序的代码和数据从硬盘拷贝到主存中,这个过程不需要cpu参与。现代计算机都有DMA(直接存储器存取)控制器,负责内存和硬盘之间大批量数据传输,最早的计算机中如果需要交换数据,就需要把数据先读到寄存器中,然后再交给对方,大量占用cpu时间。后来专门做了一个DMA控制器,cpu只要告诉DMA控制器数据传输的方向、源地址、目标地址和数据大小,DMA控制器就能自己完成数据传输,完成后给cpu发送完成中断。数据流如下:



当hello文件导入完毕,处理器就开始执行机器语言,把字符串“hello,world\n”从内存导入寄存器中,然后发送给显示设备,就是我们看到的那样。数据流如下:



至此,就完成了整个程序的执行过程,输出完成后shell结束hello程序,继续接管命令窗口,等待用户输入新命令,如此持续循环下去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐