现代操作系统笔记——第五章输入输出

时间:2024-04-07 14:12:05

第五章输入输出(IO)

IO设备

分为两类:

  1. 块设备

把信息存储在固定大小的块中,每个块都有自己的地址,所有传输以一个或多个完整的块为单位,基本特征时每个块能独立于其它的块而读写。如磁盘

  1. 字符设备

以字符为单位发送或接收一个字符流,而不考虑任何块结构,不可寻址也没有任何寻道操作,如打印机、网络接口、鼠标等

    时钟、内存映射的显示器不属于以上两种。

设备控制器

IO设备一般由机械部件和电子部件组成,其中电子部件称作设备控制器或适配器。

设备控制器的任务:把串行的位流转换为字节块,并进行必要的错误校正工作,使内存可用。

内存映射IO

CPU与设备的控制寄存器和数据缓冲区进行通信的方式:

  1. 每个设备寄存器被分配一个IO端口号,形成IO端口空间,是普通用户程序不能对其进行访问,
  2. 内存映射IO,即每个控制寄存器都被分配唯一的内存地址,且不会有内存被分配这一地址。

    优点:可以使用C或C++访问这些寄存器而不需要汇编代码;不需要特殊的保护机制来组织用户进程执行IO操作;可以引用内存的每一条指令也可以引用控制寄存器。

    缺点:必须对每个页面有选择性地禁用高速缓存。

直接存储器DMA

用于大量的数据输入输出,绕过CPU直接在内存和外设之间传递数据。

现代操作系统笔记——第五章输入输出

现代操作系统笔记——第五章输入输出

现代操作系统笔记——第五章输入输出

需要缓冲区的原因:通过内部缓冲,词牌控制器可在开始传送之前检验校验和,如果校验和是错误的,就会发出一个表明错误的信号并且不会传送;避免控制器存储很多字,简化控制器设计。

 

中断

现代操作系统笔记——第五章输入输出

如果没有其它中断悬而未决,中断控制器立刻对中断进行处理,如果有另一个中断还在处理,或者有更高优先级的中断请求,那么该设备暂时不被理睬。中断控制器在地址线上放置一个数字表明那个设备需要关注,并制器一个中断CPU的信号,中断信号导致CPU停止当前的工作并开始做其它的事情。

现代操作系统笔记——第五章输入输出

现代操作系统笔记——第五章输入输出

IO软件的目标

  1. 设备独立性
  2. 统一命名
  3. 错误处理
  4. 同步、异步传输
  5. 缓冲

 

现代操作系统笔记——第五章输入输出

 

程序控制(轮询)IO

现代操作系统笔记——第五章输入输出

现代操作系统笔记——第五章输入输出

首先数据被复制到内核空间,然后操作系统进入密闭的循环,一次输出一个字符,然后不断查询设备是否就绪准备接收另一个字符,这一行为称为轮询或忙等待。

优点:简单

缺点:直到IO完成之前要占用全部的CPU,低效。

 

中断驱动IO

在CPU等待打印机就绪时,可用使用中断来调度别的进程,请求打印字符串的进程被阻塞。

现代操作系统笔记——第五章输入输出

使用DMA的IO

将中断的次数从打印每个字符一次减少到打印每个缓冲区一次

现代操作系统笔记——第五章输入输出

中断完成后的步骤

现代操作系统笔记——第五章输入输出

 

设备驱动程序

每个连接到计算机的IO设备都需要某些设备特定的代码对其进行控制,这样的代码称为设备驱动程序,一般都设备的制造商编写并随同设备一起交付。

 

 

 

设备无关IO软件

设计方式:对每种设备类型,操作系统定义一组驱动程序必须支持的函数。驱动程序通常包含一张表格,具有针对这些函数指向驱动程序自身的指针,驱动程序装载时,操作系统记录这张函数指针表的地址,当操作系统需要调用一个函数时,就可以通过这张表格发出间接调用。

缓冲

现代操作系统笔记——第五章输入输出

缓冲太多会降低传输效率

 

IO系统层次及功能

现代操作系统笔记——第五章输入输出

 

 

 

磁盘被组织为柱面,柱面包含若干磁道,磁道被分为若干扇区。

重叠寻道:控制器同时控制多个驱动器进行寻道。

RAID

廉价磁盘冗余阵列,基本思想:将一个装满磁盘的盒子安装到计算机,用RAID控制器替换磁盘控制器卡,将数据复制到整个RAID上,然后继续常规的操作。

现代操作系统笔记——第五章输入输出

0级RAID:每个条带k个扇区,0~k-1为条带0,k到2k-1为条带1,……,如果软件发出命令读取连续四条条带的数据块,就会将命令分解为四条单独命令,每条对应磁盘的一块。数据量越大性能越好

1级RAID:真正的RAID,复制了所有的磁盘,存在四个主磁盘和四个备份磁盘,执行写操作时,每个条带都被写了两次,执行读操作时,可以使用任何一个副本,写性能不比单个驱动器好,读性能高出两倍,容错性好,恢复简单

2级RAID:工作在字甚至字节的基础。将单个虚拟磁盘的每个字节分割成4位的半字节对,然后每个半字节对加入一个汉明码从而形成7位的字,1、2、4位位奇偶校验位。优点:一个驱动器的损坏不会引起问题,汉明码可以解决;缺点:要求所有驱动器的旋转必须同步

3级RAID:2级的简化版本,为每个数据字计算奇偶校验位,并写入奇偶驱动器中,各个驱动器必须精确同步

4级RAID:将奇偶条带写到另一个磁盘。如果有磁带发生微小更新,就必须读取所有的驱动器并重新计算奇偶校验,需要两次读和写

5级RAID:消除4级raid的瓶颈,均匀分布奇偶校验位。

6级RAID:与5级相似,跨磁盘分条带的数据具有两个奇偶块,写的代价更高,能提高更高的可靠性。

 

磁盘臂调度算法

读写磁盘块的时间影响因素:

现代操作系统笔记——第五章输入输出

寻道时间占主导地位

磁盘驱动程序维护一张表,按柱面号索引,每一柱面的未完成请求组成一个链表,链表头存放在表的相应表目中。

现代操作系统笔记——第五章输入输出

1、先来先服务算法FIFS

    很难优化寻道时间。

现代操作系统笔记——第五章输入输出

2、最短寻道优先算法SSF

    下一次总是处理与磁头距离最近的请求以使寻道时间最小化。

缺点:如果磁盘负载很重,那么大部分时间磁盘臂将停留在磁盘的中部区域,而两端极端区域的请求不得不等待,远离中部区域的请求得到的服务很差,获得最小响应时间的目标和公平性存在冲突。

现代操作系统笔记——第五章输入输出

现代操作系统笔记——第五章输入输出

3、电梯算法

维护一个二进制位,当一个请求处理完之后,检查该位,如果是UP,磁盘臂移到下一个更高的未完成的请求,如果更高的位置没有未完成的请求,就将方向位取反,当方向位为DOWN时,同时存在一个低位置的请求,就移向该位置,如果不存在未决的请求就停止等待。

现代操作系统笔记——第五章输入输出

现代操作系统笔记——第五章输入输出

如果寻道时间远快于旋转延迟,就使用不同的优化策略,未完成的请求应该按扇区号排序。

错误处理

对于坏块的两种处理方法:

  1. 在控制器中对它们进行处理
  2. 在操作系统中对它们进行处理

前者对于坏扇区,用备用扇区替换它:将备份扇区重映射为坏扇区;将所有扇区向上移动一个扇区。

现代操作系统笔记——第五章输入输出