输入输出I/O

可以通过TRAP指令请求操作系统完成输入输出,输入(0x3002),输出(0x3010)

设备寄存器:

跟一个I/O设备进行交互,需要用到多个设备寄存器(device register),即使最简单的也需要两个,一个用来跟计算机之间传输的数据(设备数据寄存器),一个用来指示设备当前的状态,如设备是否空闲、最近处理的I/O任务等(设备状态寄存器)。

内存映射I/O和专用I/O指令

指令访问I/O寄存器时,需要明确的指明目标寄存器。有两种实现方式,即内存映射(常见)和专用指令(不常见)。

专用指令就是专门设计指令来做I/O处理。

内存映射的方式是在内存地址空间中,专门划分一段地址,用于设备寄存器的标识映射。I/O设备的寄存器被映射到一组地址(这些地址是分配给设备寄存器而不是内存位置)

同步和异步I/O

绝大多数I/O设备相较于CPU来说异常缓慢,如人每分钟输入100个左右的单词,而CPU的时钟频率远大于这个数。(即打字速度远赶不上cpu读取的速度)。

对于工作节奏不一致的I/O和CPU,我们称I/O设备和CPU之间是异步的,许多外设和处理器之间的交互都是异步的。

异步通信就需要一定的协议和握手机制来控制发送和接收。已达到设备和CPU之间的同步。

当然,如果我们假定I/O输入的速度是恒定的,我们就可以将硬件设计为定期读取一次寄存器(如隔多少个时钟周期),这样就可以达到I/O设备和CPU之间的节奏一致,因此就不需要额外的同步信息,这样I/O和处理器就是同步的了。

 

中断驱动和轮询

处理器和I/O之间虽然执行的任务不同,但是它们之间需要交互,输入的数据必须交给处理器来处理。交互的两种基本方式是轮询和中断驱动。

轮询就是CPU自己不断的读取检测状态寄存器内容,直到Ready位置位(即有新的输入),然后从输入寄存器中读取数据。(CPU控制)

中断驱动就是I/O设备准备好输入数据后通知CPU来读取数据。(I/O设备控制)

 

键盘输入

两个寄存器:键盘数据寄存器(KBDR)和键盘状态寄存器(KBSR)。

KBDR:寄存器地址0xFE02,分配16位空间,但只用其中8位(bit[7:0]存储输入字符的ASCII值)

KBSR:寄存器地址0xFE00,分配16位空间,只用其中1位(bit[15]存储同步信息,即ready位)

 

KBSR控制处理器和键盘之间的同步,当键盘按键按下时,对应的ASCII码值存入KBDR[7:0],而KDSR[15]置为1,CPU读取KBDR时,键盘自动清除KBSR[15], 状态标志位为0表示当前处于空闲键盘可以输入,为1表示上传输入还未被取走,键盘无法键入新的字符。

 

内存映射的I/O实现

load指令的Execute节拍的3个步骤:

在MAR中装入要读取的内存地址,启动内存访问,将读出内容存入MDR,最后将MDR内容拷贝至目的寄存器DR。

内存映射的方式下,步骤完全一致,只是把内存地址换为设备寄存器地址,MDR装入的数据来源也从内存单元变为设备寄存器。

 

显示器输出:

两个寄存器,DDR(数据寄存器)和DSR(状态寄存器)

DDR:寄存器地址0xFE06,分配16位空间,但只用其中8位(bit[7:0]存储字符的ASCII值)

DSR:寄存器地址0xFE04,分配16位空间,只用其中1位(bit[15]存储同步信息,即ready位)

DSR[15]用来同步处理器和显示器。处理器将单个字符输出到DDR[7:0]的同时,显示器电路自动清除DSR[15],然后开始内容的处理。显示器完成字符到屏幕的输出后,标志位置1,表示处理器可以处理下一个输出了。

DSR[15]为0,表示忙,为1表示空闲可以进行下一个字符的输出。

内存映射输出的实现:

store指令的execute节拍步骤

MAR装入将被写入的内存地址,MDR装入将要被写入的内容,最后将MDR内容写入MAR内存地址指向的内存单元。

同输入方式原理一样,输出也是把内存地址换为寄存器地址,内存单元换成寄存器。

 

中断驱动:

中断驱动I/O的本质特征是:I/O设备(可能与当前运行的程序有关,也可能完全无关)能够实现以下功能

1.强行中止当前程序的运行; 2使处理器执行I/O设备的请求; 3请求执行完毕后还能让被中断的程序恢复执行。(即只是在指令流中间插入了IO的请求,IO请求执行完成后,之前的指令依然正常的执行)

中断驱动的好处

如果采用轮询方式,处理器将花费大量时间做ready标志位的检测。而使用中断驱动的方式,在没有中断发生时,处理器可以执行其他的程序,当中断发生,执行相应的I/O请求,请求执行完毕后,又可以继续执行之前的程序。

 

中断驱动I/O

包括两个部分,中断使能(enabling)机制,即I/O设备如何通知处理器;传输机制,即I/O数据如何在处理器和设备之间传送。

两部分可以描述为 产生中断信号,中止当前执行程序;处理该中断请求。

 

设备是否必需以及能否“中断”处理器,必须具备以下条件:

I/O设备自身确实需要服务,设备有请求服务的权限,设备中断请求的优先级大于当前正在执行的程序的优先级。

 

来自设备的中断信号:

第一项通过ready标志位判定

第二项通过 中断使能标志位,在状态寄存器中包含一个“中断允许标志”(IE),KBSR和DSR的第14位。

中断请求信号是ready位和IE位的与操作(AND),即如果IE位为0,无论如何也无法产生中断信号。

第三项涉及中断优先级。

必须在中断请求比当前正在执行的程序更为紧迫的情况下才能产生中断。

处理器执行的每一条指令都有一定的紧迫级别,称为优先级。只有在中断请求的优先级比当前运行的程序优先级更高的情况下才能中断。(不同的设备寄存器产生的中断信号的优先级可能不同)

 

中断检测:

中断检测在指令执行过程的最后一步中检测(即在Store result中),正常情况是store result之后回到fetch,执行下一条指令,而加入中断检测后,在store result同时还将进行中断信号INT测试,如果INT未设置,一切照旧,如果设置了INT,则控制单元在回到fetch节拍之前,完成两项工作1保存足够的状态信息,以备能正确恢复到中断时的状态。2将请求服务的程序入口地址装入PC寄存器(即执行中断请求)

 

 

你可能感兴趣的:(计算机原理)