操作系统内存管理_虚拟内存
虚拟内存的基本思想
按照固定大小将进程的地址空间分为多个页面,每一个页面内部都有连续的地址.这些页被映射到物理内存,但是并不是所有的页都在内存中时程序才能运行.当程序需要已经在物理内存中的地址空间时,由硬件完成映射;当程序引用不在内存中的地址空间时,产生缺页中断,由操作系统将页面调入内存.
进程运行内存模型
分页
-
地址的转化
建立页表,通过MMU(内存管理单元)来完成线性地址到物理地址的转换 -
页表项的结构(不同进程共享内存的 安全性)
保护位标记了 读,写,执行三个权限
修改位标记了是否被修改,如果被修改那么页框在重新分配前,需要先持久化到硬盘
访问位是供页面置换算法使用
高速缓存位是是否启用高速缓存,需要实时输入的设备需要关闭高速缓存 -
加速分页:快表(TLB)
- 快表是在MMU中,可以减少内存访问次数
- 软件管理TLB,当访问的页表不在TLB中时,发出指令让操作系统来处理(换出一页)
- 软失效:在内存,不在页表;硬失效:不在内存
- 针对大内存的页表
- 多级页表
- 倒排页表
倒排页表是在每个页表框记录下 是哪个进程的哪个页表项 使用当前页表框,减少了存储压力,但是增大了查询的复杂度(每次都要遍历倒排页表)
- 页面置换算法
最优页面置换;最近未使用(R位定时清零)根据R,M位来决定换出哪个;先进先出;时钟置换;最近最少使用;
工作集页面置换算法:局部性原理
写时复制,共享库(相对跳动)
段页式存储
分页和分段的区别
1、分页机制会使用大小固定的内存块,而分段管理则使用了大小可变的块来管理内存。
2、分页使用固定大小的块更为适合管理物理内存,分段机制使用大小可变的块更适合处理复杂系统的逻辑分区。
3、段表存储在线性地址空间,而页表则保存在物理地址空间。