单缓冲
单缓冲即在发送进程与接收进程之间只有一个缓冲区
,这是操作系统提供的最简单的一种缓冲形式,如图所示。
发送者向缓冲区发送数据后,接收者可从缓冲区中取出该数据。这种方法有一个明显的缺点,即发送者和接收者不能并行工作
。因为缓冲区是临界资源,不能同时对它进行读/写。由于只有一个缓冲区,发送者只有等到接收者将数据取走后,才能再往缓冲区中送数据,否则会覆盖掉原有数据。而接收者也只有等发送者输入数据才能取走,否则会重复取出同一数据(假设缓冲区中事先已有数据)。如果发送者和接收者速度不匹配,将会浪费大量的等待时间,因此,单缓冲方式现在已经基本不采用
。
双缓冲
为了加快输入/输出速度,提高设备利用率,又引入双缓冲机制,也称为缓冲对换(Buffer Swapping)。
系统为用户进程设置两个缓冲区。以输入操作为例,输入设备先将数据输入第一个缓冲区,第一个缓冲区满后,转向第二个缓冲区。此时操作系统可以从第一个缓冲区中取出数据送到用户进程,对数据进行处理。采用双缓冲可以减少或消除用户进程的等待时间,提高系统效率。双缓冲的工作方式如图所示。
当发送进程和接收进程的速度相差很大时,双缓冲还是不能解决两者并行工作的问题。
例如,发送者(CPU)速度远远高于接收者(外设)速度,将两个缓冲区很快装满后,发送者就无事可做,直到接收者慢慢取空一个缓冲区后,发送者才能继续工作。反之,如果接收者(CPU)速度太快,很快将两个缓冲区取空后,只能守着两个空缓冲区等待发送者(外设)送来数据。因此,双缓冲在实际系统中采用得很少
。
总结
单缓冲与双缓冲用的都不多