1437 字
7 分钟
内存虚拟化
内存管理的基本要求
- 内存的分配与回收
- 地址转换
- 内存空间扩容
- 内存共享
- 存储保护
程序的链接与装入
- 编译
- 链接
- 静态
- 动态
- 装入时链接
- 惰性链接
dlsym
- 装入
- 绝对装入
- 可重定位装入
- 静态~
- 动态~
逻辑地址与物理地址
程序的内存映像
内存保护
基址寄存器和界限寄存器
内存共享
可重入代码
内存分配与回收
内存碎片
外部碎片内部碎片
连续分配
静态分配方式
- 单一分配
- 固定分区分配
- 分区大小相等
- ~不相等 ||作业道数|内部碎片|外部碎片|硬件支持|管理空间的数据结构|解决空间不足的方法|提高作业道数| |—|—|—|—|—|—|—|—| |单道连续分配|1|O|X|界地址寄存器 越界检查||覆盖|交换| |多道固定连续分配|小于分的块数|O|X|基址寄存器界限寄存器动态地址转换|空闲链表 空闲表|||| |多道可变连续分配|不好说|X|O|同上|同上|紧凑|||
动态分区分配算法
- freelist
- firstfit
- 快
- 对各个部分的内存磨损不一致, 内存起始部分容易出现碎片
- nextfit
- 不如首次匹配
- 尾部磨损严重
- bestfit
- 内存块按升序组织,找到第一个刚好大于申请大小的内存块
- 慢
- 碎片化严重
- 最差匹配
- 内存块降序组织,取出第一个内存块
- 慢
- 浪费大内存块
- 碎片化不严重
- firstfit
- Memory pool
- slab
- cache
- slab
- buddy allocator
- region based allocation
- arnea allocator
- bump allocator
非连续分配
方式
- 段式分配 段号 页内偏移 段表 段式逻辑地址是二维结构的
- 页式分配 页 虚拟页号 物理页号 页内偏移
- 段页式分配
页式存储
- 页表
- 多级页表
- 页表项 存在位 脏位 权限位rwxu(代表在u特权级下是否可以访问) 算法位(access)内存块地址…
- 页表基址寄存器
- TLB
- tlb表项 有效位 脏位 算法位 tag位 页表项内容
(页式)虚拟内存管理
传统存储管理方式特征
- 一次性
- 驻留性
虚拟存储器的定义和特征
基于局部性原理
- 多次性
- 对换性
- 虚拟性
请求分页管理机制
页表
缺页中断机构

地址变换机构

虚拟内存下的命中情况
- tlb hit, pg hit, cache hit 一次tlb访问加一次cache访问
- tlb hit, pg hit, cache miss 一次tlb访问加一次cache访问加一次内存访问
- tlb miss, pg hit, cache hit 一次tlb访问加一次内存访问加一次cache访问开销(忽略修改tlb的开销)
- tlb miss, pg hit, cache miss 一次tlb访问加一次内存访问加一次cache访问开销加一次内存访问开销(忽略修改tlb的开销)
- tlb miss, pg miss, cache miss 页表miss说明内容不在内存中故肯定也不在cache中 一次tlb访问加一次内存访问加页故障加访问tlb加一次cache访问开销加一次内存访问开销(忽略修改tlb跟pg的开销)
页面分配
驻留集
指请求分页存储管理中给进程分配的物理块的集合 太大浪费 太小频繁的处理缺页异常
分配策略
- 局部固定分配
- 局部可变分配
- 全局可变分配
- 全局固定分配不存在
时机
- 预调页策略 —> 立刻分配
- 请求调页策略 —> 惰性分配
从何处调入页面
缓存淘汰策略
工作集
概念
工作窗口、工作时间 与驻留集不同,工作集指的是在某段时间间隔(工作时间之前的一段工作窗口)里,进程实际访问页面的集合。 工作集的大小若大于驻留集,则会发生抖动现象。
mmap
虚拟内存存储器的性能分析
- 指标缺页率
- 指导思想:局部性原理
- 大页缺页低
- 驻留集大小
- 页面置换策略
- 局部性好的程序 数组按行访问还是按列访问
- 写回磁盘的频率 在系统中建立一分已修改换出页面的链表,对每个要被换出的页面(已修改),可以暂不将它们写回磁盘,而将它挂在该链表上,仅当被换出页面数达到给定值时,才将它们一起写回磁盘,这样就可显著滅少磁盘 1/O的次数,即减少已修改页面换出的开销。此外,若有进程在这批数据还未写回磁盘时需要再次访问这些页面,则不需从外存调入,而直接从已修改换出页面链表上获取,这样也可以减少页面从磁盘读入内存的频率,减少页面换进的开销
其他
虚拟存储器的大小
- 虚拟存储器的大小:小于主存加外存的大小
- 虚拟存储器的最大大小/虚拟存储器地址空间大小:2^虚拟地址位数
虚拟存储器计算缺页率
区分页越界与页故障
教材与实际情况的区别
内核也是运行在虚拟内存下的那么内核如何访问修改页表
https://os.phil-opp.com/paging-implementation/#accessing-page-tables 关注递归映射方式
计算虚拟内存访问时间
不要忘了加上访问实际内容的时间
