zoukankan      html  css  js  c++  java
  • 第十一章 I/O设备和磁盘管理

    第十一章 I/O设备和磁盘管理

    11.1 I/O设备

    1. I/O设备类别
    人可读
    机器可读
    通信

    2. I/O设备差异
    数据速率
    应用
    控制的复杂性
    传送单位
    数据表示
    错误条件

    3. 执行I/O的三种技术
    程序控制I/O
    中断驱动I/O
    直接存储器访问(DMA)

    11.2.2 直接存储器访问
    DMA单元能够模拟处理器,像处理器一样获得系统总线的控制权,利用系统总线与存储器进行双向数据传送。

    这里写图片描述

    1. DMA技术工作流程:
    当处理器想读或写一块数据时,通过向DMA模块发送以下信息来给DMA模块发出一条命令:
    请求读或写操作的信号,通过读写控制线发送。
    相关的I/O设备地址,通过数据线发送。
    从存储器中读或往存储器中写的起始地址,在数据线上传送,并由DMA模块保存在其地址寄存器中。
    读或写的字数,通过数据线传送,并由DMA模块保存在其数据计数寄存器中。
    处理器继续执行其工作;
    DMA模块直接从存储器中或往存储器中传送整块数据,一次传送一个字;
    传送结束后,DMA模块给处理器发送一个中断信号。

    2. DMA机制的配置方法

    这里写图片描述
    这里写图片描述
    这里写图片描述

    11.3 操作系统设计问题

    11.3.1 设计目标
    效率
    多道程序设计
    交换技术

    通用性
    处理器看待I/O设备的方式
    操作系统管理I/O设备和I/O操作的方式

    11.3.2 I/O功能的逻辑结构

    这里写图片描述

    11.4 I/O缓冲

    引入缓冲的目的
    改善中央处理器与外围设备之间速度不配的矛盾
    提高CPU和I/O设备的并行性

    例:某个用户进程需要从磁盘中读入多个数据块,对磁盘单元执行一个I/O命令,并等待(忙等或进程挂起)数据传送完毕。

    存在的问题:
    程序被挂起,等待相对比较慢的I/O完成。
    干扰了操作系统的交换决策。

    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    11.4.4 缓冲的作用

    在多道程序设计环境中,当存在多种I/O活动和多种进程活动时,缓冲是提高操作系统效率和单个进程性能的一种方法。
    但当进程的平均需求大于I/O设备的服务能力时,缓冲再多也不能让I/O设备与这个进程一直并驾齐驱。

    11.5 磁盘调度

    这里写图片描述

    11.5.1 磁盘性能参数

    寻道时间
    将磁头臂移到指定磁道所需要的时间。

    旋转延迟
    将磁盘的待访问地址区域旋转到读/写磁头可访问的位置所需要的时间。

    传输时间
    读或写操作的数据传输所需的时间。

    这里写图片描述

    11.5.2 磁盘调度策略

    题目:有一个磁盘队列,其I/O请求顺序如下:
    98,183,37,122,14,124,65,67
    磁头开始位于53

    1、FIFO调度

    先进先出( FIFO ):按请求到来的顺序进行服务
    优点:比较公平
    缺点:通常不能提供最快的服务

    这里写图片描述

    FIFO:平均寻道长度为640/8=80

    2、SSTF调度

    最短寻道时间优先算法(SSTF)
    从当前磁头位置选择最短寻道时间的请求,即选择与当前磁头位置最近的待处理请求。
    优点:较FCFS大大提高了性能
    缺点:可能会导致一些请求得不到服务,并不是最佳。

    这里写图片描述

    SSTF:平均寻道长度为236/8=29.5

    3、SCAN调度

    SCAN算法又称电梯算法
    磁臂从磁盘的一端向另一端移动,同时当磁头移过每个柱面时,处理位于该柱面上的服务请求。当到达另一端时,磁头改变方向,处理继续。
    需要知道磁头的当前位置和磁头移动的方向。
    某些请求处理可能不及时。

    这里写图片描述

    C-SCAN :平均寻道长度为322/8=40.25

    4.其它磁盘调度方法

    N-step-SCAN

    把磁盘请求队列分成长度为N的子队列,每一次用SCAN处理一个子队列。在处理某一个队列时,新请求必须添加到其他某个队列中。

    FSCAN

    使用两个子队列。当扫描开始时,所有请求都在一个队列中,而另一个队列为空。在扫描过程中,所有新到的请求都被放入另一个队列中。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    pcr的简单小脚本
    Q宠大乐斗自动玩
    Docker安装elsearch
    elasticserarch6.5.0百度云资源
    rabbitmq安装
    排序后分组取每个分组的第一条数据
    Lambda表达式的简单使用
    解决SpringBoot总是找不到jsp
    Java强转类型时报错
    iOS内购图文流程(2017)
  • 原文地址:https://www.cnblogs.com/yangquanhui/p/4937481.html
Copyright © 2011-2022 走看看