Skip to content

4.4 提高设备管理性能的相关技术

Giovanna

About 1396 wordsAbout 5 min

2024-08-31

一、I/O缓冲

  • 为了缓和CPU与I/O设备速度不匹配的矛盾,提高CPU和I/O设备的并行性,在现代操作系统中,几乎所有的I/O设备在与处理机交换数据时,都用了缓冲区,缓冲管理的主要职责是组织好这些缓冲区,并提供获得和释放缓冲区的手段。

  • 核心思想:在内存中建立I/O缓冲区

  • 缓存从输入设备流入内存的数据

  • 缓存从内存流向输出设备的数据

  • 在设备管理中,引入缓冲区的主要原因:

    • 缓和CPU与I/O设备间速度不匹配的矛盾。
    • 减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
    • 提高CPU和I/O设备之间的并行性。

image.png

两类I/O设备:

  • 面向块

    • 面向块的设备将信息保存在块中
    • 块的大小通常是固定的
    • 传送过程中一次传送一个块
  • 面向流

    • 面向流的设备以字节流的方式输入/输出数据

二、单缓冲和双缓冲

1. 单缓冲

  • 在单缓冲情况下,每当用户进程发出一I/O请求时,操作系统便在主存中为之分配一缓冲区。

  • 输入和计算是可以并行的,当T>C时,系统对每一块数据的处理时间为M+T;反之则为M+C,故可把系统对每一块数据的处理时间表示为Max(C,T)+M。

如图所示:T:输入时间,C:计算时间,M:数据传送时间

image.png

2. 双缓冲

  • 在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。此时操作系统可以从第一缓冲区中移出数据,并送入用户进程。

  • 在双缓冲时,如果假设缓冲区的数据传送到用户区时间M远小于输入时间T或计算时间C,系统处理一块数据的最大时间可粗略地认为max(C,T)。如果C<T,可使磁盘数据连续输入;如果C>T,可使CPU不必等待数据输入。

image.png

  • 如果我们在实现两台机器之间的通信时,仅为它们配置了单缓冲,如图(a)所示,那么,它们之间在任一时刻都只能实现单方向的数据传输。例如,只允许把数据从A机传送到B机,或者从B机传送到A机,而绝不允许双方同时向对方发送数据。

  • 为了实现双向数据传输,必须在两台机器中都设置两个缓冲区,一个用作发送缓冲区,另一个用作接收缓冲区,如图(b)所示。

image.png

三、循环缓冲

当输入与输出两者的速度相差甚远,引入了多缓冲机制。可将多个缓冲组织成循环缓冲形式。

1. 循环缓冲的组成

  • 多个缓冲区。每个缓冲区的大小相同。

  • 多个指针。

    • 指示计算进程下一个可用缓冲区G的指针Nextg。
    • 指示输入进程下次可用的空缓冲区R的指针Nexti。
    • 指示计算进程正在使用的缓冲区C的指针Current。

循环缓冲区的组织方式:

image.png

2. 循环缓冲区的使用

  • Getbuf

    • 将Nextg指示的缓冲区提供给进程使用,Nextg置空,指针下移Nextg=(Nextg+1)Mod N。
    • 将Nexti对应缓冲区提供给进程使用,Nexti置满,指针下移Nexti=(Nexti+1)Mod N。
  • Releasebuf

    • 当输入进程装满缓冲区,调用Releasebuf释放的C缓冲,改为G缓冲。
    • 当计算进程取空C缓冲,调用Releasebuf释放C缓冲,改为R。

3. 缓冲区管理的同步问题

使用输入循环缓冲,指针Nexti和指针Nextg将不断地沿着顺时针方向移动,这样就可能出现下述两种情况

  • Nexti指针追赶上Nextg指针。

    • 这意味着输入进程输入数据的速度大于计算进程处理数据的速度,已把全部可用的空缓冲区装满,再无缓冲区可用。此时,输入进程应阻塞。
  • Nextg指针追赶上Nexti指针。

    • 这意味着输入数据的速度低于计算进程处理数据的速度,使全部装有输入数据的缓冲区都被抽空,再无装有数据的缓冲区供计算进程提取数据。这时,计算进程只能阻塞。

四、缓冲池

为了提高缓冲区的利用率,目前广泛流行公用缓冲池,在池中设置了多个可供若干个进程共享的缓冲区。

1. 缓冲池的组成

  • 空缓冲队列emq。由空缓冲区所链成的队列。

  • 输入队列inq。由装满输入数据的缓冲区所链成的队列。

  • 输出队列outq,由装满输出数据的缓冲区所链成的队列。

还应具有四种工作缓冲区:

  • 用于收容输入数据的工作缓冲区。

  • 用于提取输入数据的工作缓冲区。

  • 用于收容输出数据的工作缓冲区。

  • 用于提取输出数据的工作缓冲区。

2. 缓冲区的工作方式

  • 收容输入

  • 提取输入

  • 收容输出

  • 提取输出

image.png