引入缓冲的原因

  • 缓和CPU与I/O设备速度不匹配的矛盾,提高CPU和外部设备的并行工作能力
  • 减少对CPU的中断频率, 放宽对CPU中断响应时间的限制
  • 解决数据粒度不匹配的问题
  • 提高CPU和I/O设备之间的并行性

设备驱动程序概述

是I/O系统的高层与设备控制器之间的通信程序。由设备服务子程序和中断处理程序组成。

设备驱动程序的功能是什么?

接收来自与设备无关的上层软件抽象请求(如write或read命令),将其转换为具体要求后,发送给设备控制器启动设备控制器执行。同时也将由设备控制器发来的信号传送给上层软件

  1. 接收由与设备无关的软件发来的命令和参数,并将命令中的抽象要求转换为与设备相关的底层操作序列
  2. 检查用户I/O请求的合法性,了解I/O设备的工作状态,传递与I/O设备操作有关的参数,设置设备的工作方式。
  3. 发出I/O命令,如果设备空闲,便立即启动I/O设备,完成指定的I/O操作;如果设备忙碌,则将请求者的请求块挂在设备队列上等待。
  4. 及时响应由设备控制器发来的中断请求,并根据其中断类型,调用相应中断处理程序进行处理。

设备独立性(与设备无关性)定义。

应用程序中所用的设备,不局限于使用某个具体的物理设备。
为每个设备所配置的设备驱动程序是与硬件紧密相关的软件。
为了实现设备独立性,必须再在设备驱动程序之上设置一层软件,称为与设备无关的I/O软件,或设备独立性软件。

为实现设备独立性,系统设置的数据结构(逻辑设备表)

系统设置一张逻辑设备表(LUT),将应用程序中所使用的逻辑设备名映射为物理设备名。

设备分配涉及哪些数据结构?

设备控制表DCT

设备控制器表

通道表

系统设备表

设备分配过程示意图

SPOOLING

多道程序系统中共享独占设备的技术。

通过假脱机技术,则可将一台物理I/O设备虚拟为多台逻辑I/O设备,这样也就允许多个用户共享一台物理I/O设备。当系统引入了多道程序技术后,完全可以利用其中的一道程序,来模拟脱机输入时的外围控制机功能,把低速1/0设备上的数据传送到高速磁盘上。再用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。在主机的直接控制下,实现以前的脱机输入、输出功能。此时的外围操作与CPU对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作的技术称为SPOOLing(Simultaneous Peripheral Operation On-Line)技术,或称为假脱机技术。

组成

输入井和输出井
这是在磁盘上开辟出来的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据。输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。输入腧出井中的数据一般以文件的形式组织管理,我们把这些文件称为井文件。一个文件仅存放某一个进程的输入(或者输出)数据,所有进程的数据输入(或输出)文件链接成为一个输入(或输出)队列。

输入缓冲区和输出缓冲区
这是在内存中开辟的两个缓冲区,用于缓和CPU和磁盘之间速度不匹配的矛盾。输入缓冲区用于暂存由输入设备传送的数据,之后再传送到输入井。输出缓冲区用于暂存从输出井传送的数据,之后再传送到输出设备。

输入进程和输出进程
输入进程也称为预输入进程,用于模拟脱机输入时的外围控制机,将用户要求的数据从输入设备传送到输入缓冲区,再存放到输入井。当CPU需要输入设备时,直接从输入井读入内存。输出进程也称为缓输出进程,用于模拟脱机输出时的外围控制机,把用户要求输入的数据从内存传送并存放到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区输出至输出设备上。

井管理程序
用于控制作业与磁盘井之间信息交换。当作业执行过程中向某台设备发出启动输入或输出操作请求时,由操作系统调用井管理程序,由其控制从输入井读取信息或将信息输出至输出井。

原理

以磁盘作转储,排队处理I/O(使用I/O设备)

特点

  • 提高了I/O的速度。缓解了外部设备和CPU速度不匹配的矛盾。
  • 将独占设备改造为共享设备。
  • 实现了虚拟设备功能。

假脱机打印系统原理

磁盘缓冲区

它是在磁盘上开辟的一个存储空间,用于暂存用户程序的输出数据,在该缓冲区中可以设置几个盘块队列,如空盘块队列、满盘块队列等。

打印缓冲区

用于缓和CPU和磁盘之间速度不匹配的矛盾,设置在内存中,暂存从磁盘缓冲区送来的数据,以后再传送给打印设备进行打印。

假脱机管理进程和假脱机打印进程

由假脱机管理进程为每个要求打印的用户数据建立一个假脱机文件,并把它放入假脱机文件队列中,由假脱机打印进程依次对队列中的文件进行打印。

当用户进程请求打印输出时, SPOOLing系统接受打印输出请求, 但并不真正立即把打印机分配给该用户进程,

  1. 由输出进程在输出井中为之申请一个空闲磁盘区, 并将要打印的数据送入其中;
  2. 输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中, 将该表挂到请求打印队列上。
  3. 如果打印机空闲,输出进程将从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据,从输出井传送到内存缓冲区,再由打印机打印。

磁盘访问时间由那几部分组成?磁盘访问时间的计算公式

一次磁盘读写由三个动作组成:

  • 寻道:磁头移动定位到指定磁道
  • 旋转延迟:等待指定扇区旋转到磁头下
  • 数据传输:数据在磁盘与内存之间的实际传输(读/写)

磁盘访问时间:

总访问时间Ta表示为

寻道时间
启动磁臂的时间s与磁头移动n条磁道所花费的时间之和。
公式:Ts=m×n+s,m是一常数,与磁盘驱动器的速度有关。 s为启动磁臂的时间。

旋转延迟时间
指定扇区移动到磁头下面所经历的时间。
公式 r为磁盘每秒钟的转数

数据传输时间
指数据从磁盘读出或向磁盘写入数据所经历的时间。
公式 其中,r为磁盘每秒钟的转数;N为一条磁道上的字节数, b为所读/写的字节数

利用磁盘调度算法计算平均寻道长度

开始顺序

先来先服务(FCFS)

根据进程请求访问磁盘的先后次序调度
调度指标:请求次序

最短寻道时间优先

选择与当前磁头所在的磁道最近的进程磁盘访问
调度指标:寻道距离

扫描算法

进程“饥饿”现象
最短寻道时间优先算法虽然能获得较好的寻道性能, 但却可能导致某个进程发生“饥饿”(Starvation)现象:
老进程出现“饥饿”现象:当不断有新进程的请求到达, 且其所要访问的磁道与磁头当前所在磁道的距离较近,这种新进程的I/O请求必须优先满足。
SCAN算法可防止老进程出现“饥饿”现象。
此算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑磁头当前的移动方向。又称为电梯调度算法。
调度指标:磁头移动方向+寻道距离
方法:当设备无访问请求时,磁头不动;
当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;
否则改变移动方向,并为经过的访问请求服务,如此反复

循环扫描

规定磁头单向移动。例如,只是自里向外移动。