Skip to content

第五章 I/O管理

第一节 I/O管理概述

「IO设备」设备分类

按信息交换分类

  • 块设备
    • 信息交换以数据块为单位,属于有结构设备。
    • 传输速率高,可寻址,可随机读写。
  • 字符设备
    • 信息交换以字符为单位,属于无结构设备。
    • 传输速率低,不可寻址,时常采用中断IO方式。

传输速率分类

  • 低速设备:键盘鼠标等。
  • 中速设备:激光打印机。
  • 高速设备:磁盘机,光盘机。

「IO设备」IO接口

  • IO接口(设备控制器)位于CPU和设备之间,由三部分组成。

image.png

IO接口的三部分

  • 设备控制器与CPU的接口
    • 接口有三类信号线:数据线、地址线、控制线。
    • 数据线连接数据寄存器和控制/状态寄存器。
  • 设备控制器与设备的接口
    • 一个设备控制器连接多个设备。
    • 每个接口中都存在数据、控制和状态三种信号。
  • IO逻辑
    • 实现对设备的控制。
    • 通过一组控制线和CPU交互,对CPU收到的IO命令进行译码。

设备控制器的主要功能

  • 接收和识别CPU发来的命令。
  • 数据交换(设备和控制器之间、控制器和主存之间的数据传输)
  • 标示和报告设备的状态,供CPU处理。
  • 地址识别
  • 数据缓冲
  • 差错控制

「IO设备」IO端口

IO端口是设备控制器中可被CPU直接访问的寄存器。

IO端口包含的三种寄存器

  • 数据寄存器
  • 状态寄存器
  • 控制寄存器

实现CPU和IO端口通信的两种方法

  • 独立编址
    • 每个端口分配一个IO端口号,所有IO端口形成IO端口空间。
    • 普通用户程序不能访问,只有操作系统使用特殊的IO执行才能访问端口。
  • 统一编址
    • 又称 内存映射 IO,每个端口被分配唯一的内存地址,不会有其他程序占用该内存地址。
    • 通常分配给端口的地址靠近地址空间的顶端。

image.png

「IO控制方式」程序直接控制方式

image.png

计算机从外设读取字数据时,CPU对外设状态进行循环检查,确定该字已经在IO控制器的数据寄存器中。

特点

  • CPU的高速型与IO设备低速性不匹配,使CPU大量时间被浪费。
  • 简单易于实现,CPU与IO串行工作,效率相当低。

「IO控制方式」中断驱动方式

允许IO设备申请中断主动打断CPU的运行并请求服务。

特点

  • 比程序直接控制方式有效。
  • 由于数据在存储器和IO控制器之间传输必须经过CPU,仍然消耗CPU较多时间。

「IO控制方式」DMA方式

DMA(直接存储器存取)是在IO设备和内存之间开辟直接的数据交换通路,解放CPU。

特点

  • 基本数据单位为数据块。
  • 传送的数据,从设备直接进入内存,或从内存直接进入设备,不需要经过CPU。
  • 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预,整块数据的传送实在DMA控制下完成的。

DMA控制器的组成(4类寄存器保证主机与控制器之间成块的数据交换)

image.png

  • 命令/状态寄存器(CR):接收CPU发来的IO命令,控制信息或设备状态等。
  • 内存地址寄存器(MAR):输入时存放内存的起始目标地址;输出时存放内存源地址。
  • 数据寄存器(DR):暂存即将传送的数据。
  • 数据计数器(DC):本次传送的字节数。

DMA工作过程

  • CPU接收到IO设备的DMA请求,给DMA控制器发一条命令,同时设置MAR和DC初值,启动DMA控制器,继续其他工作。

  • 之后CPU把控制操作委托给DMA控制器,控制器负责处理。

  • DMA控制器直接和存储器交互,传送整个数据块,每次传送一个字,不需要CPU参与。

  • 传送完成后,DMA发送一个中断信号给CPU。

  • 只有DMA传送的开始和结束才需要CPU介入。

DMA方式与中断方式的区别

区别中断方式DMA方式
CPU中断时间每个数据需要传输时中断CPU所要求传送的一批数据全部传送结束时中断CPU
控制权在CPU控制下完成在DMA控制器控制下完成

「IO控制方式」通道控制方式

  • IO通道是专门负责输入/输出的处理机。
  • IO通道方式是DMA方式的发展。
  • 进一步减少CPU的干预,把对一个数据块IO为单位的干预改为对一组数据块IO的干预。

IO通道与一般处理机的区别

  • 通道指令类型单一,没有自己的内存。
  • 通道执行的通道程序放在主机的内存中,也就是通道和CPU共享内存。

IO通道和DMA方式的区别

区别DMA方式IO通道方式
传输的数据块大小、传输的内存位置CPU控制IO通道控制
交互设备台数一个DMA控制器对应一台设备与内存传递数据一个通道对应多台设备与内存交换数据

四种IO方式的形象总结

image.png

「IO软件层次」IO软件层次结构

image.png

  • 用户层IO软件
  • 设备独立性软件
  • 设备驱动程序
  • 中断处理程序

「应用程序IO接口」字符设备接口

  • 指数据的存取和传输是以字符为单位的设备,如键盘、打印机等。
  • 基本特征:传输速率较低、不可寻址,IO采用中断驱动。

「应用程序IO接口」块设备接口

块设备接口指数据存取和传输以数据块为单位的设备,如磁盘。

块设备接口的基本特征

  • 传输速率较高、可寻址,IO采用DMA方式。
  • 隐藏了磁盘的二维结构(将扇区从 0 到 n-1 依次编号)。
  • 将抽象命令映射为底层操作。
  • 内存映射接口通过内存的字节数组来访问磁盘,而不提供读/写磁盘操作。

「应用程序IO接口」网络设备接口

  • 如网络套接字(socket)接口。

「应用程序IO接口」阻塞/非阻塞接口

  • 通常仅程序要通过轮询方式查询IO操作是否完成。
  • 大多数OS提供的IO接口都采用阻塞IO。

「IO管理」IO管理需要完成的功能

image.png

第二节 设备独立性软件

「高速缓存与缓冲区」磁盘高速缓存

  • 磁盘高速缓存逻辑上属于磁盘物理上驻留在内存中的盘块

高速幻簇在内存中的两种形式

  • 在内存中开辟一个单独的空间作为磁盘高速缓存,大小固定。
  • 把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘IO时共享。

「高速缓存与缓冲区」缓冲区

引入缓冲区的主要目的

  • 缓和CPU和IO设备之间速度不匹配的矛盾。
  • 减少CPU的中断频率,放宽对CPU中断响应时间的限制。
  • 解决基本数据单元大小不匹配的问题。
  • 提高CPU和IO设备之间的并行性。

缓冲区的实现方法

  • 采用硬件缓冲器,成本太高,只在关键部位使用。
  • 采用缓冲区(内存区域)

缓冲技术(根据系统设置缓冲器的个数划分)

  • 单缓冲:一方IO,另一方等待。

  • 双缓冲

    • 缓冲区1写满,写缓冲区2。
    • 双向数据传输:双发都设置双缓冲区,一发送,一接收。 image.png
  • 循环缓冲:多个大小相同的缓冲区,每个缓冲区有一指向下一缓冲区的链接指针。

  • 缓冲池:多个系统公用的缓冲区构成,按使用状况形成三个队列:空幻冲队列、输入队列、输出队列。

image.png

「高速缓存与缓冲区」之间的对比

image.png

「设备分配与回收」设备分配

  • 设备分配就是根据用户的IO请求分配所需的设备。

根据设备的特性分类

  • 独占式使用设备:进程独占。
  • 分时式共享使用设备:共享设备分配给多个进程,分时使用。
  • 以SPOOLing方式使用外部设备:实现虚拟设备,分配给多个进程。

「设备分配」数据结构

设备分配的主要设备结构

  • 设备控制表(DCT)
  • 控制器控制表(COCT)
  • 通道控制表(CHCT)
  • 系统设备表(SDT)

设备控制表(DCT)

  • 一个设备控制表表征一个设备,控制表中的表项是设备的各个属性。 image.png

系统设备表(SDT)

  • 整个系统只有一张SDT。
  • SDT记录已连接到系统中的所有物理设备的情况,每个物理设备占一个条目。 image.png

「设备分配」设备分配策略

  • 设备分配原则
  • 设备分配方式
    • 静态分配:对独占设备的分配,效率低,无死锁。
    • 动态分配:根据进程执行的需要进行,高效率,可能死锁。
  • 设备分配算法(动态设备分配算法):先来先服务、优先级等。 :::

「设备分配」设备分配安全性

设备分配安全性:指设备分配中防止发生死锁。

  • 安全分配方式
    • IO请求后阻塞,IO操作完成后进行唤醒。
    • 优点:安全;
    • 缺点:CPU和IO设备串行。
  • 非安全分配方式
    • 进程可发出多个IO请求,若请求的设备被占用才会进入阻塞态。
    • 优点:进程可操作多设备,推进迅速;
    • 缺点:可能死锁。

「设备分配」设备独立性

设备独立性是应用接口独立于具体使用的物理设备。

为什么引入设备独立性?

  • 提高设备分配的灵活性和设备的利用率,方便IO重定向。
  • 就是在软件和设备之间加一个中间层,让软件不用对设备进行专门适配。

如何实现设备独立性?

  • 应用程序中使用逻辑设备名请求设备。
  • 系统中设置一张逻辑设备表(Logical Unit Table,LUT),将逻辑设备名映射为物理设备名。
  • LUT表包含逻辑设备名、物理设备名、设备驱动程序入口地址;
  • 当进程用逻辑设备名来请求分配设备时,系统分配一台物理设备,并在LUT中新建条目。
  • 当进程再用逻辑设备名请求IO操作时,系统通过查找LUT寻找物理设备和驱动程序。

逻辑设备表的两种设置方式

  • 在整个系统中只设置一张LUT。
  • 为每个用户设置一张LUT
    • 当用户登录时,系统为用户建立一个进程,并创建一张LUT放入进程PCB中。

「设备分配」SPOOLing技术(假脱机)

引入假脱机技术的目的?

  • 缓和CPU高速性和IO设备低速性之间的矛盾

SPOOLing系统的组成

  • 输入井和输出井:磁盘上开辟出的两个存储区域
    • 输入井:模拟脱机输入时的磁盘,收容IO输入数据。
    • 输出井:模拟脱机输出时的磁盘,收容进程输出数据。
  • 输入缓冲区和输出缓冲区:内存中开辟的两个缓冲区
    • 输入缓冲区送到输入井。
    • 输出缓冲区暂存从输出井送来的数据,以后送到输出设备。
  • 输入进程和输出进程:用于模拟脱机输入/输出时的外围控制机。

image.png

SPOOLing系统的特点

  • 提高了IO速度
  • 将独占设备改造为共享设备
  • 实现了虚拟设备功能
  • 是以空间换时间的技术:开辟空间做等待队列。

第三节 磁盘和固态硬盘

image.png

「磁盘」磁盘读写操作时间

一次磁盘读写操作的时间由寻道时间、旋转延迟时间和传输时间决定。

寻道时间、旋转延迟时间、传输时间

image.png

「磁盘调度算法」先来先服务

  • 先来先服务算法(First Come First Serverd,FCFS)

根据访问磁盘的先后循序调度

image.png

「磁盘调度算法」最短寻找时间优先

  • 最短寻找时间优先(Shortest Seek Time First,SSTF)

选择与当前磁头最近的磁道

  • 不能保证平均寻找时间最小,可能产生饥饿现象。 image.png

「磁盘调度算法」扫描算法(SCAN)

  • 扫描算法(SCAN),又称电梯调度算法

在磁头移动方向上选择与当前磁头所在磁道最近的请求

  • 相当于在最短寻找时间优先 + 规定磁头运动方向
  • 对最近扫描过的区域不公平,访问局部性方面不如FCFS和SSTF算法。

image.png

「磁盘调度算法」循环扫描(C-SCAN)

  • 循环扫描算法(Circle SCAN,C-SCAN)
  • 在扫描算法的基础上规定磁头单向移动,回返时直接移动到起始端而不服务任何请求。

image.png

「磁盘调度算法」LOOK与C-LOOK调度

  • SCAN和C-SCAN的改进型,即磁头移动只需要到达最远端请求而不需要到达磁盘终点。

image.png

注意事项

  • 若无特别说明,可默认SCAN和C-SCAN算法为LOOK和C-LOOK调度。

「磁盘调度算法」调度算法比较

image.png

「磁盘调度」扇区错位命名

  • 将盘面扇区交替编号,对磁盘片组的不同盘面错位命名
  • 因为磁盘是连续自转设备,磁头读写一个物理块后,需要经过短暂的处理时间才能读写下一块。

image.png

磁盘寻块时间

  • 磁盘寻块时间 = 寻道时间 + 延迟时间 + 传输时间(无法减少)

「固态硬盘」特征

image.png

「固态硬盘」磨损均衡

  • 动态磨损均衡:写入数据时,自动选择新的闪存块。
  • 静态磨损均衡:先进,就算无数据写入,SSD会监测并自动进行数据分配,使老闪存块无须承担写数据存储任务,使平常读写操作在较新闪存块中进行。