zoukankan      html  css  js  c++  java
  • 操作系统总结之 输入输出系统(下)

    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) 暂略

  • 相关阅读:
    debian8.4 ibus中文输入法
    C++成员变量的初始化顺序问题
    debian及ubuntu挂载本地硬盘的ISO镜像文件
    linux中eth0原何变成了eth1
    debian8.4 ubuntu14.04双系统_debian8.4硬盘安装
    oracle:delete和truncate
    数组指针与指针数组(good)
    Intel 8086_通用寄存器|段寄存器
    linux shell 不同进制数据转换(二进制,八进制,十六进制,base64)
    shell中exec命令
  • 原文地址:https://www.cnblogs.com/Tattoo-Welkin/p/10335276.html
Copyright © 2011-2022 走看看