操作系统:I/O控制方式 详细汇总+形象举例

目录:

  • 程序直接控制方式
  • 中断驱动方式
  • DMA方式
  • 通道控制方式
  • 举个栗子

一、程序直接控制方式

思想:计算机从外部设备读取数据到存储器,每次读一个字的数据。对读入的每个字,CPU 需要对外设状态进行循环检查(轮询),直到确定该字已经在I/0 控制器的数据寄存器中。在程序直接控制方式中,由于CPU 的高速性和I/0设备的低速性,致使CPU 的绝大部分时间都处于等待I/0 设备完成数据I/0 的循环测试中,造成了CPU 资源的极大浪费。在该方式中, CPU 之所以要不断地测试I/0 设备的状态,就是因为在CPU 中未采用中断机构,使I/0 设备无法向CPU报告它已完成了一个字符的输入操作。
在这里插入图片描述
缺点:程序直接控制方式虽然简单且易于实现,但其缺点也显而易见,由于CPU 和I/0 设备只能串行工作,导致CPU 的利用率相当低

二、中断驱动方式

思想:允许I/0 设备主动打断CPU 的运行并请求服务,从而“解放"CPU, 使得其向I/0 控制器发送读命令后可以继续做其他有用的工作。如下图所示,我们从I/0 控制器和CPU 两个角度分别来看中断驱动方式的工作过程:
【1】从I/0 控制器的角度来看:I/0 控制器从CPU 接收一个读命令,然后从外围设备读数据。一且数据读入该I/0控制器的数据寄存器,便通过控制线给CPU 发出一个中断信号,表示数据已准备好,然后等待CPU 请求该数据。I/0 控制器收到CPU 发出的取数据请求后,将数据放到数据总线上,传到CPU 的寄存器中。至此,本次I/0 操作完成, I/0 控制器又可开始下一次I/0操作。
【2】从CPU 的角度来看: CPU 发出读命令,然后保存当前运行程序的上下文(现场,包括程序计数器及处理机寄存器),转去执行其他程序。在每个指令周期的末尾, CPU 检查中断。当有来自I/0 控制器的中断时, CPU 保存当前正在运行程序的上下文,转去执行中断处理程序以处理该中断。这时, CPU 从I/0 控制器读一个字的数据传送到寄存器,并存入主存。接着, CPU 恢复发出I/0 命令的程序(或其他程序)的上下文,然后继续运行。
在这里插入图片描述
缺点:中断驱动方式比程序直接控制方式有效,但由于数据中的每个字在存储器与I/0 控制器之间的传输都必须经过CPU, 这就导致了中断驱动方式仍然会消耗较多的CPU 时间。
补充:什么叫经过CPU呢?——在DMA(Direct memory access 直接存储器访问)之前,输入数据流大概是这样的:外围设备->I/O控制器的数据寄存器->CPU寄存器->存储器,这就叫经过CPU,或者说传输数据的过程需要CPU的干预,于是引出了所谓的DMA(直接在I/O设备和内存之间建立数据通路)。

三、DMA方式

DMA方式的改进:
1.基本单位是数据块(前面是一个字)
2.所传送的数据,是从设备直接送入内存的,或者相反
3.仅在传送一个或多个数据块的开始和结束时,才需CPU 干预,整块数据的传送是在DMA控制器的控制下完成的

DMA控制器的组成:
1.命令/状态寄存器(CR) 。用于接收从CPU 发来的I/0 命令或有关控制信息,或设备的状态。
2.内存地址寄存器(MAR) 。在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。
3.数据寄存器(DR) 。用于暂存从设备到内存或从内存到设备的数据。
4.数据计数器(DC) 。存放本次要传送的字(节)数。
在这里插入图片描述
DMA方式的思想:CPU 接收到I/O 设备的DMA 请求时,它给I/0 控制器发出一条命令,启动DMA 控制器,然后继续其他工作。之后CPU 就把控制操作委托给DMA 控制器,由该控制器负责处理。DMA 控制器直接与存储器交互,传送整个数据块,每次传送一个字,这个过程不需要CPU 参与。传送完成后,DMA 控制器发送一个中断信号给处理器。因此只有在传送开始和结束时才需要CPU的参与(预处理【设置CR、MAR、DC等】和后处理【中断处理、唤醒因该I/O阻塞的进程等】)。
在这里插入图片描述
DMA方式与中断驱动方式的区别:
1.中断驱动方式在每个数据需要传输时中断 CPU, 而DMA 控制方式则是在所要求传送的一批数据全部传送结束时才中断CPU。
2.中断驱动方式数据传送是在中断处理时由CPU 控制完成的,而DMA 控制方式则是在DMA 控制器的控制下完成的

DMA方式已经很优秀啦!可是,还不满足,如何进一步提高资源利用率呢?
当然是请更牛逼的秘书(通道),让老板(CPU)尽可能的从累活中解放出来。

四、通道控制方式

思想:I/0 通道是指专门负责输入/输出的处理机。I/O通道方式是DMA方式的发展,它可以进一步减少CPU的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关控制和管理为单位的干预。同时,又可以实现CPU、通道和I/0 设备三者的并行操作,从而更有效地提高整个系统的资源利用率。

例如:当CPU要完成一组相关的读(或写)操作及有关控制时,只需向I/O 通道发送一条 I/O 指令,以给出其所要执行的通道程序的首地址和要访问的I/0设备[预处理],通道接到该指令后,执行通道程序便可完成CPU 指定的I/O任务,数据传送结束时向CPU发中断请求。(都有预处理和后处理,毕竟CPU才是老板!)

I/O通道与一般处理机的区别:通道指令的类型单一,没有自己的内存,通道所执行的通道程序是放在主机的内存中的,也就是说通道与CPU共享内存。

I/O通道与DMA方式的区别:
1.DMA 方式需要CPU 来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的。
2.每个DMA 控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换(包工头;也是上面提到的三者能并行的原因)。

五、举个栗子

想象一位客户要去裁缝店做一批衣服的情形:

  • 采用程序直接控制时,裁缝没有客户的联系方式,客户必须每隔一段时间去裁缝店看看裁缝把衣服做好了没有,这就浪费了客户不少的时间。
  • 采用中断驱动方式时,裁缝有客户的联系方式,每当他完成一件衣服后,给客户打一个电话,让客户去拿,与程序直接控制能省去客户不少麻烦,但每完成一件衣服就让客户去拿一次,仍然比较浪费客户的时间。
  • 采用DMA方式时,客户花钱雇一位单线秘书,并向秘书交代好把衣服放在哪里(存放仓库),裁缝要联系就直接联系秘书,秘书负责把衣服取回来并放在合适的位置,每处理完100 件衣服,秘书就要给客户报告一次(大大节省了客户的时间)。
  • 采用通道方式时,秘书拥有更高的自主权,与DMA方式相比,他可以决定把衣服存放在哪里,而不需要客户操心。而且,何时向客户报告,是处理完100 件衣服就报告,还是处理完10000件衣服才报告,秘书是可以决定的。客户有可能在多个裁缝那里订了货,一位DMA 类的秘书只能负责与一位裁缝沟通,但通道类秘书却可以与多名裁缝进行沟通。

tips~~
其实后一种的方式都是对前一种的方式的一种改进(OS里面都是为了提高资源利用率和并发性等才改进的,其他也差不多),不要死记硬背,这些都不是孤立的,回答的时候体现出改进,一步一步的讲出来,条理和逻辑会比较清楚哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章