loading...

17输入输出系统

7.1 I/O系统基本概念

"I/O"就是"输入/输出"(Input/Output)

I/O设备:可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,可统称为外部设备

  • 鼠标、键盘:输入设备
  • 显示器、打印机:输出设备
  • 硬盘、光盘:即可输入、又可输出的设备

有的教材称硬盘、光盘为外存设备

设备控制器:又称I/O控制器(I/O Controller)

  • 负责协调主机与外部设备之间的数据传输,帮助用户屏蔽下层的具体物理细节,呈现出来的逻辑外部设备
    • 设备控制器与I/O端口相连,拓扑结构为主机 - I/O端口 - 设备控制器 - 外部设备
  • I/O控制器多种多样,也会制定相应的标准
    • 如:用于控制USB设备的IO接口、用于控制SATA 3.0硬盘的IO接口等
    • CPU通过总线与I/O接口相连接,I/O接口通过USB等数据线与输入输出设备相连
  • 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.1.1 I/O控制方式

img

  • 数据寄存器用于暂存与外设交换的数据
  • 控制寄存器用于暂存控制信息
  • 状态寄存器用于存放外设的运行状态信息,如打印机的打印状态,CPU通过读取状态寄存器来确定外部设备运行状态,从而判断是否可以进行下一步操作
  • 数据流:键盘 -> IO接口的数据寄存器 -> 数据总线 -> CPU某寄存器 -> 主存(变量i的对应位置)

CPU如何控制键盘I/O的完成:

  • 程序查询方式:
    • CPU不断轮询检查I/O控制器中的"状态寄存器",检测到状态为"已完成"之后,再从数据寄存器取出输入数据
    • 该种方式需要CPU不断的查询状态寄存器的值,会直接造成运行效率降低
  • 程序中断方式:
    • 等待键盘I/O时CPU可以先去执行其他程序,键盘I/O完成后I/O控制器向CPU发出中断请求,CPU响应中断请求,并取走输入数据

img

对于快速I/O设备,如"磁盘",如果每准备好一个字就给CPU发送一次中断请求,则CPU需要花大量的时间来处理中断服务程序,CPU利用率严重下降

7.1.2 DMA控制方式

DMA控制方式:

  • DMA:Direct Memory Access,直接内存访问
  • 主存与高速I/O设备之间有一条直接数据通路(DMA总线)。CPU向DMA接口发出"读/写"命令,并指明主存地址、磁盘地址、读写数据量等参数。
  • DMA控制器自动控制磁盘与主存的数据读写,每完成一整块数据读写(如1KB为一整块),才向CPU发出一次中断请求

img

  • DMA接口,即DMA控制器,也是一种特殊的I/O控制器
  • DMA控制器与主存每次传送1个字。当传送完一整块数据后才向CPU发出中断请求

7.1.3 通道控制方式

通道:

  • 可以理解为是"弱鸡版的CPU"。通道可以识别并执行一系列通道指令,通道指令种类、功能通常比较单一
  • 通道是具有特殊功能的处理器,能对I/O设备进行统一管理

通道控制过程:
img

  • CPU向通道发出I/O指令。指明通道程序在内存中的位置,并指明要操作的是哪个I/O设备。CPU就可以去做其他事情
  • 通道执行内存中的通道程序,控制I/O设备完成一系列任务
  • 通道执行完规定的任务后,向CPU发出中断请求,之后CPU对中断进行处理

通道基本工作过程:
img

  • CPU通过执行I/O指令负责启停通道,以及处理来自通道的中断实现对通道的管理
  • 通道和程序(即CPU)并没有完全并行,通道仍然需要CPU来对它实行管理
  • 在设备工作时,CPU只与通道交互,此时程序与其并行工作

7.1.4 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 指令:
      • CPU 指令的一部分,指令格式为 操作码 + 指令码 + 设备码
      • I/O 指令与普通指令格式略有不同,操作码指明了CPU要对IO接口做什么,命令码指明了IO接口要对设备做什么
    • 通道指令:
      • 通道能识别的指令
      • 通道程序提前编制好放在主存中
      • 在含有通道的计算机中,CPU执行I/O指令对通道发出命令,由通道执行一系列通道指令,代替CPU对I/O设备进行管理

7.2 外部设备(仅了解)

外部设备:

  • 也称外围设备,是除了主机以外的、能直接或间接与计算机交换信息的装置

外部设备包括以下几种:

  • 输入设备:
    • 用于向计算机系统输入命令和文本、数据等信息的部件
    • 键盘和鼠标是最基本的输入设备
  • 输出设备:
    • 用于将计算机系统中的信息输出到计算机外部进行显示、交换等的部件
    • 显示器和打印机是最基本的输出设备
  • 外存设备:
    • 除计算机内存及CPU缓存等以外的存储器
    • 硬磁盘、光盘等是最基本的外存设备

7.2.1 输入设备(仅了解)

键盘:

  • 键盘是最常用的输入设备,通过它可发出命令或输入数据。每个键相当于一个开关,当按下键时,电信号连通;当松开键时,弹簧把键弹起,电信号断开
  • 键盘输入信息可分为3个步骤:
    • 查出按下的是哪个键;
    • 将该键翻译成能被主机接收的编码,如ASCII码;
    • 将编码传送给主机

鼠标:

  • 鼠标是常用的定位输入设备,它把用户的操作与计算机屏幕上的位置信息相联系。常用的鼠标有机械式和光电式两种
  • 鼠标工作原理:
    • 当鼠标在平面上移动时,其底部传感器把运动的方向和距离检测出来,从而控制光标做相应运动

7.2.2 输出设备(仅了解)

显示器:

  • 按所显示的信息内容分类:字符显示器、图形显示器、图像显示器

  • 按显示设备所用的显示器件分类:阴极射线管(CRT)显示器、液晶显示器(LCD)、LED显示器

  • 屏幕大小:

    • 以对角线长度表示,常用的有12~29英寸等
  • 分辨率:

    • 所能表示的像素个数,屏幕上的每一个光点就是一个像素,以宽、高的像素的乘积表示,例如,800×600、1024×768和1280×1024等
  • 灰度级:

    • 灰度级是指黑白显示器中所显示的像素点的亮暗差别,在彩色显示器中则表现为颜色的不同,灰度级越多,图像层次越清楚逼真,典型的有8位(256级)、16位等
    • n位可以表示2\(^n\)种不同的亮度或颜色
  • 刷新:

    • 光点只能保持极短的时间便会消失,为此必须在光点消失之前再重新扫描显示一遍,这个过程称为刷新。
    • 刷新频率:
      • 单位时间内扫描整个屏幕内容的次数,按照人的视觉生理,刷新频率大于30Hz时才不会感到闪烁,通常显示器刷新频率在60~120Hz
  • 显示存储器(VRAM):

    • 也称刷新存储器,为了不断提高刷新图像的信号,必须把一帧图像信息存储在刷新存储器中。其存储容量由图像分辨率和灰度级决定,分辨率越高,灰度级越多,刷新存储器容量越大
    • VRAM容量 = 分辨率 × 灰度级位数
    • VRAM带宽 = 分辨率 × 灰度级位数 × 帧频

    对于1440x900分别率,24位彩色的显示器,一帧所占用的容量为1440 x 900 x 3B ≈ 3.7MB。一帧的大小即为显存的理论最小值

    如果显示器刷新率=60Hz,则显存带宽至少要3.7 x 60 = 222MB/s

    现代计算机中,显存除了作为当前显示帧的缓存,还会用于保存即将渲染的图像数据。对于集成显卡计算机中,通常分配一片内存作为显存

阴极射线管(CRT)显示器:

  • CRT显示器主要由电子枪、偏转线圈、荫罩、高压石墨电极和荧光粉涂层及玻璃外壳5部分组成。具有可视角度大、无坏点、色彩还原度高、色度均匀、可调节的多分辨率模式、响应时间极短
  • 按显示信息内容不同可分为:
    • 字符显示器:
      • 显示字符的方法以点阵为基础。点阵是指由m × n个点组成的阵列。点阵的多少取决于显示字符的质量和字符窗口的大小。字符窗口是指每个字符在屏幕上所占的点数,它包括字符显示点阵和字符间隔
      • 点阵存入由ROM构成的字符发生器中,在CRT进行光栅扫描的过程中,从字符发生器中依次读出某个字符的点阵,按照点阵中0和1代码不同控制扫描电子束的开或关,从而在屏幕上显示出字符。对应于每个字符窗口,所需显示字符的ASCII代码被存放在视频存储器VRAM中,以备刷新
    • 图形显示器:
      • 将所显示图形的一组坐标点和绘图命令组成显示文件存放在缓冲存储器中,缓存中的显示文件传送给矢量(线段)产生器,产生相应的模拟电压,直接控制电子束在屏幕上的移动。为了在屏幕上保留持久稳定的图像,需要按一定的频率对屏幕进行反复刷新。
      • 这种显示器的优点是分辨率高且显示的曲线平滑。目前高质量的图形显示器采用这种随机扫描方式。缺点是当显示复杂图形时,会有闪烁感
    • 图像显示器:
      • 按扫描方式不同可分为:光栅扫描显示器、随机扫描显示器

液晶显示器(LCD):

  • 原理:利用液晶的电光效应,由图像信号电压直接控制薄膜晶体管,再间接控制液晶分子的光学特性来实现图像的显示。特点:体积小、重量轻、省电、无辐射、绿色环保、画面柔、不伤眼等

LED(发光二极管)显示器:

  • 原理:通过控制半导体发光二极管进行显示,用来显示文字、图形、图像等各种信息

LCD与LED是两种不同的显示技术,LCD是由液态晶体组成的显示屏,而LED则是由发光二极管组成的显示屏。与LCD相比,LED显示器在亮度、功耗、可视角度和刷新速率等方面都更具优势


打印机:

  • 打印机是计算机的输出设备之一,用于将计算机处理结果打印在相关介质上
  • 按印字原理不同可分为:
    • 击打式打印机:
      • 利用机械动作使印字机构与色带和纸相撞而打印字符
      • 优点:设备成本低印字质量好
      • 缺点:噪声大、速度慢

      如:机打发票银行回执单(防伪性好)

    • 非击打式打印机:
      • 采用电、磁、光、喷墨等物理、化学方法来印刷字符
      • 优点:速度快、噪声小
      • 缺点:成本高
  • 按打印机工作方式不同可分为:
    • 串行打印机:逐字打印,速度慢
    • 行式打印机:逐行打印,速度快
  • 按工作方式可分为:
    • 针式打印机:
      • 原理:在联机状态下,主机发出打印命令,经接口、检测和控制电路,间歇驱动纵向送纸和打印头横向移动,同时驱动打印机间歇冲击色带,在纸上打印出所需内容。
      • 特点:针式打印机擅长"多层复写打印",实现各种票据或蜡纸等的打印。它工作原理简单,造价低廉,耗材(色带)便宜,但打印分辨率和打印速度不够高
    • 喷墨式打印机:
      • 原理:带电的喷墨雾点经过电极偏转后,直接在纸上形成所需字形。彩色喷墨打印机基于三基色原理,即分别喷射3种颜色墨滴,按一定的比例混合出所要求的颜色。
      • 特点:打印噪声小,可实现高质量彩色打印,通常打印速度比针式打印机快;但防水性差,高质量打印需要专用打印纸
    • 激光打印机:
      • 原理:计算机输出的二进制信息,经过调制后的激光束扫描,在感光鼓上形成潜像,再经过显影、转印和定影,便在纸上得到所需的字符或图像。
      • 特点:打印质量高、速度快、噪声小、处理能力强;但耗材多、价格较贵、不能复写打印多份,且对纸张的要求高。激光打印机是将激光技术和电子显像技术相结合的产物。感光鼓(也称为硒鼓)是激光打印机的核心部件

7.3 I/O接口

I/O接口的作用:

  • 数据缓冲:
    • 通过数据缓冲寄存器(DBR)达到主机和外设工作速度的匹配
    • I/O接口将外设传输过来的数据存入内部缓存寄存器,CPU直接于内部缓存寄存器交换数据,以缓解CPU于外设备速度不匹配的问题
  • 错误或状态监测:
    • 通过状态寄存器反馈设备的各种错误、状态信息,供CPU查用
    • I/O接口将外部设备传送过来的各种各样的状态信号统一成相同格式的状态信号,通过状态总线传输给CPU
  • 控制和定时:
    • 接收从控制总线发来的控制信号、时钟信号
  • 数据格式转换:
    • 串-并、并-串等格式转换
    • 由于计算机内部采用并行的输入方式,而有些外部设备只支持串行输入方式,IO接口实现其串行转并行,以及并行转串行的过程
  • 与主机和设备通信:
    • 实现主机—I/O接口—I/O设备之间的通信

7.3.1 I/O接口结构

I/O结构包括以下结构:

  • 数据缓存寄存器DBR:
    • 暂存即将输入输出的数据
    • 主机和外设的速度匹配
  • 状态/控制寄存器:
    • 命令字:CPU对设备发出的具体命令
    • 状态字:设备的状态信息,供CPU检查
  • 串-并转换机构:
    • 数据格式的转换
  • I/O控制逻辑:
    • 根据命令字向设备发出控制信号
  • 地址译码逻辑:
    • 将地址信号映射到指令I/O端口

img

  • I/O接口的主机侧为内部接口:
    • 内部接口与系统总线相连,实质上是与内存、CPU相连。数据的传输方
    • 早期系统总线只能是并行,现代计算机采用PCI-E等技术后,也已支持串行传输
  • I/O接口的设备侧为外部接口:
    • 外部接口通过接口电缆与外设相连,外部接口的数据传输可能是串行方式,因此I/O接口需具有串/并转换功能
  • 有的I/O接口可以连接多个设备

7.3.2 I/O接口的工作原理

img

  1. 发命令:发送命令字到I/O控制寄存器,向设备发送命令(需要驱动程序的协助)

命令字有的教材也称为状态字

  1. 读状态:从状态寄存器读取状态字,获得设备或I/O控制器的状态信息
  2. 读/写数据:从数据缓冲寄存器发送或读取数据,完成主机与外设的数据交换
  • 其中,
    • 数据线:读写数据、状态字、控制字、中断类型号
    • 地址线:指明I/O端口
    • 控制线:读/写IO端口的信号、中断请求信号
  • 控制寄存器、状态寄存器在使用时间上是错开的,因此有的I/O接口中可将二者合二为一
  • 每个设备对应一组寄存器,操作不同的寄存器就是在操作不同的设备

7.3.3 I/O端口

I/O接口 = I/O端口 + 控制逻辑

img
I/O端口:

  • 指接口电路中可以被CPU直接访问的寄存器
  • I/O端口要想能够被CPU访问,必须要有端口地址,每一个端口都对应着一个端口地址

对I/O端口进行编址,可采取下面两种方式:

  • I/O端口统一编址:
    • 把I/O端口当做存储器的单元进行地址分配,用统一的访存指令就可以访问I/O端口,又称存储器映射方式
    • 靠不同的地址码区分内存和I/O设备。访存类的指令都可以访问I/O端口
    • RISC机器常用该种编址方式,MISC也可以采用统一编制方式
    • 如系统总线中地址线共10根,则可以访问的存储单元个数为2\(^{10}\)= 1024个,假设要给10个I/O端口编址,有三种编址方式:
      1. 0~9表示I/O地址,10~1023为主存单元地址
      2. 0~1013表示主存单元地址,1014~1023为IO地址
      3. 10~19表示I/O地址,0~9、20~1023为主存单元地址
  • I/O端口独立编址:
    • I/O端口地址与存储器地址无关,独立编址CPU需要设置专门的输入/输出指令访问端口,又称I/O映射方式
    • 靠不同的指令区分内存和I/O设备。只能用专门的I/O指令访问I/O端口
    • Intel 处理器常用,IN、OUT 就是IO指令
      • IN:从某I/O端口读入数据到CPU的寄存器中
        • IN Rd, Rs:把IO端口Rs 的数据输入到CPU寄存器Rd
      • OUT:将CPU某寄存器中的内容写入到I/O端口中
        • OUT Rd, Rs:把CPU寄存器Rs 的数据输出到IO端口Rd
图示 编址方式 优点 缺点
img 统一编制:
I/O端口和主存地址空间统一,用访存命令访问I/O端口
1)不需要专门的输入/输出指令,所有访存指令都可直接访问端口,程序设计灵活性高
2)端口有较大的编址空间
3)读写控制逻辑电路简单
1)端口占用了主存地址空间,使主存地址空间变小
2)外设寻址时间长(地址位数多,地址译码速度慢)
img 独立编址:
I/O端口和主存地址相互独立,用I/O指令访问I/O端口
1)使用专用I/O指令,程序编制清晰
2)I/O端口地址位数少,地址译码速度快
3)I/O端口的地址不占用主存地址空间
1)I/O指令类型少,一般只能对端口进行传送操作,程序设计灵活性差
2)需要CPU提供存储器读/写、I/O设备读/写两组控制信号,增加了控制逻辑电路的复杂性

7.3.4 I/O接口分类

按数据传送方式可分为:

  • 并行接口:一个字节或一个字所有位同时传送
  • 串行接口:一位一位地传送

这里所说的数据传送方式指的是外设和接口一侧的传送方式。接口要完成数据格式转换

按主机访问I/O设备的控制方式可分为:

  • 程序查询接口
  • 中断接口
  • DMA接口

按功能选择的灵活性可分为:

  • 可编程接口
  • 不可编程接口

7.4 程序查询方式

以打印3个字符为例,程序查询方式工作流程:

  1. CPU执行初始化程序,并预置传送参数:设置计数器、设置数据首地址
  2. 向I/O接口发送命令字,启动I/O设备
  3. CPU从接口读取设备状态信息,CPU不断查询I/O设备状态,直到外设准备就绪
  4. 外设准备就绪,传送一次数据,一般为一个字
  5. 修改地址和计数器参数
  6. 判断传送是否结束,一般计数器为0时结束

程序查询方式:

  • CPU一旦启动I/O,必须停止现行程序的运行,并在现行程序中插入一段程序
  • 主要特点:CPU有"踏步"等待现象,CPU与I/O串行工作
  • 根据启动查询方式的不同,分为:
    • 独占查询:CPU 100%的时间都在查询I/O状态,完全串行
    • 定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次I/O状态。查询的间隔内CPU可以执行其他程序
  • 每完成一次数据传送,会修改主存地址以及计数值(主存地址+1,计数器-1),直至所有数据传送完成
  • CPU需要一直查询外设状态,直到外设准备就绪就进入数据传送阶段
  • 优点:
    • 接口设计简单、设备量少
  • 缺点:
    • CPU在信息传送过程中要花费很多时间用于查询和等待,而且在一段时间内只能和一台外设交换信息,效率大大降低

7.4.1 程序查询例题

在程序查询方式的输入/输出系统中,假设不考虑处理时间,每一个查询操作需要100个时钟周期,
CPU的时钟频率为50MHz。现有鼠标和硬盘两个设备,而且CPU必须每秒对鼠标进行30次查询,硬盘
以32位字长为单位传输数据,即每32位被CPU查询一次,传输率为2×220B/s。求CPU对这两个设备
查询所花费的时间比率,由此可得出什么结论?

  • 时间的角度:
    • 一个时钟周期为1/50MHz = 20ns,一个查询操作耗时100 ×20ns = 2000ns
    • 鼠标:
      • 每秒查询鼠标耗时30 ×2000ns = 60000ns
      • 查询鼠标所花费的时间比率= 60000ns/1s = 0.006%
      • 对鼠标的查询基本不影响CPU的性能
    • 硬盘:
      • 每32位需要查询一次,每秒传送2×2\(^{20}\)B,每秒需要查询(2×2\(^{20}\)B)/4B = 2\(^{19}\)
      • 查询硬盘耗时 2\(^{19}\)×2000ns = 512 ×1024 ×2000ns ≈ 1.05×10\(^{9}\) ns
      • 查询硬盘所花费的时间比率= (1.05×10\(^{9}\) ns)/1s = 105%
      • CPU将全部时间都用于对硬盘的查询也不能满足磁盘传输的要求
  • 频率的角度:
    • CPU的时钟频率为50MHz,即每秒50×10\(^{6}\)个时钟周期
    • 鼠标:
      • 每秒查询鼠标占用的时钟周期数30 ×100 = 3000
      • 查询鼠标所花费的时间比率= 3000/(50×10\(^{6}\)) = 0.006%
      • 对鼠标的查询基本不影响CPU的性能
    • 硬盘:
      • 每秒需要查询(2×2\(^{20}\)B)/4B = 2\(^{19}\)
      • 每秒查询硬盘占用的时钟周期数2\(^{19}\)×100≈5.24×10\(^{7}\)
      • 查询硬盘所花费的时间比率= (5.24×10\(^{7}\))/(50×10\(^{6}\)) ≈ 105%
      • CPU将全部时间都用于对硬盘的查询也不能满足磁盘传输的要求

7.5 中断的作用和原理

程序中断:

  • 在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序
  • 工作流程:
    • 中断请求:中断源向CPU发送中断请求信号
    • 中断响应:响应中断的条件
      • 中断判优:多个中断源同时提出请求时通过中断判优逻辑响应一个中断源
    • 中断处理:执行中断隐指令,运行中断服务程序

关中断:

  • 在PSW状态寄存器中,IF,Interrupt Flag存放着中断状态,用于告知CPU目前处于关中断状态
  • 处于关中断状态,CPU不允许响应任何中断请求,继续执行当前执行的指令,直至变为开中断状态才会允许响应中断请求
  • 关中断的作用:实现原子操作,即可将一组操作视作一个整体,要么一起执行,要么都不执行
  • IF=1表示开中断(允许中断);IF=0表示关中断(不允许中断)

中断请求类型:

  • 内中断:
    • 也叫异常、例外、陷入
    • 内中断请求的来源一般来自CPU内部,一般与当前执行的指令有关
  • 外中断:
    • 广义上的中断请求包括内中断、外中断,狭义上的中断指外中断
    • 外中断请求的来源一般来自CPU外部,与当前执行的指令无关
    • 外中断还包括两类:
      • 非屏蔽中断:关中断时也会被响应,如断电
      • 可屏蔽中断:关中断时不会呗响应

对于内中断/软中断:

  • 内中断请求由于与当前执行的指令相关,CPU不可以屏蔽,一旦出现立即处理
  • 指令周期中一旦发生内中断请求,需要直接给出中断向量或引出中断处理服务程序进行处理

对于外中断,

  • 每条指令会在指令执行阶段结束后统一向所有中断源发送中断查询信号,检查有无中断请求
  • 如果存在中断请求则进入指令中断阶段,反之直接跳过该阶段执行下一条指令取指
  • 中断请求在指令周期的任何时刻都会到来,但外部中断请求只在指令执行周期后才进行中断响应

扩展:

  • 在配有通道的计算机系统中,用户程序需要输入/输出时,引起的终端为访管中断
    • 由于用户程序进行输入/输出时,发生程序中断让CPU处理用户的输入/输出,这一过程涉及了涉及到操作系统管理资源的分配
    • 操作系统资源的管理,需要让CPU处于核心态才能执行,因此用户程序此时需要执行访管指令,触发访管中断,从而完成输入/输出过程

注:上述场景是用户程序进行输入/输出过程,即CPU发出的中断请求,区别于用户外部设备如键盘鼠标进行操作所引发的I/O中断

CPU响应中断必须满足以下3个条件:

  • 中断源有中断请求
  • CPU允许中断即开中断
  • 一条指令执行完毕,且没有更紧迫的任务

7.5.1 中断判优

中断判优:

  • 中断判优的目的是使同时提出中断请求的优先级别最高者得到及时响应,并且不响应其他中断请求
  • 中断判优既可以用硬件实现,也可用软件实现
    img
    • 硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源
    • 软件实现是通过查询程序实现的
  • 软件实现的中断判优往往效率更低,因此现代计算机都采用硬件排队器实现
  • 优先级设置原则:
    1. 硬件故障中断属于最高级,其次是软件中断(系统调用);
    2. 非屏蔽中断优于可屏蔽中断;
    3. DMA请求优于I/O设备传送的中断请求
    4. 高速设备优于低速设备;
    5. 输入设备优于输出设备;
    6. 实时设备优于普通设备。

中断请求标记:

  • 每个中断源向CPU发出中断请求的时间是随机的
  • 为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为"1"时,表示中断源有请求
  • 这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源

硬件排队器规定死了中断的响应次序

  • 决定了多个中断源的中断请求优先级,以及那个中断服务程序最先开始执行的顺序
  • 中断屏蔽标志则决定了,处理完当前中断请求后,哪些还未被屏蔽的中断请求可以优先执行,即一定程度上决定了多个中断服务程序执行完的次序
    • 中断屏蔽字支持修改,一定程度上缓解了硬件规定死的响应次序,并在一定程度上支持了对中断服务程序执行的顺序的自定义

7.5.2 中断处理过程

中断完整过程:

  1. 关中断
  2. 保存断点
  3. 引出中断服务程序
  4. 保存现场和屏蔽字
  5. 开中断
  6. 执行中断服务程序
  7. 关中断
  8. 恢复现场和屏蔽字
  9. 开中断,中断返回
  • 其中,1-3步骤包含在指令周期的中断周期,即中断隐指令

img
中断处理过程:

  • 当前指令执行结束后,PC内容为K+1
  • 指令执行完成后,检测到中断信号,需要处理中断
  • PC原值K+1压入堆栈保存,将中断服务程序的第一条指令地址放入PC,进入中断服务程序
    • 该过程被称作中断隐指令
  • 弹出堆栈,将原值K+1放回PC,回到主程序

中断响应周期采用硬件方法保护并更新程序计数器PC内容,而不是采用软件完成

  • 主要原因是为了能够进入中断处理程序,并能正确返回源程序,保证其稳定不出错
  • 另一方面,硬件的处理速度比软件也跟快一些

中断隐指令:

  • 保存原程序的PC值,并让PC指向中断服务程序的第一条指令
    • 中断隐指令并不是一条具体的指令,而是CPU在检测到中断请求时自动完成的一系列动作
  • 中断隐指令主要任务:
  1. 关中断:
  • 在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去
  1. 保存断点:
  • 为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点(即程序计数器(PC)的内容)保存起来。可以存入堆栈,也可以存入指定单元
  1. 引出中断服务程序:
  • 引出中断服务程序的实质就是取出中断服务程序的入口地址并传送给程序计数器(PC)

确定中断服务程序的起始地址

软件查询法:

  • 通过软件实现,定位到中断服务程序入口地址,效率低

硬件向量法/中断向量方法:

  • 硬件向量法通过中断判优排队器唯一的信号输出,产生对应的向量地址,CPU执行向量地址的指令,从而引出中断服务程序
    img
  • 硬件向量法定位过程:
    • 中断判优通过硬件排队器实现,排队器会输出一串0、1序列,该序列称为中断源编码,唯一确定处理哪个中断请求
    • 硬件排队器输出信号给中断向量地址生成部件作为输入信号,产生一串0、1序列输出作为中断向量地址/中断类型号
    • 在主存内,中断向量地址均存放着无条件跳转JMP X,其中X表示中断向量
    • 中断向量指明了各种中断请求所使用的中断服务程序入口地址
  • 通过类似于间址寻址的方式,CPU产生的中断类型号一旦确定后,中断服务程序可以存放在主存中的任何位置。入口地址发生改变时,只需要更新向量地址中的中断向量值即可

几个概念汇总:

  • 中断向量:中断服务程序的入口主存地址
  • 中断向量地址:存放中断服务程序的入口地址的主存地址
  • 中断类型号:中断向量的主存地址
  • 中断向量表:中断类型号所在的那块主存区域
  • 向量中断:采用中断向量的中断控制方式

中断向量地址生成部件 -> 中断类型号 -> 中断向量 -> 中断服务程序入口地址

这样的设计也有助于程序浮动,中断服务程序不需要固定在某个地址区域,只要固定好中断向量表的位置即可

中断服务程序

主要任务:

  • 保护现场:
    • 保存通用寄存器和状态寄存器的内容(如保存ACC寄存器的值),以便返回原程序后可以恢复CPU环境。可使用堆栈,也可以使用特定存储单元
  • 中断服务(设备服务):
    • 主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲存储器中
    • 如,中断服务的过程中有可能修改ACC寄存器的值
  • 恢复现场:
    • 通过出栈指令或取数指令把之前保存的信息送回寄存器中
    • 如,把原程序算到一般的ACC值恢复原样
  • 中断返回:
    • 通过中断返回指令回到原程序断点处

中断服务程序的最后一条指令为中断返回指令,通常为无条件转移指令,但中断返回指令 ≠ 无条件转移指令

img

  • 中断周期中,中断响应、程序断点进栈均有硬件实现,执行顺序并非强制要求
  • 在中断处理过程中,关中断后直至开中断之间的操作并不会被其他除硬件故障外的中断打断,保证了中间过程的原子操作
  • 该中断处理过程就是单重中断,即执行中断服务程序时不响应新的中断请求

7.5.2 多重中断

多重中断:

  • 又称中断嵌套,执行中断服务程序时可响应新的中断请求
中断类型 中断隐指令 中断服务程序 图示
单重中断 1)关中断
2)保存断点(PC)
3)送中断向量
4)保护现场
5)执行中断服务程序
6)恢复现场
7)开中断
8)中断返回
img
多重中断 1)关中断
2)保存断点(PC)
3)送中断向量
4)保护现场和屏蔽字
5)开中断
6)执行中断服务程序
7)关中断
8)恢复现场和屏蔽字
9)开中断
10)中断返回
img
  • 其中屏蔽字也叫中断屏蔽字,由于中断请求是有优先级的
  • 对于多重中断,当优先级高的中断请求正在处理时,需要将优先级低的中断请求进行屏蔽处理

中断屏蔽技术:

  • 要用于多重中断,CPU要具备多重中断的功能,须满足下列条件:
    • 在中断服务程序中提前设置开中断指令
    • 优先级别高的中断源有权中断优先级别低的中断源
  • 每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字
    img
    • 硬件排队器当收到多个中断请求时,只能响应其中一个固定优先级;增加中断屏蔽功能后,可以根据相应的信号调整优先级
  • 屏蔽字设置的规律:
    • 一般用"1"表示屏蔽,"0"表示正常申请
    • 每个中断源对应一个屏蔽字(在处理该中断源的中断服务程序时,屏蔽寄存器中的内容为该中断源对应的屏蔽字)
    • 屏蔽字中"1"越多,优先级越高。每个屏蔽字中至少有一个"1"(至少要能屏蔽自身的中断)

多重中断例子

例题,设某机有4个中断源A、B、C、D,其硬件排队优先次序为A>B>C>D,现要求将中断处理次序改为D>A>C>B。

  • 写出每个中断源对应的屏蔽字

    中断源 A屏蔽字 B屏蔽字 C屏蔽字 D屏蔽字
    A 1 1 1 0
    B 0 1 0 0
    C 0 1 1 0
    D 1 1 1 1
  • 按下图所示的时间轴给出的4个中断源的请求时刻,画出CPU执行程序的轨迹。设每个中断源的中断服务程序时间均为20us
    img


扩展实际应用(仅了解)
img

对于8086芯片,其PSW如下

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- - - - OF DF IF TF SF ZF - AF - PF - CF
  • IF:Interrupt Flag
    • 开/关中断标志。当IF=1时,表示开中断,当IF=0时表示关中断
  • INTR:interrupt request
    • 可屏蔽中断请求信号,输入,用来申请一个硬件中断。当IF=1 时,若INTR 保持高电平,则在当前指令执行完毕后就进入中断响应周期
  • NMI:non-maskable interrupt
    • 非屏蔽中断输入信号。与INTR 信号类似,但NMI 中断不必检查IF 标志位是否为1。常用于处理电源掉电紧急情况
  • INTA:interrupt acknowledge
    • 中断响应信号,输出。响应INTR 输入。该引脚常用来选通中断向量码以响应中断请求
  • 条件码:
    • OF,Overflow Flag:溢出标志。溢出时为1,否则置0
    • SF,Sign Flag:符号标志。结果为负时置1,否则置0
    • ZF,Zero Flag:零标志。运算结果为0时ZF位置1,否则置0
    • CF,Carry Flag:进位标志。进位时置1,否则置0
    • AF,Auxiliary carry Flag:辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0
    • PF,Parity Flag:奇偶标志。结果操作数中1的个数为偶数时置1,否则置0
  • 控制标志位:
    • DF,Direction Flag:方向标志,在串处理指令中控制信息的方向
    • IF,Interrupt Flag:中断标志
    • TF,Trap Flag:陷阱标志

中断控制器中,

  • 中断请求寄存器/中断请求标记寄存器IRR与I/O接口相连,一根线对应一个I/O设备,接受来自所有I/O设备的中断请求
  • IRR将接收到的中断请求通过内部总线,传到CPU的INTR引脚;在CPU未关中断时,即INTA为0,CPU会对接收到的中断请求进行处理
  • 经过中断判优电路,将相应的中断类型号传入中断服务寄存器ISR,ISR通过数据总线传给CPU的AD0~AD14引脚,并根据中断类型号找到中断服务程序的入口地址

7.5.3 程序中断方式

程序中断 = 隐指令 + 中断服务程序

  • 程序中断方式虽然通过软件(中断服务程序)实现中断过程,但隐指令过程中完全由硬件自动完成,即程序中断由硬件和中断服务程序共同完成

img
程序中断方式流程:

  • CPU正在运行某个程序,需要进行外部设备输入操作
  • CPU执行I/O指令,外部设备开始准备输入数据。准备数据过程中,CPU继续执行当前运行程序
  • 当外部设备数据准备完成,向CPU发出中断请求,CPU执行中断隐指令
  • 当前数据通过中断服务程序控制数据传输,传输完成后中断返回主程序,外部设备继续准备下一个数据,期间CPU继续执行当前程序,直至所有输入数据数据完成

有些I/O操作,CPU可能需要等待外部设备I/O执行完成才能继续执行当前程序,如scanf输入;而对于像输出这类I/O操作,他的执行与CPU执行当前程序并无关系,无需等待


例题,假定CPU主频为50MHz,CPI为4。设备D采用异步串行通信方式向主机传送7位ASCII字符,通信规程中有1位奇校验位和1位停止位,从D接收启动命令到字符送入I/O端口需要0.5ms。请回答下列问题,要求说明理由。

  • 设备D采用中断方式进行输入/输出,示意图如下
    img
    I/O端口每收到一个字符申请一次中断,中断响应需10个时钟周期,中断服务程序共有20条指令,其中第15条指令启动D工作。若CPU需从D读取1000个字符,则完成这一任务所需时间大约是多少个时钟周期?
    • 主频50MHz,时钟周期为1/50MHz = 20ns
    • 0.5ms对应时钟周期数为0.5ms/20ns = 25000
    • 传送1个字符需要的时钟周期数为 25000 + 10 + 15×4 = 25070
    • 传送1000个字符需要的时钟周期数为 25070×1000 = 25070000

    对于最后的中断服务程序执行所需要的5条指令,是否加入到任务所需时间中,可以增加也可以不增加。因为前15个指令已完成了数据传输过程,最后5个指令和该过程无关,因此可加可不加

  • CPU用于完成这一任务的时间大约是多少个时钟周期?
    • CPU在整个过程中主要参与了中断相应以及中断服务程序的执行,共花费10+20x4=90个时钟周期
    • CPU用于该任务的时间大约为1000×(10+20×4)= 9×10\(^4\) 个时钟周期
  • 在中断响应阶段CPU进行了哪些操作?
    • 中断隐指令:
      1. 关中断
      2. 保存断点(PC)
      3. 引出中断服务程序

7.6 DMA方式

DMA方式由DMA驱动程序进行控制,并自动传输数据,当传输完成后才发出中断请求告知CPU传输完成,要求CPU进行数据后处理

  • DMA的工作过程由其硬件自行实现,除了启动驱动程序需要CPU发出命令外,需要进行额外干预,因此DMA方式不涉及CPU切换进程
  • DMA在传送数据过程中,并没有破坏程序计数器以及其他寄存器的内容,CPU可以正常与DMA传输并行工作

由于DMA的特殊性,其优先级高于中断请求;检查DMA请求一般安排在每次访问完主存后进行,只要总线空闲,就直接进行处理DMA请求

  • 假定当指令周期结束后才处理DMA请求,等待指令周期过程中DMA一直处于空等,造成浪费
    • 如果让CPU先处理DMA请求,让DMA直接开始数据准备,准备过程和指令执行可以并行进行,执行效率大大提高
  • DMA准备喊得数据回放入数据缓冲寄存器中,并发出DMA请求告知CPU进行后处理,如果DMA的优先级低于中断请求,可能会导致写入缓冲中的数据由于执行执行过程而被覆盖

中断方式:CPU与外设并行工作,但数据传送与主程序串行工作

DMA方式:CPU与外设并行工作,数据传送与主程序也是并行工作

周期窃取/周期挪用:本质是CPU不在访存,I/O设备占用主存,该过程DMA每传送一个数据占用一个存取周期的时间

DMA请求过程:

  • I/O设备发出DMA请求,DMA控制器收到请求
  • DMA控制器确认总线空闲且CPU访存结束,通过总过告知CPU,并让CPU启动DMA。CPU在当前机器周期执行完后,响应DMA请求
    • 流水线长度以最复杂的操作所花时间为准,总线周期的访存时间通常是耗时最长的,一般可认为总线周期、存取周期、机器周期和流水段长度是等价的
  • DMA控制器得到总线控制权,进行周期窃取,开始准备数据,当数据传输好后,向CPU发送DMA中断请求,告知CPU完成传输等待其后处理

7.6.1 DMA控制器

img

  • DMA控制器,DMAC,一般控制以块为单位读写的设备,如磁盘
  • CPU向DMA控制器指明要输入还是输出;要传送多少个数据;数据在主存、外设中的地址
  • DMA控制器与主存每次传送1个字。当传送完一整块数据后才向CPU发出中断请求

DMA控制器工作过程:

  • 传送前:
    • 1)接受外设发出的DMA请求(外设传送一个字的请求),并向CPU发出总线请求
    • 2)CPU响应此总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周期
  • 传送时:
    • 3)确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数
    • 4)规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作
  • 传送后:
    • 5)向CPU报告DMA操作的结束

在磁盘存储器进行读写操作钱,CPU需要对磁盘控制器或DMA控制器进行初始化,包括:

  • 传送方向,都磁盘还是写磁盘
  • 传送数据的字数或字节数
  • 传送信息所在的主存起始地址

img

  • 数据缓冲寄存器:输入/输出数据的临时存放点
  • 外设通过串行或并行方式,将数据缓慢存入数据缓冲寄存器中,每当数据缓冲寄存器填满后,启动一次DMA传送,完成外设与主机之间一个数据块的数据传送
  • DMA请求触发器工作原理:
    • 设备讲数据传输到数据缓冲寄存器后,即I/O设备已经准备好数据
    • I/O设备向DMA请求触发器输入控制信号,将其值改为1,表示已完成输入
    • 控制状态逻辑读取到DMA请求触发器的高电平信号,则下一步控制电路将数据缓冲寄存器中的值通过数据线传输导系统总线中
  • 传送长度计数器WC:
    • I/O设备每传输完一个数据,计数器就会自动加1,更新给AR,准备存放下一个地址的数据
  • 注:在DMA传送过程中,DMA控制器将接管CPU的地址总线、数据总线和控制总线,CPU的主存控制信号被禁止使用。而当DMA传送结束后,将恢复CPU的一切权利并开始执行其操作

7.6.2 DMA传送过程

DMA传送过程三个阶段:

  • 预处理:
    • CPU完成寄存器初值设置等准备工作
  • 数据传送:
    • CPU继续执行主程序,DMA控制器完成数据传送
  • 后处理:
    • CPU执行中断服务程序做DMA结束处理

img

  • 发生DMA请求说明I/O设备要向主存传输一个字的数据
  • 而发生DMA中断请求说明一整块的数据传输已经完成

img

  • 由于让DMA与主存进行数据通信,CPUC要将系统总线的控制权限交给DMAC
  • 但如果CPU也需要访问主存时,CPU和DMA控制器访问主存就可能产生冲突

为了有效地使用主存,DMA控制器与CPU通常采用以下3种方法使用主存:

  • 停止CPU访问主存:
    • 需要数据传送时,停止CPU访存,总线控制权交给DMA控制器
      img
    • 优点:
      • 控制简单
    • 缺点:
      • CPU 处于不工作状态或保持状态
      • 未充分发挥CPU 对主存的利用
  • DMA与CPU交替访存
    • 将CPU周期分为DMA访存和CPU访存两个部分
      img
    • 优点:
      • 不需要总线使用权的申请、建立和归还过
    • 缺点:
      • 硬件逻辑更为复杂
      • 交替访存过程中,CPU、I/O设备可能分配到不需要使用主存的时间片,利用率不高
  • 周期挪用(周期窃取,存取周期)
    • I/O设备需要访存时,挪用一个或几个存取周期
      img
    • DMA 访问主存有三种可能:
      • CPU 此时不访存:不冲突
      • CPU 正在访存:存取周期结束让出总线
      • CPU 与DMA 同时请求访存:I/O访存优先

DMA方式的特点

主存和DMA接口之间有一条直接数据通通路

  • 由于DMA方式传送数据不需要经过CPU,因此不必中断现行程序,I/O与主机并行工作,程序与传送并行工作

DMA方式的特点:

  • 它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外设访问
  • 在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现
  • 主存中要开辟专用缓冲区,及时供给和接收外设的数据
  • DMA传送速度快,CPU和外设并行工作,提高了系统效率
  • DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理
对比项目 中断 DMA
数据传送 中断程序控制
程序的切换 -> 保存和恢复现场
硬件控制
CPU只需进行预处理和后处理,不需要保护现场
发出中断请求阶段 传送数据 后处理
响应 指令执行周期结束后响应中断 每个机器周期结束均可,总线空闲时即可响应DMA请求
场景 CPU控制,低速设备 DMA控制器控制,高速设备
优先级 优先级低于DMA 优先级高于中断
异常处理 能处理异常事件 仅传送数据

注:

  • 对于单总线结构,DMA的访存完全取决于CPU是否将总线控制权移交给DMA
  • 对于三总线结构,DMA的访存按照停止CPU访问主存、DMA与CPU交替访存、周期挪用等策略进行冲突避免
    • 三总线结构中,如果需要实现DMA访存和CPU访存并行,还可以采用双端口主存实现
    • 大多数引入DMA控制器的计算机,均会在主存和DMA之间设置专用的数据通路
posted @ 2024-08-14 01:27  GK_Jerry  阅读(224)  评论(0)    收藏  举报