some modifications.

This commit is contained in:
Shine wOng
2019-09-02 14:08:18 +08:00
parent 3ec0ccb2f7
commit ce851fa62b
2 changed files with 4 additions and 4 deletions

View File

@@ -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