页面置换算法

在进程运行过程中,若其所要访问的页面不在内存而需要把他们调入内存中,但内存已经无空闲空间时,为了保证该进程能够正常运行,系统必须从内存中调出一页程序或数据送磁盘的对换区中。通常,把选择换出的页面的算法成为页面置换算法。置换算法的好坏将直接影响到系统的性能。

1. 最佳置换算法(OPT)
一种理想化的算法,具有最好的性能,但实际上却难于实现。其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法通常可以保证获得最低的缺页率。由于人们无法预知一个进程在内存的若干页面中,哪一个页面是未来最长时间不再被访问的,因而将算法无法实现。

2. 先进先出页面置换算法(FIFO)
该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

3. 最近最久未使用置换算法(LRU)
根据页面调入内存后的使用情况进行决策。LRU置换算法时选择最近最久未用的页面予以淘汰。可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面 的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。

4. 最少使用置换算法(LFU)
该算法是要把最近应用次数最少的页淘汰掉。为此可对应每一页设置一个计数器,对每一页访问一次后,就使它对应的计数器增加1。当需要淘汰一页时,对应计数值最小的页便是淘汰对象。这种算法实现不难,但代价较高。

其他置换算法包括Clock置换算法,第二次机会算法(SCR)等。

 

内存/分区分配算法(Partitioning Placement Algorithm)

1. 首次适应算法(First Fit)
从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。

2. 最佳适应算法(Best Fit)
它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按大小从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。

3. 循环首次适应算法(Next Fit)
该算法是首次适应算法的变种。在分配内存空间时,不再每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。

4. 最差适应算法(Worst Fit)
该算法按大小递减的顺序形成空闲区链,分配时直接从空闲区链的第一个空闲分区中分配(不能满足需要则不分配)。很显然,如果第一个空闲分区不能满足,那么再没有空闲分区能满足需要。该算法保留小的空闲区,尽量减少小的碎片产生。