【分析解答】
## 【分析解答】
因为页大小为16KB,所以页内地址位数为14位。逻辑地址为36位,虚页号位数为 $36 - 14 = 22$ ,虚拟页数为 $2^{22}$ 个,因此,每个进程的页表项数为 $2^{22}$ 个。物理地址为32位,实页号位数为 $32 - 14 = 18$ 。每个页表项的位数为 $1 + 1 + 2 + 2 + 18 = 24$ 。每个进程的页表大小至少为 $24 \times 2^{22} = 24 \times 4\mathrm{Mb} = 12\mathrm{MB}$ 。
TLB中总的表项数为256项,采用2路组相联,所以共有128组。虚拟页号22位中,低7位用来表示组号,高15位用来作为标记,和每个TLB组中的各标记进行比较,以判断是否TLB命中。所以,TLB中每个页表项的位数比主存中页表项的位数多了15位的标记,即TLB中每个页表项的位数为 $24 + 15 = 39$ 位。整个快表的大小至少为 $256 \times 39 = 9984\mathrm{b} = 1248\mathrm{B}$ 。
35. 假定一个计算机系统中有一个 TLB 和一个 L1 data cache。该系统按字节编址,虚拟地址 16 位,物理地址 12 位;页大小为 128B,TLB 为 4 路组相联,共有 16 个页表项;L1 data cache 采用直接映射方式,块大小为 4B,共 16 行。在系统运行到某一时刻时,TLB、页表和 L1 data cache 中的部分内容(用十六进制表示)如图 7.8 所示。
[tbl-48.md](tbl-48.md)
(a) TLB(4路组相联):4组,16个页表项
[tbl-49.md](tbl-49.md)
(b) 部分页表(开始16项)
[tbl-50.md](tbl-50.md)
(c) L1 data cache: 直接映射,共16行,块大小为4B
图7.8 题35中的TLB、页表和cache部分内容
<!-- page: 237 -->
请回答下列问题:
(1)虚拟地址中哪几位表示虚拟页号?哪几位表示页内偏移量?虚拟页号中哪几位表示TLB标记?哪几位表示TLB索引?
(2)物理地址中哪几位表示物理页号?哪几位表示页内偏移量?主存物理地址如何划分成标记字段、行索引字段和块内地址字段?
(3)CPU从地址067AH中取出的值为多少?说明CPU读取地址067AH中内容的过程。
【分析解答】
(1)16位虚拟地址中低7位为页内偏移量,高9位为虚页号;虚页号中高7位为TLB标记,低2位为TLB组索引。
(2)12位物理地址中低7位为页内偏移量,高5位为物理页号;12位物理地址中,低2位为块内地址,中间4位为cache行索引,高6位为标记。
(3)地址 067AH = 0000 0110 0111 1010B,所以,虚页号为000001100B,映射到TLB的第0组,将 0000011B = 03H 与TLB第0组的4个标记比较,虽然和其中一个相等,但对应的有效位为0,其余都不相等,所以TLB缺失,需要访问主存中的慢表。直接查看 000001100B = 00CH 处的页表项,有效位为1,取出物理页号 19H = 11001B,和页内偏移1111010B拼接成物理地址110011111010B。根据中间4位1110直接找到cache第14行(即第E行),其有效位为1,且标记为 33H = 110011B,正好等于物理地址高6位,故cache命中。最后根据物理地址最低两位10,取出字节2中的内容 4AH = 01001010B。
36. 在 MIPS 架构的多周期 CPU 中,TLB 缺失和 cache 缺失各在哪个指令的哪个时钟周期被检测到?如果检测到发生了 TLB 缺失和 cache 缺失,那么 CPU 各要完成哪些工作?简要说明 CPU 如何完成这些工作。(提示:TLB 缺失可以有软件和硬件两种处理方式)
【分析解答】
TLB缺失和cache缺失都是在存储访问过程中发生的,因而这两种缺失在相同的周期内进行检测。与存储访问相关的周期有:每个指令的取指令(IF)周期、lw指令和sw指令的存储器访问(Mem)周期。
对于TLB缺失,可以有硬件和软件两种处理方式。如果是硬件处理TLB缺失,则在CPU中有专门处理TLB缺失的逻辑部件,能够启动一次存储器读操作,到主存读取相应的页表项内容装入TLB;如果是软件处理TLB,则在CPU检测到发生了TLB缺失的情况下,就发出TLB缺失异常,调出操作系统内核中专门的异常处理程序进行处理。
对于cache缺失,则通常采用硬件处理方式,CPU中必须提供cache缺失处理逻辑。当CPU检测到cache缺失时,由硬件自动启动存储器读操作,读取一个主存块到cache。
<!-- page: 238 -->
## 8.1 教学目标和内容安排
主要教学目标:使学生了解现代计算机中各主要模块之间的总线互连方式,以及输入/输出系统涉及的软硬件概念和知识体系,为操作系统的学习打下坚实基础。本章主要内容包括:输入/输出系统的组成、I/O 对系统性能的影响、I/O 设备的种类和特性、总线基本概念及系统互连、I/O 接口的职能和分类、I/O 设备和主机的连接方式、程序查询 I/O 方式、中断 I/O 方式和 DMA 方式等。
### 基本学习要求:
(1) 了解常用外部设备的基本原理。
(2) 了解总线的作用和组成。
(3) 了解总线的不同分类。
(4) 理解总线各项性能指标的含义。
(5) 理解计算机如何通过总线连接各功能部件。
(6) 了解 I/O 接口的功能和基本结构。
(7) 理解 I/O 接口和 I/O 端口的差别。
(8) 了解各种 I/O 接口类型的特点。
(9) 理解 I/O 端口的编址方式。
(10) 了解各种 I/O 传送控制方式的特点和适用场合。
(11) 了解程序直接控制(查询)方式的特点和工作流程。
(12) 了解中断 I/O 方式的特点和工作过程。
(13) 理解外设发生什么事件可以向 CPU 提出中断请求。
(14) 理解 CPU 响应中断的三个条件。
(15) 理解 CPU 响应中断请求的过程。
(16) 掌握调出中断服务程序的方法(软件查询或形成向量地址)。
(17) 了解中断服务程序的结构框架(即中断处理过程)。
(18) 理解断点保护和现场保护的不同。
(19) 掌握现场保护和恢复的方法。
(20) 了解中断允许触发器的作用以及应在何时开/关中断。
<!-- page: 239 -->
(21) 理解中断服务程序调用和子程序调用的差别。
(22) 理解中断接口电路(中断控制器)的结构。
(23) 理解多重中断和中断屏蔽的概念。
(24) 理解获取中断服务程序入口地址的过程。
(25) 理解为什么要在中断处理开始时保护现场、结束时恢复现场。
(26) 了解DMA方式适用的场合和特点。
(27) 掌握DMA传送的过程。
(28) 理解中断方式和DMA方式的差别。
输入输出组织主要指用于控制外设与主存、外设与CPU之间进行数据交换的软、硬件系统。实现输入输出功能的关键是要解决以下一系列的问题:如何在CPU、主存和外设之间建立一个高效的信息传输“通路”,怎样将用户的I/O请求转换成对设备的控制命令,如何使CPU方便地寻找到要访问的外设,I/O硬件和I/O软件如何协调完成主机和外设之间的数据传送,等等。因此,本章的内容应围绕这些问题展开讲解。
本章的内容主要包括常用输入/输出设备、外设与CPU和主存的互连、I/O接口和I/O数据传输控制方式等方面。
对于常用的输入/输出设备,因为设备的工作原理不属于主干内容,而且不同设备的工作原理差别较大,所以,在课时有限的情况下,关于键盘、鼠标器、打印机和显示器等的工作原理可以跳过不讲。但是,如果学生对I/O设备的功能和结构一点不了解,那么,要理解后续的如I/O接口等内容就比较困难,因此,可以简单讲解I/O设备的通用结构,以便让学生明白:设备与计算机主机之间有数据交换,如键盘和鼠标器的输入信息、打印机和显示器的输出信息等;计算机主机会向设备发送控制信息,如打印机的初始化、选通、自动走纸等命令;设备会向计算机主机回送状态信息,如打印机忙、缺纸、联机等状态信息。
对于外设与CPU和主存的互连,着重介绍用于互连的系统总线所涉及的概念和知识体系。在此之前,学生已经对指令的执行、存储器的层次结构、CPU设计等方面的内容有所了解,因此,可以从指令执行过程中涉及的部件之间的数据交换开始讲起,将总线和指令执行过程、总线和CPU、cache、存储器、显卡等I/O接口联系起来,说明指令执行过程中可能需要在哪些部件之间进行数据交换,以及在每次数据交换过程中,在部件之间需要传送哪些信息,并说明传送这些信息的任务就是由总线完成的。这样,既复习了所学的概念和知识,又将相关内容串接了起来,并且使得学生在学习具体的有关总线设计的内容之前,对总线的组成、职责和总线在计算机中的位置有较为全面的了解,从而有利于学生对有关总线设计内容的理解。
对于I/O接口,因为不同设备对应的I/O接口的结构相差很大,而且各种接口的类型也很多,有限的课时无法讲清楚所有I/O接口的实现细节,所以,本章应该主要关注I/O接口的通用结构和一般的功能。这部分内容中,有关操作系统对I/O的支持,上课时可以跳过不讲,但是,如果学生课后能够很好地阅读这部分内容,则对于学生理解用户程序和操作系统之间的关系,操作系统和硬件之间的关系都有好处,从而能更好地理解计算机的层次化结构。
对于I/O传送控制方式,主要要求对程序直接控制、中断和DMA三种基本I/O方式有所掌握。首先,讲清楚这些I/O方式的基本实现原理;接着,从C语言的标准I/O库函数
<!-- page: 240 -->
(如 printf()函数)出发,说明这些 I/O 库函数的大致实现过程,以使学生能够深入理解输入/输出子系统的层次结构,并深刻理解硬件和操作系统之间如何协调完成输入输出操作,特别是深刻理解 I/O 方式与操作系统层次中驱动程序之间的关系。
## 8.2 主要内容提要
### 1. 外部设备及其与主机的互连
输入设备、输出设备和外存储器统称为外部设备,简称外设。像键盘、鼠标、针式打印机等设备每次按单个数据为单位进行交换,属于字符型设备;磁盘、光盘、扫描仪等设备一旦被启动后,每次都会交换一块数据,因此,属于成块传送设备。
所有外设通过相应的电缆(通信总线)连到 I/O 接口电路上,I/O 接口电路再通过 I/O 总线连到主板上,最终通过存储器总线和处理器总线与主存和 CPU 相连。
### 2. 常用输入设备和输出设备
常用的输入设备有键盘、鼠标、扫描仪等。键盘通过串行方式向主机输入信息,通常所用的键盘为非编码键盘,从键盘送到主机侧键盘接口电路中的是按键的扫描码,即位置码。鼠标器也是通过串行方式向主机传送信息,输入的是鼠标移动的位置信息。
常用的输出设备有打印机和显示器等。打印机有针式、激光和喷墨三类打印机,它们各自适用的场合不同,所用的打印技术也不一样。激光打印机比较复杂一些,它由打印控制器和打印部件两部分组成,分别用于打印控制和打印。打印控制器中包含功能较强的专门用于打印控制的处理器、缓冲存储器和其他辅助电路,可实现对打印语言的解释、页面内容的格式化和光栅化(转换为点阵数据)等处理。显示器有 CRT、液晶(LCD)和等离子显示器等,目前使用较多的是液晶显示器。显示器显示的信息是离散的像素点,显示器的主要参数有分辨率、行频、帧频(刷新频率)等。屏幕上的点的颜色用 R、G、B 三个分量来表示,其位数之和就是颜色深度,每个点的颜色值存放在显示存储器(VRAM,简称显存)中。在主机和显示器之间有一个显示控制器,可集成在主板上,也可以显卡的形式插在 I/O 总线槽中。显存通常集成在显卡中,为了快速处理 3D 图形,通常在显卡中配置专门用作图形处理的绘图处理器(GPU),此时,显存不仅用来存放屏幕位图信息,更主要的是用来存放 GPU 芯片处理过或者即将处理的像素数据和渲染数据。
### 3. 总线的概念和分类
总线是计算机系统中部件或设备之间传送信息的公共通路,包括传输介质和相应的控制逻辑。根据总线所在位置,可以分为内部总线、系统总线和通信总线三类。内部总线指芯片内部连接各元件的总线,如 CPU 内部总线。系统总线指在计算机的主要功能部件(CPU、主存、I/O 接口)之间传送信息的总线,由数据线、地址线和控制线组成。根据所处位置和功能的不同,系统总线又可分为处理器总线、存储器总线和 I/O 总线。通常处理器总线和存储器总线是专用总线,而 I/O 总线是标准总线,如 PCI 总线、AGP 总线、PCI-e 总线等。通信总线指用于主机和 I/O 设备之间或计算机系统之间通信的总线,如 RS-232 串行总线、USB 串行总线、SCSI 总线等。
### 4. 总线性能和设计要素
最重要的总线性能是总线带宽。总线带宽是指总线的最大数据传输率,即在数据传输
<!-- page: 241 -->
阶段单位时间内总线上可传输的数据量。它与总线数据线的宽度、总线时钟频率和传送每个数据所需的时钟周期数等有关。
总线的基本定时方式有同步和异步两种,在这两种基本定时方式基础上,又派生出半同步和分离事务两种定时方式。同步方式用一个公共的时钟信号对传输过程的每个步骤进行同步控制;异步方式用异步应答(握手)信号对传输过程的每个步骤进行定时控制;半同步方式将同步和异步方式结合起来进行定时,即在时钟的同步控制下发出和采样异步应答信号;分离事务方式把传输过程分成两个阶段,使得从设备在准备数据时总线被释放给其他设备使用。
总线事务类型指在总线上进行的不同信息传输类型,如存储器读、存储器写、I/O读、I/O写、中断响应等。有些总线事务要求完成一连串连续单元的读写,如从存储器读一个cache行或写一个cache行到主存,这种情况下,一个总线事务完成多个数据的读写,称为突发(burst)传输方式。
在多个主控设备共享总线的情况下,需要进行总线裁决,有集中式裁决和分布式裁决两类。不过,目前总线的发展趋势是点对点连接方式,而不是早期多设备共享方式,所以无须考虑总线裁决。
早期的系统总线多采用多数据线并行传输的同步总线,因为这种总线需要在多个数据位之间进行同步,限制了总线的时钟频率,因而目前总线的发展趋势多采用串行传输方式。例如,早期曾经流行的I/O总线标准ISA、EISA、PCI、APG等都是并行传输的同步总线,现在主要采用串行总线标准PCI-e。
## 5. I/O 接口的职能、结构和类型
I/O接口是用于连接主机和外设并通过接受主机命令来对外设进行控制的部件的总称。例如,显卡、网卡、打印控制器、磁盘控制器等都属于I/O接口,有时也称为I/O模块。
不同设备对应的I/O接口的功能不完全相同,其逻辑结构也不一样。但是,所有I/O接口的基本结构和职能是类似的。I/O接口中,有用于存放输入输出数据的数据缓冲器、用于记录设备或接口状态的状态寄存器、用于存放控制信息的命令(控制)寄存器等,这些寄存器分别称为数据端口、状态端口和命令端口。I/O接口在主机一侧通过I/O总线与主机相连,在外设一侧则通过通信总线(电缆)与外设相连。通常I/O总线和通信总线的数据宽度不同,因此,在主机侧和外设侧的数据宽度不一样,因而在I/O接口中需要有进行数据格式转换的逻辑电路,此外,在主机侧和外设侧分别还需有相应的总线接口逻辑,以支持与I/O总线和通信总线的连接。
I/O接口的类型多种多样。按设备侧传输的位数来分,有并行接口和串行接口;按是否可以编程控制来分,有可编程接口和不可编程接口;按是否支持标准的通信总线来分,有通用接口和专用接口;按I/O方式来分,有无条件查询接口、条件查询接口、中断控制器接口、DMA控制器接口;按连接方式来分,有点对点接口和多点总线式接口。
## 6. I/O 端口及其编址
I/O端口指I/O接口中程序可访问的寄存器,有数据端口、命令端口和状态端口。通常用户程序不访问这些I/O端口,而由操作系统中的驱动程序访问。为了使指令能够访问到I/O端口,需要对它们进行编号,称为I/O端口编址(有时称为设备编址,实际上并不是对设备编址)。
<!-- page: 242 -->
I/O 端口编址有独立编址和统一编址两种方式。独立编址方式下,对 I/O 端口单独编号,使它们成为一个独立的 I/O 地址空间,此时 I/O 端口号可能和主存单元号相同,因此,从地址形式上无法区分指令访问的是 I/O 端口还是主存单元,需要通过不同的操作码来区分,因而需要提供专门的 I/O 指令来控制对 I/O 端口的访问。统一编址方式下,I/O 端口与主存地址空间统一编号,将主存地址空间分出一部分地址编号给 I/O 端口进行编号,因此,也被称为存储器映射方式。因为主存单元和 I/O 端口在同一个地址空间,所以,主存单元号和 I/O 端口号肯定不会相同,它们分属两个不同的地址范围,因此,通过指令给出的地址范围就可以确定访问的是主存单元还是 I/O 端口,因而指令系统无须提供专门的 I/O 指令。
## 7. 常用 I/O 控制方式
目前,计算机中常用的 I/O 方式有程序直接控制、中断控制和 DMA 控制三种。
程序直接控制方式分无条件传送方式和条件传送方式。无条件传送方式利用程序定时传送数据,无须检测接口或设备的状态,适合于各类巡回检测或过程控制;条件传送方式也称为程序查询方式,CPU 通过查询外设接口中的“就绪”(Ready)、“忙”(Busy)和“完成”(Done)等状态来控制数据的传送,有定时查询和独占查询两种。独占查询方式下,CPU 在整个数据交换过程中一直为设备的 I/O 服务。
中断控制方式也是一种通过执行程序来进行数据交换的 I/O 方式。当外设准备好数据、准备好接收新数据、发生了特殊事件时,外设通过向 CPU 发中断请求来使 CPU 转到相应的中断服务程序去执行,在中断服务程序中完成数据交换或处理特殊事件。中断方式下,由硬件和软件共同完成中断过程。首先,由 I/O 接口向 CPU 发中断请求,CPU 每执行完一条指令都去采样中断请求线,一旦发现有中断请求,并且处于“开中断”(中断允许)状态,CPU 就进入“中断响应”周期,自动执行一条隐指令,完成关中断、保护断点、识别中断源 3 项任务,识别中断源的结果就是将中断服务程序的首地址送到 PC 中。“中断响应”周期结束,CPU 就根据 PC 的值开始执行中断服务程序。在单级中断系统中,中断服务程序执行过程中一直不会开中断,直到中断返回前才执行“开中断”指令;而多级中断系统中,中断处理过程可能被其他新中断打断,是否允许打断,通过在每个中断服务程序中设置中断屏蔽字来实现,中断服务程序中还要进行现场的保护和恢复。
DMA 控制方式适合像磁盘一类的高速设备以成批方式和主存直接交换数据。首先要对 DMA 控制器进行初始化;然后由 DMA 控制器控制总线在主存和高速设备之间进行直接数据交换;最后,DMA 控制器发出“DMA 传送结束”信号给外设接口,由外设接口发中断请求给 CPU,由 CPU 执行相应的中断服务程序来进行数据校验等,最终完成 DMA 传送处理。
## 8. I/O 子系统的层次结构
所有用户程序中提出的 I/O 请求,最终都是通过系统调用实现的,通过系统调用封装函数中的陷阱指令转入内核空间的 I/O 软件执行。内核空间的 I/O 软件分三个层次,分别是与设备无关的 I/O 软件层、设备驱动程序层和中断服务程序层,其中,后两个层次与 I/O 硬件密切相关。前面提到的中断、DMA 等 I/O 方式实际上是指驱动程序中软件和 I/O 硬件打交道的方式,因此,决定了驱动程序的模块结构,因此,这部分是典型的软件和硬件密切关联的内容。
<!-- page: 243 -->
## 8.3 基本术语解释
### I/O 带宽(I/O bandwidth)
I/O 带宽是单位时间内系统输入/输出的数据量或所完成的 I/O 操作次数。即指在一定时间内所完成的工作量,也称为吞吐率(throughput)。
### 响应时间(response time)
响应时间也称为等待时间(latency),是指从作业提交开始到作业完成所用的时间。
### 外设(device)
外部(辅助)存储设备和输入设备、输出设备统称为外设,也称为外围设备、外部设备或 I/O 设备。
### 输入设备(input device)
输入设备用于将程序、原始数据、文字、图像、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标器、扫描仪等。
### 输出设备(output device)
输出设备把计算机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息以某种形式输出到计算机外部。常用的输出设备有显示终端(CRT、LCD)、打印机、绘图仪等。
### 外部存储设备(storage device)
各种外部存储器称为外部存储设备,简称外存或辅存。可以把信息从外部存储设备输入到主存,也可以把主存中的信息输出到存储设备上保存。典型的外存有硬磁盘、U 盘、固态硬盘、光盘和磁带等。
### 终端(terminal)
终端是指一种由显示器、外设控制器及键盘合为一体的设备,它与我们平常说的微型计算机的根本区别是没有自己的中央处理单元(CPU),当然也没有自己的内存,其主要功能是将键盘输入的请求数据发往主机(或打印机)并将主机运算的结果显示出来。对互联网而言,终端泛指一切可以接入网络的计算设备,如个人计算机(PC)、网络电视、可上网手机、PDA 等。