虚拟内存、页面置换算法(LRU等)

目录

1. 虚拟内存

 1.1 如何实现

 1.1.1 请求分页管理方式

 2. 页面置换算法​​

 2.1 最佳置换算法OPT

 2.2 先进先出(FIFO)

2.3 最近最久未使用置换算法(LRU)

2.4 时钟置换算法(Clock)/ 最近未用算法(NRU)


1. 虚拟内存

传统的内存管理方式存在的问题:

1)作业必须一次性全部装入内存才能开始运行,当内存无法容纳所有作业时,只有少量作业能运行,降低了系统的并发度;

2)作业一旦被装入内存,就会一直驻留在内存中,浪费了内存资源。

 1.1 如何实现

虚拟内存技术建立在离散内存管理方式上,连续的管理方式不利于频繁的调入调出。

 1.1.1 请求分页管理方式

在基本分页管理方式的基础上,添加了两个功能:缺页中断调入内存,内存紧张调出外存。

操作系统需要记录:

a)被调入内存的页面;

b)在外存的页面的地址;

c)指标决定换出哪个页面;

d)没被修改过的页面,就不用浪费时间写回外存,修改过的要覆盖(即记录是否修改)。

 

 

 

 2. 页面置换算法​​

LRU算法比较重要。

 2.1 最佳置换算法OPT

 每次选择以后用不使用的页面进行淘汰,或在最长时间内不再被访问的页面。

缺点:不现实。无法知道哪个页面后续不再使用,你不能预言。

 2.2 先进先出(FIFO)

 利用队列,内存资源紧张,则把队头页面调出外存。

缺点:算法性能差,可能缺页次数不降反升的异常现象——Belady异常。

2.3 最近最久未使用置换算法(LRU)

选择最近时间里,没使用时间最长的页面进行调出。

实现方法:赋予每个页面一个时间计数器,表示自上次访问以来所经历的时间t。

缺点:性能好但开销大。

2.4 时钟置换算法(Clock)/ 最近未用算法(NRU)

当淘汰页面时,依次检查页面的访问标志位(1代表该页面被访问过),找到的第一个标志位为0的页面进行调出;若所有的页面都为1,则依次置0,并将第一个0调出。

改进:在上述的实现上再增加一条规则,优先淘汰没被修改过的页面,因为这样就不需要把该页面写回外存,省了IO时间。


版权声明:本文为qq_36610334原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。