OS(十九):设备管理之缓冲管理

发布时间 2023-08-23 17:33:35作者: 无虑的小猪

1、缓冲引入

  为缓和CPU和I/O设备速度不匹配的矛盾,提高CPU和I/O设备的并行性,I/O设备在与处理机交换数据时都使用了缓冲区。

  缓冲管理主要职责是组织好这些缓存区,提供获得和释放缓冲区的手段。

  1、缓和CPU和I/O设备间速度不匹配的矛盾;

  2、减少对CPU的中断频率,放宽对CPU中断响应时间的限制。

2、单缓冲和双缓冲

  单缓冲,每当用户进程发出一 I/O 请求时,操作系统便在主存中为之分配一缓冲区。在字符设备输入时。缓冲区用于暂存用户输入的一行数据,在输入期间,用户进程被挂起以等待数据输入完毕;在输出时,用户进程将一行数据输入到缓冲区后,继续进行处理。

  双缓冲,也称为缓冲对换(Buffer Swapping)。在设备输入是,先将数据送入第一缓冲区,装满后转向第二缓冲区。

 0

  单缓冲,任一时刻只能实现单方向的数据传输;为实现双向数据传输,在设置两个缓冲区,一个用作发送缓冲区,一个用作接收缓冲区。

3、缓冲池(Buffer Pool)

3.1、缓冲池的组成

3.1.1、缓冲区类型

  空(闲)缓冲区;

  装满输入数据的缓冲区;

  装满输出数据的缓冲区。

3.1.2、队列类型

  空缓冲队列emq;

  输入队列 inq;

  输出队列 outq;

3.1.3、工作缓冲区

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

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

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

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

3.2、缓冲区的工作方式

  缓冲区工作在收容输入、提取输入、收容输出和提取输出四种工作方式。

 0

  收容输入:输入进程需要输入数据,调用GetBuf(emq)过程,从空缓冲队列emq的队首摘下一空缓冲区,将它作为收容输入工作缓冲区hin。

  提取输入:进程需要输入数据时,调用GetBuf(inq),从输入队列inq的队首取得一个缓冲区,作为提取输入工作缓冲区(sin),计算进程从中提取数据。

  收容输出:进程需要输出时,调用GetBuf(emq)过程从空缓冲队列emq的队首取得一个空缓冲区,作为收容输出工作缓冲区hout。

  提取输出:输出进程调用GetBuf(outq)过程,从输出队列的队首取得一装满输出数据的缓冲区,作为提取输出工作缓冲区sout。