这一章在2022里是第四章的内容,在2023版里划分到了第五章。
磁盘
磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据。
可用(柱面号、盘面号、扇区号)来定位任意一个磁盘块。
磁盘读/写时间
根据进程请求访问磁盘的先后顺序进行调度
优点:如果请求访问的磁道比较集中的话,栓发性能还算过得去。
缺点:如果由大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。
SSTF算法会优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)
SSTF算法会产生饥饿的原因在于:磁头有可能在一个小区域内来回来去地移动。为了防止这个问题,可以规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。这就是扫描算法(SCAN)的思想。由于磁头移动的方式很像电梯,因此也叫电梯算法。
扫描算法(SCAN)中,只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。LOOK调度算法就是为了解决这个问题,如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边观察,因此叫LOOK)
SCAN算法对于各个位置磁道的响应频率不平均,而C-SCAN算法就是为了解决这个问题。规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求
C-SCAN算法的主要缺点是只有到达最边上的磁道时才能改变磁头移动方向,并且磁头返回时不一定需要返回到最边缘的磁道上。C-LOOK算法就是为了解决这个问题。如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。
⭐⭐若题目没有特别说明,则SCAN就是LOOK算法,C-SCAN算法就是C-LOOK算法⭐⭐。
交替编号
让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延时时间更小。
引导块
计算机开机时需要进行一系列的初始化工作,这些初始化工作是通过执行初始化程序(自举程序)完成的。
快坏的管理
无法正常使用的扇区就是“坏块”。这属于硬件故障,操作系统是无法修复的。应该将坏块标记出来,以免错误地使用到它。
小节回顾
I/O设备就是可以i将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。
按使用特性来分类
按传输速率分类
⭐按信息交换的单位分类⭐
小节回顾
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 寄存器独立编址
这里感觉跟计组中的内容都差不了太多,大致了解过一遍就行,当然没过过计组的还是要了解看看。
CPU在未得到设备反馈(状态寄存器显示完成)时一直进行轮询,设备与CPU的运行速率不同,所以需要不断轮询,这种方式CPU与I/O设备只能串行工作,导致CPU的利用率相当低。
数据流向都要先经过CPU的寄存器。
通道时一种硬件,可以理解为阉割版的CPU,通道可以识别并执行一系列通道指令。
通道可以执行的指令很单一,并且通道程序是放在主机内存中,也就是收通道程序与CPU共享内存。
底层I/O设备种类多种多样,用户层的应用程序无法用一个统一的系统调用接口来完成所有类型设备的I/O
阻塞I/O:应用程序发出I/O系统调用,进程需要转为阻塞态等待
非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待。
各公司开发的设备驱动程序接口不统一,则操作系统很难调用设备驱动程序。因此操作系统会统一一个标准,要求设备产商必须按照标准开发专属于该操作系统的驱动程序。
I/O调度
用某种算法确定一个好的顺序来处理各个I/O请求。
设备保护
类似操作系统的文件保护功能。在Unix系统中,设备被看作是一种特殊的文件。
脱机:脱离主机的控制进行输入/输出操作,不需要CPU干预和控制。
假脱机:又称SPOOLing技术,用软件的方式模拟脱机技术,需要有多道技术支持。
打印机设备是独占式设备,但是可以用SPOOLing技术改造成共享设备。
小节回顾
设备分配的安全性
设备分配方式
设备分配管理中的数据结构
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。
缓冲区的作用
操作系统会在主存中为其分配一个缓冲区,一个缓冲区的大小就是一个块。
⭐⭐注意⭐⭐:当缓冲区的数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
⭐结论⭐:采用单缓冲策略,处理一块数据平均耗时Max(C,T)+M
采用双缓冲策略,操作系统会在主存中为其分配两个缓冲区
⭐结论⭐:采用双缓冲策略,处理一个数据块的平均耗时为Max(T,C+M)
缓冲池由系统中公用的缓冲区组成。这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)