第五章 I/O管理
缓冲区管理
双缓冲区:T<C+M
假设初始状态缓冲区1满,缓冲区2空,工作区为空。
刚开始缓冲区2为空,所以设备可以向缓冲区2中冲入数据耗时T,另一方面刚开始缓冲区1中是满的,所以刚开始就可以把缓冲区1中的数据传送到工作区中,M时刻工作区被充满,CPU就开始处理数据耗时C,处理完工作区中的数据后此时缓冲区2中已经充满了数据,因此可以接着把缓冲区2中的数据传送到工作区中,接着继续处理工作区中的数据。在T时刻缓冲区2已经充满,设备开始空闲,并且此时缓冲区1中的数据在M时刻就已经被取空了,因此缓冲区2的数据被充满之后设备就可以接着往缓冲区1中冲入数据耗时T,假设在2T缓冲区2中的数据还没有完全被取走(即假设2T<2M+C),所在在2T时刻虽然设备空闲,但是由于缓冲区2此时还没有被取空,而缓冲区1刚刚被充满,因此在这个时刻设备并不能接着往缓冲区2中充入下一块数据,只有缓冲区2中的数据被取空之后,设备才可以继续往缓冲区2中写入下一块的数据。可以发现如果采用双缓冲区并且T<C+M,很难找到一个和初始状态一模一样的状态,比如T时刻,虽然其中缓冲区2是满的,但此时工作区中的数据还没有全部被处理完,因此工作区又不是空的,这和刚开始的初始状态是不一样的,M+C时刻虽然工作区是空的,但是缓冲区2中的数据是满的,并且缓冲区1当中也充入了一部分数据,即M+C时刻工作区空,一个缓冲区满,但另一个缓冲区是半满的,所以如果T<C+M那么课本中介绍的方法就不易分析出来了。但是自己用甘特图的方法多分析几步就可以发现每经过M+C这么长的时间就会有一块数据被处理完毕,因此当T<C+M的时候每处理一个数据块平均耗时应该是C+M。