操作系统学习笔记——I/O系统

内容

  • I/0系统概述
  • 缓冲管理
  • 设备管理
  • 磁盘存取管理

I/0概述

I/O系统的基本功能

  • 提高处理机和I/O设备的利用率
  • 对I/O设备进行控制
  • 隐藏物理设备的相关细节
  • 设备无关性
  • 错误处理

I/O软件的层次结构

1. 用户层I/O软件
2. 设备独立性软件
3. 设备驱动程序
4. 中断处理程序

I/O系统分层结构

1. 中断处理程序
2. 设备驱动程序

3. 设备独立性软件

I/O的控制方式

  1. 程序控制I/O
    操作系统学习笔记——I/O系统_第1张图片
    过程:
    A:当用户进程需要输入数据时, 通过CPU向控制器发出一条I/O指令, 启动设备输入数据, 把寄存器中状态寄存器busy置1
    B:用户进程进入测试等待状态, 在等待过程中, CPU不断的用一条测试指令检查外围设备状态寄存器busy, (而外围设备只有在数据传入控制器的数据寄存器之后, 才将busy置0)
    C:处理器将数据寄存器中数据取出, 送入主存指定单元, 完成一个字符的I/O操作。

优点:控制简单, 不需要多硬件支持
缺点:
CPU利用率低
不能实现设备间的并行工作
无法发现和处理产生的错误
适用场景:只需少量硬件的电路


  1. 中断驱动I/O
    为了减少程序控制方式下cpu的等待时间以及提高并行度, 引入中断机制。
    外围设备仅当操作正常结束或异常结束, 才像CPU发出中断
    操作系统学习笔记——I/O系统_第2张图片

优点:
可以实现CPU与设备之间的并行性操作
可以实现设备与设备之间的并行性操作
提高CPU利用率
缺点
中断次数增加
耗费CPU的时间
容易数据丢失
适用场景:高效场合

  1. 直接存储器访问DMA
    为了进一步减少CPU对I/O操作的干预, 防止因并行操作设备过多使CPU来不及处理或因速度不匹配造成数据丢失, 在DMA控制器下, 采用窃取窃取或者挪用总线控制权, 在设备和主存之间开辟直接数据交换通道, 而不必要CPU干预

特点:

  1. 数据传送一数据块为基本单位
  2. 所传颂的数据从设备直接送入主存, 或者从主存直接输出到设备上
  3. 仅仅在传送一个或者多个数据快的开始和结束时才需要CPU的干预, 整块数据是在控制器的控制下完成

优点:
减少了CPU中断处理次数
数据传输过程无需CPU干预
缺点:有一定的局限性

中断与DMA区别
1、
中断方式是在数据缓冲寄存区满后,发中断请求,CPU进行中断处理;
DMA方式则是以数据块为单位传输的,在所要求传送的数据块全部传送结束 时要求CPU进行中断处理,这样大大减少CPU进行中断处理的次数。DMA方式不需CPU干预传送操作,不占用CPU任何资源,
2,
中断方式的数据传送方向是由设备到CPU再到内存,或者相反。
DMA方式的数据传送则是将所传输的数据由设备直接送入内存,或是由内存直接送到设备

缓冲管理

为什么引入缓冲

  1. 改善CPU与I/O设备之间速度不匹配的矛盾
    比如一个程序, 时而进行长时间的计算而无输出, 时而又把输出送到打印机。 因为打印机速度跟不上CPU, 使得CPU长时间等待。
  2. 减少CPU的中断频率
    如果I/O操作每传送一个字节就一次中断, 那么设置n个字节的缓冲区, 可以等到满了后才产生中断
  3. 提高CPU和I/O设备之间并行性
    与DMA的区别:DMA直接将设备输入数据传送到用户进程内存区域, 中断后不需要再内存中移动。 缓冲区先将数据放到内存指定的内存区, 然后中断后将缓冲数据复制到用户进程中

I/O缓冲方式

1.硬件缓冲

在硬件上专门增加寄存器组存放缓冲数据。

2.软件缓冲

在内存中分配一块缓冲数据, 有操作系统进行管理
根据缓冲区设置多少:单缓冲, 双缓冲, 多缓冲
根据缓冲区的从属关系:专用缓冲区, 缓冲池

- 单缓冲

当每一个用户进程发出一个I/O请求时, 操作系统为之分配一个缓冲区。CPU从磁盘上读取一块数据步骤:
1.从磁盘把一块数据读入到用户区
2.OS将缓冲区数据传送到用户区
3.CPU对数据进行处理

当输入时间远远大于计算时间时, 系统性能没有显著提高;
当缓冲区不能及时释放, 也不能显著提高

- 双缓冲

操作系统学习笔记——I/O系统_第3张图片

基本方法是:在设备输入时, 先将数据输入到缓冲区A, 装满后边转向缓冲区B。 此时操作系统可以从缓冲区A提取数据传送到用户区, 最后由CPU对数据进行计算

实现了缓冲区读入数据的第一步(输入)和读入它前一个数据的后面两步
(传送和计算)的并行工作, 当缓冲区数据的输入和传送的速度基本匹配时, 
有较好的效果

- 循环缓冲

- 缓冲池

也是缓冲区, 相对于其他缓冲区能更好的实现CPU并行和设备利用率

  1. 组成
    emq空缓冲队列:用于取出空缓冲区来进行读写
    inq输入队列:用来记录输入设备输入的数据, 以便用户程序读取。
    outqs输出队列:用来记录用户程序输出到设备的数据, 以便用户程序读取

操作系统学习笔记——I/O系统_第4张图片
2.缓冲池队列是临界资源需要考虑同步互斥

设备管理

设备分类

设备分类

  • 信息交换
    1.块设备(以数据快为单位, 像磁盘)
    2.字符设备(以字符为单位)
  • 外部设备
    1.系统设备(OS生成时, 登记在系统的标准设备, 比如终端, 打印机, 磁盘)
    2.用户设备(和系统设备相反, 没有登记在系统中的非标准设备, 有用户提供)
  • 资源分配
    1.独占设备(在一段时间内只能有一个进程使用的设备, 一般为低速I/O设备。 比如磁带)
    2.共享设备(在一段时间内, 有多个进程共同使用的设备,多个进程以交叉的方式来使用设备, 资源利用率较高, 比如硬盘 )
    3,虚拟设备(在一类设备上模拟另一类设备, 常用共享设备模拟独占设备, 被模拟的设备叫虚设备将慢速的独占设备改造成多个用户可共享的设备

设备控制器

设备控制块结构

操作系统学习笔记——I/O系统_第5张图片

设备控制器功能

  • 地址识别:识别I/O端口地址, 让I/O操作与设备对应
  • 接受和识别命令指挥设备执行
  • 接受和记录设备的状态:(记录在控制器的状态寄存器上)
  • 数据交换, 数据缓冲, 差错控制:**CPU <> 控制器 <> 设备的数据交换, 实现了CPU到设备的数据传递和设备到CPU的数据传递 **

寻址方法(访问设备寄存器)

  • I/O指令
    IN指令完成输入, OUT指令完成输出操作, 地址码支出I/O设备的设备代码
  • 内存映射
    从主存的四肢空间分出一部分地址码作为I/O设备代码, 当访问到这些地址时, 被访问的不是主存储器, 而是I/O设备寄存器

设备管理的分层模型

操作系统学习笔记——I/O系统_第6张图片

设备分配

分配:设备, 控制器和通道。 需要记录与他们相关的信息。 包括:资源标识, 物理连接情况, 占有进程, 等待进程等。
分为设备控制块, 控制器控制块, 通道控制块

静态分配: 在作业级进行的设备分配称为静态分配,作业进入系统时进行分配,退出系统时收回全部资源。
动态分配: 进程级进行的设备分配称为动态分配,当进程需要使用某设备而提出申请时进行分配,使用完毕后立即将其收回。

设备无关性

所谓设备独立性是指用户在编制程序时所使用的设备与实际使用的设备无关,
也就是在用户程序中仅使用逻辑设备名。逻辑设备名是用户自己指定的设备名(或设备号),它是暂时的、可更改的。而物理设备名是系统提供的设备的标准名称,它是永久的、不可更改的。虽然程序在实际执行中必须使用实际的物理设备,就好像程序在主存中一定要使用物理地址一样,但在用户程序中则应避免使用实际的物理名,而采用逻辑设备名。这样做的道理就和用户程序中要使用逻辑地址而不使用物理地址的道理一样。设备管理的任务之一就是把逻辑设备名转换成物理设备名。

优点:
提高设备利用率。
 

假定系统拥有同类型a、b、c、d四台输入机,今有作业A申请两台输入机。如果该作业指定要使用a、b两台,那么,当其中有一台为另一作业Q所占有,或者是a、b两台中有一台坏了,虽然系统中还有c、d两台可用,且未被占用,但也不能接收作业A。这样处理是按物理设备名来分配的,造成了人为的限制。如果按逻辑设备名请求,作业A只要提出要求两台该类设备,系统就会将空闲的两台输入机分配给它。从而,作业A就可以投入运行,设备也可得到充分利用。另外,这样还可以提高系统的可适应性和可扩展性。

设备驱动程序

设备驱动程序的功能

  • 将接受到的抽象要求转化为具体要求
  • 检查用户I/O的合法性, 读出和检查I/O设备的状态, 传递有关参数, 设置设备工作方式
  • 发出I/O命令, 如果设备空闲启动设备, 否则进程挂起到设备等待队列上
  • 及时相应有控制器或通道发来的中断请求, 并根据中断类型调用相应的中断处理程序进行处理
  • 对于设置通道的计算机系统, 驱动程序还应能根据用户I/O的请求, 自动的构造通道程序。

设备程序驱动的特点

  1. 驱动程序主要是在请求I/O的进程与设备控制器之间的一个通信程序
  2. 驱动程序与I/O设备的特性密切相关
  3. 驱动程序与I/O控制方式有关

设备驱动程序的处理过程

  1. 将抽象的要求转换为具体的要求(将逻辑盘块号转换为具体的盘面, 磁道和扇区)
  2. 检查I/O请求合法性(如:打印机请求读, 一读方式打开磁盘请求写)
  3. 读出并检查设备的状态
  4. 传送必要的参数(启动磁盘, 先将字节数和内存始址送到控制器)
  5. 工作方式的设置
  6. 启动I/O设备:想控制器发送控制命令, 将自己足协进入睡眠状态。 由控制器下进行指定的I/O操作
  7. 完成I/O后, 设备控制器向CPU发出中断请求, CPU响应中断转向中断处理程序唤醒相应的设备驱动进程

磁盘存取设备管理

影响磁盘读写因素

因素: 寻道时间, 旋转延迟, 传输时间。
寻道时间: 读写磁头移动到要求磁道位置所需要的时间。
平均寻道时间: 依赖于磁盘驱动器组件的物理尺寸和磁头进行加速和减速的快慢程度
旋转延迟: 磁头到达所要求磁道位置后, 等到所要求的扇面旋转到洗头下方的平均时间。
。。。。待写

磁盘调度算法

1.FCFS:先来先服务算法;
2.SSTF:最短寻道时间算法;
3.SCAN:扫描算法(电梯调度算法);
4.CSCAN:循环扫描算法;
磁盘访问顺序序列:86, 147, 91, 177, 94, 150, 102, 175,130 读写磁头位置: 125, 刚结束请求是143

FCFS:就是不论初始磁头在什么位置,都是按照服务队列的先后顺序依次处理进程,可以类比队列的先进先出。优点是进程处理起来非常简单,但缺点显而易见,就是平均寻道长度会很长。

优点:简单公平;
缺点:效率低下, 存在磁头反复移动问题, 增加服务时间, 有损机械

移动距离:125-86)+(147-86)+(147-91)+(177-91)+(177-94)+(150-94)+(150-102)+(175-102)+(175-130)=547

SSTF:已知磁头的初始位置,则最先被处理就是距离磁头位置最近的进程,处理完成后再处理距离当前磁道最近的进程,直到所有的进程被处理。该算法的优点是平均寻道长度会大大减少,缺点是距离初始磁头较远的服务长期得不到处理,产生“饥饿”现象。具体的思路是:通过循环寻找与初始磁头最近的进程,将进程处理,然后将该进程标记,将初始磁头移动到该进程所在的磁道。然后依次类推,已经标记的进程不再参与,直到所有的进程都被标记,磁盘调度完成。

优点:改善磁道平均服务时间
缺点:访问不均匀, 造成某些访问请求长期被无视

移动距离=130-125+147-130+150-147+175-150+177-175+177-102+102-94+94-91+91-86=143

SCAN:磁头仅沿一个方向进行扫描,在扫描途中完成所有没有完成的请求,直到磁头到达磁盘在这个方向上的最后一个磁道或者这个方向上最后一个请求所在的磁道。利用数组存储进程和磁道编号,依据给定的初始磁头,先找到初始磁头在哪两个进程之间,然后向内扫描。当磁头扫描到磁盘最内层即磁道0且进程还没有全部被处理,磁头开始向外扫描,直到所有的进程都完成。

优点:克服最短寻道优先缺点, 同时考虑方向和距离, 吞吐量大, 平均响应时间较少。
缺点:由于是摆动式扫描方法, 两侧磁道被访问的频率低于中间磁道

由于刚结束磁道是143,目前是125,因此磁道方向是减小方向,到最小;再从剩余中最小到最大
(125),102,94,91,86,130,147,150,175,177

移动距离=125-102+102-94+94-86+130-86+147-130+150-147+175-150+177-175=130

CSCAN:在磁盘扫描算法的基础上改变磁头的扫描路径:扫描到最内层之后从最外层向内继续扫描,即扫描方向一致。该算法的思路与扫描算法基本一致,也使用二维数组进行进程编号和进程所在磁道号的存储,算法的不同之处在于当磁头扫描到磁盘的最内层时,磁头跳转到磁盘最外层重新向内扫描,这样就可以有效的避免将已经扫描过的磁道重新扫描一次,降低了平均寻到距离。

由于刚结束磁道是143,目前是125,因此磁道方向是减小方向,到最小;再从剩余中最大到最小。
(125),102,94,91,86,177,175,150,147,130
移动距离=125-102+102-94+94-91+91-86+177-86+177-175+175-150+150-147+147-130=177

你可能感兴趣的:(操作系统(OS))