20 缓冲管理

作者: saviochen | 来源:发表于2017-06-15 11:54 被阅读43次

1 缓冲区的引入

在设备管理子系统中,引入缓冲区的目的主要有:

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

其实现方法有:

  • 釆用硬件缓冲器,但由于成本太高,除一些关键部位外,一般不釆用硬件缓冲器
  • 釆用缓冲区(位于内存区域)。

1.1 单缓冲

在设备和处理机之间设置一个缓冲区。设备和处理机交换数据时,先把被交换数据写入缓冲区,然后需要数据的设备或处理机从缓冲区取走数据。

在块设备输入时,假定从磁盘把一块数据输入到缓冲区的时间为T,操作系统将该缓冲区中的数据传送到用户区的时间为M,而CPU对这一块数据处理的时间为 C。由于T和C是可以并行的,当T>C时,系统对每一块数据的处理时间为M十T,反之则为M+C,故可把系统对每一块数据的处理时间表示为Max(C, T)+M

1.2 双缓冲

根据单缓冲的特点,CPU在传送时间M内处于空闲状态,由此引入双缓冲。 I/O设备输入数据时先装填到缓冲区1,在缓冲区1填满后才开始装填缓冲区2,与此同时处理机可以从缓冲区1中取出数据放入用户进程处理,当缓冲区1中的数据处理完后,若缓冲区2已填满,则处理机又从缓冲区2中取出数据放入用户进程处理,而I/O设备又可以装填缓冲区1。双缓冲机制提高了处理机和输入设备的并行操作的程度

如图,系统处理一块数据的时间可以粗略地认为是MAC(C, T)。如果C<T,可使块设备连续输入(图中所示情况);如果C>T,则可使CPU不必等待设备输入。

对于字符设备,若釆用行输入方式,则釆用双缓冲可使用户在输入完第一行之后,在CPU执行第一行中的命令的同时,用户可继续向第二缓冲区输入下一行数据。而单缓冲情况下则必须等待一行数据被提取完毕才可输入下一行的数据。

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

1.3 循环缓冲

包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,多个缓冲区构成一个环形。(类似于循环队列)

循环缓冲用于输入/输出时,还需要有两个指针in和out。对输入而言,首先要从设备接收数据到缓冲区中,in指针指向可以输入数据的第一个空缓冲区;当运行进程需要数据时,从循环缓冲区中取一个装满数据的缓冲区,并从此缓冲区中提取数据,out指针指向可以提取数据的第一个满缓冲区。输出则正好相反。

1.4 缓冲池

由多个系统公用的缓冲区组成,缓冲区按其使用状况可以形成三个队列:

  • 空缓冲队列
  • 装满输入数据的缓冲队列(输入队列)
  • 装满输出数据的缓沖队列(输出队列)。

还应具有四种缓冲区:

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

当输入进程需要输入数据时,便从空缓冲队列的队首摘下一个空缓冲区,把它作为收容输入工作缓冲区,然后把输入数据输入其中,装满后再将它挂到输入队列队尾。

当计算进程需要输入数据时,便从输入队列取得一个缓冲区作为提取输入工作缓冲区,计算进程从中提取数据,数据用完后再将它挂到空缓冲队列尾。

当计算进程需要输出数据时,便从空缓冲队列的队首取得一个空缓冲区,作为收容输出工作缓冲区,当其中装满输出数据后,再将它挂到输出队列队尾。

当要输出时,由输出进程从输出队列中取得一个装满输出数据的缓冲区,作为提取输出工作缓冲区,当数据提取完后,再将它挂到空缓冲队列的队尾。

2 高速缓存与缓冲区的对比

2.1 高速缓存

操作系统中使用磁盘高速缓存技术来提高磁盘的I/O速度,对高速缓存复制的访问要比原始数据访问更为高效。例如,正在运行的进程的指令既存储在磁盘上,也存储在物理内存上,也被复制到CPU的二级和一级高速缓存中。

不过,磁盘高速缓存技术不同于通常意义下的介于CPU与内存之间的小容量高速存储器,而是指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。因此,磁盘高速缓存在逻辑上属于磁盘,物理上则是驻留在内存中的盘块。

高速缓存在内存中分为两种形式:一种是在内存中开辟一个单独的存储空间作为磁速缓存,大小固定;另一种是把未利用的内存空间作为一个缓沖池,供请求分页系统和磁盘I/O时共享。

数据交付方式:

  • 数据交付:这是直接将快速缓存中的数据,传送到请求者进程的内存中作区中。
  • 指针交付:这是仅仅将指向快速缓存中某区域的指针交付给请求者进程。

2.2 比较

相关文章

  • 20 缓冲管理

    1 缓冲区的引入 在设备管理子系统中,引入缓冲区的目的主要有: 缓和CPU与I/O设备间速度不匹配的矛盾。 减少对...

  • 数据库作业学习

    存储和缓冲管理 实验目的 实现一个简易的存储和缓冲管理器 缓冲区和页面 缓冲区Buffer代表了在主存中的空间缓冲...

  • PostgreSQL中的预取算法

    关于Buffer 全部缓冲区构成一个缓冲池 缓冲池: 缓冲区管理跟踪BmTrace区 记录缓冲区被使用的状况 BM...

  • Nginx 配置优化篇

    Nginx 压缩传输 fastCGI管理器配置 nginx缓冲区优化(反向代理使用)关于缓冲, 主要是合理设置缓冲...

  • HDFS架构师 2.2 - NameNode元数据双缓冲写入原理

    (1)HDFS元数据管理、双缓冲 17 } 0:55 双缓冲写元数据的方法 ——》 FSEditLo...

  • Postgresql · 源码阅读 · 缓冲区管理器介绍

    一、背景 缓冲区管理器管理共享内存和持久化存储之间的数据传输,用于提升数据库系统的数据读/写效率。 二、缓冲区管理...

  • 缓冲区溢出+Pop3+Fuzzing

    title: 缓冲区溢出date: 2016-06-15 20:30tags: Kali渗透测试 0x00 缓冲区...

  • INNODB缓冲池LRU算法

    LRU(least recently used ,即最近最少使用)算法是数据库中缓冲池的管理算法,将数据库的缓冲...

  • OpenGL学习21——数据操作

    OpenGL中的缓冲区,本质上讲,就是管理GPU上一块内存的一个对象,仅此而已。当我们将缓冲区绑定到指定的缓冲区目...

  • 带问题重读ijkPlayer

    问题 主流程上的区别 缓冲区的设计 内存管理的逻辑 音视频播放方式 音视频同步 seek的问题:缓冲区flush、...

网友评论

    本文标题:20 缓冲管理

    本文链接:https://www.haomeiwen.com/subject/ztyyqxtx.html