I/O设备访问内存方式

1、  程序中断方式

1)中断请求触发器和中断屏蔽触发器

每台外部设备都必须配置一个中断请求触发器 INTR,当其为“1”时,表示该设备向CPU提出中断请求。但是设备欲提出中断请求时,其设备本身必须准备就绪,即接口内的完成触发器 D必须为“1”状态。凡能向CPU提出中断请求的各种因素统称为中断源。当多个中断源向CPU提出中断请求时,CPU必须坚持一个原则,即在任何时刻只能接受一个中断源的请求。即CPU必须对各中断源的请求进行排队,且只能接受级别最高的中断源的请求,不允许级别低的中断源中断正在运行的中断服务程序。这样就需要在I/O接口中设置一个中断屏蔽触发器MASK,当其为1时,表示被屏蔽,即封锁中断源的请求。所以中断请求触发器和中断屏蔽触发器在I/O接口中是成对出现的。CPU总是在统一的时间,即执行每条指令的最后时刻,查询所有的设备是否有中断请求

2)中断服务程序的流程

一般中断服务程序的流程分4大部分:保护现场中断服务(处理)、恢复现场中断返回

-- 保护现场有两个含义,其一是保存程序的断点,其二是保存通用寄存器状态寄存器的内容。前者由中断隐指令完成,后者由中断服务程序完成。具体而言,可在中断服务程序的起始部分安排若干条存数指令,将寄存器的内容存至存储器中保存,或用进栈指令(PUSH)将各寄存器的内容推入堆栈保存,即将程序中断时的“现场”保存起来。

-- 中断服务/设备服务(中断处理):这是中断服务程序的主体部分,不同的中断请求源其中断服务操作内容是不同的。

-- 恢复现场。这是中断服务程序的结尾部分,要求在退出服务程序前,将原程序中断时的“现场”恢复到原来的寄存器中。通常可用取数指令或出栈指令(POP),将保存在存储器(堆栈)中的信息送回到原来的寄存器中。

-- 中断返回。中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到原程序的断点处,以便继续执行原程序。计算机在处理中断的过程中,有可能出现新的中断请求,此时如果CPU暂停现行的中断服务程序,转去处理新的中断请求,这种现象叫做中断嵌套,或叫做多重中断。倘若CPU在执行中断服务程序时,对新的中断请求不予理睬,这种中断叫做单重中断。

------ 由于CPU一旦响应了某中断源的中断请求后,便由硬件线路自动关中断,即中断允许触发器EINT被置“0”,以确保该中断服务程序的顺利执行。因此如果不用“开中断”指令将EINT置“1”,则意味着CPU不能再响应其他任何一个中断源的中断请求。对于单重中断,开中断指令设置在最后“中断返回”之前,意味着在整个中断服务处理过程中,不能再响应其他中断源的请求。对于多重中断,开中断指令提前至“保护现场”之后,意味着在保护现场后,若有级别更高的中断源提出请求,CPU也可以响应,即再次中断现行的服务程序,转至新的中断服务程序。

2、DMA方式

由于主存和DMA接口之间有一条数据通路,因此主存和设备交换信息时,不通过CPU,也不需要CPU暂停现行程序为设备服务,省去了保护现场和恢复现场,因此工作速度比程序中断方式高。这一特点特别适合于高速I/O或辅存与主存之间的信息交换。因为高速I/O设备若每次申请与主存交换信息时都要等待CPU作出中断响应后再交换,很可能因此使数据丢失。此外,若出现高速I/O(通过DMA接口)和CPU同时访问主存,CPU必须将总线(如地址线、数据线)占有权让给DMA接口使用,即DMA采用周期窃取的方式占用一个存取周期。在DMA方式中,由于DMA接口与CPU共享主存,这就有可能会出现两者争用主存的冲突,为了有效地分时使用主存,DMA通常与主存交换数据时可采用如下三种方法。

---- 停止CPU访问主存:当外设要求传送一批数据时,由DMA接口向CPU发一个停止信号,要求CPU放弃地址线、数据线和有关控制线的使用权。DMA接口获得总线控制权后,开始进行数据传送,在数据传送结束后,DMA接口通知CPU可以使用主存,并把总线控制权交回给CPU   这种方式的优点是:控制简单,适用于数据传输率很高的I/O设备实现成组数据的传送。缺点是DMA接口在访问主存时,CPU基本上处于不工作状态或保持原状态。而且即使I/O设备高速运行,但其两个数据之间的准备间隔时间也总大于一个存取周期,因此,CPU对主存的利用率并没有得到充分的发挥。如软盘读一个8位二进制数大约需要32us,而半导体存储器的存取周期大大小于1us。为此在DMA接口中,一般设有一个小容量存储器(半导体芯片制作的),使I/O设备首先与小容量存储器交换数据,然后由小容量存储器与主存交换数据,这便可减少DMA传送数据时占用总线的时间,即可减少CPU的暂停工作时间。

---- 周期挪用(周期窃取):在这种方法中,每当I/O设备发出DMA请求时,I/O设备便挪用或窃取总线占用权一个或几个主存周期,而DMA不请求时,CPU仍继续访问主存。I/O设备要求DMA传送会遇到三种情况:第一种是此时CPU不需访问主存(如CPU正在执行乘法指令)故I/O设备访存与CPU不发生冲突。第二种情况是I/O设备要求DMA传送时,CPU正在访存,此时必须待存取周期结束时刻,CPU才能将总线占有权让出。第三种情况是I/O设备要求访存时,CPU要求访存,这就出现了访存冲突。此刻,I/O访存优先于CPU访存,因为I/O不立即访存就可能丢失数据,这时I/O要窃取一、二个存取周期,意味着CPU在执行访存指令过程中插入了DMA请求,并挪用了一、二个存取周期,使CPU延缓了一、二个存取周期再访存。 CPU暂停访存的方式相比,它既实现了I/O传送,又较好地发挥了主存与CPU的效率,是一种广泛采用的方法。应该指出,I/O设备每挪用一个主存周期都要申请总线控制权建立总线控制权归还总线控制权。因此,尽管传送一个字对主存而言只占用一个主存周期,但对DMA接口而言,实质上要占25个主存周期(由逻辑线路的延迟特性而定)。因此周期挪用的方法比较适合于I/O设备的读写周期大于主存周期的情况。

---- DMACPU交替访问:这种方法适合于CPU的工作周期比主存存取周期长的情况。例如CPU的工作周期为1.2us,主存的存取周期小于0.6us,那么可将一个CPU周期分为C1C2两个分周期,其中C1专供DMA访存,C2专供CPU访存。这种方式不需要总线使用权的申请建立和归还过程,总线使用权是通过C1C2分别控制的。CPUDMA接口各自有独立访存地址寄存器、数据寄存器和读/写信号。实际上总线变成了在C1C2控制下的多路转换器,其总线控制权的转移几乎不需要什么时间,具有很高的DMA传送效率。在这种工作方式下,CPU既不停止主程序的运行也不进入等待状态,在CPU不知不觉中完成了DMA的数据传送,故又有透明的DMA方式之称,当然其相应的硬件逻辑变得更为复杂。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值