虚拟内存/内存管理
2016-05-28 13:11:02 10 举报
AI智能生成
关于操作系统“内存管理"部分的思维导图。
作者其他创作
大纲/内容
需求
重定位:进程换出后换入内存可以位于内存的任何位置
保护: 其它进程不能未经授权访问其它进程的内存空间.
由处理器实现
共享: 多个进程共享内存区域.
逻辑组织: 分段,分页
物理组织: 存储管理的本质:os负责在内外存之间信息流的组织和交换.
内存分区
固定分区:
1:程序过大需要覆盖技术
2:内存利用率低
3:会产生内部碎片
动态分区:分区长度和数目可变
会产生外部碎片
可以用压缩解决:耗时
放置算法:best-fit; first-fit(效果较好); next-fit
伙伴系统
1:利用二分法找到大小最接近的内存快.
2:大于该内存块一半就分配,否则二分.
3:每个级别维持空闲表,可以动态分裂和合并.
重定位:
逻辑地址: 与物理地址无关,运行时转为物理地址
相对地址: 相对于某些已知点
物理地址
加载
库例可被合并到程序中或作为运行时提供给程序的共享代码
绝对加载:总是加载到内存同一位置
可重定位加载:所有内存访问以相对地址表示.
动态运行时加载:在一个指令被运行时再计算绝对地址;以便于虚拟地址方案中的换入换出.
链接
将多个目标模块组织成一个加载模块.
动态链接:
运行中用到时再加载,如dll文件.
静态链接
已经编译好的文件,复制静态库,把他们和应用程序组合起来.
分页,消除了外部碎片
页框:内存中一个固定长度的块
页:一个固定长度的数据块,存储在磁盘中.
页表:OS为每个进程维护一个页表.包含:页和页框的对应关系.
逻辑地址=页号+偏移量
分段,消除了内部碎片
逻辑地址 = 段号+偏移量
段表:包含起始地址和段的长度
可以作为组织程序和数据的一种手段.
安全问题
缓冲区溢出攻击:数据超过缓冲区容量会覆盖内存中其它部分的数据
虚拟内存
大小受到计算机系统寻址机制和可备用内存量的限制.
硬件和控制结构
常驻集: 一个进程运行时只需要部分在内存中.
需要其它部分时,中断进程,读入需要的页和段.
在内存中保留更多的进程
进程可以比比内存的全部还大
系统抖动:cpu大部分时间用于数据交换而非指令运行
推测将来可能用到的页
局部性原理
空间局部性:
时间局部性
分页
页表/多极页表:页表部分位于内存中,因此也需要页框,服从内存管理
倒排页表
TLB转换检测缓冲区:包含最近使用过的页表项
页尺寸:太小以为更大的页表;太大成为了固定分区。可以使用多种尺寸。
页尺寸影响缺页中断发生概率
分段
大小不等,动态。--〉 可以简化对不断增长的数据结构的处理等。
有助于实现保护和共享机制。因为基址寄存器和界限寄存器。
段页式
用户地址空间被划分为多个段,每个段又被分为多个页。
每个段使用一个页表
OS软件
原则:尽量减少缺页中断。因为缺页中断带来大量开销。(如IO)
措施
读取策略:确定一页何时读入内存
请求分页:用时在取
预先分页:一次读取多个连续页
放置策略。由于逻辑地址,所以放哪都一样。
置换策略:换出哪一页
目的:换出最近最不可能用到的页---据局部性原理
页框锁定:被锁定的页框无法置换
各种方法
最佳(无法实现,作为衡量标准): 选择下次访问距当前最远的页。
LRU最近最少使用:换掉上次使用距当前最远的页
先进先出:循环队列(效果差)
时钟策略:在FIFO的基础上给每个页框关联一个“使用位”
页缓冲
被置换出的页分配到空闲页链表和修改页链表
被置换的页仍在内存中。
如:在内存中开辟一个缓冲区,暂时存放被置换的页。
驻留集管理
分配策略
固定分配策略:给每个进程初始分配固定数量页框
缺页中断时,只能置换资金及的页
可变分配策略:允许一个进程的页框数在其lifetime中变化
OS需要评估该进程的行为
置换范围
局部:只能换自己的
全局:非加锁的都能换。实现简单,开销小
3种组合
固定局部:缺页率高(分配框数多)或进程数少(分配框数少)。
可变全局:难点:置换的选择。解决:使用页缓冲。
可变,局部
:不时地评估进程的页框分配情况,增加或减少其页框数。
评估策略:关键在于确定其驻留集大小的原则和驻留集大小变化的时间安排
工作集策略:时间通过内存访问来衡量
W(t,derta):表示该进程在过去个derta个虚拟时间单位中“被访问到的页的集合”
工作集指导驻留集
通过监视缺页率来指导。如缺页中断频率算法
清除策略:确定何时将一个被修改过的页写回辅存。
请求式清除:被置换时写回。
预约式清除:多个页在需要被置换时成匹写回。
这两种策略单独使用都不好。最好结合页缓冲使用。
加载控制:影响系统并发度:影响内存中驻留的进程数目
工作集或PFF; L=S准则。
一种全局策略。根据时钟算法的指针扫描速度反映系统当前的并发度的好坏。
0 条评论
下一页