深入理解计算机系统学习笔记(一)概述

来源:互联网 发布:格林第七场数据 编辑:程序博客网 时间:2024/04/29 16:09

    计算机系统由硬件和系统软件构成,一个程序的运行离不开软硬件的协作。先来简要的介绍一下计算机系统的硬件组成。虽然一些高级编程语言编写的程序与硬件无关,但程序终究是要控制硬件来执行,所有的高级语言源程序都会被编译为机器指令而后由硬件来执行,。

一、计算机系统的硬件组成

    一个典型的计算机系统主要由CPU、总线、主存储器和I/O设备构成,如下图所示(图片来自深入理解计算机系统):


1、CPU:CPU是中央处理单元的简称。它负责解释执行存储在主存储器中的指令。CPU的核心部分为算术逻辑单元ALU、程序计数器PC和一些寄存器。其中,PC本身是一个字长的存储设备,它时时刻刻的只想主存中的某条机器语言指令。从系统上电以后,处理器从程序计数器PC指向的存储器读取指令,解释指令中的位,然后更新PC,使其指向下一条指令,具体的顺序由指令集结构所决定。

2、总线:总线实际上就是一组电子管道,它负责计算机系统各部件之间字节信息的传递。通常总线传输一些定长的字节块,这个定长的字节块也就是字(word)的概念。一个字包含的字节数即为这个系统的字长。我们说32位的计算机的字长为4个字节,64位的计算机字长为8.

3、主存储器:主存储器是一个易失性存储区,也就是常说的RAM,它是一个程序和数据的暂存场所。从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的索引(也就是地址的概念)。一般不同的机器指令都有不同的字节长度。

4、I/O设备:I/O设备是计算机系统与外界通信的渠道。上图所示的USB、显示器、磁盘和键盘鼠标等都是I/O设备。I/O设备通常由机械部件和电子部件两部分组成,其中,电子部件又称为设备控制器或适配器。每一个I/O设备都是通过一个控制器与I/O总线连接。I/O设备又分为块设备和字符设备两种。上述中磁盘、USB等就是常见的块设备,而键盘鼠标和网络接口为字符设备。

二、信息的表示

  信息实际上是由位序列以及位序列所处的上下文来决定的。使用二进制在于二值信号能够更容易的表示、存储和压缩。
  以一个源程序hello.c为例,
#include <stdio.h>int main(){  printf("Hello World!\n");}
  通常来说,英文字母使用ASCII编码就足以完全表示。也就是说,源程序实际是由0和1组成的位序列,8个位组成一个字节。实际上一个源程序文件是以字节序列的形式存在的。计算机上处理的一切数据信息,包括磁盘文件、网络文件以及存储器中的程序等等都是由一连串的位序列构成。区分不同的数据对象的方法就是我们读到这些数据对象时的上下文。

三、程序的执行过程

  同样以一个c语言的源程序hello,c为例子,代码的执行经历了以下几个阶段。

  1、预处理阶段:预处理器 根据预编译指令#的标记,修改原始的C程序文件,读取系统头文件然后直接插入到源程序之中。
  2、编译阶段:编译器 将经过预处理阶段的程序编译为汇编程序。我们知道汇编指令实际上是机器指令的可读形式,同时,作为所有程序编译后的中间态,汇编语言是高级语言编译后的通用语言。
  3、汇编阶段:接着,汇编器 将汇编语言程序翻译为机器语言指令,并将这些指令打包生成可重定位目标程序,然后输出hello,o文件,它是一个二进制文件,即使用机器语言指令编码的字节序列。
  4、链接阶段:在源程序中调用了C库函数的输出函数Printf函数,而printf函数存在于一个名为printf.o的单独的预编译好的目标文件中,连接器 通过链接的方式将它合并到我们的hello.o程序中。
  具体的执行过程为:shell下,键盘输入./hello.o,shell将字符读入寄存器中,然后再读入存储器中。然后回车键确定,shell执行一系列指令加载hello文件,将目标文件中的程序和数据由磁盘复制到主存,然后CPU通过程序计数器的指示执行hello程序,输出HelloWorld字符到显示器。

0 0
原创粉丝点击