文章目录
设备分类
按信息交换单位分类:
- 块设备:数据传送以块为单位,传输速率较高,可寻址; I/O访问常采用DMA方式。
- 字符设备:数据传送以字符为单位,传输速率较低,不可寻址; I/0访问常采用中断方式。
按设备的的共享属性分类:
- 独占设备:一段时间内只允许一个进程使用,属于临界资源。
- 共享设备:在一-段时间,允许多个进程同时访问,共享设备必须是
可寻址
和可随机访问
的设备。 - 虚拟设备:将一***占设备变换为若干个逻辑设备,如虚拟存储器、虚拟终端。
I/O设备控制方式
程序查询方式
不停的检查设备的状态,造成CPU资源的浪费,优点是比较简单
通道控制方式
通道程序由一系列通道指令构成,包含以下信息:
- 操作码:读、写、控制等;
- 内存地址:读写内存的始址;
- 计数:指令的读写字节数;
通道程序示例:
-
通道程序结束位P,1表示通道指令是通道程序的最后一条指令。
-
记录结束位Record, 0表示通道指令与下一条通道指令所处理的数据块属于同- -个记录,1表示通道指令所处理的数据块是记录的最后一块数据。
DMA方式(直接存储器访问方式)
DMA方式以块为单位传送数据,仅在数据块传送前和传送结束时,才需要处理机干预。
包含四类寄存器:
- 数据寄存器:缓存从设备到内存,或从内存到设备的数据;
- 数据计数寄存器:存储要读/写的字节数;
- 内存地址寄存器:存放内存起始地址; .
- 控制/状态寄存器:接收处理机发来的1/O命令或有关控制信息,以及设备发送的状态信息;
中断方式
驱动程序向处理机发出启动I/O设备指令后阻塞,处理机转向处理其它工作。
设备完成数据传送后,I/O控制器向处理机发送中断请求。处理机收到中断请求信号转向中断处理程序,中断处理程序将数据寄存器中的数据送到指定内存单元,并唤醒阻塞进程。
I/O系统的软件模型及功能
设备独立性软件
-
设备独立性指应用程序独立于具体使用的物理设备。
-
为了实现设备独立性而引入了逻辑设备和物理设备概念,在应用程序中,使用逻辑设备名来请求使用某类设备,而系统在实际执行时,还必须使用物理设备名称。
设备独立性软件的功能:
-
向用户层(或文件层)软件提供统一接口。
-
执行设备的公有操作,如
逻辑设备名映射为物理设备名
、独立设备的分配与回收、对设备进行保护、缓冲管理、差错控制、提供独立于物理设备的逻辑块。
设备独立性实现:构建一个逻辑设备表,实现逻辑设备名到物理设备名的映射
Spooling
在联机情况下实现的同时输入/输出操作称为Spooling,或称为假脱机操作,即数据的输入、输出不再由外围控制机管理,而改为进程执行。
Spooling系统的组成:
- 输入进程SPi和输出进程SPo
- 输入和输出缓冲区
- 输入和输出井
Spooling系统应用–共享打印机:
- 将所有打印请求挂在打印机请求队列上。
- 把打印数据放入到输出井上。
- 打印机驱动进程依次完成打印机请求队列上的任务。
Spooling系统的特点:
-
提高了I/O速度。
-
将独占设备改造成共享设备。
-
实现了设备的虚拟化。
缓冲管理
目的:减少低速设备对高速的干扰。
四种缓冲策略
1. 单缓冲
-
由于处理机与I/O设备的并行性,用户进程对一块缓冲区数据的处理时间等价于Max(C,T)+M。
-
需要注意的是传送和计算或输入无法同时计算
-
此时生产者是设备,消费者是用户进程,生产者和消费者都只有一个,不存在互斥
2. 双缓冲
- 数据被采集到缓冲区和数据从缓冲区传送到用户进程空间再被计算可以并行执行;
- 用户进程对一块缓冲区数据的处理时间等价于Max (C、T) ;如果C>T,则CPU可以连续地工作;如果C<T,则I/0设备可以连续地工作;
- 双缓冲适用于I/O设备与用户进程速度基本匹配的场合;
- 此时设备输入数据和用户进程取数据可以同时进行
3. 循环缓冲
- 适用于I/O设备与用户进程速度差异较大的场合
- 循环缓冲的使用:
- GetBuf过程,从循环缓冲中获取一个满缓冲区或一个空缓冲区;
- ReleaseBuf过程,向循环缓冲中释放一个空缓冲区或一个满缓冲区;
4. 缓冲池(***)
三种缓冲队列
-
空缓冲队列emq
-
输入缓冲队列inq,装满输入数据
-
输出缓冲队列outq,装满输出数据
四种缓冲区
-
收容输入数据缓冲区hin
-
提取输入数据缓冲区sin
-
收容输出数据缓冲区hout
-
提取输出数据缓冲区sout
设备分配
- 安全分配:进程发出I/0请求后,便进入阻塞状态,直到I/O操作完成时才被唤醒。摒弃"请求和保持”死锁必要条件之一, 缺点是进程进展缓慢。
- 不安全分配:进程发出I/O请求后仍继续运行,需要时又发出第二C 个、第三个I/O请求等,效率高,缺点是可能造成死锁。
磁盘调度算***计算***)
注意:每次寻道都会改变当前所在磁道
先来先服务
按照请求顺序进行寻道
最短寻道时间
每次寻找离当前磁道最近的请求,会导致饥饿现象,默写请求可能很久都难以调度
扫描算法(电梯调度算法)
磁头可以朝着增加的方向移动也会朝着减少的方向移动,可以避免饥饿现象的发生
- 先寻找离当前磁头最近的磁道且需要比当前磁道大
- 当不存在比当前磁道更大的时候,磁头需要调转方向,朝着减少的方向移动.
循环扫描算法
改进:当移动到不存在比当前磁道更大的时候,不再调转方向,从0开始继续寻找