计算机组成.更好的利用处理器.从输入输出看中断

  • 有了存储器就足够了吗?不,还差最后一步的包装
  • 即外设
  • 诸如显示屏、键盘、鼠标、音响等等,这些才是我们直接可以接触到的计算机
  • 这些设备,如显示屏,是接收图像的数据并显示出来;而鼠标、键盘则属于输入设备,这些数据是某程序运行所需要用到的,比如我现在正在打字的火狐浏览器
  • 也就是说,外设也需要也需要数据,这些数据也要被CPU来处理,而这些数据的传输也需要在控制之下

I/O技术

无I/O技术

  • 最初电脑的输入用……纸带……恐怕那个时候只有研究人员用电脑?……

程序查询I/O

  • I/O设备的工作全由CPU来控制
  • CPU主动查询I/O设备的状态,若检测到数据就绪,则交换/处理一个数据字,否则继续查询
  • I/O设备直接与CPU相连导致更换I/O设备困难
  • 而CPU在控制I/O设备的时候,只是在控制而已,CPU本身应该是用来运算的,而在I/O的时候却闲置了;而且由于需要CPU主动的查询,所以就算I/O设备没有准备好,也同样会消耗CPU时间

程序中断方式

  • 首先改进的就是,让准备好的I/O设备来通知CPU
  • CPU这个时候一般是在干活的,所以就需要先放下手头的工作来处理I/O。
  • 不过一次只能处理一个数据字。
  • 中断是需要保护现场的,即CPU当前工作的所有状态,以便可以恢复继续工作

DMA直接内存读取

  • 后来发现,I/O操作和CPU的关系,只不过是I/O需要读/写命令、写入的主存地址、传送的数据个数,而已
  • 这么简单的活交给CPU简直浪费啊
  • 引入DMA控制器:CPU处理I/O是往DMA控制器写入外设地址、主存地址和计数器,剩下的由DMA控制器来控制

Channel通道技术

  • DMA还不够强大
    • 通常一个DMA只能服务一个外设
    • DMA控制器一次控制传输的数据有限,还需要多次CPU的介入
  • 通道则更为强大
    • 它是一个协处理器
    • CPU通过I/O指令来控制通道工作
    • 而通道可以执行专门的通道指令来控制I/O的工作

PPU外围处理机

  • 通道还是受限于CPU的控制
  • PPU则完全独立于CPU,全权负责I/O

I/O接口

  • 众多外设各不相同,其数据交换也不同
  • 但本质都是外设的数据,所以就可以用一层I/O接口来屏蔽掉双方的差异
    • CPU只需要考虑I/O接口的构成
    • 外设也是只需要考虑I/O接口

功能

  • 地址识别和设备选择:既然也是数据,就要有自己的地址;既然又是设备,就要对应好外设
  • 接收、保存CPU的I/O控制命令:放在接口的控制寄存器
  • 反应外设的工作状态:如数据状态(是否就绪)、工作状态(忙、空闲)
  • 信号转换:屏蔽掉外设的工作逻辑、时序等等
  • 数据格式、码制的转换及数据检错、纠错
  • 传送数据
  • 中断

组成

  • 数据缓冲寄存器:数据端口:交换的数据
  • 端口地址译码器
  • 接口控制逻辑
  • 中断逻辑
  • 状态寄存器 :状态端口:外设状态
  • 命令寄存器:控制端口:工作内容、工作方式

编址

  • I/O端口是按地址来访问的
  • 独立编址
    • 单独外设的地址
    • 需要专门的I/O指令来区分开主存地址
  • 统一编址
    • 主存地址空间一部分划为I/O端口的地址范围
    • 将I/O端口视为主存的一部分

中断

  • CPU如何处理中断请求信号

响应

  • 信号
    • 控制总线
      • 接受中断请求针脚 INTR
      • 发出中断响应针脚 INTA 
    • 中断允许标志 EINT(=1允许中断)
    • 开中断命令 STI(置EINT为1)
    • 关中断命令 CLI(置EINT为0)
  • 响应条件
    • CPU收到中断请求
    • EINT=1
    • 指令刚刚执行完
  • CPU工作
    • 进入中断周期,置中断状态触发器INT为1
    • 发出中断响应信号
    • 保存断点和状态(即PC和标志寄存器,其余寄存器由中断服务程序的保护现场来保存)
    • 关中断
    • 接受中断类型码,生成中断服务程序的入口地址
      • 软件查询法 :
      • 硬件向量法:中断源收到INTA后生成一个特定的向量地址(中断类型号),CPU根据它来生成入口地址
    • 执行中断处理程序

中断过程

  • 中断请求:中断源通过INTR针脚向CPU发出请求信号
  • 中断判优:多个中断信号的优先级排序
  • 中断响应:若EINT为1,CPU会在指令执行完后扫描INTR看看是否有中断请求,有则置INT为1,进行上述的CPU工作
  • 中断处理:由预先编制的中断服务程序完成
    • 保护现场
    • 中断服务
    • 恢复现场
  • 开中断:EINT置1
  • 中断返回:IRET,将PC和标志寄存器恢复(恢复断点)

中断屏蔽

  • 中断也可以被中断
  • 这样就相当于改变了中断的优先级
  • 需要设置中断屏蔽字,来判断当前中断能否被下一个中断来中断

DMA

组成

  • 主存地址寄存器AR
  • 字计数器WC
  • 设备地址寄存器DAR
  • 中断逻辑
  • 控制/状态逻辑

工作

  • 预处理:CPU执行I/O指令,选择DMA控制器和I/O接口,外设地址、主存地址和个数写入DMA控制器,I/O接口启动外设
  • 数据传输:DMA控制器控制下,完成主存与I/O接口之间的传输
  • 后处理:当WC的个数传输完,DMA控制器向CPU发出中断请求
    • 如果数据有错,重新发送
    • 如果还有数据,再启动新一轮DMA
    • 如果结束,CPU向DMA控制器发送结束信号EOP

数据传送

  • I/O接口在数据就绪时向DMAC发出DMA请求信号DREQ
  • DMAC向CPU发出占用总线信号HOLD
  • CPU决定是否让出总线,如果让出则发送总线允许信号HLDA
  • DMAC接收到HLDA获取总线控制权,向I/O接口输出DMA应答信号DACK
  • DMAC向系统总线发出读写命令和访存地址,I/O接口开始与系统总线交换数据
  • DMA数据传输结束,AR增1,WC减1 (即一次传送一个数据字)
  • DMAC撤销HOLD信号,释放总线

CPU和DMA和BUS

  • DMAC接收到HLDA后一直占用BUS直到传输完毕
  • DMAC在CPU不使用BUS的时候使用一个周期的BUS来传输一个数据字
  • CPU和DMA交替使用BUS:CPU工作周期比主存访问周期长得多的时候使用这种方式,分为子周期,分别让CPU和DMA使用总线,此时DMA无须请求总线

Channel

  • CPU管理DMA都是一些简单的命令,可以交给一个协处理器来完成
  • 通道就是一个简单的微处理器和DMA控制器的集成

改进CPU

  • CPU的管态、目态和访管指令
  • I/O指令只能在管态下,由OS执行
  • 广义I/O指令在目态下执行
  • 启动I/O指令

功能

  • 接受CPU的I/O指令,选择外设与通道相连
  • 执行CPU编制的通道程序
  • 给出外设地址
  • 给出主存地址
  • 控制交换个数
  • 检查外设状态
  • 格式转换
  • 结束操作

工作

  • 用户程序执行广义I/O指令,进入管态
  • CPU响应中断,执行I/O管理程序,其根据广义I/O指令的参数,针对特定通道使用通道命令编写通道程序,该程序最后一条为“无链通道指令”——停止通道工作,并向CPU发中断。
  • 通道程序写到主存中,将入口地址写入主存中预先划分的“通道地址字”单元,执行启动I/O指令。再由通道来执行通道程序
  • 通道程序执行完,向CPU发送中断信号,CPU响应并进入管态,执行管理程序来完成结束操作

发布了51 篇原创文章 · 获赞 48 · 访问量 16万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章