系统的硬件组成 1.总线 2.CPU 3.内存 4.主板 5.光驱 6.硬盘 7.鼠标 8.键盘 9.显示器 这是我所能一下子想到的一台完整PC的硬件了,图形表示: 总线:贯穿整个系统的是一组电子管道,称为总线,它携带信息字节并负责在各个部件之间传递。通常总线,被设计成传送定长的字节快,也成为”字“。字中的字节数是一个基本的系统参数。 I/O设备:图中下面4个都属于输入输出设备,磁盘作为存储设置,也可以读取。 每个I/O设备都是通过一个控制器或适配器与I/O总线连接起来,控制总线和适配器之间的区别,在于他们的组成方式,。无论如何,他们的功能都是在I/O总线和I/O设备之间传递信息。 主存(内存): 是一个临时的存储设备,在处理器执行程序时,它被用来存放程序和程序处理的数据。物理上来说,主存是一组DRAM(动态随机访问存储器)芯片组成的。逻辑上来说,存储器是一个由一个线性的字节数组组成的,每个字节都有自己唯一的地址(数组索引),这些地址都是从0开始。一般来说,组成程序的每条机器指令都由不定量的字节构成。 处理器:CPU 处理器的核心是一个被称为程序计数器(PC)的字长大小的存储设备(或者说寄存器register)。在任何一个时间点上,PC都指向主存中的某条机器语言指令。 缓存 根据机械原理,较大的存储设备,要比较小的存储设备运行得慢,而块数设备的造价高于低速同类设备。比如,一个典型系统上的磁盘驱动器可能要比主存大100倍,但是对处理器而言,从磁盘驱动器上读取一个字的时间开销要比从主存中读取的开销大00万倍。 针对这种处理器与主存之间的差异,系统设计了更小更快的存储设备,称为高速缓存。如图所示:
处理器芯片上的L1高速缓存的容量可以达到数万字节,访问速度几乎和寄存器堆一样快,一个容量为数十万到数百万的更大的L2高速缓存是通过一条特殊的总线连接到处理器的。进程访问L2的时间要比访问L1的开销大5倍,但是仍然比访问主存的时间快5~10倍。L1L2采用的是一种叫做静态随机访问技术SRAM实现的。 操作系统管理硬件 我们可以自己写程序访问键盘,显示器,磁盘等,但是,那样不安全,而且难编写,取而代之非是依靠操作系统,可以把操作系统看成是应用程序和硬件之间插入的一层软件,所有应用程序对硬件的操作尝试都必须通过操作系统:
虚拟存储器 虚拟存储器是一个抽象的概念,它为每个进程提供了一个假象,好像每个进程都在独占地使用主存,每个进程看到的存储器都是一致的,称之为虚拟地址空间。 在Linux上,最上面的1/4是预留给操作系统中的代码和数据,这对所有进程都是一样的,底部的3/4,用来存放用户进程定义的代码和数据,图中的地址hi从下往上增大的:
程序代码和数据:代码从同一固定地址开始,紧接着是和C全局变量对应的数据区代码和数据区是由可执行目标文件直接初始化的。 堆:代码和数据区后紧随的运行时堆,代码和数据区是在进程一旦开始就被执行了大小的,堆可以动态扩展 共享库:在地址空间的中间附近是一块用来存放像C标准库和数学库这样的共享库 栈:位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用。和堆一样,用户栈在程序执行期间,可以动态地扩展和收缩。 内核虚拟存储器:内核是操作系统总是驻留在存储器中的部分,地址空间是顶部的1/4部分是为内核预留的。 程序的执行,基本 从系统通电开始,到系统断电,处理器一直在不断地重复执行基本任务:从程序计数器(PC)指向的存储器读取指令,解释指令中的位,执行指令指示的简单操作,然后更新程序技术区指向下一条指令,而这条指令并不一定在存储器中和刚刚执行的指令相邻。 这样的简单操作,在主存/寄存器堆(register file)、算术逻辑单元(ALU)之间循环。寄存器是一个小的存储设备,由一些字长大小的寄存器组成,这些寄存器每个都有唯一的名字。ALU计算新的数据和地址值,下面是一个CPU指令,在要求下可能会执行的操作: 1.加载:从主存拷贝一个字节或者一个字到寄存器,覆盖寄存器原来的内容 2.存储:从寄存器拷贝到一个字节或一个字到主存的某个位置,覆盖这个位置上原来的内容。 3.更新:拷贝两个寄存器的内容到ALU,ALU将两个字相加,并将结果存放到寄存器中,覆盖该寄存器中原来的内容 4.I/O读:从一个I/O设备中拷贝一个字节或者一个字到一个寄存器 5.I/O写:从一个寄存器中拷贝一个字节或者一个字写到一个I/O设备 6.跳转:从指令本身抽取一个字,并将这个字拷贝到程序计数器中,覆盖PC中原来的值 |
|