说明UNIX缓存管理采用的主要算法及实施方法。

admin2016-05-14  19

问题 说明UNIX缓存管理采用的主要算法及实施方法。

选项

答案缓存管理采用的主要算法及实施方法为: 当进程需要读写某一设备块时,首先搜索相应的设备buf队列,如该块已在设备buf队列中,就直接读写队列中的缓存块信息,避免了磁盘物理I/O。 当欲读写的设备块不在设备缓存队列中时,就要在空闲缓存队列中分配一个缓冲区用于某个设备的读写操作。与空闲队列相关的最关键的是淘汰算法,UNIX系统中采用了LRU算法。具体实现方法是:当要求分配一个空闲缓冲区时,系统从自由buf队列的队首取出,并把buf的标志位b_flags置为“忙”,因为buf同时存在于某个设备buf队列中,这时要从原设备的buf队列中取出这个buf,将其插入申请该缓冲区的设备buf队列中。所以,当一个缓冲区刚被分配用于读、写某块设备上某字符块时,它的b_flags标志位被置为“忙”,它一定位于相应的设备buf队列中,而不在自由buf队列中。 当读/写操作完成后,就要求立即释放所占用的缓冲区,把这个缓冲区buf的b_flags标志位置为“空闲”,并加入自由buf队列的队尾。这个buf仍留在原设备buf队列中,也就是说一个缓冲区的buf处于空闲状态时,总是同时存在于两个队列中,一是自由buf队列,二是相应的设备buf队列。 当一次写操作未写满缓冲区时,就采用“延迟写”,即不急于写到设备上去,而是把这个缓冲区的标志位置上延迟写的标志,并把这个buf挂到自由buf队尾,同时留在这个设备的buf队列中。 缓冲区既留在原设备的buf队列中,又同时留在自由buf队列中的好处有如下两点。 其一,若再次需使用设备队列这个缓冲区的信息时,只需简单地从自由buf队列中抽出相应的buf,仍按原状使用缓冲区的信息,从而减少了对设备的I/O操作。 其二,若将一个缓冲区移作他用,则只需从自由buf队列和原设备buf队列中同时抽出,插入新的设备buf队列。这就实现了进程对有限缓冲区的共享。 为了使释放的缓冲区尽可能长地保留原来的使用信息,每次释放缓冲区时总是将其buf插入到自由buf队列的队尾。分配缓冲区时,总是从自由buf队列队首抽出一个空闲的buf。并且当一个buf在自由队列内移动时,只要有再次读写的需要时,就立即从自由buf队列中抽出,使用完毕后释放该缓冲区,又将其buf插入到自由buf队列队尾。这就保证了在所有自由缓冲区中被重新分配的是最久未使用的。 已经设置“延迟写”标志的缓存,虽然已经在自由buf队列中,实际上其内容尚未写到相应设备上。当它已经移到自由buf队列队首准备移作他用时,不能立即对它进行重新分配,而是要提出I/O请求,以便将其内容写到相应设备的指定字符块上。为此将它从自由buf队列中抽出,而只留在原设备buf队列中。写操作结束后,这种缓存又被释放进入自由buf队列的末尾(也有插到队列首),同时仍保留在原设备buf队列中。

解析
转载请注明原文地址:https://kaotiyun.com/show/m7Nx777K
本试题收录于: 操作系统题库理工类分类
0

最新回复(0)