层次结构图
功能介绍
用户层软件:用于实现用户与I/O设备交互;
设备独立性软件:用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护,以及设备分配与释放等;
设备驱动程序:与硬件直接有关,用来具体实现系统对设备发出的操作指令,驱动I/O设备工作;
中断处理程序:用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完后恢复现场,并返回到被中断的进程;
硬件:I/O设备。
请求与访问顺序
I/O请求:用户层软件–>设备独立性软件–>设备驱动程序–>中断处理程序–>硬件
I/O应答:硬件–>中断处理程序–>设备驱动程序–>设备独立性软件–>用户层软件
层次功能实现
用户层软件:假脱机技术
设备独立性软件:I/O调度,设备保护,设备分配与回收,缓冲区管理
假脱机技术
SPOOLING系统 是对脱机输入/输出工作的模拟,它必须有大容量的且可随机存取的存储器
的支持。
主要思想:在联机的条件下,进行两个方向的操作,在数据输入时,将数据从输入设备传送到磁盘或磁带(块设备),然后把这些块设备与主机相连;反过来,在数据输出时,将输出数据传送到磁盘或磁带上,再从磁盘或磁带传送到输出设备。这样,可以将一台独占的物理设备虚拟为并行使用的多态逻辑设备,从而使该物理设备被多个进程共享。
设备的分配与回收
设备分配时应考虑的因素:
- 设备的固有属性
设备的固有属性可分为三种:独占式设备、共享式设备、虚拟设备。
独占式设备:一个时间段只能分配给一个进程
共享式设备:可同时分配给多个进程使用,各个进程往往是宏观上同时共享使用设备,微观上交替使用。
虚拟设备:采用假脱机技术将独占式设备改造成虚拟共享设备,可同时分配给多个进程使用。 - 设备的分配算法
先来先服务算法、短作业优先算法,优先级高优先算法等。 - 设备分配中的安全性
从进程运行的安全性上考虑,设备分配有两种方式:
安全分配方式:为进程分配一个设备后就将进程阻塞,本次IO完成后才将这个进程唤醒。这种方式是安全的破坏了“请求和保持条件”,不会发生死锁。但是对于进程来说,CPU和IO设备只能串行工作。
不安全分配方式:进程发出IO请求后,系统为其分配IO设备,进程可以继续执行,之后还可以发出新的IO请求。只有某个IO请求得不到满足的情况下才将进程阻塞。
静态分配与动态分配:
静态分配:进程运行前,为其分配全部所需资源,运行结束后归还资源。
动态分配:进程运行过程中,动态的申请设备资源。
设备分配管理中的数据结构:
设备与控制器通道之间的关系:一个通道可以有多个控制器,一个控制器又能控制多台 设备。所以他们三者之间是一对多的关系,也就可以用树状结构来描述。
-
设备控制表(DCT)
统会为每个设备配置一个设备控制表(DCT),用来记录设备情况。
这个设备控制表中包含有一下字段:设备类型(扫描仪/键盘),设备标识符(系统中每个设备的唯一ID),设备状态,指向控制表的指针(因为每个设备都有对应的控制器控制,所以这个指针就是用来指向控制它的控制器),重复执行次数或时间(当IO操作多次仍然不成功,才认为此次IO失败),设备队列的队首指针(这个指针指向一个队列,这个队列里面是PCB,这些PCB是正在等待该设备的) -
控制器控制表(COCT)
每个设备控制器都会对应一张COCT。
控制器控制表中的属性有:控制器标识符(各个控制器的唯一ID),控制器状态(忙碌,空闲,故障),指向通道的指针(每个控制器都有对应的通道,该指针用来找到对应的通道),控制器队列的队首指针,控制器队列的队尾指针(指向正在等待该控制器的阻塞队列(由PCB组成的队列)) -
通道控制表(CHCT)
每个通道都会对应一张CHCT。操作系统根据CHCT信息对通道进行操作和管理。
通道控制表中含有的属性:
通道标识符:各个通道的唯一ID
通道状态
与通道连接的控制器表首地址
通道队列队首指针,通道队列队尾指针 -
系统设备表(SDT)
记录系统中全部设备的情况,每个设备对应一个表目录。
设备分配的步骤
- 按照进程请求的物理设备名查找SDT
- 根据系统设备表找到DCT(设备控制表),若设备忙碌则将进程挂到设备等待队列中,不忙碌则将设备分配给进程。
- 根据设备控制表找到COCT(控制器控制表),若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。
- 根据COCT找到CHCT(通道控制表),若通道忙碌则将PCB挂到通达等待队列中,不忙碌则将通道分配给进程。
- 备注:只有设备。控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可以启动IO设备进行数据传送
缺点
缓冲区管理
- 用户编程时必须使用物理设备名,底层细节对用户不透明,不方便编程
- 若换了一个物理设备,则程序无法执行
- 若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待缓冲的引入
引入缓冲区的原因有很多,可归结为以下几点:
(1) 缓和CPU与I/O设备间速度不匹配的矛盾。
(2) 减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
(3) 解决数据粒度不匹配的问题。
(4) 提高CPU和I/O设备之间的并行性。
单缓冲与双缓冲
- 单缓冲
过程:设备)—T----缓冲区—(M)—工作区----(C)—处理
处理一块数据平均耗时 Max(C,T)+M
分析问题的初始状态:工作区满,缓冲区空 - 双缓冲
过程:设备)—T----缓冲区—(M)—工作区----(C)—处理
处理一块数据平均耗时 Max(T,C+M)
分析问题的初始状态:工作区空,缓冲区满,另一个缓冲区空
缓冲池
三个队列:空缓冲队列,输入队列,输出队列。
四种工作缓冲区
- 用于收容输入数据的工作缓冲区
- 用于提取输入数据的工作缓冲区
- 用于收容输出数据的工作缓冲区
- 用于提取输入数据的工作缓冲区