写在前面
资料来源于我的操作系统老师——WYQ老师
文章目录
基本任务:完成用户提出的I/O请求,提高I/O速率,改善I/O设备的利用率。
主要功能:缓冲区管理,设备分配,设备处理,虚拟设备,设备独立性等。
追求目标:方便性;并行性;均衡性;独立性。
6.1 I/O系统的功能、模型和接口
6.1.1 I/O系统的基本功能
I/O管理示意图
基本功能
1.隐藏物理设备的细节
2.实现设备独立性
3.提高处理机和I/O设备的利用率
4.对I/O设备进行控制
5.确保对设备的正确共享
6.错误处理
6.1.2 I/O系统的层次结构和模型
1.I/O软件的层次结构
2.I/O系统中各种模块之间的层次视图
6.1.3 I/O系统接口
1.块设备接口:是块设备管理程序与高层之间的接口。
2.流设备接口:是流设备管理程序与高层之间的接口,又称为字符设备接口。
3.网络通信接口:在现代OS中,都提供了面向网络的功能。操作系统也必须提供相应的网络软件和网络通信接口,使计算机能通过网络与其它计算机进行通信。
6.2 I/O设备和设备控制器
6.2.1 I/O设备
1.按使用特性分类:
①存储设备:也称外存、辅存,是存储信息的主要设备。
②I/O设备 :分为输入设备、输出设备和交互式设备。
2.按传输速率分类:
①低速设备:其传输速率仅为每秒几个字节至数百个字节,如键盘、鼠标器。
②中速设备:传输速率在每秒数千个字节至数十万个字节,如行式打印机、激光打印机等。
③高速设备:传输速率在数十万字节至千兆字节,如磁带机、磁盘机、光盘机等。
6.2.2 设备控制器
** 1.设备控制器的组成**
2.设备控制器的基本功能
①接收和识别命令;
②数据交换;
③标识和报告设备的状态;
④地址识别;
⑤数据缓冲区;
⑥差错控制。
6.2.3 内存映像I/O
I/O端口编址方式:
独立编址:利用特定的I/O指令访问I/O端口;
统一编址:内存映像I/O,对内存和控制器统一访问方法,简化了I/O的编程。
6.2.4 I/O通道
一、I/O通道的引入
- 实际上I/O通道是一种特殊的处理机。
与一般处理机不同于两方面:
1.指令类型单一,只用于I/O操作;
2.通道没有内存,它与主机共享内存。 - 引入目的
解脱CPU对I/O的组织、管理。 - CPU只需发送I/O命令给通道;
- 通道通过内存中的相应通道程序完成任务。
二、类型
1.字节多路通道:
各子通道以时间片轮转方式共享通道,适用于低、中速设备。
2.数组选择通道:
无子通道,仅一主通道,某时间段由某设备独占,适于高速设备。
但通道未共享,利用率低。
3.数组多路通道:
综合了前2种通道类型的优点,多个子通道可以共享一个主通道。
带通道的硬件连接结构
三、“瓶颈”问题
由于通道价格昂贵,致使数量较少,使它成为I/O系统的瓶颈,进而造成系统吞吐量的下降。如下例所示:
解决“瓶颈”问题:最有效的办法便是增加设备到主机间的通路而不增加通道,如下图所示:
6.3 中断机构和中断处理程序
- 中断是指CPU对系统中发生的异步事件的响应。
- 是指CPU在正常执行程序的过程中,由于某个外部或内部事件的作用,强迫CPU停止当前正在执行的程序,转去为该事件服务(称为中断服务),待服务结束后,又能自动返回到被中断的程序中继续执行。
为什么采用中断处理 - 重要事件的及时处理;
- 异常事件的及时处理;
- 实现CPU与低速外部设备的速度匹配与并行工作。
中断机制
中断机制是OS内核最重要的功能之一;
系统中的所有中断都由内核响应;
中断是进程并发执行的基础;
OS是由中断驱动的。
关于中断机制
中断源 — 引起中断的异步事件(如系统调用,I/ O请求等)
中断请求 — 向CPU发出中断信号。
中断现场的保护与恢复 — 利用系统栈。
中断处理 — 查中断向量表,转中断处理程序处理。
中断向量表和中断优先级
①中断向量表:为每种设备配以相应的中断处理程序,并把该程序的入口地址,放在中断向量表的一个表项中,并为每一个设备的中断请求,规定一个中断号,它直接对应于中断向量表的一个表项中。
②中断优先级:系统根据不同中断信号源,对服务要求的紧急程度的不同,它们分别规定不同的优先级。
中断处理过程
- 中断响应:保存断点、取中断服务的入口地址;转向中断服务程序执行中断处理。
- 中断处理:执行中断服务程序中规定的操作。
- 中断返回:将压栈的断点从堆栈中弹出;CPU转向被中断的主程序继续执行。
简单中断处理
中断与程序并发之间的关系
- 中断是程序并发的前提条件。
- 如果没有中断,操作系统不能获得系统控制权,无法按调度算法对处理机进行重新分配,一个程序将一直运行到结束而不会被打断。
中断、异常、陷入
①中断:中断是来自处理器外部的请求事件。
②异常:异常是指令执行过程中在处理器内部发生的特殊事件。
③陷入:由处理器内部事件所引起的特殊中断(trap)。
★中断和异常、陷入的主要区别:是信号的来源不同。
6.4 设备驱动程序
- 是I/O进程与设备控制器之间的通信程序;
- 是驱动物理设备和DMA控制器或I/O控制器等直接进行I/O操作的子程序的集合;
- 负责设置设备有关寄存器的值,启动设备进行I/O操作,指定操作的类型和数据流向等。
6.4.1设备驱动程序的功能
(1)接收上层软件发来的命令和参数,并将命令中的抽象要求,转换为与设备相关的低层操作序列;
(2)检查用户I/O请求的合法性,了解I/O设备的工作状态,传递与I/O设备操作有关的参数,设置设备的工作方式;
(3)发出I/O命令,如果设备空闲,便立即启动I/O设备,完成指定的I/O操作;如果设备忙碌,则将请求者挂在设备队列上等待;
(4)及时响应由设备控制器发来的中断请求,并根据其中断类型,调用相应的中断处理程序进行处理。
6.4.2 设备驱动程序的处理过程
- 将抽象要求转换为具体要求
- 检查I/O请求的合法性
- 读出和检查设备的状态
- 传送必要的参数
- 工作方式的设置
- 启动I/O设备
6.4.3 对I/O设备的控制方式
I/O控制方式的宗旨
尽量减少主机对I/O控制的干预,把主机从繁杂的I/O控制事务中解脱出来,以便更多地去完成数据处理。
1. 轮询方式
- CPU的绝大部分时间,都处于等待I/O设备完成数据I/O的循环测试中;
- 造成对CPU的极大浪费。
2. 中断控制方式
中断驱动方式可以成百倍地提高CPU的利用率。
3.DMA方式
DMA方式较之中断驱动方式,又进一步提高了CPU与I/O设备的并行操作程度。
DMA控制器的组成
DMA工作过程
4.通道控制方式
通道是通过执行通道程序,并与设备控制器共同实现对I/O设备的控制的。
通道方式:CPU只需给出
(1)通道程序首址。
(2)要访问I/O设备
通道的工作原理
CPU
- 执行用户程序,当遇到I/O请求时,可根据该请求生成通道程序放入内存;
- 将该通道程序的首地址放入CAW中;
- 执行“启动I/O”指令,启动通道工作。
通道
- 接收到“启动I/O”指令后,从CAW中取出通道程序的首地址;
- 根据首地址取出第一条指令放入CCW中;
- 向CPU发回答信号,使CPU可继续执行其他程序;
- 开始执行通道程序,完成传输工作;
- 传输完成后,向CPU发I/O中断,并且通道停止工作;
- CPU接收中断信号,从CSW中取得有关信息,决定下一步工作。
I/O控制发展的主要推动因素
推动I/O控制发展的主要动力在于:
- 尽量减少主机对I/O控制的干预,
- 把主机从繁杂的I/O控制中解脱出来,
- 把时间和精力投入到数据处理中。
几种I/O控制方式的适用场合
不同的I/O控制方式之间的优劣不是绝对地,它们均会在不同的应用场景取得良好的性能效果。
- 如果I/O频繁发生,而且每次I/O的时间较短,则适合使用程序直接控制I/O方式;
- 如果每次I/O时间较长,则适合使用DMA或通道方式;
- 如果I/O 发生不确定,则适合使用中断驱动I/O方式。
6.5 与设备无关的 I/O软件
- 与设备无关的软件是I/O系统最高层软件;
- 在其下面是设备驱动程序;
- 但它和设备驱动程序之间的界限,将随操作系统和设备的不同而有所差异。
6.5.1 与设备无关软件的基本概念
1.以物理设备名使用设备
2.引入了逻辑设备名:是抽象的设备名
3.逻辑设备名到物理设备名的转换
6.5.2 与设备无关的软件
与设备无关软件的功能
1.设备驱动程序的统一接口
2.缓冲管理
3.差错控制
4.对独占设备的分配与回收
5.提供独立于设备的逻辑数据块
6.5.3 设备分配
1.设备分配中的数据结构
⑴系统设备表SDT:这是系统范围的数据结构,记录系统中全部设备的情况,每个设备占一个表目。
⑵设备控制表DCT:为每一个设备都配置了一张,记录设备的情况。
⑶控制器控制表COCT :为每一个控制器都设置一张,记录控制器使用情况。
⑷通道控制表CHCT :为每一个通道都设置一张,记录通道使用情况。
2.设备分配时应考虑的因素
⑴设备的固有属性
- 独占设备的分配策略
- 共享设备的分配策略
- 虚拟设备的分配策略
⑵设备分配算法
先来先服务、优先级高者优先。
⑶设备分配中的安全性
安全分配方式、不安全分配方式。
3.独占设备的分配程序
(1)基本的设备分配程序
当某进程提出I/O请求后,系统的设备分配程序,可按下述步骤进行设备分配:
- 分配设备;
- 分配控制器;
- 分配通道。
(2)设备分配程序的改进
- 上述分配过程,进程是以物理设备名提出I/O请求的。
- 如果所指定的设备已分配给其它进程,则分配失败,不具备设备无关性。
- 为此,进程应使用逻辑设备名请求I/O。
6.5.4 逻辑设备名到物理设备名映射的实现
1.逻辑设备表LUT(Logical Unit Table)
2.逻辑设备表的设置问题
⑴在整个系统中只设置一张LUT
⑵为每个用户设置一张LUT
6.6 用户层的I/O软件
- 实现与用户交互的接口;
- 用户可直接调用在用户层提供的、与I/O操作有关的库函数,对设备进行操作。
6.6.1 系统调用
- 系统调用的本质就是过程调用。
- 由于OS的特殊性,使应用程序不能采用一般的过程调用方式去调用OS中的过程,而必须用系统调用命令去调用的系统过程,所以系统调用是一种特殊的过程调用。
1.系统调用与库函数
- 系统调用是操作系统的一部分,是内核提供给用户的程序接口,运行在核心态;
- 库函数是语言或应用程序的一部分,运行在用户态;
- 许多库函数都使用系统调用来实现功能;
- 没有使用系统调用的库函数,执行效率通常比使用的高,因为使用系统调用时,需要上下文的切换及处理机状态的转换。
2.系统调用与一般的过程调用的区别
- 运行在不同的系统状态:
调用程序—用户态;被调用程序—系统态。 - 通过陷入机制进入:
调用过程—陷入—被调用过程。 - 系统调用返回后,可能返回被中断进程也可能重新调度。
6.6.2 假脱机(Spooling)系统
1.假脱机技术
该技术是利用专门的外围控制机,先将低速I/O设备上的数据,传送到高速磁盘上,或者相反。
1.Spooling系统的组成
2.Spooling系统的工作原理
3.Spooling系统的特点
(1)提高了I/O的速度。
(2)将独占设备改造为共享设备。
(3)实现了虚拟设备功能。
4.假脱机打印机系统
5.守护进程
利用守护进程实现打印
- 对每个用户而言,系统只是及时将数据输出到缓冲区,并没真正被打印,只是让用户感觉系统已为他打印。
- 其真正的打印操作,是在打印机空闲且该打印任务在等待队列中已排到队首时进行的。
- 并且,打印操作本身也是利用CPU的一个时间片,没有使用专门的外围机。
- 这一过程是用户不可见的。
实现设备虚拟时所依赖的关键技术是——SPOOLing技术
6.7 缓冲区管理
6.6.1 缓冲的引入
1.缓和CPU与I/O设备间速度不匹配的矛盾
2.减少对CPU的中断频率,放宽对CPU中断响应时间的限制
3.解决数据粒度不匹配的问题
4.提高CPU和I/O设备之间的并行性
6.6.2 单缓冲区和双缓冲区
1.单缓冲区
在单缓冲情况下,每当用户进程发出一I/O请求时,操作系统便在主存中为之分配一缓冲区,如图所示。
系统对每一块数据的处理时间表示为:Max(C,T)+M。
2.双缓冲区系统处理一块数据的时间可以粗略地认为是Max(C,T) 。
- 也称为缓冲对换(Buffer Swapping)。
- 在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。
- 此时操作系统可以从第一缓冲区中移出数据,并送入用户进程(见图)。接着由CPU对数据进行计算。
6.6.3 环形缓冲区
1.环形缓冲区的组成
2.环形缓冲区的使用
计算进程和输入进程可利用下述两个过程来使用环形缓冲区。
(1)Getbuf过程
(2)Releasebuf过程
3.进程之间的同步问题
使用输入循环缓冲,可使输入进程和计算进程并行执行。相应地,指针Nexti和指针Nextg将不断地沿着顺时针方向移动,这样就可能出现下述两种情况:
(1) Nexti指针追上Nextg指针:缓冲区已满。
(2) Nextg指针追上Nexti指针:缓冲区已空。
6.6.4 缓冲池(Buffer Pool)
1.缓冲池的引入
为了提高缓冲区的利用率,目前广泛流行既可用于输入又可用于输出的公用缓冲池,在池中设置了多个可供若干个进程共享的缓冲区。
2.缓冲池的组成
空缓冲队列emq、输入队列inq、输出队列outq
用于收容输入数据的工作缓冲区:hin
用于提取输入数据的工作缓冲区:sin
用于收容输出数据的工作缓冲区:hout
用于提取输出数据的工作缓冲区:sout
Getbuf过程和Putbuf过程
3.缓冲池的工作方式
(1)收容输入
(2)提取输入
(3)收容输出
(4)提取输出
6.8 磁盘存储器的性能和调度
6.8.1 磁盘性能简述
1.磁盘的类型
软盘\硬盘\U盘\SSD盘;
固态硬盘和普通硬盘的区别
普通机械硬盘(HDD)
- 单片盘和多片盘;
- 固定头磁盘和活动头(移动头)磁盘。
2.磁盘数据的组织和格式
- 磁盘设备可包括一个或多个物理盘片;
- 每个磁盘片有一个或两个存储面;
- 每个盘面上有若干个磁道;
- 每条磁道又被从逻辑上划分成若干个扇区(sectors);
- 一个(或多个)扇区称为一个物理块(块block、簇cluster);
- 磁盘以块为单位统一编号;
- 块是信息存储、传输、分配的基本单位;
- 磁盘总块数由扇区数、磁道数以及柱面数决定。
磁盘分区
- 在磁盘低级格式化完成后,一般要对磁盘进行分区。
- 在逻辑上,每个分区就是一个独立的逻辑磁盘。
- 每个分区的起始扇区和大小都记录在磁盘0扇区的主引导记录分区表所包含的分区表中。
- 分区表中必须有一个分区被标记成活动的,以保证能够从硬盘引导系统。
磁盘高级格式化
- 在真正可以使用磁盘前,还需要对磁盘进行一次高级格式化;
- 设置一个引导块、空闲存储管理、根目录和一个空文件系统;
- 同时在分区表中标记该分区所使用的文件系统。
3.磁盘访问时间
(1)寻道时间Ts:把磁臂(磁头)移动到指定磁道上所经历的时间。
T
s
=
m
∗
n
+
s
T_s=m*n+s
Ts=m∗n+s
(2)旋转延迟时间Tτ:指定扇区移动到磁头下面所经历的时间。
T
t
=
1
/
2
r
(
均
值
)
T_t=1/2r(均值)
Tt=1/2r(均值)
(3)传输时间Tt:把数据从磁盘读出或向磁盘写入数据所经历的时间。
T
t
=
b
/
(
r
N
)
T_t=b/(rN)
Tt=b/(rN)
访问时间Ta表示为: T = T s + 1 / ( 2 r ) + b / ( r N ) T=T_s+1/(2r)+b/(rN) T=Ts+1/(2r)+b/(rN)
磁盘调度
- 当有多个访盘请求等待时,采用一定的策略,对这些请求的服务顺序调整安排 → 降低平均磁盘服务时间,达到公平、高效。
- 公平:一个I/O请求在有限时间内满足。
- 高效:减少设备机械运动带来的时间开销。
6.8.2 早期的磁盘调度算法
1.扫描(SCAN)算法
2.循环扫描(CSCAN)算法
6.8.3 基于扫描的磁盘调度算法
3.NStepSCAN算法
- N步SCAN算法是将磁盘请求队列分成若干个长度为N的子队列;
- 磁盘调度将按FCFS算法依次处理这些子队列;
- 而每处理一个队列时又是按SCAN算法,对一个队列处理完后,再处理其他队列;
- 当正在处理某子队列时,如果又出现新的磁盘I/O请求,便将新请求进程放入其他队列,这样就可避免出现粘着现象。
4. FSCAN算法
- FSCAN算法实质上是N步SCAN算法的简化,即FSCAN只将磁盘请求队列分成两个子队列;
- 一个是由当前所有请求磁盘I/O的进程形成的队列,由磁盘调度按SCAN算法进行处理;
- 在扫描期间,将新出现的所有请求磁盘I/O的进程,放入另一个等待处理的请求队列;
- 这样,所有的新请求都将被推迟到下一次扫描时处理。