文章目录
5.1 IO管理概述
5.1.1 IO设备
1. IO设备的分类
按信息交换的单位分类,IO设备可以分为
- 块设备:信息交换以数据块为单位。属于有结构设备,例如磁盘。特点是传输速率较高、可寻址、可随机读写任意块
- 字符设备:信息交换以字符为单位。属于无结构设备,例如交互式终端机、打印机等。特点是传输速率低、不可寻址、时常采用IO中断方式
按照传输速率分类,可以分为
- 低速设备,例如键盘、鼠标
- 中速设备,例如激光打印机
- 高速设备,例如磁盘机、光盘机
- 字节多路通道用于链接大量低速或中速IO设备
2. IO接口(设备控制器
IO接口(设备控制器)位于CPU和设备之间,既要和CPU通信,又要和设备通信,具有按照CPU的命令控制设备工作的功能
- 设备控制器与CPU的接口:具有三类信号线,数据线、地址线和控制线;与数据寄存器和控制状态寄存器相连,分别存放CPU发来的数据和设备控制信息
- 设备控制器与设备的接口:可以存在多个设备接口,每个接口中存在数据、控制和状态三种类型的交互
- IO逻辑:用于实现对设备的控制
设备控制器的功能
- 接收和识别CPU发来的命令,例如磁盘控制器能接受读、写、查找等
- 数据交换,包括设备和控制器之间的数据传输,以及控制器和主存之间的数据传输
- 标识和报告设备的状态,以供CPU处理
- 地址识别
- 数据缓冲
- 差错控制
- 为了便于上层软件的编制,设备控制器通常要提供控制寄存器、状态寄存器和控制命令
- 设备控制器中用于实现设备控制功能的是:IO逻辑
3. IO端口
IO端口:设备控制器中可被CPU直接访问的寄存器,主要有以下三类
- 数据寄存器:实现CPU和外设之间的数据缓冲
- 状态寄存器:获取执行结果和设备的状态信息,以让CPU知道是否准备好处理
- 控制寄存器:由CPU写入,以便启动命令或更改设备模式
为了实现CPU和IO端口进行通信,有两种编址方式
- 独立编址:为每个端口分配一个IO端口号,所有IO端口形成IO端口空间,只有操作系统才能使用特殊IO指令访问,普通用户程序不能访问
- 统一编址:又称内存映射IO,每个端口被分配唯一内存地址,通常分配靠近地址空间的顶端
5.1.2 IO控制方式
设备管理的主要任务之一是控制设备和内存或CPU之间的数据传送
外围设备和内存之间的IO控制方式有四种
1. 程序直接控制方式
- 计算机从外设读取每个字,CPU需要对外设状态进行循环检查,知道确定该字已经在IO控制器的数据寄存器中
- 由于CPU和外设速度不匹配,CPU大多数时间都在等待IO设备循环检查,造成CPU资源极大浪费
- CPU和IO设备智能串行工作,CPU利用率相当低
2. 中断驱动方式
- 允许IO设备主动打断CPU的运行并请求服务
- CPU向IO控制器发送读命令后可以继续做其他工作
3. DMA(直接存储器存取
- 在IO设备和内存之间开辟直接的数据交换通路,彻底解放CPU
- 基本单位是数据块
- 传送的数据,从设备直接传入内存,或者反向
- 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预;整块数据的传送是在DMA控制器的控制下完成的
- (17 408)系统将数据从磁盘读到内存的过程:初始化DMA控制器并启动磁盘、从磁盘传输一块数据道内存缓冲区、DMA控制器发出中断请求、执行DMA结束中断服务程序
4. 通道控制方式*
- 通道控制设备控制器、设备控制器控制设备
- 通道是处理输入输出的硬件
- 通道完成通道程序的执行后,需要产生中断
5.1.3 IO软件层次结构
1. 用户层IO软件
实现与用户交互的接口。用户可以直接调用在用户层提供的,与IO操作相关的库函数,对设备进行操作
用户层软件必须通过一组系统调用来获取操作系统服务
2 设备独立性软件(系统调用处理程序
- 实现用户程序与设备驱动器的统一接口、设备命令、设备的保护及设备分配与释放等,同时为设备管理和数据传送提供必要的存储空间
- 设备独立性也称设备无关性,使得应用程序独立于具体使用的物理设备
- 为了实现设备独立性,引入逻辑设备和物理设备。应用程序中使用逻辑设备名来请求某类设备,实际执行时需要映射为物理设备名使用
- 使用逻辑设备名的好处:增加设备分配灵活性、易于实现IO重定向(用于IO操作的设备更换,而不改变应用程序)
- 为了实现设备独立性,必须在驱动程序上设置一层设备独立性软件(也就是这一层),用于执行所有设备的公用操作,向用户层提供统一接口
- 将系统调用参数翻译成设备操作命令的工作由 与设备无关的操作系统软件 实现
3. 设备驱动程序
- 与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动IO设备工作
- 每类设备配置一个设备驱动程序,是IO进程和设备控制器之间的通信程序,常以进程的形式存在
- 设备驱动程序向上层用户提供一组标准接口,设备具体的差别被设备驱动程序屏蔽
- 接收上层软件发来的抽象IO要求,转化为具体要求后,发送给设备控制器,控制IO设备工作
- 一个计算机系统配置了两台绘图机器和三台打印机,为了正确驱动这些设备,系统应该提供2个设备驱动程序
- (13 408)用户发出磁盘IO请求后,系统处理流程:用户程序、系统调用处理程序、设备驱动程序、中断处理程序。其中计算数据所在的柱面号、磁头号、扇区号的程序是:设备驱动程序
4. 中断处理程序
- 保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完毕后恢复进程现场,返回被中断进程
- 主要任务:进行进程上下文切换,对处理中断信号源进行测试、读取设备状态和修改进程状态等
- 与硬件紧密相关,应当放在底层
- (10 408) 本地用户通过键盘登陆系统时,首先获得键盘输入信息的程序是:中断服务程序
- (11 408) 用户程序发出磁盘IO请求后,系统正确处理流程:用户程序、系统调用处理程序(对应与设备无关的软件层、设备驱动程序、中断处理程序)
5.1.4 应用程序IO接口
IO系统和高层之间的接口,根据设备类型,又分为若干接口
1. 字符设备接口
- 数据的存取和传输以字符为单位,例如键盘、打印机等
- 基本特征:传输速率较低、不可寻址、在IO时通常采取中断驱动方式
- get和put操作:字符设备不可寻址,只能顺序存取,通常为字符设备建立一个字符缓冲区,用户程序通过get操作从缓冲区获取字符,put操作将字符输到缓冲区
- in-control指令:字符设备类型繁多,差异大,在接口中提供通用的in-control指令来处理(包含许多参数,每个参数表示一个与具体设备相关的特定功能)
- 字符设备都属于独占设备,接口需要提供打开和关闭操作,实现互斥共享
2. 块设备接口
- 数据的存取和传输以数据块为单位,例如磁盘
- 传输速率较高、可寻址,IO通常采用DMA方式
- 隐藏了磁盘的二维结构,块设备接口将所有扇区从0到N-1编号,而不用以磁道号和扇区号表示
- 将抽象命令映射为低级操作
- 内存映射接口通过内存的字节数组来访问磁盘,不提供读写磁盘操作
3. 网络设备接口
- 现代操作系统提供面向网络的功能,需要提供相应的网络软件和网络通信接口,使计算机能够通过网络与网络上的其他计算机进行通信或上网
- 许多操作系统提供网络IO接口为网络套接字接口,其系统调用使程序创建的本地套接字连接到远程应用程序创建的套接字,通过此发送和接受数据
4. 阻塞/非阻塞IO
- 阻塞IO:用户进程调用IO操作时,进程就被阻塞,需要等待IO操作完成,进程才能被唤醒
- 非阻塞IO:用户进程IO操作不阻塞该进程,IO调用返回一个错误返回值,进程需要轮询IO操作是否完成
大多数操作系统提供的IO接口都是阻塞IO
5.2 设备独立性软件
5.2.1 与设备无关的软件
与设备无关的软件是IO系统的最高层软件,下层是设备驱动程序。设备独立性软件包括执行所有设备公有操作的软件
5.2.2 高速缓存与缓存区
1. 磁盘高速缓存(disk cache
- os采用磁盘高速缓存提高磁盘IO速度
- 磁盘高速缓存是利用内存中的存储空间暂存从磁盘中读出的一系列盘块中的信息
- 逻辑上属于磁盘,物理上是驻留在内存中的盘块
高速缓存在内存中分为两种形式:
- 在内存中开辟一个单独的空间作为磁盘高速缓存,大小固定
- 把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘IO时共享
2. 缓冲区(buffer
引入缓冲区的目的
- 缓和CPU与IO设备之间速度速度不匹配的矛盾
- 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
- 解决基本数据单元大小(数据粒度)不匹配的问题
- 提高CPU和IO设备之间的并行性
实现方法
- 采用硬件缓冲器。成本高,一般很少使用
- 采用缓冲区(位于内存区域)
根据系统设置缓冲器的个数,缓冲技术可以分为:
1)单缓冲
- 主存中设置一个缓冲区
- 设备和处理机交换数据时,先将数据写入缓冲区,然后需要数据的设备或处理机从缓冲区取走数据
- 在缓冲区写入取出的过程中,另一方需要等待
单缓冲区处理每块数据用时max(C,T)+Mmax(C,T)+Mmax(C,T)+M
2)双缓冲方式
双缓冲区处理一块数据的时间max(C+M,T)max(C+M,T)max(C+M,T)
3)循环缓冲
- 包含多个大小相等的缓冲区
- 每个缓冲区有一个指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,构成一个环形
- 循环缓冲用于输入/输出时,需要有两个指针in和out
4)缓冲池
3. 高速缓存和缓冲区的对比
5.2.3 设备分配和回收
1. 设备分配
根据用户的IO请求分配所需的设备,总原则是充分发挥设备的使用效率,尽可能让设备忙碌,但要避免进程死锁
- 独占式使用设备:进程分配到独占设备后,独占,直到进程释放该设备
- 分时式共享使用设备:可以同时分配给多个进程,通过分时共享使用
- 以SPOOLing方式使用外部设备:SPOOLing技术实现虚拟设备功能,可以将设备同时分配给多个进程,实质上是实现了对设备IO操作的批处理
多道程序系统中,进程的数量多于资源,需要有合理的分配原则,主要考虑因素:
- IO设备固有属性
- IO设备分配算法
- IO设备分配的安全性
- IO设备独立性
2. 设备分配的数据结构
设备分配依据的主要数据结构有:设备控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)和系统设备表(SDT)
- **设备控制表:一个设备控制表表征一个设备,控制表的表项是设备的各个属性。**请求该设备未得到满足的进程,应当将其PCB组织成队列,挂在请求设备上
3. 设备分配的策略
设备分配方式
- 静态分配:用户作业开始执行前,一次性分配需要的所有设备、控制器。一旦分配,这些设备、控制器就一直被占用,直到作业被撤销。不会产生死锁,但是设备使用效率低
- 动态分配:在进程执行过程中根据需要进行,设备和控制器一旦用完就释放。可能进程死锁
设备分配算法
- 先请求先分配
- 优先级高者先分配
4. 设备分配安全性
指设备分配过程中防止进程死锁
- 安全分配方式:进程发出IO请求后就阻塞,直到该请求满足才唤醒。阻塞时不保持任何资源。设备分配安全,缺点是CPU和IO串行工作
- 不安全分配方式:进程发出IO请求后依然运行,需要时又发出IO请求,仅当请求的设备被另一个进程占用时才阻塞。一个进程可以同时操作多个设备,缺点是可能死锁
5. 逻辑设备名到物理设备名的映射
- 为了实现设备独立性,应用程序中用逻辑设备名请求某类设备
- 系统中设置一张逻辑设备表(LUT),用于将逻辑设备映射为物理设备名
设置逻辑设备表方式:
- 整个系统中只有一张LUT,所有进程的设备分配情况都在其中,不允许LUT中有相同的逻辑设备名。适合单用户系统
- 为每个用户设置一张LUT
5.2.4 SPOOLing技术(假脱机技术)
为了缓和CPU高速性和IO设备低速性的矛盾,引入脱机输入/输出技术。将独占设备改造成共享设备
- SPOOLing系统基本条件:有大容量、高速度的硬盘作为输入井和输出井,并且有SPOOLing软件
- SPOOLing不需要外围计算机支持
- (16 408)SPOOLing技术需要外存(高速磁盘)支持、需要多道程序技术的支持、可以让多个作业共享一台独占设备、设备与输入井、输出井之间的数据传送是系统完成的,不是用户控制
5.2.5 设备驱动程序接口
5.3 磁盘和固态硬盘
- 磁盘上的文件读写以块为单位
5.3.1 磁盘
5.3.2 磁盘管理
- (1 408) 磁盘的格式化容量比非格式化容量小;扇区中包含数据、地址和校验等信息;磁盘存储器最小读写单位为块;磁盘存储器由磁盘控制器、磁盘驱动器和盘片组成
1. 磁盘初始化
2. 分区
3. 引导块
4. 坏块
5.3.5 磁盘调度算法
一次磁盘读写操作的时间由寻找时间(找到磁道)、旋转延迟时间(找到扇区)和传输时间决定
常见磁盘调度算法:
1. 先来先服务(FCFS
- 按照请求访问磁盘的先后顺序进行调度
- 性能接近随机调度
2. 最短寻找时间优先(SSTF
- 选择最近的磁道优先
- 有饥饿现象
3. 扫描算法(SCAN、电梯调度算法
- 在当前磁头移动方向上选择距离最近的请求
- 在访问局部性方面不如FCFS和SSTF
4. 循环扫描算法(C-SCAN
- 在扫描算法基础上,回返时直接移动到起始端而不处理任何请求
LOOK调度:SCAN和C-SCAN算法不必移动到磁盘端点才返回,而是到达最远端的一个请求即可返回。做题默认LOOK调度
5.3.4 固态硬盘(SSD
1. SSD特性
基于闪存技术,与U盘无本质差别,容量更大,存取性能更好
2. 磨损均衡
闪存擦写寿命有限,为了弥补SSD寿命缺陷,引入磨损均衡
- 动态磨损均衡:写入数据时,自动选择较新的闪存块,老的先歇一歇
- 静态磨损均衡:即使没有数据写入,SSD也会检测并自动进行数据分配,让老的闪存块无需担写数据的存储任务,同时让新的闪存块腾出空间,平时的读写操作在较新的闪存块中进行
408真题
(10 408)
- 空闲磁盘块管理(第四章):位示图法
- CSCAN法:到达最远一端后,立即返回服务处于另一端的磁道
- 计算磁盘存取时间