IO设备的基本概念和分类🌟
- 块设备:如磁盘等——数据传输的基本单位是“块”,传输速率较高,可寻址,即对它可随机地读/写任一块
- 字符设备:鼠标、键盘等——数据传输的基本单位是字符。传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式
IO控制器
- 一个I/O控制器可能会对应多个设备;
- 数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。
- 有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O
- 另一些计算机则采用I/O专用地址,即寄存器独立编址
![](https://i-blog.csdnimg.cn/blog_migrate/3e009ee02bc24c9add71eff1e93cb89a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3c7ed91d8f95e59e88b3cb77519d2f46.png)
IO控制方式🌟
- IO控制方式:用什么样的方式来控制IO设备的数据读/写
程序直接控制方式
![](https://i-blog.csdnimg.cn/blog_migrate/e4671882ce838c1e88bc49f52475f462.png)
![](https://i-blog.csdnimg.cn/blog_migrate/78867d3c1e55f912504d6da0f0f86f50.png)
中断驱动方式
![](https://i-blog.csdnimg.cn/blog_migrate/d3f1e71802b7bcc1d376e679467ae039.png)
DMA方式
![](https://i-blog.csdnimg.cn/blog_migrate/d82cc60aaccad0ba593df30cc0358c1f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2bc57086fcdfb25d9c7d03b0ff2decec.png)
通道控制方式
![](https://i-blog.csdnimg.cn/blog_migrate/31b28134ff8e215ecdbbafea7c43a13b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/24bfb518b242e6fc126ca9352b9c3880.png)
![](https://i-blog.csdnimg.cn/blog_migrate/73351608ccbe922ecae6eedc2f3d7b34.png)
IO软件层次
![](https://i-blog.csdnimg.cn/blog_migrate/6ac46b0c33c325420999438a483b7a25.png)
- 中间三层属于操作系统的内核部分,即"IO系统",或称"IO核心子系统"
- 每一层会利用其下层提供的服务,实现某些功能,并屏蔽实现的具体细节,向高层提供服务(“封装思想”)
- 越上面的层次越接近用户
- 越下面的层次越接近硬件
IO核心子系统
- 此I/O核心子系统要实现的功能其实就是中间三层要实现的功能
IO调度
- I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求
- 如:磁盘调度(先来先服务算法、最短寻道优先算法、SCAN算法、C-SCAN算法、LOOK算法、C-LOOK算法)。当多个磁盘I/O请求到来时,用某种调度算法确定满足I/O请求的顺序
- 同理,打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定I/O调度顺序。
设备保护
- 操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)
- 在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。(参考“文件保护”小节)
假脱机技术(SPOOLing技术)🌟
注:假脱机技术(SPOOLing 技术)需要请求“磁盘设备”的设备独立性软件的服务,因此一般来说假脱机技术是在用户层软件实现的。但是408大纲又将假脱机技术归为“I/O核心子系统”的功能,因此考试时还是以大纲为准
![](https://i-blog.csdnimg.cn/blog_migrate/14268fce6ef4228b2428e01daefc201e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9315897b1bae67528bbae08fb9460471.png)
- “输入进程”模拟脱机输入时的外围控制机
- “输出进程”模拟脱机输出时的外围控制机
- 在输入进程的控制下,“输入缓冲区”用于暂存从输入设备输入的数据,之后再转存到输入井中
- 在输出进程的控制下,“输出缓冲区”用于暂存从输出井送来的数据,之后再传送到输出设备上
- 注意,输入缓冲区和输出缓冲区是在内存中的缓冲区
![](https://i-blog.csdnimg.cn/blog_migrate/d2c11dbdde23b6096144560df3c9145d.png)
- 当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务
- SPOOLing 技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备
![](https://i-blog.csdnimg.cn/blog_migrate/ae53f6e195e21454a27ea38fae455dd3.png)
设备分配与回收
![](https://i-blog.csdnimg.cn/blog_migrate/c3fe78dd590fc821811b5eaf1d2d08af.png)
- 设备的固有属性可分为三种:独占设备、共享设备、虚拟设备
- 独占设备——一个时段只能分配给一个进程(如打印机)
- 共享设备——可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用
- 虚拟设备——采用 SPOOLing 技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用 SPOOLing 技术实现的共享打印机)
- 从进程运行的安全性上考虑,设备分配有两种方式:
- 安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒。(eg:考虑进程请求打印机打印输出的例子)
- 一个时段内每个进程只能使用一个设备
- 优点:破坏了“请求和保持”条件,不会死锁
- 缺点:对于一个进程来说,CPU和I/O设备只能串行工作
- 不安全分配方式:进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞
- 一个进程可以同时使用多个设备
- 优点:进程的计算任务和I/O任务可以并行处理,使进程迅速推进
- 缺点:有可能发生死锁(死锁避免、死锁的检测和解除)
- 安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒。(eg:考虑进程请求打印机打印输出的例子)
![](https://i-blog.csdnimg.cn/blog_migrate/30ab16520e561dd43a443c25579f7ef0.png)
缓冲区管理(缓冲与高速缓存)🌟
![](https://i-blog.csdnimg.cn/blog_migrate/0811920afc76f07918fb9b24cc87e390.png)
-
T>C:块设备输入内存的时间比CPU处理数据的时间慢
- 处理一块数据的平均用时= T+M
-
T<C:块设备输入内存的时间比CPU处理数据的时间快
- 处理一块数据的平均用时= C+M
-
综上,采用单缓冲策略,处理一块数据平均耗时 Max(C, T)+M
![](https://i-blog.csdnimg.cn/blog_migrate/ee1710063e77bbe75ea009e84a58c11e.png)
- 假设T>C+M,处理一块数据的平均用时 = T
- 假设T<C+M,处理一个数据块平均耗时 = C+M
- 综上,采用双缓冲策略,处理一个数据块的平均耗时为 Max (T, C+M)
![](https://i-blog.csdnimg.cn/blog_migrate/c73b019f8051df59b8178f45e666789c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a17a774533a2733a1bfe1463aa5674b9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d5fa547543db30bf2c859a1867e5f075.png)
磁盘的结构
![](https://i-blog.csdnimg.cn/blog_migrate/6a4ea265ab4d97523f1e62216e357605.png)
- 需要把“磁头”移动到想要读/写的扇区所在的磁道。 磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作
![](https://i-blog.csdnimg.cn/blog_migrate/f371e83055f938e036ccdb3e1bb05f04.png)
磁盘调度算法🌟
![](https://i-blog.csdnimg.cn/blog_migrate/1f3862d8b39c9473863807e1ba91df74.png)
先来先服务(FCFS)
![](https://i-blog.csdnimg.cn/blog_migrate/e9e285f4b692fb923ec3c8019936f9cf.png)
最短寻找时间优先(SSTF)
![](https://i-blog.csdnimg.cn/blog_migrate/d343e7e305c0216ac8d6c8c8393befb9.png)
扫描算法(SCAN)
![](https://i-blog.csdnimg.cn/blog_migrate/d9451e618dc72fc151c0de3635e42a89.png)
- 若题目中无特别说明, 则SCAN 就是 LOOK
![](https://i-blog.csdnimg.cn/blog_migrate/ad3347aad5192e7c1d7bea56d9ee7f87.png)
循环扫描算法(C-SCAN)
![](https://i-blog.csdnimg.cn/blog_migrate/d622201619181661776ed1f7f69f2a5f.png)
- 若题目中无特别说明,C-SCAN 就是C-LOOK
![](https://i-blog.csdnimg.cn/blog_migrate/3f57b75915d70f7bc77f2e5c6fbc1716.png)
小结
![](https://i-blog.csdnimg.cn/blog_migrate/e3aa4f412a19825eb197b7c4663b6d59.png)
减少延迟时间的方法
- 磁头读入一个扇区数据后需要一小段时间处理, 如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的“延迟时间”
交替编号
![](https://i-blog.csdnimg.cn/blog_migrate/ab6d38d18798d5f970cc8cbfc308ae65.png)
- 采用交替编号的策略,让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小
错位命名
![](https://i-blog.csdnimg.cn/blog_migrate/3357454b80f7393a86b2e02da40bfac0.png)
- 采用错位命名法, 读取完磁盘块 (000, 00, 111)之后, 还有一段时间处理, 当(000, 01, 000) 第一次划过1号盘面的磁头下方时,就可以直接读取数据。从而减少了延迟时间
磁盘地址结构的设计
![](https://i-blog.csdnimg.cn/blog_migrate/c6afe6746f850ccc1c631625370f033d.png)
- 第一圈读到0、1、2、3扇区的数据(物理上有一定的间隔)
- 第二圈读到4、5、6、7扇区的数据(物理上有一定的间隔)
![](https://i-blog.csdnimg.cn/blog_migrate/466db2a662af672d7244d7bd4ab40566.png)
- 读取地址连续的磁盘块时,采用(柱面号, 盘面号,扇区号)的地址结构可以减少磁头移动消耗的时间
小结
![](https://i-blog.csdnimg.cn/blog_migrate/50ed02e41b90d22d97f4d2fb667491bc.png)
磁盘的管理
磁盘初始化
![](https://i-blog.csdnimg.cn/blog_migrate/b4a66b4bbbf849600670576b936d60d9.png)
引导块
![](https://i-blog.csdnimg.cn/blog_migrate/b312535f0b1f2681831c0676bbc5956d.png)
坏块的管理
![](https://i-blog.csdnimg.cn/blog_migrate/efdf4d10eea212989031d7f5b4a126b3.png)
小结
![](https://i-blog.csdnimg.cn/blog_migrate/4554a9f9fe56fa1f8660e90896c47aff.png)