CH5输入/输出(I/O)概述(第5章)

概述

I/O软件的原则(Principles of I/O Software)

  • I/O软件的作用:I/O系统的核心任务是提供一个抽象层,让应用程序可以方便地与硬件进行交互。I/O软件需要负责设备管理、数据传输和错误处理等工作。
  • 目标:提高数据传输效率、减少程序与硬件之间的直接交互,提供可靠的接口。

I/O软件层次(I/O Software Layers)

  • I/O系统通常是分层设计的,每一层都有其特定功能。
    1. 用户层:提供高级接口供应用程序使用,如系统调用等。
    2. 设备驱动层:直接与硬件设备交互,管理设备的输入输出。
    3. 中间层(例如I/O调度):负责调度和优化I/O操作,如队列管理和缓存。
    4. 硬件层:实际执行物理I/O操作,将数据传送到存储介质或从存储介质读取数据。

磁盘(Disks)

  • 磁盘是主要的存储设备,广泛用于数据存储。它们用于持久化数据,提供较大的存储空间和较快的读写速度。
  • 磁盘的工作原理:磁盘通过旋转的磁盘片和磁头在其表面读取和写入数据。
  • 磁盘管理:包括磁盘调度、分区管理、数据读取/写入优化等任务。

操作系统与输入/输出(OS and I/O)

操作系统的I/O管理职责:

  • 控制所有I/O设备:操作系统负责管理计算机系统中的所有输入/输出设备。
  • 发出命令:操作系统通过发出命令来控制设备的操作。
  • 捕获中断:操作系统响应来自设备的中断请求,以处理设备的状态变化或数据传输等。
  • 处理错误:在I/O过程中,操作系统需要能够捕捉并处理设备错误。
  • 提供设备与操作系统其余部分之间的接口:操作系统充当设备与应用程序或用户之间的中介,提供统一的接口。
  • 设备无关性:操作系统通过抽象,使得应用程序在访问设备时不需要关心具体的设备类型。

I/O软件的原则(Principles of I/O Software)

I/O软件的目标:

  • 设备无关性:允许程序访问任何I/O设备,无需提前指定设备类型。比如,USB设备、硬盘、光盘等,程序应该能透明地处理它们。
  • 统一命名:设备或文件的命名应该是统一的,不依赖于具体机器或设备。
  • 错误处理:尽可能接近硬件层次进行错误处理,确保I/O操作的可靠性。
  • 同步与异步传输:同步传输(阻塞式)与异步传输(中断驱动)之间的选择。
  • 缓冲:数据从设备传输到目标位置时,可能需要使用缓冲区,以提高传输效率。
  • 共享与专用设备:像磁盘这样的设备可以被多个进程共享,而像磁带驱动器则通常是专用的。

I/O操作方式(I/O Operations)

程序化I/O(Programmed I/O)

  • 在程序化I/O中,CPU持续忙于I/O操作,直到设备完成I/O任务。这对于单任务系统是合适的,但在多任务操作系统中,效率较低,因为CPU被浪费在等待I/O完成上。

中断驱动I/O(Interrupt-driven I/O)

  • 中断驱动I/O允许CPU在等待I/O操作时执行其他任务。当设备完成I/O操作时,设备会发出中断信号,告知操作系统进行处理。

直接内存访问(DMA, Direct Memory Access)

  • DMA是为了减少CPU的负担,允许设备直接与内存交换数据,不需要CPU干预。它提高了数据传输的效率。

程序化I/O(Programmed I/O)

概念:

  • 在程序化I/O中,CPU不断地忙于检查设备状态,直到I/O操作完成。
  • 这种方式适用于单进程系统或嵌入式系统,因为它不需要复杂的多任务管理。

示例: 假设一个程序需要将字符串“ABCDEFGH”打印到打印机,而打印机只能缓冲一个字节的数据。程序会按字节逐个将字符发送到打印机,每发送一个字符后就需要等待打印机准备好下一个字符。

步骤:

  1. 程序首先将字符串分解为一个个字节。
  2. 程序使用I/O指令将字符逐一发送到打印机的缓冲区。
  3. 在每个字符发送后,程序需要通过轮询检查打印机的状态寄存器,确保打印机准备好接受下一个字符。
img

轮询问题:

  • 轮询是指CPU不断检查设备状态(如“准备好”、“忙碌”或“错误”状态),直到设备可以接受新的数据。这种方法会导致CPU时间的浪费,因为它只能等待设备完成操作。

中断驱动I/O(Interrupt Driven I/O)

中断驱动I/O的原理:

  • 基本过程

    1. 程序将应用缓冲区的内容复制到内核缓冲区,并将一个字符发送到打印机。
    2. CPU不再等待打印机就绪,而是将当前进程放入阻塞状态并调用调度器(scheduler()),此时可能会运行其他进程。
    3. 当打印机控制器完成写入并恢复就绪状态时,它会发出一个硬件中断,通知操作系统处理后续的操作。

中断驱动I/O(Interrupt Driven I/O)实例

打印字符串的过程:

  1. 打印系统调用时执行的代码

    • 系统调用触发时,应用程序会将数据从用户缓冲区传输到内核缓冲区,并请求打印操作。
  2. 中断服务程序

    • 当打印机准备好接收下一个字符时,设备发出中断信号,操作系统的中断处理程序会响应并继续打印任务,直到任务完成。

中断驱动I/O的优势是CPU可以在等待设备完成操作时继续执行其他任务,避免了程序化I/O中CPU的浪费。


使用DMA(Direct Memory Access)进行I/O

中断驱动I/O的缺点:

  • 每接收一个字符时,都会发生一次中断。这对于处理大量字符时,可能导致过多的中断,造成性能下降。

DMA的引入:

  • DMA控制器:DMA控制器将字符从内核缓冲区传输到打印机控制器,而无需CPU干预。这意味着CPU不需要处理每个字符的传输,只需在整个缓冲区的传输完成后收到一个中断信号。

DMA的优点:

  • 减少CPU负担:在DMA传输过程中,CPU可以执行其他任务,而不是等待每个字符的传输。
  • 高效传输:通过DMA,数据可以更高效地从内存传输到外设,避免了频繁的中断。

I/O软件层次(I/O Software Layers)

I/O系统通常被设计为多个层次,分为用户空间和内核空间。

  • 用户空间:应用程序代码运行的地方,可以访问操作系统提供的API来进行I/O操作。
  • 内核空间:操作系统内核运行的地方,处理低级I/O操作、驱动程序和设备管理。
img

中断处理程序(Interrupt Handlers)

中断处理程序的设计原则:

  • 隐藏中断处理程序:尽可能让操作系统的其他部分不了解中断的细节,保持系统的模块化和可维护性。

  • 驱动程序的阻塞

    :最佳做法是驱动程序在启动I/O操作后,阻塞自己直到收到中断通知。

    • 例如,使用信号量(semaphore)条件变量(condition variable)消息接收(message receive)等同步机制。

中断处理流程:

  1. 中断发生:CPU保存当前状态,并跳转到固定的中断处理程序位置。(中断向量)
  2. 中断服务程序:执行中断处理任务,通常包括保存和恢复寄存器状态、处理I/O任务并通知相关进程。
  3. 恢复处理:处理完毕后,操作系统会继续恢复先前中断的程序,或选择并运行下一个进程。

中断处理程序的步骤:

  1. 保存中断时未保存的寄存器状态。
  2. 设置中断服务程序的上下文,如TLB(Translation Lookaside Buffer)、MMU(Memory Management Unit)和页表。
  3. 设置中断服务程序的栈。
  4. 确认并重新启用中断控制器。
  5. 恢复保存的寄存器值到进程表中。
  6. 执行中断服务程序。
  7. 决定下一个运行的进程。
  8. 设置MMU上下文,准备切换到下一个进程。
  9. 加载新进程的寄存器。
  10. 启动新进程的执行。

设备驱动程序(Device Drivers)

设备驱动程序的概念

  • 设备驱动程序

    是管理设备控制器与操作系统之间交互的特定模块。它通过以下过程工作:

    1. 从操作系统接收设备独立的请求
    2. 将请求转化为设备依赖的请求,并发送给具体设备。

驱动程序的编写

  • 编写者:通常由设备制造商编写,而不是操作系统的开发者。
  • 跨操作系统使用:驱动程序通常可以为多个操作系统编写。
  • 设备类型:每个驱动程序通常处理一种类型的设备(例如,硬盘、打印机等)。
img

设备驱动程序的功能

  1. 接受抽象的读写请求
    • 从操作系统中接收设备独立的读写请求,并将其转化为具体的设备操作请求。
  2. 将抽象请求转化为具体请求
    • 举例:磁盘驱动程序会将线性块地址转换为物理位置,包括磁头、磁道、扇区和柱面等。
  3. 初始化设备
    • 如果设备需要初始化,驱动程序负责进行初始化。
  4. 检查设备是否正在被其他请求占用
    • 如果设备正在被其他请求占用,当前请求会被加入到请求队列中,等待处理。
  5. 向设备控制器发送命令
    • 驱动程序将会向设备控制器发送一系列命令来完成设备操作。
  6. 错误检查
    • 驱动程序负责在设备操作中检测错误,并进行适当处理。

设备驱动程序的模型

  • 驱动与操作系统的接口

    • 操作系统和驱动程序的实现者可能不同,因此需要有一个明确的接口模型,使得操作系统可以通过标准接口调用驱动程序。
    • 操作系统通常会为设备驱动程序定义标准接口,接口由若干个程序组成,供操作系统的其余部分调用。

设备驱动程序的分类

  1. 块设备驱动程序(Block Devices Drivers)
    • 处理块设备的驱动程序,如硬盘、SSD等。
  2. 字符设备驱动程序(Character Devices Drivers)
    • 处理字符设备的驱动程序,如键盘、鼠标、串口等。

设备独立I/O软件(Device Independent I/O Software)

设备驱动程序与设备独立I/O软件的界限

  • 设备驱动程序与设备独立软件的交界:在不同的操作系统和设备之间,设备驱动程序和设备独立I/O软件的界限可能会有所不同。

设备独立I/O软件的功能

  1. 为设备驱动程序提供统一的接口
    • 设备独立I/O软件提供了一个标准化的接口,使得上层应用和操作系统可以统一地与设备驱动程序交互。
  2. 缓冲
    • 缓存是设备独立I/O软件的关键功能之一,它用于提高I/O效率,避免直接频繁访问硬件设备。
  3. 错误报告
    • 提供统一的错误报告机制,以便系统能够有效地检测和处理I/O错误。
  4. 分配和释放专用设备
    • 管理和分配设备的使用权限,确保设备的使用不冲突。
  5. 提供设备独立的块大小
    • 设备独立I/O软件还负责处理设备特定的块大小问题,为操作系统提供一致的块大小,简化设备访问的复杂性。

统一接口(Uniform Interfacing)

为什么需要统一接口

  1. 没有标准接口时(a)
    • 各种驱动程序接口不统一,导致操作系统难以开发设备独立的I/O功能。每个驱动程序的实现可能不同,无法保证操作系统能够统一管理不同设备。
  2. 有标准接口时(b)
    • 通过统一的接口,操作系统能够轻松地开发设备独立的I/O功能,因为操作系统知道每个驱动程序会实现哪些功能,并且可以依赖标准的接口调用这些功能。
img

统一接口的好处

  • 对驱动程序开发者的好处

    • 驱动程序开发者知道操作系统期望他们实现哪些功能以及这些功能的接口类型。
  • 对操作系统开发者的好处

    • 操作系统开发者可以在统一的底层驱动程序接口上开发设备独立的I/O功能。操作系统可以使用标准的接口与驱动程序交互,简化开发工作。

Unix中的设备表示

  • 在Unix系统中,

    设备被建模为特殊文件

    • 设备可以像普通文件一样通过系统调用(如 open()read()write()close()ioctl()等)进行访问。
    • 每个设备都有一个文件名,它将设备与其对应的驱动程序关联。
  • 主设备号

    • 主设备号用于定位设备的驱动程序。
  • 次设备号

    • 次设备号存储在i节点中,并作为参数传递给驱动程序,表示要读写的设备单元。
  • 设备的访问控制

    • 对设备的访问遵循与普通文件相同的保护规则。
img

缓冲(Buffering)

缓冲的类型

  1. 无缓冲输入(Unbuffered Input)
    • 输入数据直接从设备传输到用户空间,没有任何中间缓冲。
  2. 用户空间缓冲(Buffering in User Space)
    • 数据首先被缓冲在用户空间中,然后再进行处理。
  3. 内核缓冲后再拷贝到用户空间(Buffering in Kernel Followed by Copying to User Space)
    • 数据先缓冲在内核空间中,之后才被复制到用户空间。
  4. 内核中的双重缓冲(Double Buffering in the Kernel)
    • 使用两个缓冲区来提升数据传输的效率,减少等待时间。
img

网络操作中的缓冲

  • 网络操作中可能涉及多次数据拷贝,每次数据从一个缓冲区复制到另一个缓冲区,以提高传输效率和可靠性。

错误处理(Error Reporting)

  1. 设备控制器处理错误

    • 例如,如果设备的数据校验和不正确,设备控制器会使用冗余位重新校正该块数据。
  2. 设备驱动程序处理错误

    • 例如,如果磁盘块无法读取,驱动程序会重新发出读取命令来请求该块数据。
  3. 操作系统设备独立软件层处理错误

    • 编程错误:例如,尝试写入只读设备。
    • 实际I/O错误:例如,摄像机关闭时无法读取数据,操作系统会返回错误信息给调用的应用程序,指示该错误。

专用设备分配(Allocating Dedicated Devices)

  • 不允许对专用设备(如CD-RW)进行并发访问。
    • 由于专用设备通常只能被一个进程独占使用,因此在访问时需要确保没有其他进程同时访问这些设备,以避免冲突或数据损坏。

设备独立块大小(Device Independent Block Size)

  • 不同的磁盘驱动器可能具有不同的物理扇区大小。
    • 文件系统使用块大小,并将文件映射到逻辑磁盘块。
  • 这一层的作用是隐藏不同磁盘的物理扇区大小,并提供一个固定且统一的磁盘块大小给更高层(如文件系统)。
    • 多个扇区可以被视为一个逻辑块,以简化操作和提高效率。

用户空间I/O软件(User Space I/O Software)

  • 这一层包含:
    • I/O库:这些库实现了I/O功能,并调用相应的I/O系统调用。
    • 格式化I/O功能:如printf()scanf()等,这些函数提供了对数据格式的控制。
    • 某些程序:这些程序并不直接写入I/O设备,而是写入到一个排队器(spooler)中,等待稍后处理。

I/O软件概述(Summary of I/O Software)

  • I/O系统由多个层次组成,每一层有其独特的功能。总结来看:
    • 用户空间:负责通过库提供I/O功能,并管理数据的格式化输入输出。
    • 内核空间:管理设备驱动程序与设备的交互,确保设备的有效使用,处理错误,进行缓冲和分配设备等。
img

这些层次和功能确保了操作系统能够高效、安全地管理硬件资源,并提供统一的接口来简化设备操作。

磁盘(Disks)

  • 磁盘有多种类型:

    • 磁性磁盘

      • 硬盘
      • 软盘
    • 光盘

      • CD-ROM
      • 可写CD(CD-R)
      • 可记录CD(CD-RW)
      • DVD

磁性磁盘(Magnetic Disks)

  • 磁盘被组织成

    柱面(cylinders)

    • 每个柱面包含若干磁道(tracks)
  • 每个磁道被划分为若干

    扇区(sectors)

    • 每个扇区的大小通常为512字节

磁盘参数(磁性磁盘示例)

  • 例如,原IBM PC软盘和Western Digital WD 30000 HLFS硬盘的磁盘参数。

磁盘格式化(Disk Formatting)

  • 在制造后,磁盘没有任何信息,只有空白位
    • 在磁盘可以使用之前,每个盘片需要进行:
      • 低级格式化(Low Level Formatting)
      • 高级格式化(High Level Formatting)
  • 低级格式化
    • 将磁盘分为多个扇区,以便磁盘控制器可以读取和写入。
    • 通常由厂商进行低级格式化。

磁盘格式化(2)

  • 每个磁道应该按以下方式进行格式化:
    • 扇区和扇区之间的间隔
    • 每个扇区通常包括:
      • 前导数据(Preamble Data)(512字节)
      • 校验和(Checksum)

柱面斜进(Cylinder Skew)

  • 柱面斜进

    是指磁盘在读取多个扇区时,通过调整扇区之间的物理排列来优化读取效率的技术。

    • 举例:假设磁盘转速为每分钟10,000转(10,000 rpm),每个磁道有300个扇区,读取每个扇区的时间为20微秒。磁头寻道时间为800微秒,那么在磁道间读取多个扇区时,可能会出现物理排列上优化的柱面斜进,例如可以有40个扇区的调整。

Quiz解答

问题: 对于一个7200转/分钟(RPM)的磁盘,要求柱面斜进是多少?磁盘的磁道间寻道时间为1毫秒,每个磁道有200个512字节的扇区。

解答:

  1. 计算转速:
    • 磁盘每分钟旋转7200次,转速为120 RPS(每秒120转)。
    • 每一圈的时间: \(\frac{1000}{120} 毫秒\) = 8.33毫秒(每转的时间)。
  2. 计算每个扇区的时间:
    • 每个磁道有200个扇区,因此每个扇区的时间为: \(\frac{8.33}{200}\) = 1/24毫秒(每个扇区的时间)。
  3. 计算柱面斜进:
    • 在1毫秒的寻道时间内,磁头会通过24个扇区,因此柱面斜进应该是24

总结:

对于该磁盘,所需的柱面斜进为24

交错存取(Interleaving)

交错存取是一种用于磁盘系统的技术,目的是优化数据在磁盘和内存之间的传输,特别是在磁盘控制器只有一个缓冲区的情况下。

交错存取(1)

  • 当磁盘控制器只有 一个扇区缓冲区 时,数据传输过程如下:

    1. 第一个数据扇区从磁盘传输到控制器缓冲区。

    2. 接着,控制器缓冲区的数据被复制到内存。

    3. 在这个复制过程中,磁头会经过 下一个扇区的开始位置

    4. 为了避免等待下一个扇区与控制器缓冲区对齐,交错存取被使用。

      • 也就是说,逻辑上的扇区顺序不等于磁盘上物理扇区的顺序,通过交错存取来优化数据传输效率,弥补数据复制到内存所需的时间。

交错存取(2)

  • 现代磁盘通过以下方式避免了手动交错存取的需要:
    • 读取整个磁道(或其一部分)到 磁盘控制器的缓存 中。这样,可以在不等待磁头回到特定位置的情况下传输多个扇区的数据。

交错存取(3)

  • 交错存取的例子:
      1. 没有交错存取:逻辑顺序与磁盘上物理顺序一致。
      1. 单重交错存取:逻辑顺序跳过一个物理扇区。
      1. 双重交错存取:逻辑顺序跳过两个物理扇区,确保在磁头返回起始位置时,可以读取下一个逻辑扇区。
img

讨论:

  • 双重交错存取是否需要柱面斜进来避免丢失数据?
    • 可能需要,也可能不需要。 双重交错存取相当于 两扇区的柱面斜进
    • 如果磁头可以在 磁道间寻道 的时间少于经过两扇区的时间,那么就不需要额外的柱面斜进。
    • 如果磁头的寻道时间超过了两扇区的时间,那么就需要额外的 柱面斜进 来避免寻道后丢失扇区。

总结:

  • 交错存取通过解决单个扇区缓冲区的延迟问题来优化数据传输。
  • 现代磁盘通过缓存技术避免了手动交错存取的需求。
  • 双重交错存取可能需要柱面斜进,也可能不需要,这取决于磁盘的寻道时间。

磁盘臂调度算法 (Disk Arm Scheduling Algorithms)

磁盘调度的目的是优化磁盘头的移动,从而减少磁盘操作的总时间。磁盘的读写时间主要由以下三个因素决定:

  1. 寻道时间:移动磁盘臂到正确的柱面位置。
  2. 旋转延迟:等待正确的扇区进入磁头下面。
  3. 数据传输时间:将数据从磁盘传输到内存。

在大多数系统中,寻道时间通常是最主要的影响因素。

磁盘臂调度算法 (2)

  • 假设磁盘的负载非常高,硬盘驱动程序会收到大量的请求。
  • 驱动程序会将这些请求排队。
  • 对于每个请求,驱动程序知道请求数据应该存储在硬盘的哪个位置(即柱面号)。
  • 由于在不同柱面间移动是昂贵的,因此需要尽量减少寻道时间。

磁盘臂调度算法 (3)

磁盘调度算法通过排序待处理的请求,以最小化磁盘臂的移动,主要有三种算法:

  1. 先来先服务(FCFS)
  2. 最短寻道时间优先(SSF)
  3. 电梯算法(SCAN)

必考,大题!


先来先服务(FCFS)

  • 按照请求到达的顺序服务请求,不考虑柱面号。
  • 例如:
    • 假设当前磁头位置在柱面11,以下是按顺序到达的请求:1、36、16、34、9、12。
    • 按照请求到达顺序服务,磁头的移动顺序是:
      • 从柱面11移动到柱面1(10个柱面)。
      • 从柱面1移动到柱面36(35个柱面)。
      • 从柱面36移动到柱面16(20个柱面)。
      • 从柱面16移动到柱面34(18个柱面)。
      • 从柱面34移动到柱面9(25个柱面)。
      • 从柱面9移动到柱面12(3个柱面)。
    • 总移动:111个柱面,成本 = 111

最短寻道时间优先(SSF)

  • 满足当前磁头位置到目标柱面的寻道时间最短的请求。
  • 例如:
    • 假设请求的柱面顺序是:11、1、36、16、34、9、12。
    • 按照最短寻道时间优先处理,磁头的移动顺序是:
      • 从柱面11移动到柱面12(1个柱面)。
      • 从柱面12移动到柱面9(3个柱面)。
      • 从柱面9移动到柱面16(7个柱面)。
      • 从柱面16移动到柱面1(15个柱面)。
      • 从柱面1移动到柱面34(33个柱面)。
      • 从柱面34移动到柱面36(2个柱面)。
    • 总移动:61个柱面,成本 = 61

电梯算法(SCAN)

  • 电梯算法(又称为SCAN算法)会在一个方向上移动磁头,处理该方向上的所有请求,直到没有请求为止,然后反向移动处理另一方向上的请求。
  • 例如,假设初始位置是柱面11,初始方向是向上(即移动到更高的柱面号)。
    • 请求的柱面顺序是:11、1、36、16、34、9、12。
    • 按照电梯算法处理,磁头的移动顺序是:
      • 从柱面11移动到柱面12(1个柱面)。
      • 从柱面12移动到柱面16(4个柱面)。
      • 从柱面16移动到柱面34(18个柱面)。
      • 从柱面34移动到柱面36(2个柱面)。
      • 从柱面36移动到柱面9(27个柱面)。
      • 从柱面9移动到柱面1(8个柱面)。
    • 总移动:60个柱面,成本 = 60

磁盘错误处理 (Error Handling)

磁盘缺陷导致的坏块

  • 磁盘在生产过程中可能会有坏块,通常会有两种处理方式:
    1. 控制器处理:在磁盘出厂前进行测试,将坏块标记并用备用扇区代替。
    2. 操作系统处理:操作系统检测到坏块并记录它们。

坏块的处理方式

  1. 坏块所在的磁道

    :坏块的出现会导致数据无法读取。

    • 如果坏块较小,可以通过 ECC(错误校验码) 来修复。
    • 如果坏块较大,则会将整个扇区标记为坏扇区,并在控制器或操作系统中处理。
  2. 替代坏扇区

    • 通过替代扇区或者将所有扇区偏移来绕过坏扇区。

有坏块——空快替换——整体移动

img

总结:

  • 磁盘调度算法通过减少磁头移动来提高磁盘的访问效率。
  • FCFS 按照请求到达顺序处理,但可能导致较大的寻道时间。
  • SSF 通过选择最近的请求来优化寻道时间,但可能导致请求的饥饿现象。
  • 电梯算法(SCAN) 是一种平衡的磁盘调度算法,通过扫描两端的请求来减少磁头移动。
  • 磁盘的坏块可以通过控制器或操作系统进行处理,避免数据丢失。

总结

本章讲解了 I/O 软件的原理、结构以及与磁盘相关的内容。以下是主要内容的概述:

I/O 软件的原理

  1. I/O 软件的目标

    • 提供高效的设备访问。
    • 抽象设备的硬件操作,让应用程序和操作系统不需要直接处理硬件细节。
  2. 程序化 I/O (Programmed I/O)

    • 由CPU直接控制设备的操作,通过程序进行数据的读取和写入,效率较低。
  3. 中断驱动 I/O (Interrupt Driven I/O)

    • 使用中断机制,设备完成一个操作后会通知CPU,CPU才进行下一步操作,提高了系统效率。
  4. DMA (Direct Memory Access) 方式 I/O

    • 允许设备直接与内存进行数据交换,减少了CPU的干预,极大提高了数据传输效率。

I/O 软件层次

  • I/O 系统通常分为多个层次,包括设备驱动、设备独立的 I/O 软件、设备控制器等,每一层负责不同的功能,以提高系统的整体效率。

磁盘(Disks)

  1. 磁盘格式化
    • 磁盘出厂后需要进行格式化,包括低级格式化(分割磁盘为可读写的扇区)和高级格式化(建立文件系统等结构)。
  2. 磁盘臂调度算法
    • 主要算法包括:
      • 先来先服务(FCFS):按请求到达的顺序处理,但可能导致磁头移动过大。
      • 最短寻道时间优先(SSF):选择最短寻道时间的请求,减少磁头移动,但可能导致某些请求被长期忽略。
      • 电梯算法(SCAN):磁头在一个方向上扫描,遇到请求则处理,然后反向扫描,避免寻道时间过大。

通过以上内容,操作系统能够有效地管理 I/O 设备的操作,提供更高效和可靠的服务,尤其是在处理磁盘和其他存储设备时。