块设备:信息交换以数据块为单位,属于有结构设备,比如磁盘等
字符设备:信息交换以字符为单位,信息没有固定结构,比如打印机,键盘等,使用流传输
IO接收器又称为设备控制器,位于CPU和设备之间,承担着CPU和设备之间通信的中介功能
IO端口指的是设备控制器中可以被CPU直接访问的寄存器,主要有三类
特点:每次只读写一个字
数据流向:
每个字的读写都需要CPU的帮助
优点:简单且易于实现
缺点:CPU和IO只能串行工作,CPU利用率低,CPU频繁轮询检查状态寄存器,干预频率高。
TIPS:
对比
其实和1.的比较就类似于CPU要跟IO设备交换信息,1.是CPU有空就主动问IO信息准备好了没,2.则是不需要CPU主动问,而是IO主动跟CPU说有信息要处理,那么CPU干完手上的活后腾出手来处理。
DMA是一种特殊的控制器,主要用于对块设备的管理(比如说磁盘),有几个改进
通道,一种硬件,可以理解为弱鸡版的CPU,通道可以识别并且执行一系列的通道指令。
CPU干预频率很低,只需要将一组任务交给通道就可以去执行其他任务了。
同时,每次可以读写一组数据块。CPU、通道和IO可以并行工作,资源利用率高,但是实现较为复杂,需要专门的硬件支持,成本较高。
IO软件层次结构 |
---|
用户层软件 |
设备独立性软件(内核) |
设备驱动程序(内核) |
中断处理程序(内核) |
硬件 |
IO的核心子系统主要包括设备独立性软件、设备驱动程序和中断处理程序三个
用户层软件
提供与用户交互的接口,用户可以调用接口。将用户请求翻译成格式化的IO请求,并且通过系统调用请求操作系统内核服务
设备独立性软件
设备无关性软件,与设备的硬件属性无关的功能都在这一层实现是对底层的进一步抽象。另外还有差错控制和设备保护功能,以及设备的分配和回收和数据缓冲区管理。
建立逻辑设备到物理设备的映射,并且根据设备类型选择调用相应的驱动程序。设备独立性软件会通过逻辑设备表LUT确定对应物理设备
逻辑设备名 | 物理设备名 | 驱动程序入口地址 |
---|
有的一整个系统只设置一张LUT,适用于单用户系统;多用户系统需要给每个用户分配一张LUT
设备驱动程序
驱动程序主要负责对硬件设备的具体控制,将上层发出的一系列指令转化为设备指令。
中断处理程序
IO任务完成时,IO控制器会发出一个中断信号,系统会根据中断信号类型找到相应的中断处理程序执行。
IO调度指的是用一个算法确定一个较优的顺序来处理各个IO请求
设备保护操作系统将设备看作为一种特殊的文件,每个设备也有对应的文件保护块,以此来实现设备保护
缓冲区是一个存储区域,可以使用专门的硬件寄存器,也可以利用内存作为缓冲区。
缓冲区作用:
双缓冲中操作系统会在主存中为其分配两个缓冲区。在双缓冲题目中,初始状态为:工作区空,其中一个缓冲区满但是另一个为空 TIPS:单缓冲和双缓冲也可以在两台主机通信时使用,可以配置缓冲区用于数据的发送和接收。如果只设置单缓冲区,则在任意时刻只能实现单向传输。采用双缓冲则可以实现双向数据传输。 将多个大小相等的缓冲区链接为一个循环队列。并且设置两个缓冲区:in指针指向下一个可以冲如数据的缓冲区;out缓冲区指向下一个能够取出数据的缓冲区 缓冲池是由系统中公用的缓冲区组成,这些缓冲区按照使用情况可以分为:空缓冲队列、输入队列、输出队列。根据实际运算中扮演的功能不同分为收容输入hin,提取输入sout,收容输入hout、提取输出sin。 分配的时候需要考虑设备的固有属性,设备的分配算法和设备分配中的安全性 设备固有属性: 安全分配方式:为进程分配一个设备后将其阻塞,本次设备使用完成后才将进程唤醒,一个时段内每个进程只能使用一个设备。优点是不会死锁,缺点是CPU和IO只能串行工作。 不安全分配方式:进程被分配到IO设备后,进程可以继续执行,之后还可以发出新的IO请求,直到某个IO请求无法满足的时候才阻塞。优点是CPU和IO可以并行处理,但是缺点是可能会发生死锁,应该搭配死锁避免、检测和解除的方法一起使用 静态分配:进程运行前就为其分配所有需要的资源,运行结束后归还资源,破坏了请求和保持条件,不会死锁 只有设备、控制器、通道都成功才算是分配成功。任何一个忙碌,进程都会被阻塞并且挂到对应队列的队尾 缺点: 改进方法:建立逻辑设备名到物理设备名的映射,用户编程只需要提供逻辑设备名。逻辑设备表LUT就是负责这个 整个系统共用一张LUT适合单用户操作系统,各个逻辑设备名不允许重复;每个用户使用一个LUT适用于多用户操作系统 脱机指的是脱离主机进行输入和输出操作。这使得缓慢的IO操作能够在CPU不参与的情况下完成,直到输入输出的数据累积到一定程度后,CPU一并将其取走并处理。 假脱机技术相关技术概念 实现SPOOLing技术需要多道程序技术支持 实例:共享打印机原理 一个磁盘会有许多个盘片,一个盘面会被划分为一个个的磁道;每一个磁道会被划分为若干个磁块。每个磁盘块分配的数据量是相同的。最内侧的面积最小,因此数据密度最大。其中不同盘面上的相同磁道构成了一个柱面 读取数据时,需要磁头移动到想要进行读写的磁道,而磁盘可以通过马达旋转。让目标扇区从磁头下面画过就能完成对扇区的读写。 磁盘的地址可以通过**(柱面号,盘面号,扇区号)**这个三元组来确定。 磁盘分类: 活动头磁盘:磁臂可以来回伸缩定位磁道 固定头磁盘:每一个磁道都有一个对应的磁头,磁头不需要活动 可换盘磁盘和不可换盘磁盘:区别是磁盘片是否可更换 寻找时间Ts:在读写数据前讲磁头移动到指定磁道的时间 延迟时间Tr:通过旋转磁盘,使得磁盘头定位到目标扇区所需时间,平均查找一个扇区需要旋转半圈。如果磁盘转速为r,则平均所需延迟时间为
T
r
=
1
2
∗
1
r
=
1
2
r
T_r=\frac{1}{2}*\frac{1}{r}=\frac{1}{2r}
Tr=21∗r1=2r1 需要学会计算总共移动了多少个磁道,平均每次移动多少个磁道 优先选择离当前磁头最近的磁道,是一种贪心算法。 只有磁头移动到最外侧磁道的时候才能往内侧移动,移动到最内侧的时候才能望外侧移动,又称为电梯算法 在SCAN之外,只要磁头移动方向上没有别的请求的时候,就可以立即改变磁头移动方向,而不需要移动到磁道边界。 磁头往特定方向移动时才处理磁道访问请求,而反方向移动会快速移动并且不做任何扫描。比如从0号到255号,在顺序扫描的时候才会处理磁道访问请求,而到达255之后,则快速回退到0号磁道并且开始下一个循环 和C-SCAN相比,C-LOOK不需要移动到磁道边缘,而是移动到最后一个请求的磁块后就可以快速返回并开始下一轮扫描。并且快速返回到的位置也不是磁道边缘,而是有磁道访问请求的最小磁道 注意:题目中无特殊说明,那么SCAN就是LOOK算法,C-SCAN就是C-LOOK,不需要考虑到移动到磁道边界,而只需要考虑移动到最后一个请求的磁道 磁头读取了一个扇区的数据后,需要一定的处理时间才能接着读下一个。如果数个逻辑上连续的数据在磁盘上也连续,那么在读取了第一个扇区,正在经过连续的第二个扇区的时候,由于磁盘正在处理第一个扇区的数据而错过第二个扇区的读取。此时想要再次读取需要多转一圈,导致较大的开销。 交替编号 错位命名 出厂时硬盘只进行了磁道的划分,并没有划分扇区 Step1:物理格式化(低级格式化),将各个磁道花费为固定扇区,一个扇区包括扇区头,数据部分和扇区尾。管理扇区所需要的数据结构一般存放在头和尾两个部分。 计算机开机时需要进行一系列工作,会执行一个初始化程序(自举程序),完成初始化工作。但是ROM中的数据难以更改和更新。因此现代的操作系统只会在ROM中存放很小的自举装入程序,通过该程序计算机可以从磁盘上读取完整的自举程序。这样自举程序也可以很方便更新 开机时拥有自举程序的块称为引导块 对于简单的硬盘,可以在逻辑格式化的时候对磁盘进行坏块检查,并且在FAT文件分配表中表明,从而不使用这些坏块。这种方法对操作系统是不透明的,操作系统知晓具体是哪个块坏了 对于复杂的磁盘,会维护一个坏块链表。坏块链表在出厂前进行的低级格式化的时候就已经初始化了。磁盘的磁盘控制器会维护该链表,并且会刻意保留一些备用扇区以替换坏快。这种方式称之为扇区备用,该方式对操作系统透明。
如果T>C,则平均处理时间为T+M;如果T双缓冲
假设T循环队列缓冲区
缓冲池
2.设备的分配和回收
设备分配安全性:
设备分配方式
动态分配:进程运行过程中动态申请设备资源设备分配管理中的数据结构
系统会为每一个设备分配一张设备控制表DCT
也会为每一个控制器配置一张控制器控制表
同时也会为通道配置一张通道控制表CHCT
最后还有一个系统设置表SDT,记录了系统中全部设备的情况,每一个设备对应一个表项。一个表项中有设备类型、设备标识符、设备控制表DCT、驱动程序入口设备分配步骤
3.SPOOLing假脱机技术
虽然系统中只有一台打印机,但是每个进程有打印请求的时候,系统都会在输出井中为其分配一个存储区,相当于一个逻辑设备,使得一个台物理设备变成了多台逻辑设备。5.3 磁盘和固态硬盘
1.磁盘
如果根据地址需要读取一个块,则:2.磁盘调度算法
一次磁盘读写操作所需时间
那么Ts=n*m+s
延迟时间和传输时间操作系统无法优化,因为影响这两个时间的主要因素是磁盘转速,而磁盘转速是固定的,操作系统无法影响。磁盘调度
先来先服务算法FCFS
最短寻找时间优先算法SSTF
优点:性能好,平均寻道时间短
缺点:可能产生饥饿现象扫描算法SCAN
LOOK调度算法
C-SCAN循环扫描算法
C-LOOK调度算法
3.减少磁盘延迟时间的方法
让逻辑上相邻的扇区在物理上有一定的间隔,可以使得读取连续逻辑扇区所需的延迟时间更小。
每个盘面上同一个位置的扇区使用不同的逻辑命名。使得在出现盘片切换的时候,可以连续读写。4.磁盘管理
磁盘初始化
Step2:将硬盘分区,每个分区由若干个柱面组成,这部分就是我们熟悉的C盘、D盘这些。
Step3:进行逻辑格式化,创建文件系统引导块
坏块