some modifications.
This commit is contained in:
@@ -112,7 +112,7 @@
|
||||
|
||||
我们说,进程在运行的整个生命周期内,对内存的需求是变化的,例如一个进程在刚开始运行的时候需要比较多的内存空间,在运行的后期进行收尾工作了,需要的内存空间也因此变少了。局部页面置换算法无法考虑到这种情况,从而各个时期分配给该进程的空间都是一样的,无法把一个进程多余的页面分配给其他更需要的进程使用。此外,不同的进程对内存的需求也不一样,一些进程需要更多的空间,另一些进程则较小的空间就可以满足,对于这种情况,局部页面置换算法也难以适应。
|
||||
|
||||
全局页面置换算法就是基于这样的考虑产生的,它希望根据进程对内存需求量的变化,动态的调整分配给不同进程的内存页面,从而使得内存的利用率最高。
|
||||
全局页面置换算法就是基于这样的考虑产生的,它希望根据进程对内存需求量的变化,动态地调整分配给不同进程的内存页面,从而使得内存的利用率最高。
|
||||
|
||||
全局页面置换算法包括工作集置换算法和缺页率置换算法。
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
|
||||
可以看到,工作集置换算法,其实就是维护进程的常驻集与工作集时刻保持相等。
|
||||
|
||||
为了实现工作集置换算法,只需要维护一个工作集链表。在访存时,将不再工作集中的页面换出内存;在发生缺页时,直接为换入的页面分配新的内存空间,并且更新工作集链表。这样,在每一次访问后,都可以保证工作集和常驻集的大小相等。
|
||||
为了实现工作集置换算法,只需要维护一个工作集链表。在访存时,将不在工作集中的页面换出内存;在发生缺页时,直接为换入的页面分配新的内存空间,并且更新工作集链表。这样,在每一次访问后,都可以保证工作集和常驻集的大小相等。
|
||||
|
||||
容易看出,工作集置换算法的开销很大。尽管在发生缺页时直接将页面换入就可以了,省去了其他算法寻找被换出页面的开销,但是这是以正常访问时的高成本维护为代价的。因为在正常访问时,需要遍历工作集链表,并且将不在其中的页面换出,遍历的时间复杂度为`O(n)`,此外还有换出页面的I/O开销。
|
||||
|
||||
@@ -165,13 +165,13 @@
|
||||
为了实现缺页率置换算法,可以给页表项增加引用位标志。在每次发生缺页时,计算从上次缺页到此次缺页的时间间隔$t_{current} - t_{last}$,
|
||||
|
||||
+ 如果$t_{current} - t_{last} > T$(T为阈值),则认为缺页率太低,置换该进程在$[t_{last}, t_{current}]$时间内没有被引用的页。
|
||||
+ 如果$t_{current} - t_{last} > T$,则认为缺页率太高,增加缺失页到工作集中。
|
||||
+ 如果$t_{current} - t_{last} < T$,则认为缺页率太高,增加缺失页到工作集中。
|
||||
|
||||
可以看到,缺页率算法的开销要比工作集置换算法小很多,因为在正常访存时不需要做过多的操作,只需要将被访问的页面的引用位置一即可。
|
||||
|
||||
> 两个全局页面置换算法的比较
|
||||
|
||||
实际上,工作集置换算法和缺页率置换算法,在本质上,都是希望尽可能地跟踪进程运行周期内,对内存需求量的动态变化。工作集置换无疑具有更好的性能,因为每次访存后,工作集置换算法都会保证常驻集的大小等于工作集,但是也因为此,它执行起来需要更大的开销。缺页率置换算法则是开销与性能的一种折中。
|
||||
实际上,工作集置换算法和缺页率置换算法,在本质上,都是希望尽可能地跟踪进程运行周期内,对内存需求量的动态变化。工作集置换算法无疑具有更好的性能,因为每次访存后,工作集置换算法都会保证常驻集的大小等于工作集,但是也因为此,它执行起来需要更大的开销。缺页率置换算法则是开销与性能的一种折中。
|
||||
|
||||
### 抖动与负载控制
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 21 KiB |
Reference in New Issue
Block a user