计算机操作系统之设备管理
IO控制方式
在整个IO控制方式的发展过程中,始终贯穿着这样一条宗旨:即尽量减少主机对IO控制的干预,把主机从繁杂的IO控制事务中解脱出来,以便更多地去完成数据处理任务。
程序IO方式
处理机对IO采用程序IO方式,即采用“忙――等待“方式,在处理机向控制器发出一条IO指令启动输入设备输入数据时,要同时把状态寄存器中的忙闲标志置为1.然后便不断的循环测试,直到标志为0.
当标志为1时,表示输入机未输完一个字符;
当标志为0时,表示输入机已经将输入数据送往控制器的数据寄存器中。
在这种方式中,由于CPU高速性和IO设备的低速性,致使CPU的绝大部分时间都处于忙等状态。造成了CPU极大的浪费。
如果当一个字符输入完后,由IO设备向CPU报告,这样就可以不让CPU忙等了,于是中断处理方式产生了
中断驱动IO控制方式
即当某进程要启动某个IO设备工作时,便由CPU向相应的设备控制器发出一条IO命令,然后立即返回继续执行原来的任务。设备控制器于是按照该命令的要求去控制指定IO设备。此时,CPU与IO设备并行操作。一旦数据进入数据寄存器,控制器便通过控制线向CPU发送一中断信息,由CPU检查输入过程中是否有错,若无错,便向控制器发送取走数据的信号,然后再通过控制器及数据线,将数据写入内存指定单元中。
直接存储器访问DMA IO控制方式
虽然中断驱动IO比程序IO方式更有效,但注意到,它仍是以字(节)为单位进行IO的,每当完成一个字(节)的IO时,控制器便要向CPU请求一次中断。采用中断驱动IO方式时的CPU,是以字(节)为单位进行干预的。如果将这种方式用于块设备的IO中,显然是极其低效的。为了进一步减少CPU对IO的干预而引入了直接存储器访问方式。
该方式的特点:
- 数据传输的基本单位是数据块
- 所传送的数据是从设备直接送入内存,或者相反。
- 仅在传送一个或多个数据块的开始或结束时,才需要CPU干预,整块数据的传送是在控制器的控制下。
可以看出:DMA方式较之中断驱动方式,又是成百倍的减少了CPU对IO的干预,进一步提高了CPU与IO设备的并行操作程度。
DMA控制器由三部分组成:
l 主机与DMA控制器的接口
l DMA控制器与块设备的接口
l IO控制逻辑
四类寄存器:
l 命令状态寄存器:用于接收从CPU发来的IO命令或有关控制信息,或设备的状态
l 内存地址寄存器MAR。在输入时,它存放把数据从设备传送起始目标地址;在输出时,它存放由内存到设备的内存源地址。
l 数据寄存器DR:用于暂存从设备到内存,或从内存到设备的数据。
l 数据计数器DC:存放本次CPU要读或写的字(节)数。
IO通道控制方式
虽然DMA可以一次读一个块,但是当我们要读取多个块时,还是要多次中断。
IO通道方式是DMA方式的发展,它可进一步减少CPU干预,即把对一个数据块的读写为单位的干预,减少为对一组数据块的读写及有关的控制和管理为单位。从而提高了整个系统的资源利用率。
当CPU要完成一组相关的读写操作及有关控制时,只要向IO通道发送一条IO指令,以给出其所要执行的通道程序的首址和要访问的IO设备,通道接到该指令后,通过执行通道程序便可完成CPU指定的IO任务。
IO通道是一种特殊的处理器,它具有执行IO指令的能力,并通过执行通道程序来控制IO操作。但IO通道以与一般的处理机不同,主要表现在:
指令类型单一,主要是IO指令。
通道没有自己的内存,所执行的通道程序是放在主机内存中的,也就是说IO通道与CPU共享内存
设备独立性
为了提高OS的可适应性和可扩展性,在现代OS中都采用了设备独立性,也就是设备无关性。其基本的含义是:应用程序独立于具体使用的物理设备。为了实现设备的独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际的执行时,还必须使用物理设备名称。因此系统还须具有将逻辑设备名称转换为物理设备名称的功能。这个东西就是逻辑设备表。
设备独立性的好处
l 设备分配时的灵活性:当应用程序以物理设备名称来请求使用某一个设备时,如果该设备已经分配给其他设备或正在检修,而此时尽管还有几台其它的设备下在空闲,该进程却仍阻塞。如果采用逻辑名来请求,就可以把其他一台设备分配给它。
l 易于实现IO重定向:是指用于IO操作的设备可以更换,而不必改变应用程序。如果一个程序的输出是屏幕,而现在要输出到文件,只需要把IO重定向的数据结构即逻辑设备表中的显示终端改为文件即可。
设备独立性软件
驱动程序是一个与硬件地址紧密相关的软件,为了实现设备独立性,还要在驱动程序上加上一层软件,称为设备独立性软件。具体操作有:
l 对独立设备的分配与回收
l 将逻辑设备名映射为物理设备名,进一步可以找到相应物理设备的驱动程序
l 对设备保护,禁止用户直接访问设备
l 缓冲管理
l 差错控制
l 向用户层软件提供统一接口,比如read,write
逻辑设备名到物理设备名映射的实现
采用逻辑设备表
Spooling技术
通过Spooling技术可以将一台物理IO设备虚拟为多台逻辑IO设备,同样允许多个用户共享一台物理IO设备。
为了缓和CPU的高速性与IO设备的低速间的矛盾而引入了脱机输入、脱机输出技术。该技术是利用专门的外围控制机,将低速IO设备上的数据传送到高速磁盘上;或者相反。事实上,当系统中引入了多道程序技术后,完全可以利用其中的一道程序,来模拟脱机输入时的外围控制机功能,把低速IO设备上的数据传送到高速磁盘上;再用另一道程序来模拟接机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。这样,便可在主机的直接控制下,实现脱机输入,输出功能。此时的外围操作与CPU对数据的处理同时进行,,我们把这处在联机情况下实现的同时外围操作称为SPOOLing或称为假脱机操作。
Spooling系统的组成
输入井和输出井
在磁盘上开辟的两大存储空间。
l 输入井是模拟脱机输入时的磁盘设备,用于暂存IO设备输入的数据;
l 输出井是模拟脱机输出时的磁盘,用于暂存用户程序的输出程序。
输入缓冲区和输出缓冲区
为了缓和CPU和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区:
l 输入缓冲区:暂存由输入设备送来的数据,以后再传送到输入井。
l 输出缓冲区:暂存从输出井善恶的数据,以后再传送给输出设备。
共享打印机
当用户进程请求打印时,Spooling系统同意为它打印输出,但并不是真正立即把打印机分配给该用户进程,而只为它做两件事:
1) 由输出进程在输出井中为之申请一个空闲磁盘区,并将要打印的数据送入其中
2) 输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到请求打印机队列上。如果还有进程要求打印输出,系统仍可接受该请求。
3) 如果打印机空闲,输出进程将从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据,从输出井会传送到内存缓存区,再由打印机进行打印。打印完后,输出进程再查看请求打印队列是否还有打印的请求表。
Spooling系统的特点
l 提高了IO速度
l 将独占设备改造为共享设备,在此系统中,实际上并没有为任何进程分配设备,而只是在输入井或输出井中为进程分配一个存储和建立一张IO请求表。这样,便把独占的设备改造为共享设备。
l 实现了虚拟设备功能,宏观上,虽然是多个进程在同时使用一台独占设备,而对于每一个进程而言,他们都会认为自己是独占了一个设备。当然,该设备只是逻辑上的设备。Spooling系统实现了将独占设备变换为若干台对应的逻辑设备。
磁盘调度
磁盘是可供多个进程共享的设备,当有多个进程都都要求访问磁盘时,应该采用一种最佳的调度算法,以使各个进程的平均访问时间最小。
先来先服务FCFS
最短寻道时间优先
扫描算法
在用最短寻道时间时,会造成“饥饿”现象,因为只要不断有新进程的请求送达,且其所要访问的磁道与磁头当前所在磁道的距离较近,这种新进程的IO请求必须优先满足。而扫描算法可以避免。
这个方法又称为电梯调度算法。
按一个方向进行运动,当运动到了另一端后,接着返回。
循环扫描算法
解决的问题:当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该进程必须等待,待磁头继续从里向外,然后再从外向里扫描完所有要访问的磁道后,才处理该进程的请求,导致该进程的请求被大大推迟。为了减少这种延迟,循环扫描算法规定磁头单向移动。
廉价磁盘冗余阵列RAID
利用一台磁盘阵列控制器,来统一管理和控制一组磁盘驱动器,组成一个高度可靠的,快速的大容量的磁盘系统。
并行交叉存取
系统将每一盘块中的数据分为若干个子盘块数据,再把每一个子盘块的数据分别存储到各个不同的磁盘中的相同位置上。在以后,当要将一个盘块的数据传送到内存时,采取并行传输方式,将各个盘块中的子盘块数据同时向内存中传输,从而使传输的时间大大减少。
RAID优点:
l 可靠性高
l 磁盘IO速度高
l 性能价格比高