用户层I/O软件
小部分I/O系统软件放在了用户应用层上。 库函数(与应用程序链接) 假脱机技术(虚拟设备)
1、系统调用与库函数
不允许运行在用户态的应用进程,去直接调用运行在核心态(系统态)的OS过程。
应用进程在运行时,又必须取得OS所提供的服务。
于是: OS在用户层中引入了系统调用,应用程序可以通过它,间接调用OS中的I/O过程,对I/O设备进行操作。
2、设备分配中的虚拟技术 —— SPOOLing技术
多道程序技术,专门利用程序模拟脱机I/O的外围机,完成设备I/O操作。
组成:
使用举例:
当用户进程请求打印输出时,SPOOLing系统同意为它打印输出,但并不真正立即把打印机分配给用户进程,而只为它做两件事:
1.由输出进程在输出井中为之请求一个空闲磁盘块区,并将要打印的数据送入其中.
2.输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂在请求打印队列上.
打印输出过程:
1.如果打印机空闲,输出进程将从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据,从输出井传送到输出缓冲区,再由打印机进行打印.
2.打印完毕后,输出进程再查看请求打印队列中是否还有等待打印的请求表,如此下去,直至请求打印队列为空,输出进程才将自己阻塞起来
3.仅当下次再由打印请求时,输出进程才被唤醒.
Spooling的特点:
1、提高了I/O的速度。利用输入输出井模拟成脱机输入输出,缓和了CPU和I/O设备速度不匹配的矛盾。
2、将独占设备改造为共享设备。并没有为进程分配设备,而是为进程分配一存储区和建立一张I/O请求表。
3、最终,实现了虚拟设备功能。多个进程可“同时”使用一台独占设备。
缓冲区管理
I/O控制方式减少CPU对I/O的干预提高利用率;
缓冲则通过缓和CPU和I/O设备速度不匹配矛盾,增加CPU和I/O设备的并行性,提高利用率。
现代OS中,几乎所有的I/O设备与处理机交换数据时,都用了缓冲区。
1、单缓冲
每当用户进程发出一I/O请求时,OS在主存中为之分配一个缓冲区。 CPU和外设轮流使用,一方处理完后等待对方处理。
单位:字符设备输入时,缓冲区用于暂存用户输入/输出的一行数据;块设备输入则是成块数据。
2、双缓冲
进一步加快输入和输出速度,提高设备利用率制,也称缓冲对换(Buffer Swapping)
输入:数据送入第一缓冲区,装满后转向第二缓冲区。
读出:OS从第一缓冲区中移出数据,送入用户进程,再由CPU对数据进行计算。
优点:两个缓冲区,CPU和外设不再针对一块交替 可能实现连续处理无需等待对方。前提是CPU和外设对一块数据的处理速度相近。
3、多缓冲
磁盘存储器的性能和调度
磁盘调度方法:
1、FCFS
先来先服务。磁盘I/O执行顺序按磁盘请求的先后顺序。
2、最短寻道时间优先SSTF
选择从当前磁头位置出发移动最少的磁盘I/O请求 使每次磁头移动时间最少。 不一定是最短平均柱面定位时间,但比FIFO算法有更好的性能。 对中间的磁道有利,但可能会有进程处于饥饿状态(I/O请求总不被执行)。
3、SCAN扫描
虑距离的同时,更优先考虑方向。
规定磁头移动方向:自里向外,再自外向里移动。 后续的I/O磁道请求,哪个在规定方向上距离最近,就先执行哪个。
如当前为100,后续要求55,86,95,180,165,105
先由内向外:选最近的105执行,再判断剩余的,选165,180。
再由外向内:95,86,55
4、CSCAN 循环扫描
为了解决scan的问题:容易错过与当前磁道距离近,但方向不一致的磁道。
修改:将SCAN规定的移动方向改为“单向移动”由里向外后,再由里向外。
如当前为100,后续要求55,86,95,180,165,105
先由内向外:选最近的105执行,再判断剩余的,选165,180。
再由内向外:55,86,95
5、N-Step-SCAN
例题:
假设一个活动头磁盘有200道,编号从0-199。
当前磁头正在155道上服务,并且在此之前完成的是173道的访盘请求。
现有如下访盘请求序列(磁盘号):75,168,81,138,87,143,187,129,198,44。试给出采用下列算法后磁头移动的顺序和移动总量(总磁道数)。
1.最短寻道时间优先(SSTF)磁盘调度算法。
2.扫描法(SCAN)磁盘调度算法(假设沿磁头移动方向不再有访问请求时, 磁头就沿相反方向移动。 44到0磁道的移动忽略不计)
答:
1、若采用SSTF 那么磁头的移动顺序为155 143 138 129 168 187 198 87 81 75 44
三段(155~129)、(168~198)、(87~44)
移动的总磁道数为155-129+198-168-129+198-44=249
2、若采用SCAN 那么磁头的移动顺序为 155 143 138 129 87 81 75 44 168 187 198
两段(155~44)、(44~198)
移动的总磁道数为155-44+198-44=265