为了缓和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利用一台磁盘阵列控制器,来统一管理和控制一组磁盘驱动器,组成一个高度可靠的,快速的大容量的磁盘系统。
并行交叉存取