操作系统总结之 输入输出系统(下)

1. 缓冲管理

为什么引入缓冲? (不想说了)

I/O缓冲方式

1. 单缓冲

   块设备输入时, 输入到缓冲区的时间为T, OS将数据从缓冲区传到用户区的时间为M, CPU处理这块数据的时间为C; 显然T和C是可以并行的。
这里写图片描述

2. 双缓冲

  为了加快I/O速度提高设备利用率,又引入了双缓冲机制(缓冲对换 Buffer Swapping); 如果C“<”T, 块设备可连续输入
这里写图片描述

3.缓冲池(Buffer Pool)

  1. 缓冲池的组成
    • 空缓冲链队列emp:由空缓冲区组成
    • 输入缓冲链队列inq:由装满输入数据的缓冲区组成
    • 输出缓冲链队列out:由装满输出数据的缓冲区组成
    • 4种工作缓冲区
      收容输入、提取输入、收容输出、提取输出。
      从某队列上取下来操作完后再挂到另一队列上
  2. 对缓冲池队列操作的两个过程
    缓冲池中的队列是临界资源要考虑互斥与同步
    这里写图片描述

2. 设备分配(暂略)

3. 设备驱动

1.设备驱动程序的功能和特点

1.设备驱动程序的功能

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

2.设备处理方式

(1) 为每类设备设置一个I/O进程。
(2) 整个系统设置一个I/O进程。
(3) 只为各类设备设置相应的设备处理程序供调用。

  1. I/O请求的进入

用户程序:调用send将I/O请求发送给I/O进程;调用block将自己阻塞,直到I/O任务完成后被唤醒

系统:利用wakeup唤醒I/O进程,完成用户所要求的I/O处理

  1. I/O中断的进入
       当I/O中断发生时,内核中的中断处理程序发一条消息给I/O进程,由I/O进程负责判断并处理中断

  2. I/O进程
       是系统进程,一般赋予最高优先级。一旦被唤醒,它可以很快抢占处理机投入运行
    I/O进程开始运行后,首先关闭中断,然后用receive去接收消息。两种情形:

     (1) 没有消息,则开中断,将自己阻塞;
     (2) 有消息,则判断消息(I/O请求或I/O中断);
    

    a. I/O请求
    准备通道程序,发出启动I/O指令,继续判断有无 消息
    b. I/O中断,进一步判断正常或异常结束

      正常:唤醒要求进行I/O操作的进程
      异常:转入相应的错误处理程序
    

    设备驱动程序的特点

(1) 驱动程序主要是在请求I/O的进程与设备控制器之间的一个通信程序。
(2) 驱动程序与I/O设备的特性密切相关。
(3) 驱动程序与I/O控制方式相关。
(4) 有些驱动程序固化在ROM上。

2. 设备驱动程序的处理过程

  1. 将抽象的要求转化为具体的要求
    如:将逻辑盘块号转换为具体的盘面、磁道和扇区
  2. 检查I/O请求的合法性
    如:打印机请求读, 以读方式打开磁盘后请求写
  3. 读出并检查设备的状态
    如:读并查状态是否为就绪, 确定启动控制器或等待
  4. 传送必要的参数
    如:启动磁盘, 先将字节数和内存起始地址送控制器
  5. 工作方式的设置
    如:异步通信, 先设置波特率、校验方式、停止位等
  6. 启动I/O设备:向控制器发送控制命令, 将自己阻塞进入睡眠状态。由控制器控制下进行指定的I/O操作。
  7. 完成I/O后,设备控制器向CPU发出中断请求;CPU响应转向中断处理程序唤醒相应的设备驱动进程。

I/O完成中断处理程序的处理过程

   在设备控制器的控制下, 设备完成I/O操作后, 设备控制器便向CPU发出一个中断请求; CPU响应后, 转向中断处理程序,中断处理含以下几个步骤:

(1) 唤醒被阻塞的驱动(程序)进程
(2) 保护被中断进程的CPU环境
(3) 分析中断原因转入相应的设备处理程序
(4) 进行中断处理
(5) 恢复被中断进程的现场 

这里写图片描述

4. 磁盘存取设备管理

1. 磁盘概述

(1)磁盘的特点和结构:

   容量大, 断电后仍可保存信息, 存取速度较快, 成本较低,可实现直接(随机)存取, 存取磁盘上任一物理块的时间不依赖于该物理块所处的位置。

    盘设备由两部分组成: 驱动部分+存储介质(磁盘)

  磁盘以恒定转速旋转, 磁臂沿径向驱动磁头移动到所要求的磁道上, 并等待所要求的扇区开始位置旋转到磁头下, 开始读写数据, 在磁头和缓冲区间传输数据
这里写图片描述
说明:图中的一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。

提问:盘块(磁盘块)和扇区有什么关系?

答:扇区是从硬件上面来讲的概念,而磁盘块是从操作系统或者说是软件上面来讲的概念,两者不同。磁盘块一般4kb,而扇区一般512b,所以磁盘块由多个扇区构成。

(2)磁盘数据组织和格式

   信息记录在磁道上, 多个盘片, 正反两面都用来记录信息, 每面一个磁头, 所有盘面中处于同一磁道号上的所有磁道组成一个柱面

(3)磁盘访问时间(Ta)

  • 寻道时间Ts: 把磁头移动定位到指定磁道所经历的时间, 启动时间s与移动n条磁道时间之和
    Ts=m x n +s 一般为5~30ms
  • 旋转时间Tr
    等待指定扇区旋转移动到磁头下面所经历的时间
    5400r/min=90r/sec的硬盘:平均Tr=1/2r=5.55ms
  • 传输时间Tt
    从磁盘到内存读写数据实际经历的时间: Tt=b/rN 其中b为读写字节数N为一条磁道总字节数
    访问时间:Ta= Ts+1/2r+b/rN 主要与Ts有关

2. 磁盘调度

   当多个进程都需要访问磁盘时, 访盘请求在等待, 应采用一定的策略, 对这些请求的服务顺序调整安排,旨在降低平均磁盘服务时间, 达到公平、高效。

    公平:一个I/O请求在有限时间内满足。
    高效:减少设备机械运动所带来的时间浪费。

磁盘调度考虑的问题:
一次访盘时间 = 寻道时间+旋转延迟时间+存取时间
(1) 减少寻道时间(活动头磁盘)
(2) 减少延迟时间(固定头磁盘)

磁盘调度算法:

  1. 先来先服务FCFS(First-Come First Served)

按访问请求到达的先后次序服务
优点:简单, 公平;
缺点:效率低, 相临两次请求可能会造成最内到最外的柱面寻道, 使磁头反复移动, 增加了平均寻道时间

  1. 最短寻道时间优先SSTF(Shortest Seek Time First)

优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先
优点:磁盘的平均寻道时间最小
缺点:进程”饥饿”现象, 有时会造成与当前磁道距离远的访问请求长期等待得不到服务(不公平)

  1. 扫描算法SCAN**电梯**调度算法

当设备无访问请求时, 磁头不动;当有访问请求时, 磁头按一个方向移动, 在移动过程中对遇到的访问请求进行服务, 然后, 判断该方向上是否还有访问请求,如果有则继续扫描; 否则改变移动方向,并为经过的访问请求服务, 如此反复。

  1. 循环扫描(CSCAN)算法

磁头单向移动(如向外), 移动到最外磁道后立即返回最里面要访问的磁道, 构成循环扫描

5. 磁盘高速缓存(Disk Cache) 暂略

posted @ 2018-07-11 11:31  Tattoo_Welkin  阅读(275)  评论(0编辑  收藏  举报