4.7 页面置换算法(重点!!!)
在进程运行过程中,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,需从内存中调出一页程序或数据,送入磁盘的对换区。但应将哪个页面调出,需根据一定的算法来确定。
把选择换出页面的算法称为页面置换算法,其好坏直接影响系统的性能。
一个好的置换算法应具有较低的页面更换频率。从理论上讲,应将那些以后不会再访问的页面换出,或者把那些在较长时间内不会再访问的页面换出。
缺页中断率越少越好。
- 一、最佳置换算法和先进先出置换算法
- 二、最近最久未使用(LRU)算法
- 三、Clock置换算法
- 四、其他置换算法
一、最佳置换算法和先进先出置换算法
最佳置换算法是一种理想化的算法,具有最好的性能,但难于实现。先进先出置换算法最直观,但可能性能最差,故应用极少。
1、最佳置换算法
其所选择的被淘汰页面,将是以后永不再用的,或许是在最长(未来)时间内不再被访问的页面。
- 优点:保证获得最低的缺页率。
- 缺点:无法预知一个进程在内存的若干个页面,哪个在未来最长时间内不再被访问。
算法无法实现,但可评价其他算法。
- 一开始装入三个物理块的是第七页,第零页,第一页;
- 开始执行的时候,要执行第二页,此时发生第一次缺页,根据后面要执行的页数来看,将第七页置换出去为最佳,于是置换后的页数为第二页,第零页,第一页;
- 执行到第二阶段的时候,开始执行第三页,此时发生第二次缺页,根据后面的执行情况来看,将第一页置换出去为最佳,于是置换后的页数为第二页,第零页,第三页;
- ……
2、先进先出置换算法
- 算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
- 算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针(替换指针),使他总是指向最老的页面。
- 算法和进程的实际运行规律不相适应,因为进程中的某些页面经常被访问,但先进先出置换算法不能保证这些页面不被淘汰。
- 最开始先调入第七页,接着调入第零页,然后调入第一页;
- 因为要执行第二页,发生缺页中断,根据算法,淘汰最先进入的第七页,此时变为第二页,第零页,第一页;
- 当执行第三页时,又发生缺页中断,根据算法,淘汰第二进入的第零页,此时变为第二页,第三页,第一页;
- ……
二、最近最久未使用(LRU)置换算法
- 最开始先调入第七页,接着调入第零页,然后调入第一页;
- 因为要执行第二页,发生缺页中断,根据算法,淘汰最近最久未使用的第七页,此时变为第二页,第零页,第一页;
- 当执行第三页时,又发生缺页中断,根据算法,淘汰最近最久未使用的第一页,此时变为第二页,第零页,第三页;
- 当执行第四页时,又发生缺页中断,根据算法,淘汰最近最久未使用的第二页,此时变为第四页,第零页,第二页;
- ……
三、Clock置换算法
习题:
- 对于FIFO算法,根据装入时刻来看,因为第二页装入时刻是120,是四个页面中装入最早的,所以应该替换第二页;
- 对于LRU算法,则应该根据上次引用时刻来看,则第一页的时刻最早,所以应该替换第一页;
- 对于NRU算法,则看访问位,第一次循环检查,0,1,2,3一次将1变为0,第二次循环发现第0页为0,则替换掉第0页;
- 对于改进型的NRU算法,第一轮扫描未发现A=0,M=0的页;第二轮扫描将遇到的页的1都置为0,第三轮扫描找到页面2符合要求,所以应该替换页面2。
4.8 请求分段存储管理方式
在请求分段系统中,程序运行之前,只需先调入若干个分段(不必调入所有的分段),便可启动运行。当所访问的段不在内存中时,可请求OS将所缺的段调入内存。
- 一、请求分段中的硬件支持
- 二、分段的共享和保护
一、请求分段中的硬件支持
1、段表机制
在请求分段系统中所需要的主要数据结构是段表。由于在应用程序的许多段中,只有部分段装入内存,其余的一些段仍留在外存上,故需要在段表中增加若干项,以供程序在调进、调出时参考。
2、缺段中断机构
- 在请求分段系统中,每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入OS后由缺段中断处理程序将所需的段调入内存。
- 缺段中断同样需要在一条指令的执行期间,产生和处理中断,以及在一条指令执行期间,可能产生数次缺段中断。但不会出现一条指令被分割在两个分段中或一组信息被分割在两个分段中的情况。
3、地址变换机构
请求分段系统中的地址变换机构,是在分段系统地址变换机构的基础上形成的。因为被访问的段并非全在内存,因而在地址变换时,若发现要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能利用段表进行地址变换。在地址变换机构中需增加缺段中断的处理及请求等功能。