第五章 I/O管理
第一节 I/O管理概述
「IO设备」设备分类
按信息交换分类
- 块设备
- 信息交换以数据块为单位,属于有结构设备。
- 传输速率高,可寻址,可随机读写。
- 字符设备
- 信息交换以字符为单位,属于无结构设备。
- 传输速率低,不可寻址,时常采用中断IO方式。
传输速率分类
- 低速设备:键盘鼠标等。
- 中速设备:激光打印机。
- 高速设备:磁盘机,光盘机。
「IO设备」IO接口
- IO接口(设备控制器)位于CPU和设备之间,由三部分组成。
IO接口的三部分
- 设备控制器与CPU的接口
- 接口有三类信号线:数据线、地址线、控制线。
- 数据线连接数据寄存器和控制/状态寄存器。
- 设备控制器与设备的接口
- 一个设备控制器连接多个设备。
- 每个接口中都存在数据、控制和状态三种信号。
- IO逻辑
- 实现对设备的控制。
- 通过一组控制线和CPU交互,对CPU收到的IO命令进行译码。
设备控制器的主要功能
- 接收和识别CPU发来的命令。
- 数据交换(设备和控制器之间、控制器和主存之间的数据传输)
- 标示和报告设备的状态,供CPU处理。
- 地址识别
- 数据缓冲
- 差错控制
「IO设备」IO端口
IO端口是设备控制器中可被CPU直接访问的寄存器。
IO端口包含的三种寄存器
- 数据寄存器
- 状态寄存器
- 控制寄存器
实现CPU和IO端口通信的两种方法
- 独立编址
- 每个端口分配一个IO端口号,所有IO端口形成IO端口空间。
- 普通用户程序不能访问,只有操作系统使用特殊的IO执行才能访问端口。
- 统一编址
- 又称 内存映射 IO,每个端口被分配唯一的内存地址,不会有其他程序占用该内存地址。
- 通常分配给端口的地址靠近地址空间的顶端。
「IO控制方式」程序直接控制方式
计算机从外设读取字数据时,CPU对外设状态进行循环检查,确定该字已经在IO控制器的数据寄存器中。
特点
- CPU的高速型与IO设备低速性不匹配,使CPU大量时间被浪费。
- 简单易于实现,CPU与IO串行工作,效率相当低。
「IO控制方式」中断驱动方式
允许IO设备申请中断主动打断CPU的运行并请求服务。
特点
- 比程序直接控制方式有效。
- 由于数据在存储器和IO控制器之间传输必须经过CPU,仍然消耗CPU较多时间。
「IO控制方式」DMA方式
DMA(直接存储器存取)是在IO设备和内存之间开辟直接的数据交换通路,解放CPU。
特点
- 基本数据单位为数据块。
- 传送的数据,从设备直接进入内存,或从内存直接进入设备,不需要经过CPU。
- 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预,整块数据的传送实在DMA控制下完成的。
DMA控制器的组成(4类寄存器保证主机与控制器之间成块的数据交换)
- 命令/状态寄存器(CR):接收CPU发来的IO命令,控制信息或设备状态等。
- 内存地址寄存器(MAR):输入时存放内存的起始目标地址;输出时存放内存源地址。
- 数据寄存器(DR):暂存即将传送的数据。
- 数据计数器(DC):本次传送的字节数。
DMA工作过程
CPU接收到IO设备的DMA请求,给DMA控制器发一条命令,同时设置MAR和DC初值,启动DMA控制器,继续其他工作。
之后CPU把控制操作委托给DMA控制器,控制器负责处理。
DMA控制器直接和存储器交互,传送整个数据块,每次传送一个字,不需要CPU参与。
传送完成后,DMA发送一个中断信号给CPU。
只有DMA传送的开始和结束才需要CPU介入。
DMA方式与中断方式的区别
区别 | 中断方式 | DMA方式 |
---|---|---|
CPU中断时间 | 每个数据需要传输时中断CPU | 所要求传送的一批数据全部传送结束时中断CPU |
控制权 | 在CPU控制下完成 | 在DMA控制器控制下完成 |
「IO控制方式」通道控制方式
- IO通道是专门负责输入/输出的处理机。
- IO通道方式是DMA方式的发展。
- 进一步减少CPU的干预,把对一个数据块IO为单位的干预改为对一组数据块IO的干预。
IO通道与一般处理机的区别
- 通道指令类型单一,没有自己的内存。
- 通道执行的通道程序放在主机的内存中,也就是通道和CPU共享内存。
IO通道和DMA方式的区别
区别 | DMA方式 | IO通道方式 |
---|---|---|
传输的数据块大小、传输的内存位置 | CPU控制 | IO通道控制 |
交互设备台数 | 一个DMA控制器对应一台设备与内存传递数据 | 一个通道对应多台设备与内存交换数据 |
四种IO方式的形象总结
「IO软件层次」IO软件层次结构
- 用户层IO软件
- 设备独立性软件
- 设备驱动程序
- 中断处理程序
「应用程序IO接口」字符设备接口
- 指数据的存取和传输是以字符为单位的设备,如键盘、打印机等。
- 基本特征:传输速率较低、不可寻址,IO采用中断驱动。
「应用程序IO接口」块设备接口
块设备接口指数据存取和传输以数据块为单位的设备,如磁盘。
块设备接口的基本特征
- 传输速率较高、可寻址,IO采用DMA方式。
- 隐藏了磁盘的二维结构(将扇区从 0 到 n-1 依次编号)。
- 将抽象命令映射为底层操作。
- 内存映射接口通过内存的字节数组来访问磁盘,而不提供读/写磁盘操作。
「应用程序IO接口」网络设备接口
- 如网络套接字(socket)接口。
「应用程序IO接口」阻塞/非阻塞接口
- 通常仅程序要通过轮询方式查询IO操作是否完成。
- 大多数OS提供的IO接口都采用阻塞IO。
「IO管理」IO管理需要完成的功能
第二节 设备独立性软件
「高速缓存与缓冲区」磁盘高速缓存
- 磁盘高速缓存逻辑上属于磁盘,物理上是驻留在内存中的盘块。
高速幻簇在内存中的两种形式
- 在内存中开辟一个单独的空间作为磁盘高速缓存,大小固定。
- 把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘IO时共享。
「高速缓存与缓冲区」缓冲区
引入缓冲区的主要目的
- 缓和CPU和IO设备之间速度不匹配的矛盾。
- 减少CPU的中断频率,放宽对CPU中断响应时间的限制。
- 解决基本数据单元大小不匹配的问题。
- 提高CPU和IO设备之间的并行性。
缓冲区的实现方法
- 采用硬件缓冲器,成本太高,只在关键部位使用。
- 采用缓冲区(内存区域)
缓冲技术(根据系统设置缓冲器的个数划分)
单缓冲:一方IO,另一方等待。
双缓冲
- 缓冲区1写满,写缓冲区2。
- 双向数据传输:双发都设置双缓冲区,一发送,一接收。
循环缓冲:多个大小相同的缓冲区,每个缓冲区有一指向下一缓冲区的链接指针。
缓冲池:多个系统公用的缓冲区构成,按使用状况形成三个队列:空幻冲队列、输入队列、输出队列。
「高速缓存与缓冲区」之间的对比
「设备分配与回收」设备分配
- 设备分配就是根据用户的IO请求分配所需的设备。
根据设备的特性分类
- 独占式使用设备:进程独占。
- 分时式共享使用设备:共享设备分配给多个进程,分时使用。
- 以SPOOLing方式使用外部设备:实现虚拟设备,分配给多个进程。
「设备分配」数据结构
设备分配的主要设备结构
- 设备控制表(DCT)
- 控制器控制表(COCT)
- 通道控制表(CHCT)
- 系统设备表(SDT)
设备控制表(DCT)
- 一个设备控制表表征一个设备,控制表中的表项是设备的各个属性。
系统设备表(SDT)
- 整个系统只有一张SDT。
- SDT记录已连接到系统中的所有物理设备的情况,每个物理设备占一个条目。
「设备分配」设备分配策略
- 设备分配原则
- 设备分配方式
- 静态分配:对独占设备的分配,效率低,无死锁。
- 动态分配:根据进程执行的需要进行,高效率,可能死锁。
- 设备分配算法(动态设备分配算法):先来先服务、优先级等。 :::
「设备分配」设备分配安全性
设备分配安全性:指设备分配中防止发生死锁。
- 安全分配方式
- IO请求后阻塞,IO操作完成后进行唤醒。
- 优点:安全;
- 缺点:CPU和IO设备串行。
- 非安全分配方式
- 进程可发出多个IO请求,若请求的设备被占用才会进入阻塞态。
- 优点:进程可操作多设备,推进迅速;
- 缺点:可能死锁。
「设备分配」设备独立性
设备独立性是应用接口独立于具体使用的物理设备。
为什么引入设备独立性?
- 提高设备分配的灵活性和设备的利用率,方便IO重定向。
- 就是在软件和设备之间加一个中间层,让软件不用对设备进行专门适配。
如何实现设备独立性?
- 应用程序中使用逻辑设备名请求设备。
- 系统中设置一张逻辑设备表(Logical Unit Table,LUT),将逻辑设备名映射为物理设备名。
- LUT表包含逻辑设备名、物理设备名、设备驱动程序入口地址;
- 当进程用逻辑设备名来请求分配设备时,系统分配一台物理设备,并在LUT中新建条目。
- 当进程再用逻辑设备名请求IO操作时,系统通过查找LUT寻找物理设备和驱动程序。
逻辑设备表的两种设置方式
- 在整个系统中只设置一张LUT。
- 为每个用户设置一张LUT
- 当用户登录时,系统为用户建立一个进程,并创建一张LUT放入进程PCB中。
「设备分配」SPOOLing技术(假脱机)
引入假脱机技术的目的?
- 缓和CPU高速性和IO设备低速性之间的矛盾
SPOOLing系统的组成
- 输入井和输出井:磁盘上开辟出的两个存储区域
- 输入井:模拟脱机输入时的磁盘,收容IO输入数据。
- 输出井:模拟脱机输出时的磁盘,收容进程输出数据。
- 输入缓冲区和输出缓冲区:内存中开辟的两个缓冲区
- 输入缓冲区送到输入井。
- 输出缓冲区暂存从输出井送来的数据,以后送到输出设备。
- 输入进程和输出进程:用于模拟脱机输入/输出时的外围控制机。
SPOOLing系统的特点
- 提高了IO速度
- 将独占设备改造为共享设备
- 实现了虚拟设备功能
- 是以空间换时间的技术:开辟空间做等待队列。
第三节 磁盘和固态硬盘
「磁盘」磁盘读写操作时间
一次磁盘读写操作的时间由寻道时间、旋转延迟时间和传输时间决定。
寻道时间、旋转延迟时间、传输时间
「磁盘调度算法」先来先服务
- 先来先服务算法(First Come First Serverd,FCFS)
根据访问磁盘的先后循序调度
「磁盘调度算法」最短寻找时间优先
- 最短寻找时间优先(Shortest Seek Time First,SSTF)
选择与当前磁头最近的磁道
- 不能保证平均寻找时间最小,可能产生饥饿现象。
「磁盘调度算法」扫描算法(SCAN)
- 扫描算法(SCAN),又称电梯调度算法。
在磁头移动方向上选择与当前磁头所在磁道最近的请求
- 相当于在最短寻找时间优先 + 规定磁头运动方向
- 对最近扫描过的区域不公平,访问局部性方面不如FCFS和SSTF算法。
「磁盘调度算法」循环扫描(C-SCAN)
- 循环扫描算法(Circle SCAN,C-SCAN)
- 在扫描算法的基础上规定磁头单向移动,回返时直接移动到起始端而不服务任何请求。
「磁盘调度算法」LOOK与C-LOOK调度
- SCAN和C-SCAN的改进型,即磁头移动只需要到达最远端请求而不需要到达磁盘终点。
注意事项
- 若无特别说明,可默认SCAN和C-SCAN算法为LOOK和C-LOOK调度。
「磁盘调度算法」调度算法比较
「磁盘调度」扇区错位命名
- 将盘面扇区交替编号,对磁盘片组的不同盘面错位命名。
- 因为磁盘是连续自转设备,磁头读写一个物理块后,需要经过短暂的处理时间才能读写下一块。
磁盘寻块时间
- 磁盘寻块时间 = 寻道时间 + 延迟时间 + 传输时间(无法减少)
「固态硬盘」特征
「固态硬盘」磨损均衡
- 动态磨损均衡:写入数据时,自动选择新的闪存块。
- 静态磨损均衡:先进,就算无数据写入,SSD会监测并自动进行数据分配,使老闪存块无须承担写数据存储任务,使平常读写操作在较新闪存块中进行。