一.程序查询方式
CPU和I/O设备串行工作,CPU连接I/O设备和内存,CPU需要等待,效率很低
(由CPU通过程序不断查询IO设备是否已经做好准备,从而控制IO设备与主机交换信息)
二.程序中断方式:
中断:CPU在执行程序的过程中,如果发生意外或特殊事件,cpu要中断当前程序的处理,转而去处理特殊事件,中断结束后要返回之前的断点,继续执行之前的程序。
CPU一定程度解放,在IO设备自身准备的时候,CPU可以先进行自己的工作(不需要主动查询外设的状态),当IO与主机进行信息交换的时候,CPU暂停自身程序,参与信息交换
程序中断的步骤:
•收到中断请求信号
•执行完第K条指令(执行周期结束)后保存(要执行现场保存)
•跳转到中断服务程序
•执行中断服务程序,执行完中断程序后再去执行K+1条指令
单重中断:中断服务过程中不允许响应其他中断
多重中断:中断服务过程中可以响应更高优先级的中断,当遇到更高优先级中断时,此中断也被当作是一个普通的程序,转而去执行更高优先级的中断
补充:中断判优
当某一个时刻有多个中断源提出中断请求时,中断系统必须按照其优先顺序予以响应。
1.硬件故障中断属于最高级,其次是软件中断
2.非屏蔽中断优于可屏蔽中断
3.DMA请求优于I/O设备传送的中断请求
4.高速设备优于低速设备
5.输入设备优于输出设备
6.实时设备优于普通设备
可以通过硬件来实现:
硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中
设备1#,2#,3#,4#优先级按降序排列
INTR=1表示有请求。那么其他的中断不允许有请求,在同样的时间内,只有一个中断请求
可以通过软件实现:
利用程序查询的方式来控制中断源的优先级:
如果有A请求,就进入A请求的中断服务程序,如果没有就跳到B的,即将优先级从高到低进行一次遍历和查询
三.DMA(Direct Memory Access)方式:直接内存访问
使外部设备和主存之间直接建立联系,不经过CPU,外部设备直接从内存存取数据的数据交换模式
DMA的工作过程可以分为请求,响应,传输,结束:
请求
CPU对DMA控制器初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求。
响应
DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求
传输
DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。
结束
当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。
•外设通过DMA控制器向CPU发送DMA请求
•CPU响应DMA请求后,就会转变为DMA工作方式
•CPU将总线的控制权交给DMA控制器
•DMA控制器发送存储器地址并且决定传送数据块的长度,实行I/O设备与主存之间的传送
•操作完毕后,将总线控制权交还给CPU,CPU再执行现行程序
DMA与主存交换数据的三种方式:
1.停止CPU访问主存:
由图中可以看到,CPU对于主存的利用率没有充分发挥
2.周期挪用(或周期窃取)
DMA访问主存有三种可能
•CPU此时不访存:DMA可以访存,CPU继续执行不访存的指令
•CPU正在访存:DMA等待CPU访存
•CPU与DMA同时请求访存:此时CPU将总线控制权让给DMA
3.DMA与CPU交替访问:(效率最高)
不需要申请建立和归还总线的使用权
对比程序中断方式和DMA方式:
•中断方式是在数据缓冲寄存区满后,发中断请求,CPU进行中断处理。
• DMA方式则是以数据块为单位传输的,在所要求传送的数据块全部传送结束时要求CPU进行中断处理,这样大大减少CPU进行中断处理的次数,并且CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高。
•中断方式,可以进行异常处理,处理步骤1.保存被中断的现场2.执行中断处理函数3.恢复现场
DMA不能处理异常情况,所以两者是不能相互替代的
•中断方式是程序切换,每次操作需要保护和恢复现场,中断次数多,CPU需要花较多的时间处理中断,中断次数多也会导致数据丢失。但是DMA是必须利用中断的,DMA是通过硬件实现的,否则CPU无法得到数据已经传输结束的信号,当数据传输结束的时候,DMA控制器给CPU一个中断信号,CPU进行响应.这个就大大的节约了CPU的资源。
•中断方式的数据传送方向是由设备到CPU再到内存,或者相反。
DMA方式的数据传送则是将所传输的数据由设备直接送入内存,或是由内存直接送到设备。
•DMA的优先级比中断方式的优先级高