第一章 计算机系统概述
目录
1.1 基本构成
1 计算机主要有四个结构化部件:处理器,内存,输入输出模块,系统总线。
处理器:控制计算机的操作,执行数据处理功能。
内存:存储数据和程序。内存也常称为实存储器或主存储器。
输入输出模块:在计算机和外部环境之间移动数据。(外部环境由各种外部设备组成,包括辅助存储设备,通信设备和终端)
系统总线:为处理器,内存和输入输出模块提供通信的设施。
2 由于处理器需要和存储器交换数据,所以它通常使用两个内部寄存器:存储器地址寄存器(Memory Address Register, MAR), 存储器缓冲寄存器(Memory Buffer Register, MBR)。
MAR:存放下一次读写的存储器的地址
MBR:存放要写入存储器的数据或者要从存储器中读取的数据。
3 处理器中还需要和输入/输出模块之间进行数据传输,所以还需要两个内部寄存器:输入/输出地址寄存器(I/O Address Register, I/O AR),输入/输出缓冲寄存器(I/O Buffer Register, I/O BR)。
I/O AR:确定一个特定的输入输出设备。
I/O BR:在处理器和输入输出模块之间进行传输数据。
1.2 处理器寄存器
1 处理器寄存器主要分两种:用户可见寄存器,控制和状态寄存器。
2 用户可见寄存器:可以通过由处理器执行的机器语言来引用,一般对所有的程序都可用,包括应用程序和系统程序。
3 控制和状态寄存器:用于控制处理器的操作,大部分对用户不可见,其中一部分可被在内核态下执行的某些机器指令所访问。
4 指令执行所必须的寄存器:程序计数器(Program Counter,PC),指令寄存器(Instruction Rrgister,IR)。
5 处理器设计还包括一个或一组寄存器,通常称为程序状态字(Program Status Word,PSW)。PSW通常包含条件码和其他状态信息。
6 通常可用的寄存器主要包括数据寄存器,地址寄存器和条件码寄存器。
数据寄存器:可以被程序员分配给各种函数。(实际上是通用的,但通常也有一些限制,例如对浮点数运算使用专用的寄存器,而对整数使用其他寄存器。)
地址寄存器:存放数据和指令的地址,或者存放用于计算完整地址或有效地址的部分地址。(可以是通用的,或者可以用来以某一特定方式或模式寻址存储器)例如:变址寄存器通过给一个基值加一个索引来获得有效地址。
7 条件码:是处理器硬件为操作结果设置的位。条件码位被收集到一个或多个寄存器中,通常他们构成了控制寄存器的一部分。
8 机器指令通常允许通过隐式访问来读取这些条件码,但不能通过显示方式进行修改,这是因为他们是为指令执行结果的反馈而设计的。
9 处理器中包含的寄存器有存储能力,并且比内存访问速度快,且容量更小。
1.3 指令的执行
1 处理器执行的程序是由一组保存在存储器中的指令组成的。程序执行是由不断重复的取指令和执行指令的过程组成的。
2 指令周期:取指阶段和执行阶段。
3 取指令和执行指令:处理器从存储器中取一条指令存放在处理器的指令寄存器(IR)中,程序计数器(PC)保存下一次要取的指令地址。
4 一条机器指令能指定的4种不同的操作是:
处理器-存储器:数据可以从处理器传送到存储器,或从存储器传送到处理器。
处理器-I/O:通过处理器和I/O模块间的数据传送,数据可以输出到外部设备,或者从外部设备输入数据。
数据处理:处理器可以执行很多与数据相关的算术操作或者逻辑操作。
控制:某些指令可以改变执行顺序。
5 所有指令和数据长度均为16位,指令格式种有4位是操作码,因而最多有16()种不同的操作码(1位16进制数表示),操作码定义处理器要进行的操作。余下的12位知,可直接访问的存储器大小最大为
(4K)个字(用3位16进制数表示)。
6 一台机器具备的特征如下图1所示:那么把地址为940的存储单元种的内容与地址为941的存储单元中的值相加,并将结果保存在后一个单元中,具体的取指阶段与执行阶段如下图2所示:

- PC中包含第一条指令的地址为300,该指令内容(值为十六进制数1940)被送入指令寄存器IR中,PC增1。注意,此处理过程使用了存储器地址寄存器MAR和存储器缓存寄存器MBR。为简单起见,这些中间寄存器没有显示。
- IR中最初的4位(第一个十六进制数)表示需要加载AC,剩下的12位(后三个十六进制数)表示地址为940.
- 从地址为301的存储单元中取下一个指令(5941),PC增1
- AC中以前的内容和地址为941的存储单元中的内容相加,结果保存在AC中
- 从地址为302的存储单元取下一条指令(2941),PC增1
- AC中的内容被存储在指令941的存储单元中

1.4 中断
1 中断:其他模块(I/O模块,存储器)中断处理器正常处理过程的机制。
2 中断最初是用于提高处理器效率的一种手段。
3 中断的分类:程序中断,时钟中断,I/O中断,硬件故障中断。
4 有中断和无中断的程序控制流:
图中虚线代表处理器执行的路径:当遇到第一条WRITE指令后,用户程序被中断,I/O程序开始执行。I/O程序执行完成后,WRITE指令之后的用户程序立即恢复执行。(图中④指的是为实际的I/O操作做准备,包括复制将要输出到特定缓冲区的数据,为设备命令准备参数)
用“X”表示中断发生的点,中断可以发生在主程序的任意位置。
中断处理程序:当外部设备做好服务的准备时,该外部设备的I/O模块会给处理器发送一个中断请求信号,这时处理器做出响应,暂停当前正在进行的程序,转去处理服务于特定I/O设备的的程序称为中断处理程序。
中断打断了正常执行的序列,中断处理完成后,再恢复执行,故不需要添加任何特殊的代码,处理器和操作系统负责挂起用户程序,并在同一个地方恢复执行。
5 中断和指令周期:在中断阶段中,处理器检查是否有中断发生,如果没有中断,处理器继续运行,并在取指阶段取当前程序的下一条指令,如果有中断,处理器挂起当前程序的执行,并执行一个中断处理程序。
6 中断处理的主要流程如下:
- 设备给处理器发送一个中断信号
- 处理器在响应中断前结束当前指令的执行。
- 处理器对中断进行测定若有为响应的中断,提交确认信号。
- 处理器需要为把控制权转移到中断程序做准备,(保存当前PSW和下一条要执行的指令地址,他们被压入系统控制栈中)
- 处理器把响应此中断的中断处理程序入口地址装入程序计数器中。
一旦完成程序计数器的装入,处理器则进入下一个指令周期,该指令也是从取指阶段开始
6 与被中断程序相关的程序计数器和PSW被保存到栈中,栈指针被更新指向新的栈顶,程序计数器被更新指向中断服务程序的开始。
7 开始处理中断。
8 中断处理结束后,被保存的寄存器值从栈中释放并恢复到寄存器中。
9 从栈中恢复PSW和程序计数器的值。
7 多个中断的处理方式有两种:
- 在处理一个中断的过程中,禁止再发生中断
2. 定义中断优先级,允许高优先级中断打断低优先级中断处理程序的运行。
1.5 存储器的层次结构
1 内存层次的3个元素(价格,容量,访问时间)的特征与关系是:
- 存取时间越快,价格越高
- 容量越大,价格越低
- 容量越大,存取速度越慢。
2 存储器的层析结构如下图所示:该层次结构下,从上到下价格递减,容量递增,存取时间递增,处理器访问存储器频率递减。
3 平均存储时间的计算:
假设处理器存取两级存储器,第一级存储容量为1000个字节,存取时间为0.1微秒,第二级存储器包含100000个字节,存取时间为1微秒。存储器可以直接存取第一级的存储器中的字节,而第二级需要先将字节转移到第一级存储器,然后再由存储器进行存取。有95%的存储器存取(H=0.95)发生在高速缓存中,则访问一个字节的平均存取时间可表示为:(0.95)(0.1)+(0.05)(0.1+1) = 0.15(微秒)
1.6 高速缓存
1 高速缓存操作系统不可见。
2 高速缓存:处理器和内存之间提供一个容量小而速度快的存储器。
3 局部性原理:位于被访问字附近的数据在近期被访问到的概率比较大。
4 高速缓存原理:
高速缓存试图使访问速度接近现有最快的存储器,同时保持价格便宜的大存储容量。如下图所示,高速缓存就相当于一部分内存数据的副本,但其容量较小速度更快。当处理器视图读取一个字节或字时,要进行一次检查以确定这个字或者字节是否在高速缓存中。如果在,该字节或者字从高速缓存中传递给处理器;如果不在,则有固定数目的字节组成的一块内存数据先被读入高速缓存,然后该字节或字从高速缓存传递给处理器。
5 高速缓存设计需要解决的问题有:高速缓存大小、块大小、映射函数、替换算法(LRU 最近最少使用算法)、写策略(规定何时发生存储器写操作)。
1.7 I/O通信技术
1 对I/O操作有三种可能的技术:可编程I/O,中断驱动I/O,直接存储器存取(DMA)(如下图所示)
2 可编程I/O:
处理器给I/O模块发送命令,I/O模块执行请求的动作并设置I/O状态寄存器中相应的位(并不进一步通知处理器),处理器进行执行I/O指令后,定期进行检查I/O模块的状态,以确定I/O操作是否已经完成。
指令集中包括的I/O指令:控制(用于激活外部设备)、状态(用于测试与I/O模块及其外围设备相关的各种状态条件)、传送(用于在存储器寄存器和外部设备间读写数据)。
存在的问题:处理器必须等待很长时间以确定I/O模块是否做好了接收和发送数据的准备。不断的询问I/O模块的状态,降低了系统的性能。
3 中断驱动I/O:
处理器给I/O模块发送命令,然后继续做其他一些有用的工作。当I/O模块准备好与处理器及逆行数据交换时,它将打断处理器的执行并发送请求。处理器执行完数据传输之后,恢复到以前的执行过程。
优点:消除了不必要的等待。
存在的问题:数据中的每个字无论从存储器到I/O模块还是从I/O到存储器都需要通过处理器处理,导致中断I/O驱动仍然会花费很多处理器时间。
4 DMA:
DMA由系统总线中一个固定的模块完成,也可以并入到一个I/O模块中。
工作方式如下:处理器需要读写一块数据时,他给DMA发送一条命令,包括以下信息:(1)是否请求一次读或者写,(2)设计的I/O设备的地址,(3)开始读或者写的存储器单元,(4)需要读或者写的字数。之后处理器处理其他工作,DMA模块负责数据传输。当数据传输完成后,DMA模块发一个中断信号给处理器。也就是说,只有在开始传输和传输结束的时候,处理器才进行了参与。
DMA需要系统总线以便于存储器进行交换数据。故与处理器形成了总线竞争,当处理器需要总线时需要等待DMA模块。但这并不是一个中断,因为处理器并没有保存上下文环境去做其他事情,而是仅仅暂停了一个总线周期。
附录
1 空间局部性与时间局部性:
空间局部性是指最近被访问的元素的周围元素在不久的将来可能会被访问。
时间局部性是指最近被访问的元素在不久的将来可能会被访问。
2 开发空间局部性与时间局部性的策略是:
开发空间局部性:利用更大的缓冲块并在存储器控制逻辑中加入预处理指令。
开发时间局部性:利用高速缓冲存储器保存最近被访问的指令和数据,并定义缓冲存储的优先级。
3 系统平均访问时间:,其中
指的是上层存储器的访问时间,
指的是下层存储器的访问时间,H
指的是命中率。
4 价格:
5 存取效率:
6 栈结构一般需要三个地址:栈指针,栈底,栈界限。
7 可重入过程必须包含一个永久不变的部分(组成过程的指令)和一个临时部分(指向调用程序的指针以及指向调用程序所使用的局部变量的存储地址指针)。