一、磁盘组织与管理
这一章在2022里是第四章的内容,在2023版里划分到了第五章。
(一)磁盘的结构
磁盘
磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据。
可用(柱面号、盘面号、扇区号)来定位任意一个磁盘块。
小节回顾
(二)⭐磁盘调度算法⭐
磁盘读/写时间
- 寻道时间Ts:在读/写数据前,将磁头移动到指定磁道所花的时间。
- 延迟时间TR:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。设磁盘转速为r(转/秒),则平均所需的延迟时间TR=(1/2)*(1/r)=1/2r
- 传输时间Tt:从磁盘读出或向磁盘写入数据所经历的时间,假设盘转速为r,此次读/写的字节数为b,每个磁道上的字节数为N。则:传输时间Tt=(1/r)*(b/N)=(b/rN)
⭐先来先服务算法(FCFS)⭐
根据进程请求访问磁盘的先后顺序进行调度
优点:如果请求访问的磁道比较集中的话,栓发性能还算过得去。
缺点:如果由大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。
⭐最短寻找时间算法(SSTF)⭐
SSTF算法会优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)
⭐扫描算法(SCAN)⭐
SSTF算法会产生饥饿的原因在于:磁头有可能在一个小区域内来回来去地移动。为了防止这个问题,可以规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。这就是扫描算法(SCAN)的思想。由于磁头移动的方式很像电梯,因此也叫电梯算法。
LOOK调度算法
扫描算法(SCAN)中,只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。LOOK调度算法就是为了解决这个问题,如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边观察,因此叫LOOK)
⭐循环扫描算法(C-SCAN)⭐
SCAN算法对于各个位置磁道的响应频率不平均,而C-SCAN算法就是为了解决这个问题。规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求
C-LOOK调度算法
C-SCAN算法的主要缺点是只有到达最边上的磁道时才能改变磁头移动方向,并且磁头返回时不一定需要返回到最边缘的磁道上。C-LOOK算法就是为了解决这个问题。如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。
小节回顾
⭐⭐若题目没有特别说明,则SCAN就是LOOK算法,C-SCAN算法就是C-LOOK算法⭐⭐。
(三)减少磁盘延迟时间的方法
交替编号
让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延时时间更小。
错位命名
每个盘面的盘块位置错微命令。
小节回顾
(四)磁盘管理
磁盘初始化
引导块
计算机开机时需要进行一系列的初始化工作,这些初始化工作是通过执行初始化程序(自举程序)完成的。
快坏的管理
无法正常使用的扇区就是“坏块”。这属于硬件故障,操作系统是无法修复的。应该将坏块标记出来,以免错误地使用到它。
小节回顾
(五)固态硬盘SSD(新考点)
固态硬盘的结构
⭐固态硬盘数据擦除以块为单位,读写以页为单位。⭐
二、I/O管理概述
(一)I/O设备
I/O设备就是可以i将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。
按使用特性来分类
按传输速率分类
⭐按信息交换的单位分类⭐
小节回顾
(二)I/O控制器
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。
这个电子部件就是l/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件。
CPU通过控制总线发送给I/O逻辑设备控制指令,并且通过地址线给I/O逻辑设备的地址。然后将数据放入数据寄存器中,将指令放入控制寄存器中,I/O逻辑对对应的设备进行控制。然后将设备状态返回给状态寄存器。
内存映像I/O vs 寄存器独立编址
小节回顾
(三)⭐I/O控制方式⭐
这里感觉跟计组中的内容都差不了太多,大致了解过一遍就行,当然没过过计组的还是要了解看看。
程序直接控制方式
CPU在未得到设备反馈(状态寄存器显示完成)时一直进行轮询,设备与CPU的运行速率不同,所以需要不断轮询,这种方式CPU与I/O设备只能串行工作,导致CPU的利用率相当低。
数据流向都要先经过CPU的寄存器。
中断驱动方式
频繁的中断处理会消耗较多的CPU时间。
DMA方式
一个字一个字读入,寄存器中存入一整块数据后才会放入内存中。
通道控制方式
通道时一种硬件,可以理解为阉割版的CPU,通道可以识别并执行一系列通道指令。
通道可以执行的指令很单一,并且通道程序是放在主机内存中,也就是收通道程序与CPU共享内存。
小节回顾
(四)I/O子系统的层次结构
- 用户层软件
用户层软件实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。
用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务。 - 设备独立性软件
又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。
主要实现的功能:
1、向上层提供统一的调用接口
2、设备的保护
3、差错处理
4、设备的分配与回收(临界资源)
5、数据缓冲区管理
6、建立逻辑设备名到物理设备名的映射关系(逻辑设备表):根据设备类型选择调用相应的驱动程序。 - 设备驱动程序
主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器;检查设备状态等
驱动程序一般会以一个独立的进程运行。 - 中断处理程序
当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。
理解并记住I/O软件各个层次之间的顺序,要能够推理判断某个处理应该是在哪个层次完成的(最常考的是设备独立性软件、设备驱动程序这两层。只需理解一个特点即可:直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的;没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的)
(五)输入/输出应用程序接口&驱动程序接口(新考点)
输入/输出应用程序接口
底层I/O设备种类多种多样,用户层的应用程序无法用一个统一的系统调用接口来完成所有类型设备的I/O
阻塞I/O:应用程序发出I/O系统调用,进程需要转为阻塞态等待
非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待。
设备驱动程序接口
各公司开发的设备驱动程序接口不统一,则操作系统很难调用设备驱动程序。因此操作系统会统一一个标准,要求设备产商必须按照标准开发专属于该操作系统的驱动程序。
三、I/O核心子系统
(一)概述
I/O调度
用某种算法确定一个好的顺序来处理各个I/O请求。
设备保护
类似操作系统的文件保护功能。在Unix系统中,设备被看作是一种特殊的文件。
(二)假脱机技术(SPOOLing技术)
脱机:脱离主机的控制进行输入/输出操作,不需要CPU干预和控制。
假脱机:又称SPOOLing技术,用软件的方式模拟脱机技术,需要有多道技术支持。
打印机设备是独占式设备,但是可以用SPOOLing技术改造成共享设备。
小节回顾
(三)设备的分配与回收
设备分配的安全性
- 安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒
优点:不会死所,破坏了”请求和保持“条件
缺点:对于一个进程来说,CPU和I/O设备只能串行工作,CPU效率低 - 不安全分配方式:进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞。
优点:进程的计算任务和I/O任务可以并行处理,使进程迅速推进
缺点:有可能发生死锁
设备分配方式
- 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
- 动态分配:进程运行过程中动态分配资源。
设备分配管理中的数据结构
- 设备控制表DCT:系统为每个设备配置一张DCT,用于记录设备情况
- 控制器控制表COCT:每个设备控制器都会对应一张COCT,操作系统根据COCT信息对控制器进行操作和管理
- 通道控制表CHCT:每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理
- 系统设备表SDT:记录了系统中全部设备的情况,每个设备对应一个表目。
逻辑设备名到物理设备名的映射(设备分配步骤)
小节回顾
(四)缓冲区管理
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。
缓冲区的作用
- 缓和CPU与I/O设备之间速度不匹配的矛盾
- 减少对CPU的中断频率,放宽对CPU中断相应时间的限制
- 解决数据粒度不匹配的问题
- 提高CPU与I/O设备之间的并行性
⭐单缓冲⭐
操作系统会在主存中为其分配一个缓冲区,一个缓冲区的大小就是一个块。
⭐⭐注意⭐⭐:当缓冲区的数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
⭐结论⭐:采用单缓冲策略,处理一块数据平均耗时Max(C,T)+M
⭐双缓冲策略⭐
采用双缓冲策略,操作系统会在主存中为其分配两个缓冲区
⭐结论⭐:采用双缓冲策略,处理一个数据块的平均耗时为Max(T,C+M)
循环缓冲区
将多个大小相等的缓冲区链接成一个循环队列。
缓冲池
缓冲池由系统中公用的缓冲区组成。这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)