前言:
博主最近在温习操作系统原理相关的知识点,分享给那些志同道合的朋友,某些地方如果存在争议的,欢迎加Q讨论。计算机的知识实在是太多太多了,像个无底洞,不专门做学术研究,博主觉得对它的了解还是适可而止。
简介:
我们都知道计算机分为五大基本部件:运算器、控制器、存储器、输入设备和输出设备。其中,IO设备主要是由设备控制器和设备本身共同组成,其中设备控制器是集成在电路板上的一块芯片或者一组芯片,主要用于接收,识别从cpu发来的命令,并控制IO设备工作。每个控制器都有少量的用于通信的寄存器,每个寄存器表现为一个IO端口(1-65535),这些所有的寄存器组合成为设备的IO地址空间。在有些计算机当中,设备的寄存器被直接映射进操作系统的地址空间,因此操作系统可以直接通过IO端口与硬件交互,由后端对应的设备驱动将其转换为对应的特定操作。在另一些计算机中,如果没有映射方式,通常虚拟化为cpu的io指令,然后供驱动程序对硬件进行读写操作。今天我们来讨论一下cpu是如何管理外围设备的输入输出的。
输入输出控制方式
一般而言,CPU管理外围设备的输入输出控制方式有5种:程序查询方式、程序中断方式、DMA方式、通道方式、外围处理机方式,前两种方式由软件实现,后三种方式由硬件实现。
程序查询方式(忙等)
程序查询方式是早期计算机中使用的一种方式,CPU与外围设备的数据交换完全依赖于计算机的程序控制。
在进行信息交换之前,CPU要设置传输参数、传输长度等,然后启动外设工作,与此同时,外设则进行数据传输的准备工作;相对于CPU来说,外设的速度是比较低的,因此外设准备数据的时间往往是一个漫长的过程,而在这段时间里,CPU除了循环检测外设是否已准备好之外,不能处理其他业务,只能一直等待;直到外设完成数据准备工作,CPU才能开始进行信息交换。
这种方式的优点是CPU的操作和外围设备的操作能够完全同步,硬件结构也比较简单。但是,外围设备的动作通常很慢,程序进行循环查询白白浪费了的CPU时间,数据传输效率低下。
程序中断方式
即当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器;或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU即返回继续执行原来被中断的主程序。
中断处理示意图如图7-2所示,由图可见,CPU只是在外围设备A、B、C的数据准备就绪后,才去执行对应的中断服务程序,进行数据交换;而当低速的外围设备准备自己的数据时,CPU则照常执行自己的主程序。从这个意义上说,CPU和外设的一些操作是异步并行进行的,因而与串行进行的程序查询方式相比,计算机系统的效率的确是大大提高了。
CPU只有在当前一条指令执行完毕后,即转入公操作时,才会受理外围设备的中断请求。
为了在中断服务程序执行完毕以后,能够正确地返回到原来主程序被中断的地方(断点)继续执行,必须把程序计数器PC的内容,以及当前指令执行结束后CPU的状态(包括寄存器的内容和一些状态标志位)都保存到堆栈中去,这些操作称为保存现场;在中断服务程序执行完毕后,需要执行恢复现场操作,从堆栈中恢复PC内容和CPU状态,以便从断点处继续执行主程序。
中断处理过程是由硬件和软件结合来完成的,中断周期由硬件实现,而中断服务程序则由机器指令序列实现。
附:中断处理分为两个半部:中断上半部(tophalf),中断下半部(bottom half)。中断是一个十分霸道的东西,处理器一旦接收到中断,就会打断正在执行的代码,调用中断处理函数。但是正在执行的代码比产生中断的代码更重要怎么办呢,于是就有了上下半部之说,上半部尽可能快的响应中断,下半部处理比较复杂的过程。
如果一个任务对时间十分敏感或者如果一个任务和硬件有关,或者如果一个任务要保证不被其他中断打断,将其放在上半部;其他所有任务,考虑放在下半部
DMA方式
DMA方式是一种完全由硬件执行I/O交换的工作方式。在这种方式中,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在主存和I/O设备之间进行。DMA控制器向主存发出地址和控制信号,并且以中断方式向CPU报告传送操作的结束。DMA方式控制简单,适用于高数据传输率设备进行成组传送。
DMA方式的主要优点是速度快,由于CPU不参加传送操作,因此省去了CPU取指令、取数、送数等操作,也没有保存现场、恢复现场之类的工作。而且,主存地址的修改、传送字个数的计数等也不由软件实现,而是用硬件线路直接实现的。所以,DMA方式能够满足高速I/O设备的要求,也有利于CPU效率的发挥,一般用于高速传送成组数据。
DMA方式的工作过程如下:首先,当要求通过DMA方式传输数据时,DMA控制器向CPU发出请求,CPU释放总线控制权,交由DMA控制器管理;然后,DMA控制器向外设返回一个应答信号,外设与主存开始进行数据交换;最后,当数据传输完毕后,DMA控制器把总线控制权交还给CPU。在这种方式下,DMA控制器与CPU分时使用总线,其时间图如图7-7所示。
在DMA方式中,批量数据传送前的准备工作,以及传送结束后的处理工作,仍由CPU通过执行管理程序来承担,DMA控制器只负责具体的数据传送工作。博主前面转载了几篇关于DMA相关知识点的,有兴趣的同学可以翻翻博客。
通道方式
DMA方式的出现减轻了CPU对I/O操作的控制,使得CPU的效率显著提高,而通道出现则进一步提高了CPU效率。
通道是一个具有特殊功能的处理器,又称为输入输出处理器(IOP),是计算机系统中代替CPU管理控制外设的独立部件。它有自己的指令和程序,专门负责数据输入输出的传输控制,而CPU在将“传输控制”功能下放给通道后只负责“数据处理”功能。这样,通道与CPU分时使用主存,实现了CPU内部运算与I/O设备的并行工作。它分担了CPU的一部分功能,可以实现对外围设备的统一管理,完成外围设备与主存之间的数据传送。
通道的基本功能是执行通道指令,组织外围设备和主存进行数据传输,按I/O指令要求启动外围设备,向CPU报告中断等。
CPU通过执行I/O指令以及处理来自通道的中断,实现对通道的管理。来自通道的中断有两种,一种是数据传送结束中断,另一种是故障中断。
通道使用通道指令控制设备控制器进行数据传送操作,并以通道状态字接收设备控制器反映的外围设备的状态。因此,设备控制器是通道对I/O设备实现传输控制的执行机构。
通道方式大大提高了CPU的工作效率,然而这种效率的提高是以增加更多的硬件为代价的。
外围处理机方式
外围处理机(Peripheral Processor Unit,PPU)方式是通道方式的进一步发展。
PPU基本上独立于主机工作,它的结构更接近于一般的处理机,甚至就是微小型计算机。在一些系统中,设置了多台PPU,分别承担I/O控制、通信、维护诊断等任务,从某种意义上说,这种系统已经变成了分布式多机系统。
综上所述,计算机外围设备的输入/输出方式如图7-1表示。其中,程序查询方式和程序中断方式适用于数据传输率比较低的外围设备,而DMA方式、通道方式和外围处理机方式则适用于数据传输率比较高的外围设备。
结尾:以后我也会慢慢更新虚拟化以及大数据方面的东西,不过这些也是先从原理出发,再到实践,以及经验分享
转载于:https://blog.51cto.com/xiaojielinux/1874631