这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

I/O管理

内容与总线和输入输出系统关联很大,放在一起对比复习。应熟练掌握磁盘的调度算法。
# 输入/输出管理

## I/O管理基础

- 设备的基本概念
- I/O控制方式
- I/O软件层次结构
- I/O应用程序接口

## 设备独立软件

- 缓冲区管理
- 设备分配和回收
- SPOOLing
- 设备驱动程序接口

## 外存管理

- 磁盘
- 固态硬盘

1 - I/O设备

需熟练掌握I/O控制方式和软件层次,常在选择题中考察。

设备类型

以linux系统为例,说明系统的I/O设备类型

  1. 块设备(Block Devices):
    • 块设备以固定大小的块(通常为512字节或4KB)为单位进行数据读写。
    • 代表性的块设备包括硬盘驱动器(如SATA、SSD)、USB闪存驱动器、CD/DVD驱动器等。
    • 块设备通常用于存储文件系统,支持随机访问和缓存。
  2. 字符设备(Character Devices):
    • 字符设备以字符流为单位进行数据读写,没有块的概念。
    • 代表性的字符设备包括键盘、鼠标、串口设备、声卡等。
    • 字符设备通常用于实时数据流、交互性输入/输出。
  3. 网络设备(Network Devices):
    • 网络设备允许计算机通过网络与其他计算机通信。
    • 代表性的网络设备包括以太网适配器(Ethernet Adapter)、Wi-Fi适配器、调制解调器(Modem)等。

I/O控制方式

  • 程序直接控制方式
  • 中断驱动方式
  • DMA方式

I/O软件层次

用户层I/O软件
设备独立性软件
设备驱动程序
中断处理程序
硬件
I/O软件层次
  1. 用户层I/O软件:
    • 目的:提供简单、易用的界面供用户级程序访问I/O设备。
    • 特点:这层通常是库函数或系统调用的形式,如C语言的printfscanf或UNIX的readwrite等。
    • 功能:文件操作、控制台I/O、网络通信等。
  2. 设备独立性软件:
    • 目的:为不同的I/O设备提供统一的接口,从而使用户层软件和设备驱动程序之间解耦。
    • 特点:它隐藏了硬件的特定细节,使上层软件不必为每种特定的设备编写不同的代码。
    • 功能:命名、保护、设备独立的I/O操作、错误处理等。
  3. 设备驱动程序:
    • 目的:为每种I/O设备提供专门的接口和管理。
    • 特点:设备驱动是操作系统中与硬件直接交互的部分,通常由硬件制造商提供。
    • 功能:初始化设备、处理设备的细节、数据传输、错误处理等。每种设备(如磁盘、网卡、打印机等)都有自己专门的驱动程序。
  4. 中断处理程序:
    • 目的:响应来自I/O设备的中断请求。
    • 特点:当I/O设备完成任务或需要注意时,它会发送一个中断信号给CPU。中断处理程序负责捕获这个中断并执行相应的处理。
    • 功能:保存当前CPU的状态、处理中断请求、恢复CPU状态等。

I/O应用程序接口

操作系统通常会提供一套设备I/O应用程序接口(API)。这套API为应用程序提供了一种标准化的方式来请求I/O操作,而无需关心底层硬件的细节。

I/O API的主要目的之一是为应用程序提供一个与硬件无关的接口。这意味着应用程序可以使用相同的API调用来读写不同的设备,而不需要知道这些设备的具体实现细节。

2 - 设备管理

需了解操作系统缓冲区、设备管理和SPOOLing知识,可能在选择题中考察。

缓冲区

1. 磁盘高速缓存

磁盘缓存指的是利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。

因此,磁盘高速缓存从逻辑上属于磁盘,物理上则是驻留在内存中的盘块。

2. 缓冲区

缓冲区是一块预留在内存中的区域,用于临时存放数据,从而使得输入/输出操作与其他处理操作可以相对独立地进行。缓冲区的使用可以减少I/O操作的等待时间,提高系统的整体效率。

单缓冲

在单缓冲策略中,只有一个缓冲区用于数据的读取或写入。

工作过程:

  • 数据从源(例如,磁盘)读入到单个缓冲区。
  • 当数据在缓冲区内时,应用程序可以从该缓冲区中处理数据。
  • 当应用程序处理完缓冲区中的数据并需要更多数据时,新的数据再次被读入到同一缓冲区中。

缺点:当缓冲区被填满并且数据被应用程序处理时,I/O操作必须等待,直到缓冲区再次可用。这可能导致I/O操作的延迟。

双缓冲

双缓冲使用两个缓冲区而不是一个。当一个缓冲区被应用程序用于读取或处理数据时,另一个缓冲区可以用于并行的I/O操作。

工作过程:

  • 数据从源读入到第一个缓冲区。
  • 当第一个缓冲区的数据被应用程序处理时,第二个缓冲区可以开始并行地加载下一批数据。
  • 一旦第一个缓冲区的数据被处理完毕,应用程序可以立即切换到第二个缓冲区,而第一个缓冲区则开始加载新的数据。

优点:

由于两个缓冲区交替使用,I/O操作和数据处理可以并行进行,从而减少了等待时间,提高了效率。

工作区
缓冲区
I/O设备
输入
传送
用户进程
工作区
缓冲区
I/O设备
输入
传送
用户进程
缓冲区

循环缓冲

循环缓冲是一个固定大小的缓冲区,其特点是当达到缓冲区的尾部时,下一个位置自动“回绕”到缓冲区的开始位置。循环缓冲的主要优点是它可以无限地存储新数据,只要覆盖旧数据即可。

工作原理:

  • 循环缓冲有两个指针:一个是“写”指针,另一个是“读”指针。
  • 当新数据到来时,数据被写入“写”指针当前指向的位置,并将“写”指针向前移动。
  • 当数据需要被消费或读取时,数据从“读”指针的当前位置读出,并将“读”指针向前移动。
  • 如果“写”指针到达缓冲区的尾部并继续前进,它会回绕到缓冲区的开始位置。同样,“读"指针也会如此。

缓冲池

缓冲池是一组预先分配的缓冲区,这些缓冲区可以被系统中的多个进程或线程共享和重新使用。

工作原理:

  • 当一个进程需要一个缓冲区时,它从缓冲池中请求一个。如果可用的话,一个缓冲区会分配给该进程。
  • 一旦进程完成了对缓冲区的使用,它会将缓冲区返回到池中,使其可以被其他进程重新使用。
  • 如果缓冲池为空,进程可能需要等待,直到有其他进程释放一个缓冲区。

设备分配和回收

概述

设备分配是指根据用户的I/O请求分配所需的设备。分配的原则是充分发挥设备的使用效率,尽可能地让设备忙碌,但又避免造成死锁。

从设备的特性来看,设备常使用以下三种使用方式:

  • 独占式使用设备
  • 分时共享使用设备
  • 以SPOOLing方式使用外部设备

设备控制表

在操作系统中,为了有效管理和访问外围设备,经常使用一种数据结构叫做“设备控制表”(Device Control Table,简称DCT)。这是一个特殊的数据结构,用于存储有关连接到系统的每个设备的信息。

     设备类型type
DCT 1
DCT 2
DCT n
     设备标识符deviceid
      设备状态
      指向控制器表的指针
      重复执行次数或时间
      设备队列的队首指针
设备控制表DCT

设备分配方式

  • 静态分配:在静态分配中,设备在程序开始执行时分配,并在程序执行完毕后才释放。这意味着该设备在程序执行期间是专用的,不会被其他进程共享。
  • 动态分配:在动态分配中,设备只在需要时被分配,并在不再需要时立即释放,这使得其他进程可以在第一个进程的I/O操作之间使用该设备。

设备分配安全性

  • 安全分配:安全分配意味着操作系统在分配资源时采用一种策略,确保系统始终处于一个不会导致死锁的状态。
  • 不安全分配:不安全的分配方式并不意味着系统必然会进入死锁,但它意味着系统采取了一种策略,可能会使其进入不安全状态。

逻辑设备名到物理设备名的映射

  • 逻辑设备名:是用户和应用程序用来引用设备的友好名称或标识符。这些名字通常比物理设备名更容易记忆和使用。
  • 物理设备名:物理设备名是用来直接与硬件通信的标识符。这些名称通常更加具体,并反映了设备的实际物理特性或位置。

操作系统通过逻辑设备表(LUT,Logical Unit Table)将逻辑设备名映射到物理设备名。 当应用程序或用户尝试访问一个设备时,操作系统首先查找逻辑设备表以确定逻辑设备名与哪个物理设备相关联。然后,操作系统使用表中的信息来管理对实际物理设备的访问。

SPOOLing技术

SPOOLing(Simultaneous Peripheral Operations On-Line)技术,也被称为“假脱机”技术,是一种在计算机系统中用于管理I/O设备,尤其是打印机和磁带设备等慢速设备的方法。

SPOOLing的核心思想是将输入/输出设备从计算机主处理单元中解耦,并将其与中间存储区域(通常是硬盘)相关联,从而可以缓冲数据。SPOOLing技术实现了虚拟设备功能,可以将设备同时分配给多个进程

  1. 中间存储区:SPOOLing使用磁盘作为中间存储区,将要输出到外部设备的数据先保存到这个区域。同样地,从外部设备读取的数据也首先存放在这个中间区域。
  2. 数据独立性:由于数据首先被存储在中间区域,主计算机处理和I/O操作可以相对独立地进行。这意味着当一个文件正在被打印时,另一个文件可以同时被存储在磁盘上等待打印,从而实现了设备的高效利用。
  3. 背景处理:SPOOLing通常在后台进行,这意味着用户在提交了打印作业或其他I/O作业后可以继续执行其他任务,而SPOOLing系统会在背后管理所有的队列和设备操作。
  4. SPOOLing的应用:最常见的SPOOLing应用是在打印环境中。当用户提交一个打印任务时,数据首先被发送到磁盘上的一个打印队列。打印守护进程(或服务)会定期检查这个队列,并将任务逐一发送到打印机。这种方式允许多个用户和应用同时提交打印任务,而不需要等待其他任务完成。
  5. 优势
    • 设备利用率:SPOOLing可以提高设备的利用率,因为设备可以持续不断地工作,而不需要等待用户或计算机处理。
    • 用户响应时间:SPOOLing可以减少用户需要等待设备完成工作的时间,因为数据的读/写是在背景中进行的。

3 - 磁盘

重点内容,需熟练掌握机械磁盘调度算法,在选择题中会考察,也可能在大题中考察相关调度算法。

磁盘管理

1. 磁盘初始化

一个新的磁盘只是一个磁性记录材料的空白盘。在磁盘可以存储数据之前,必须将它分为扇区,一遍磁盘控制器能够进行读写操作。

这个过程称为低级格式化(物理格式化)。低级格式化为每个扇区使用特殊的数据结构,填充磁盘。每个扇区通常由头部、数据区域和尾部组成。头部和尾部包含了一些磁盘控制器的使用信息。大多数磁盘在出厂时就已经被低级初始化。

2. 分区

在使用磁盘存储文件之前,操作系统首先需要对磁盘进行分区,并且将每个分区的其实扇区和大小都记录在磁盘主引导记录的分区表中。完成分区后,需要对每个分区进行逻辑格式化(创建文件系统),操作系统将初始的文件系统数据结构存储在磁盘上,这些数据结构包扣空闲空间、已分配的空间以及一个初始为空的目录。

3. 引导块

计算机启动时需要运行一个初始化程序,它初始化CPU和内存等,接着启动操作系统。为此,初始化程序找到磁盘上的操作系统内核,将它加载到内存,并转到起始地址,从而开始操作系统的运行。

初始化程序通常存放在ROM中,为了避免初始化程序改变而需要改变ROM硬件的问题,通常只在ROM中保留很小的初始化程序,而将完整功能的引导程序保存在磁盘的启动块上,启动块位于磁盘的固定位置。具有启动分区的磁盘称为启动磁盘或系统磁盘。

MBR
Partition 1
Partition 2
Partition 3
Partition 4
bootloader
partition
table
Boot Partition

以实际系统引导过程为例,操作系统将磁盘分为多个分区,引导代码被存储在磁盘的第0号扇区,称为主引导分区(MBR)。引导首先运行ROM中的代码,这个代码指示系统的从MBR中读取引导代码(bootloader)。当系统找到bootloader时,bootloader会识别并加载操作系统的核心的所在分区并加载操作系统内核。核心一旦被加载并开始执行,它会继续初始化系统、加载设备驱动、启动系统服务,最终为用户提供一个可操作的界面或环境。

4. 坏块

随着时间的推移,物理磁盘上可能会出现无法读写的区域,这些区域被称为坏块。坏块可以是出厂时就存在的,也可以是由于磁盘的长期使用和磨损导致的。

对坏块的处理实质上就是使用某种机制使系统不去使用坏块。

机械硬盘调度算法

磁盘性能指标我们知道 磁盘数据读取时间 包含寻道时间、旋转延迟以及传输时间。在一个时刻,磁盘可能有多个数据读写请求,这些数据可能分布在不同的磁道上,如何分配处理这些读写请求的顺序,也很大程度上影响了磁盘的性能。

磁盘寻道调度算法包含以下几种:

FCFS

FCFS 即 First Come First Service,先来先服务算法。

按照请求进入队列的顺序来服务请求。

0
0
18
18
38
38
39
39
55
55
58
58
90
90
100
100
150
150
160
160
184
184
200
200
FCFS
FCFS
Time
Time
Text is not SVG - cannot display

SSTF

SSTF 即 Shortest Seek Time First,最短寻道时间优先算法。

磁盘进行调度时每次都选择 距离当前磁头位置最近的请求 进行服务。

0
0
18
18
38
38
39
39
55
55
58
58
90
90
100
100
150
150
160
160
184
184
200
200
SSTF
SSTF
Text is not SVG - cannot display

SCAN

SCAN 即 电梯调度算法。

磁头从一个方向开始移动,直到该方向上没有更多的请求或达到边界,然后磁头改变方向并继续服务请求。因为磁头移动规律与电梯运行类似,所以这种算法也称为电梯调度算法。

0
0
18
18
38
38
39
39
55
55
58
58
90
90
100
100
150
150
160
160
184
184
200
200
SCAN
SCAN
Text is not SVG - cannot display

C-SCAN

C-SCAN 即 Cycle Scan,循环扫描算法。

和SCAN相似,但当磁头达到一个方向的边界时,它会立即跳回到另一边开始,并继续同一方向的移动。

0
0
18
18
38
38
39
39
55
55
58
58
90
90
100
100
150
150
160
160
184
184
200
200
C-SCAN
C-SCAN
Text is not SVG - cannot display
算法优点缺点
FCFS公平
简单
可能不是最优的,磁盘臂移动距离可能很长
SSTF通常比FCFS更高效
最小化磁盘臂的移动
可能导致某些请求长时间延迟或饿死
SCAN避免长时间等待磁盘两端可能经历不公平的等待时间
C-SCAN提供更均匀的等待时间中间部分的请求可能会被经过两次而不进行服务,直到磁头再次回来