虚拟内存
存储器的层次结构:
覆盖技术:
一个程序的不同部分在不同的时刻共享同一块内存区域。什么时候换入换出是由常驻内存的代码段决定的。
例子:
左边的是程序的调用关系,A会调用B,B调用D,A也可以调用C,C可以调用E,F。A就属于常驻内存的部分,BC属于可选的部分,DEF属于不存在调用关系的模块。
当然还有另一种覆盖方法:
交换技术:
交换技术解决中的几个问题:
覆盖技术与交换技术的比较:
虚存技术:
虚存技术是通过操作系统和MMU(内存管理单元)来实现内存的管理,并且降低了换入换出的粒度,以段或者页为单位,如上图。
程序的局部性能够提升虚存的效率:
详细列子:
虚拟技术的特征:
覆盖技术和交换技术的内存使用都是连续的。
虚拟页式内存管理:
修改位补充解释:当该页需要换出是,如该页未修改说明说明内存中和磁盘中的内容是一致的,就无需写回,可直接释放。
小例子:
X表示驻留位为0,不在内存中,访问这些页面里面的内容会触发缺页中断,首先mov reg 0表示逻辑地址0里面的内容读到寄存器中,逻辑地址映射到物理地址就是8192,mov reg 32780在逻辑地址属于第8页,不在内存中,就会触发缺页中断。
缺页中断的处理过程:
优先页面置换算法:
例子:
先进先出算法:
最近最久未使用:
LRU算法的实现方式:
时钟页面置换算法:
当产生第一次产生中断时页表中所有的used bit都为1,然后轮训一遍都为0,并且指向a,所以a就被换出了。
二次机会法:
首先所有的page会被串成环形链表,如果指针当前指向的used位和dirty位都0,则被替换出去,如果为01和将1变为0,如果为10则将1变为0,如果为11则变为01,然后指针移动到下一个page,知道指针指向00,将该页换出。
最不常用算法:
工作集:
例子:
常驻集:
两个全局置换算法:
工作集页置换算法:
0时刻pagea t=0表示0时刻访问a,paged t = -1表示-1时刻访问,pagee t = -2表示-2时刻访问e,前4次没有访问的页面就会从工作集中替换出去,该物理页空出来后就可以给其他页面使用。过程如上图
算法:
例子: