操作系统笔记——缓冲区管理

操作系统笔记——缓冲区管理_第1张图片

一、前言

嘿嘿下面会涉及到一点点汇编的知识。

在没有缓冲区的这个概念之前,我们讲CPU和I/O设备的传送方式之一,中断访问方式时 ,CPU把给I/O的命令或者数据用OUT命令放在端口里,I/O去取;反过来,I/O给CPU的数据、状态信息也存储在端口里,CPU用IN命令去取。

IN AL,21H;表示从21H端口读取一字节数据到AL

 
OUT 21H,AL;将AL的值写入21H端口

从上面的汇编命令格式可以直观的看出,实质上是寄存器AL和21H端口之间在传送数据。

从下面的图中,可以得知,通用寄存器AL是CPU的一部分,所以实际上是CPU和I/O在直接通信

操作系统笔记——缓冲区管理_第2张图片

而这样传送的效率是非常低的。 缓冲区的作用这不就来了嘛。

二、缓冲区的作用

作用就是不让CPU和I/O直接交互,好处一是CPU把数据放入缓冲区就可以去做自己的事情了,好处二是字符型设备把数据一个一个放入缓冲区而不去打扰CPU,减少了CPU被中断的次数。

这里可以类比cache来记忆。

为了缓解CPU和内存的速度差异,引入了cache。

为了缓解CPU和I/O的速度差异,引入了缓冲区。

操作系统笔记——缓冲区管理_第3张图片

注意:当缓冲区为空时,可以往缓冲区冲入数据,但是必须充满以后才能传出;当缓冲区数据非空时,不能往缓冲区冲入数据, 只能从缓冲区把数据传出

三、单缓冲 与 双缓冲

操作系统笔记——缓冲区管理_第4张图片操作系统笔记——缓冲区管理_第5张图片

PS: 为进程分配的缓冲区不属于进程所在的内存(堆区、栈区、静态存储区、代码区),而是独立存在于整个内存中的。或者你可以这样记忆,既然有缓冲池这个概念,我们知道池化技术是就是跟“共享单车”一样谁都可以用的,所以缓冲区应该独立于内存中,不属于任何一个进程

3.1 单缓冲

        直接讲时间计算的题。

时间T:从外设到缓冲区的用时

时间M:从缓冲区到进程工作区的时间

时间C:CPU处理数据的时间

        问你处理一块数据总共用时多久,方法就是画图去看从“工作区满,缓冲区空”到下一次“工作区满,缓冲区空”用时多久。

        首先要判断T和C哪个大(题目中会告诉你T和M的具体值)。

操作系统笔记——缓冲区管理_第6张图片

(1)当T>C时

从“工作区满,缓冲区空”到下一次“工作区满,缓冲区空”处理一块数据用时T+M

操作系统笔记——缓冲区管理_第7张图片

(2)当T

用时C+M

操作系统笔记——缓冲区管理_第8张图片

背过总结:就是T和C哪个大,就用哪个加上M 

3.2 双缓冲

(1)当T>C+M时,每处理一块数据耗时T

操作系统笔记——缓冲区管理_第9张图片

(2)T

操作系统笔记——缓冲区管理_第10张图片

背过结论:max{T,M+C}

一个关于单缓冲和双缓冲的题:一块数据,从硬盘读到缓冲区要100ns,从缓冲区读到进程工作区要50ns,在工作区里进行处理要50ns。问现在有10块数据,进行双缓冲,从开始到处理完一共要多少时间?

(10÷2)*100+10*50+10*50 = 500 + 500 + 500 = 1500

四、缓冲池

剩下的部分,比如缓冲池,还是看视频这种动态的讲解更好理解

王道计算机考研 操作系统_哔哩哔哩_bilibili

你可能感兴趣的:(操作系统,缓冲区)