操作系统---I/O核心子系统与磁盘
文章目录
- 1. I/O核心子系统
- 1.1 I/O调度
- 1.2 设备保护
- 1.3 假脱机技术(SPOOLing技术)
- 1.3.1 什么是脱机技术
- 1.3.2 假脱机技术的原理
- 1.3.3 共享打印机原理
- 1.3.4 总结
- 1.4 设备的分配与回收
- 1.4.1 考虑的因素
- 1.4.2 静态分配和动态分配
- 1.4.3 设备分配管理中的数据结构
- Ⅰ 设备控制表
- Ⅱ 控制器控制表
- Ⅲ 通道控制表
- Ⅳ 系统设备表
- Ⅴ 梳理
- 1.4.4 设备分配的步骤
- 1.4.5 设备分配步骤的改进
- 1.4.6 总结
- 1.5 缓冲区管理
- 1.5.1 何为缓冲区?有何作用?
- 1.5.2 缓冲策略
- Ⅰ 单缓冲
- Ⅱ 双缓冲
- Ⅲ 单/双缓冲在通信时的区别
- Ⅳ 循环缓冲区
- Ⅴ 缓冲池
- 1.5.3 总结
- 2. 磁盘
- 2.1 磁盘的结构
- 2.2 磁盘调度
- 2.2.1 一次磁盘读/写操作需要的时间
- 2.2.2 磁盘调度算法
- Ⅰ 先来先服务(FCFS)
- Ⅱ 最短寻找时间优先(SSTF)
- Ⅲ 扫描算法(SCAN)
- Ⅳ 循环扫描算法(C-SCAN)
- 2.2.3 总结
- 2.3 减少延迟时间的方法
- 2.3.1 具体方法
- 2.3.2 磁盘地址结构的设计
- 2.3.3 总结
- 2.4 磁盘的管理
- 2.4.1 磁盘初始化
- 2.4.2 引导块
- 2.4.3 坏块的管理
- 2.4.4 总结
- 2.5 固态硬盘(SSD)
- 2.5.1 内部结构
- 2.5.2 重点记忆
- 2.5.3 理想情况下,固态硬盘的寿命
1. I/O核心子系统
1.1 I/O调度
- 所谓I/O调度,即:用某种算法来确定一个好的顺序来处理各个I/O请求
- 如:各种磁盘调度算法(下节介绍),当多个磁盘I/O请求到来时,用某种调度算法确定满足I/O请求的顺序
- 同理,打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定I/O调度顺序
1.2 设备保护
- 操作系统实现了文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)
- 在一些操作系统中,设备被看做是一种特殊的文件,每个设备也会有其对应的FCB。当用户请求访问某个设备时,系统根据FCB中的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能
- 简单概括,用文件保护的方式来实现设备保护
1.3 假脱机技术(SPOOLing技术)
1.3.1 什么是脱机技术
- 在手工操作阶段,主机直接从I/O设备获得数据,由于设备速度慢,主机速度很快。人机速度矛盾明显,主机要浪费很多时间来等待设备,如下:
- 于是在批处理阶段,引入了脱机输入/输出技术(用磁带完成)
- 引入脱机技术后,缓解了CPU与慢速I/O设备的速度矛盾。另一方面,即使CPU在忙碌,也可以提前将数据输入到磁盘;即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁盘
- Tips:为什么称为“脱机” — — 脱离主机的控制进行的输入/输出操作
1.3.2 假脱机技术的原理
- 虽然脱机技术能缓解CPU与慢速I/O设备的速度矛盾,但其需要额外的物理设备(如磁盘)以及繁琐的操作,于是人们就引入了假脱机技术,使其能仅在一台计算机内就实现内外I/O操作
- 假脱机技术,又称SPOOLing技术,是用软件的方式模拟脱机技术。
SPOOLing系统由输入和输出井、输入和输出进程以及输入和输出缓冲区组成,除了输入和输出井是在磁盘上,其余都是在内存上,具体如下:
SPOOLing技术与脱机技术的对应关系:
1.3.3 共享打印机原理
- 总结来说,就是在磁盘的输出井内,为每个要使用打印机资源的用户进程各自开辟一部分空间,用于存储其各自要打印的数据(这就是逻辑上虚拟成多台设备),此时打印机对于用户进程的请求都是同意的,于是欺骗了进程,也就是欺骗了用户,从而实现共享
1.3.4 总结
1.4 设备的分配与回收
1.4.1 考虑的因素
固有属性可分三种:独占设备、共享设备、虚拟设备
- 独占设备 — — 一个时段只能分配给一个进程(如打印机)
- 共享设备 — — 可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用
- 虚拟设备 — — 采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用SPOOLing技术实现的共享打印机)
分配算法:先来先服务、优先级高者优先、短任务优先
从安全性上考虑,设备分配有两种方式:
1.4.2 静态分配和动态分配
- 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源(破坏了“请求和保持”条件,不会发生死锁)
- 动态分配:进程运行过程中动态申请设备资源(可能发生死锁)
1.4.3 设备分配管理中的数据结构
Ⅰ 设备控制表
设备控制表(Device Control Table — — DCT):系统为每个设备配置一张DCT,用于记录设备情况
Ⅱ 控制器控制表
控制器控制表(Controller Control Table — — COCT):每个设备控制器都会对应一张COCT,操作系统根据COCT的信息对控制器进行操作和管理
Ⅲ 通道控制表
通道控制表(Channel Control Table — — CHCT):每个通道都会对应一张CHCT,操作系统根据CHCT的信息对通道进行操作和管理
Ⅳ 系统设备表
系统设备表(System Device Table — — SDT):记录了系统中全部设备的情况,每个设备对应一个表目
Ⅴ 梳理
1.4.4 设备分配的步骤
-
- 根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数)
-
- 根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程
-
- 根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程
-
- 根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程
注意:只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送
缺点:
-
- 用户编程必须使用“物理设备名”,底层细节对用户步透明,不方便编程
-
- 若换了一个物理设备,则程序无法运行
-
- 若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待
改进:建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名
1.4.5 设备分配步骤的改进
- 逻辑设备表(LUT)建立了逻辑设备名与物理设备名之间的映射关系
- 某用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求,操作系统根据用户进程指定的设备类型(逻辑设备名)查找系统设备表,找到一个空闲设备分配给进程,并在LUT中增加相应表项
- 如果之后用户进程再次通过相同的逻辑设备名请求使用设备,则操作系统通过LUT表即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的驱动程序入口地址
1.4.6 总结
1.5 缓冲区管理
1.5.1 何为缓冲区?有何作用?
- 缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区
- 使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如内存管理中所用的联想寄存器 — — 快表,由于对页表的访问频率极高,因此使用速度很快的快表来存放页表项的副本)
- 一般情况下,更多的是用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区
1.5.2 缓冲策略
前提引入:
-
- 无论是哪种缓冲策略,当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。若题目没有特别说明,一个缓冲区的大小就是一个块
-
- 常考题型:计算每处理一块数据平均需要多久?
-
- 技巧:假定一个初始状态,分析下次到达相同状态需要多少时间,这就是处理一块数据平均所需时间
-
- 工作区:用户进程的内存空间中,会分出一片工作区来接受输入/输出数据(一般也默认工作区大小与缓冲区相同)
Ⅰ 单缓冲
采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区,如下所示:
假定初始状态:工作区满,缓冲区空
① 当 T > C(输入 > 处理)时,此时处理一块数据平均用时 = T + M
② 当 T < C(输入 < 处理)时,平均用时 = C + M
综上:采用单缓冲策略,处理一块数据平均耗时为 Max(C,T)+ M
Ⅱ 双缓冲
采用双缓冲策略,操作系统会在主存中为其分配两个缓冲区,如下所示:
假定初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空
① 当 T > C + M(输入 > 处理 + 传送),平均用时 = T
② 当 T < C + M (输入 < 处理 + 传送),平均用时 = C + M
综上:采用双缓冲策略,处理一个数据块的平均耗时为 Max(T,C + M)
Ⅲ 单/双缓冲在通信时的区别
单缓冲:
双缓冲:
Ⅳ 循环缓冲区
Ⅴ 缓冲池
- 缓冲池由系统中共用的缓冲区组成。这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)
- 另外,根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入数据(hin)、用于提取输入数据(sin)、用于收容输出数据(hout)、用于提取输出数据(sout)
有四种情况:
-
- 输入进程请求输入数据
-
- 计算进程想要取得一块输入数据
-
- 计算进程想要将准备好的数据冲入缓冲区
-
- 输出进程请求输出数据
1.5.3 总结
2. 磁盘
2.1 磁盘的结构
2.2 磁盘调度
2.2.1 一次磁盘读/写操作需要的时间
综上,操作系统只能通过控制寻道时间(利用不同的磁盘调度算法)来影响一次磁盘I/O的时间
2.2.2 磁盘调度算法
Ⅰ 先来先服务(FCFS)
FCFS:根据进程请求访问磁盘的先后顺序进行调度
Ⅱ 最短寻找时间优先(SSTF)
SSTF:优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。(贪心算法的思想,只是选择眼前最优,但是总体未必最优)
Ⅲ 扫描算法(SCAN)
SSTF会产生饥饿的原因在于:磁头有可能在一个小区域内循环往复地移动。为了防止这个问题,引入了SCAN算法。
SCAN:只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内测磁道的时候才能往外移动。由于磁头移动的方式很像电梯,因此也叫电梯算法
改进 — — LOOK调度算法:
Ⅳ 循环扫描算法(C-SCAN)
SCAN算法对于各个位置磁道的响应频率不平均,于是引入了C-SCAN算法
C-SCAN:规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求
改进 — — C-LOOK调度算法:
2.2.3 总结
2.3 减少延迟时间的方法
2.3.1 具体方法
① 交替编号:
② 错位命名:
2.3.2 磁盘地址结构的设计
2.3.3 总结
2.4 磁盘的管理
2.4.1 磁盘初始化
2.4.2 引导块
2.4.3 坏块的管理
2.4.4 总结
2.5 固态硬盘(SSD)
2.5.1 内部结构
2.5.2 重点记忆
2.5.3 理想情况下,固态硬盘的寿命
至此,操作系统完结撒花!!!
参考:《王道计算机考研 操作系统》
bilibili: https://www.bilibili.com/video/av70156862