1、系统的硬件组成
- 总线:贯穿整个系统的是一组电子管道,称为总线,它携带信息字节并负责在各个不见之间传递。通常总线被设计成传送定长的字节块,也就是字(word)。字中的字节数即字长是一个基本的系统参数,各个系统中都不相同。现在的大多数机器要么是4个字节(32位),要么是8个字节(64位)。
- I/O设备:io即输入和输出设备是系统与外部世界的联系通道,例如键盘鼠标,显示器等设备。每个I/O设备都通过一个控制器或适配器与I/O总线相连。控制器和适配器之间的区别主要在于它们的封装方式。控制器,I/O设备本身或系统主板上的芯片组;适配器,一块插在主板插槽上的卡。无论如何,它们的功能都是在I/O总线和I/O设备之间传递信息。
- 主存(内存):主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上来讲,存储器是一个线性的字节数组,每个字节都要其唯一的地址(数组索引),这些地址从零开始。一般来说,组成程序的每条机器指令都有不同数量的字节构成。与C语言程序变量相对于的数据项的大小是根据类型变化的,例如在x86-64的机器上,short类型的数据为2个字节,int和float都是4个字节,long和double是8个字节,而在32位的机器上就不相同了。
- 中央处理器(CPU):中央处理单元(CPU),简称处理器。是解释或执行存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。在任何时候,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。从系统通电开始,直到系统断电,处理器一直在不断的执行程序计数器指向的指令,再更新程序计数器,使其指向下一条指令。算术/逻辑单元ALU负责计算新的数据和地址值。处理器根据PC指向的地址运行对应的指令,执行过程是按照指令集模型来的,这个模型是由指令集架构决定的。区分指令集架构和微体系结构,指令集架构描述的是每条机器代码指令运行的效果;而微体系结构描述的是处理器实际上是如何实现的。
2、运行hello程序
在知道了系统的硬件组成和操作时,现在要开始介绍运行该程序时发生了什么,这里会省略很多的细节,之后会进行补充的。
初始时,shell程序指向它的指令,等待我们输入一个命令,我们输入 ./hello 的命令后,shell 程序将字符逐一读入寄存器,在把它放到内存中,当我们在键盘上敲下回车时,shell 程序就知道了我们已经结束了命令的输入。然后 shell 执行一系列指令来加载可执行的hello文件,这些指令将hello目标文件中的代码和数据从磁盘复制到主存。数据包括最终会被输入的字符串 “hello,world”。
利用直接存储器获取(DMA)技术,数据可以不通过处理器而直接从磁盘到达主存。
一旦目标文件hello中的代码和数据被加载到主存,处理器就开始执行hello程序的main程序中的机器语言指令。这些执行将“hello,world” 字符串中的字节从主存复制到寄存器文件,在从寄存器文件复制到显示设备,最终显示在屏幕上。
3、高速缓存至关重要
这个简单是示例揭示了一个重要的问题,即系统花费了大量的时间把信息从一个地方挪到另一个地方。hello程序的机器指令最初是放在磁盘上,当程序加载时,它们被复制到主存中;当处理器运行程序时,指令又从主存复制到处理器。相似的,数据串 “hello,world\n” 开始在磁盘上,然后复制到主存,最后从主存复制到显示设备。从程序员的角度来看,这些复制就是开销,减慢了程序真正的工作,因此,系统设计者的一个主要目标就是使这些复制操作尽可能快的完成。
计算机在执行程序时,是处理器CPU在执行,具体到每条指令。而这些指令数据,涉及了读取和写入,也就是内存。CPU的速度不用多说,是极快的,但是读取和写入内存这个操作却远远跟不上CPU的处理速度,如果每条指令都得等从内存中存取,那就太影响效率了。所以这时候,CPU中就加了一层高速缓存,作为内存与CPU之间的缓冲。
如下图展示了一个典型系统中的高速缓存存储器。位于处理器芯片上的L1 高速缓存的容量可以达到数万字节,访问速度几乎和访问寄存器文件一样快。一个容量为数十万到数百万字节的更大的L2 高速缓存通过一条特殊的总线连接到处理器。进程访问L2 高速缓存的时间要比访问Ll 高速缓存的时间长5 倍,但是这仍然比访问主存的时间快5~10 倍。L1 和L2 高速缓存是用一种叫做静态随机访问存储器(SRAM)的硬件技术实现的。比较新的、处理能力更强大的系统甚至有三级高速缓存: L1、L2 和L3 。系统可以获得一个很大的存储器,同时访问速度也很快,原因是利用了高速缓存的局部性原理,即程序具有访问局部区域里的数据和代码的趋势。通过让高速缓存里存放可能经常访问的数据,大部分的内存操作都能在快速的高速缓存中完成。速度 L1 》 L2 》L3.

3、存储设备形成层次结构
在处理器和一个较大较慢的设备(例如主存)之间插入一个更小更快的存储设备(例如高速缓存)的想法已经成为一个普遍的观念。每个计算机系统中的存储设备都被组织成了一个存储器层次结构,在这个层次结构中,从上至下,设备的访问速度越来越慢、容最越来越大,并且每字节的造价也越来越便宜,寄存器文件在层次结构中位于最顶部,也就是第0 级或记为L0。

存储器层次结构的主要思想是上一层的存储器作为低一层存储器的高速缓存。因此,寄存器文件就是Ll 的高速缓存, Ll 是L2 的高速缓存, L2 是L3 的高速缓存, L3 是主存的高速缓存,而主存又是磁盘的高速缓存。在某些具有分布式文件系统的网络系统中,本地磁盘就是存储在其他系统中磁盘上的数据的高速缓存。
4、操作系统管理硬件
计算机系统的分层视图

操作系统提供的抽象表示

让我们回到 hello 程序的例子。当 shell 加载和运行 hello 程序时,以及 hello 程序输出自己的消息时,shell 和 hello 程序都没有直接访问键盘、显示器、磁盘或者主存。取而代之的是,它们依靠操作系统提供的服务。我们可以把操作系统看成是应用程序和硬件之间插入的一层软件,所有应用程序对硬件的操作尝试都必须通过操作系统。
操作系统有两个基本功能:
- 防止硬件被失控的应用程序滥用;
- 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
操作系统通过几个基本的抽象概念(进程、虚拟内存和文件)来实现这两个功能。如上图所示,文件是对 I/O 设备的抽象表示,虚拟内存是对主存和磁盘 I/O 设备的抽象表示,进程则是对处理器、主存和 I/O 设备的抽象表示。我们将依次讨论每种抽象表示。
Comments NOTHING