输入/输出(I/O)管理(操作系统笔记六)
I/O 设备的概念和分类
I/O设备 就是可以将数据传入到计算机,或者可以接收计算机输出数据的外部设备, 属于计算机中的硬件部件 。
I/O 控制器
I/O 设备 分 机械部件 和 电子部件 。机械部件主要用来执行具体的 I/O 操作,如我们看到的键盘鼠标等;电子部件通常是一块插入主板扩充槽的印刷电路板。
CPU无法直接控制 I/O 设备的机械部件,因此 I/O 设备还要有一个电子部件作为CPU和 I/O 设备机械部件间的媒介,用于实现CPU对设备的控制。这个电子部件就是 I/O 控制器,又称 设备控制器 。
I/O 控制方式
DMA方式 仅在传送一个或多个数据块的 开始和结束 时,才需要CPU干预 ,整块数据的传送 是在DMA控制器 的控制下完成的。
- DMA控制器中有如下4类寄存器 :
- 命令/状态寄存器(CR) :用于接收从CPU发来的 I/O 命令或有关控制信息,或设备的状态
- 内存地址寄存器(MAR) :输入时,它存放把数据从设备传送到内存的起始目标地址;输出时,它存放由内存到设备的内存源地址
- 数据寄存器(DR) :用于暂存从设备到内存或从内存到设备的数据
- 数据计数器(DC) :存放本次要传送的字节数
DMA控制方式与中断驱动方式的主要区别 :中断驱动方式在每个数据需要传输时中断CPU,而DMA控制方式则是在所要求传送的一批数据全部传送结束时才中断CPU;且中断驱动方式数据传送是在中断处理时由CPU控制完成,而DMA控制方式是在DMA控制器的控制下完成的。
通道控制方式实现CPU、通道和I/O设备三者的并行操作 。
通道所执行的通道程序时放在主机的内存中的,所以 通道与CPU是共享内存的 。
I/O通道与DMA方式的区别 :DMA方式需要CPU来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的;另外,每个DMA控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换。
I/O 软件层次结构
-
用户层软件 :实现与用户交互的接口,用户可直接调用在用户层提供的、与 I/O 操作有关的库函数,对设备进行操作。
-
设备独立性软件(又称系统调用处理层、设备无关性软件) :与设备的硬件特性无关的功能几乎都在这一层实现,实现的功能如下图
逻辑设备表(LUT) 主要包括逻辑设备名、物理设备名、驱动程序入口。操作系统可以采用 两种方式管理逻辑设备表(LUT) :
- 整个系统只设置一张LUT :这意味着所有用户不能使用相同的逻辑设备名,因此只适用于单用户操作系统
- 为每个用户设置一张LUT :各个用户使用的逻辑设备名可以重复,适用于多用户操作系统
-
设备驱动程序 :与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动 I/O 设备工作的驱动程序。不同的设备因内部硬件的不同,也有自己的驱动程序。
-
中断处理程序 :用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完并恢复被中断进程的现场后,返回到被中断进程。主要任务有:进行进程上下文的切换,对处理中断信号源进行测试,读取设备状态和修改进程状态等。(与硬件最近的一层)
-
硬件设备 :I/O 设备通常包括一个 机械部件 和一个 电子部件 。机械部件是设备本身,电子部件称为 设备控制器(或适配器) ,通常是一块插入主板扩充槽的印制电路版。
I/O 核心子系统
假脱机技术(SPOOLing技术) 需要请求 “磁盘设备” 的设备独立性软件的服务,因此一般来说假脱机技术是在 用户层软件 实现的。但在 408考纲中归为I/O子系统需要实现的功能 。
假脱机技术(SPOOLing技术)
SPOOLing系统的组成如下图 :
共享打印机使用的就是SPOOLing技术 ,将独占式设备改造成了共享设备 。
设备的分配与回收
设备的固有属性可分为三种 : 1. 独占设备, 2. 共享设备 3. 虚拟设备
- 从进程运行的安全性上考虑,设备分配有两种方式:
- 安全分配方式 :为进程分配一个设备后将进程阻塞,本次 I/O 操作完成后才将进程唤醒。(优点:破坏了 “请求和保持” 条件,不会死锁)(缺点:对于一个进程来说,CPU和 I/O 设备只能串行工作)
- 不安全分配方式 :进程发出 I/O 请求后,系统为其分配 I/O 设备,进程可继续执行,之后还可以发出新的 I/O 请求,只有某个 I/O 请求得不到满足时才将进程阻塞。(优点:进程的计算任务和 I/O 任务可以并行处理,使进程迅速推进)(缺点:有可能发生死锁)
之前还学过 静态分配(进程运行前为其分配全部所需资源,运行结束后归还) ,动态分配(进程运行过程中动态申请设备资源) 。
- 以上分配方式的 缺点 :
- 用户编程时要提供 “ 物理设备名 ”,底层细节对用户不透明,不方便编程
- 若更换物理设备后,则程序无法运行
- 若用户请求的物理设备正在忙碌中,即使系统中有同类型的设备处于空闲中,进程也要阻塞等待
- 改进方法 :建立 逻辑设备名(设备类型) 与物理设备名的映射机制,用户编程时只需要提供逻辑设备名
逻辑设备表(LUT)建立了逻辑设备与物理设备名之间的映射关系
- 逻辑设备表设置问题 :
- 整个系统只有一张LUT :各用户所用的逻辑设备名不允许重复,适用于但用户操作系统
- 每个用户一张LUT :不同用户的逻辑设备名可重复,适用于多用户操作系统
缓冲区管理
缓冲区 是一各存储区域,有 硬件 作为缓冲区的成本较高,容量也小,所以一般使用 内存 作为缓冲区。
单缓冲区 :操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)。
- 采用单缓冲策略,处理一块数据平均耗时 Max(C, T)+M
注意:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
双缓冲区 :操作系统会在主存中为其分配两个缓冲区。
- 采用双缓冲策略,处理一个数据块的平均耗时为 Max (T, C+M)
若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。
若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。
注:管道通信中的“管道”其实就是缓冲区。要实现数据的双向传输,必须设置两个管道
循环缓冲区 :将多个大小相等的缓冲区链接成一个循环队列。
- in 指针,指向下一个可以冲入数据的空缓冲区
- out 指针,指向下一个可以取出数据的满缓冲区
缓冲池 :由系统中共用的缓冲区组成