一、虚拟内存
将物理内存抽象为地址空间,每个进程都有各自的地址空间,地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。目的是让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。
1、分页系统地址映射
内存管理单元负责地址空间和物理内存的转换,其中页表存储着页(程序地址空间)和页框(物理内存空间)的映射表。一个虚拟地址分为页面号(16位地址是前4位)和存储偏移量。页面号的十进制数对应页表的索引,一个页表项最后一位表示是否存在于内存,前几位即为页框的前几位。
2、页面置换算法
在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。
页面置换算法的主要目的就是使页面置换频率最低。
- 大专栏 计算机操作系统 - 内存管理>
- 最佳(OPT):所选择的被换出的页面将是最长时间内不再被访问(理论上不知道将来使用页面的情况)
- 最近最久未使用(LRU):通过维护链表保证表尾的页面是最近最久未访问的,代价很高
- 最近未使用:每个页面有 R 和 M 两个状态位
- 先进先出:选择换出的页面是最先进入的页面
- 第二次机会算法:在FIFO的基础上,当页面被访问时设置页面的R位为1。FIFO 时若 R 位为 0,直接置换,R位为 1,页面放到队列尾部,继续 FIFO
- 时钟:第二次机会算法的改进,将队列(链表)的首位相连,通过指针指向 FIFO 的 FI 页面
二、分段和段页式
1、分段
将地址空间划分为多个拥有独立地址空间的段,每个段的长度可以不同,并且可以动态增长。
2、段页式
程序的地址空间划分成多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。
3、分页 VS 分段
分页对程序员透明,分段需要程序员显示划分每个段
分页是一维地址空间,分段是二维的
页的大小不可变,段的大小可以动态改变
- 分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护