操作系统第八章 主存
- 主存
-
- 存储器管理系统关注的问题
- 背景
-
- 关键问题
- MMU
- 兑换区(swapping)
- 分区
-
- 单分区
- 多分区
- 分区管理的特点
- 分页
-
- 地址转换
- 内存保护
- 页面共享
- 页表结构
-
- 层次页表
- 哈希页表
- 反向页表
- 分段
主存
存储器管理系统关注的问题
- 逻辑地址空间和物理地址空间的管理方法(分区管理、页式管理、段式管理、段页式管理)
- 逻辑地址到物理地址的映射方法
- 存储保护机制
- 内存共享方法
- 碎片,零头
背景
一个用户程序的运行需要经历以下几个步骤:
- 编写源程序
- 编译
- 链接
- 装入
- 执行
关键问题
各个阶段地址的表示及转换问题:
源程序中如何表示时如何表示时如何表示p>
名地址和名空间:
在编程时,使用符 名表示地址,如变量名,标 等
这些变量名和标 等构成程序的名空间
逻辑地址与逻辑空间:(logical address space)
编译时无法确定程序在运行时所分配的地址空间;
假设从0开始编址,指令中地址码部分都是相对于0进行编址
相对地址->相对地址空间;虚地址->虚地址空间
物理地址空间:(physical address space)
程序运行时使用的内存地址;
绝对地址->绝对地址空间; 实地址->实地址空间;
逻辑地址到物理地址的映射:
- 编译时完成地址映射
用户下需要知道内存使用情况,不利于程序的浮动,不支持虚拟存储,早期系统使用 - 装入时完成
不利于程序的浮动,不支持虚拟存储 - 运行时完成(现在的OS多采用)
边执行,边变换
需要硬件MMU支持
支持虚拟存储机制(程序可以装到内存的任何地方)
MMU
- 绝对方式装入:
运行时装入所有模块,装入时费时,浪费内存,管理简单,运行速度快 - 动态运行时装入:
运行时址装入主控模块,支持下虚拟存储
兑换区(swapping)
对换是指将内存中的暂时还不能被运行的进程或者暂时用不到的程序和数据,调到外存上(在linux中,有个/swap分区专门用户对换),以便腾出足够的内存供在外存中等待的作业使用。
分区
单分区
用户区只有一个分区,每个时刻只能运行一道程序。
多分区
将用户区分成多个分区,每个分区,每时刻运行一道程序。
两种多分区技术:
静态分区:
- 系统初始化时,系统将内存分成多个分区:
分区数目固定,分区大小固定 - 分区表
记录分区位置大小及使用情况,对分区进行管理 - 内碎片
- 地址映射和存储保护:
base寄存器(relocation Register)和limit寄存器如上图所示
- Best-fit :分配一个笑笑合适的最小的hole要扫描整个list
- First-fit:分配第一个遇到的足够大的hole
- Worst-fit:分配最大的hole,扫描整个list
- Next-fist
分区管理的特点
- 整个作业或进程存放在一段整个连续的内存区域中
- 管理简单
- 对于较大的作业,有时难以找到足够大的连续区域
- 不支持内存共享
- 不是很好的支持虚拟存储
分页
基本思想:
- 内存分块(页框(frame)),作业分页,页和页框一样大
- 内存分配以页为单位。
- 一个作业在内存中的个页面可以分配到不相邻的页框中,但一个页框在内存中连续。
- 逻辑地址格式:页 ,页内偏移
- 内碎片
存储保护:
页 越界检查
共享页访问权限
页面共享:
通过页表实现
地址转换
CPU给出的逻辑地址划分
页 ,页内偏移
内存保护
- 检查页 是否超出自己的地址空间定义的范围
- 检查页框的访问许可
valid-invalid 位
valid:表明该页表中的页面是该进程的合法页面
invalid :页面不是该进程和发的页面
当调度一个进程时,系统将其PCB中保存的本进程页表的PTBR及PTLR内容装入系统的PTBE PTLR以实现操作系统对本进程存储空间的访问
页面共享
哈希页表
分段
分页存在的问题
- 实际内存和用户理解的内存不一致
- 共享困难(可能将一个独立的模块划分到多个页面中)
分区存在的问题
将一个作业的逻辑空间视为一个连续的整体,为大作业找也个连续分区比较困难
分段的基本思想
- 作业分段,内存按动态分区进行管理
- 内存分配以段为单位
- 一个作业在内存中可以不连续但是在段内是连续的
- 每一个段都有段名和长度
- 逻辑地址格式:段 ,段内偏移量
- 段表:段与段之间所在内存位置的对应关系
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!