操作系统3.2.2,考研掌握这些就够了

3.2.2 内存管理:非连续分配管理方式

非连续分配管理方式思维导图:

非连续分配管理方式

  • 页式管理
  • 段式管理
  • 段页式管理

页式管理思维导图:

页式管理

基本思想:把进程分页,各个页面可以离散的放在内存块中

  • 页框、页帧、内存块、物理块、物理页都是对内存而言的
  • 页、页面是对进程而言的;即:把页面放在页框里,页面大小等于页框大小
  • 页面的设置:过大会导致内部碎片的增加;过小会使进程页表变得过于庞大,降低存储密度

页表

  • 页表记录了页面与实际存放内存块之间的映射关系
  • 一个进程对应一张页表,进程的每一页对应一个页表项,页表项由页号和块号组成
  • 页表项大小相同,页号是隐藏的
  • i号页表项的存放地址=页表始址+i*页表项大小

逻辑地址=页号+页内偏移量

  • 页号=逻辑地址/页面大小
  • 页内偏移量=逻辑地址%页面大小
  • 若页面大小刚好是2的整数次幂,后该整数位为页内偏移量,前面位数为页号

地址变换
基本地址变换机构

页表寄存器的作用

存放页表起始位置

  • 存放页表长度
  • CPU每个核心都有一个页表寄存器

地址转换的过程:
两次访存

  1. 根据逻辑地址计算页号和页内偏移量
  2. 页号的合法性检查
  3. 若页号合法,查询页表(第一次访问内存)
  4. 根据页表项记录的内存块号、页内偏移量得到最终物理地址
  5. 访问物理地址对应的内存单元(第二次访问内存)

其他小细节

  • 页内偏移量的位数与页面大小之间的关系
  • 页面大小 = 2`页内偏移量位数
  • 页式管理是一维的,即只需要提供逻辑地址就可以找到对应的内存单元
  • 实际应用中,通常使一个页框恰好能放入整数个页表项
  • 页表一般放在连续的内存块中
具有快表的变换机构(TLB)

TLB存放最近访问的内存单元

地址变换过程

  1. 根据逻辑地址得到页号和页内偏移量
  2. 检查页号的合法性
  3. 查询快表,若命中,直接访问实际内存单元 若未命中则查页表(慢表),并且将页表项复制到快表中
  4. 根据内存块号和页内偏移量得到物理地址
  5. 访问目标内存单元

快表若命中,只需一次访存,若未命中,需要两次访存

TLB和Cache的区别

  • TLB存储页表项以加快对页表的访问
  • Cache存储部分内存块的内容以加快对进程文件的访问

ECT:有效访问时间

  • 用于分析快表对系统的影响
  • 设快表的命中率约90%:EAT=(快表用时+访存)*0.9 + (快表用时+访存*2)*0.1

两级页表

单极列表存在的问题

  • 所有页表项必须连续存放,页表过大时难以找到合适的存储空间
  • 在一段时间内并非所有页面都用到,因此没必要让整个页表常驻内存

两级页表

  • 思想:将页表再分页
  • 逻辑地址结构:一级页号,二级页号,页内偏移量
  • 又称页目录表、外层页表、顶级页表

地址转换

  1. 根据逻辑地址拆分一级页号、二级页号和页内偏移量
  2. 根据一级页号查页目录表,找到二级页表在内存中存放位置
  3. 根据二级页表,找到块号
  4. 得到物理地址,最终访存

多级页表中,各级页表的大小不能超过一个页面,若两级页面不够,则分多级

多级页表的访存次数:N+1

段式管理思维导图:

段式管理

分段
  • 将地址空间按程序自身的逻辑关系划分若干段,每段从0编址
  • 每个段在内存中连续,各段之间可以不相邻
  • 逻辑地址结构:段号+段内地址
段表
  • 记录逻辑段到实际存储地址的映射关系
  • 每个段对应一个段表项,由段号(隐含)+段长+基址组成
地址变换
  1. 根据逻辑地址得到段号和段内地址
  2. 检查段号的合法性
  3. 由段表始址、段号找到段表项
  4. 根据段表中记录的段长,检查段内地址是否越界
  5. 由基址+段内地址得到物理地址并访存
与分页的区别
  • 分页对用户不可见(透明),分段对用户可见(不透明)
  • 分页地址空间是一维的,分段是二维的
  • 分段更容易实现信息的共享和保护
  • 纯代码/可重入代码可以共享
  • 都需要两次访存,都可引入快表

段页式管理思维导图:

段页式管理

分段与分页的结合:先分段后分页
  • 逻辑地址结构:段号、页号、页内偏移量
  • 每个进程只有一张段表,但页表可能不止一张
段表、页表
  • 每个段对应一个段表项,由段号(隐含)、页表长度、页表存放地址组成
  • 每个页对应一个页表项,由页号(隐含)、页面存放的内存块号组成
地址变换
  1. 由逻辑地址得到段号、页号、页内偏移量
  2. 检查段号的合法性
  3. 由段号、段表始址找到对应段表项
  4. 根据段表中记录的页表长度检查页号是否越界
  5. 由页表地址、页号查询页表,找到页表项
  6. 由页面存放的内存块号,页内偏移量得到物理地址,最终访存

需要三次访存:查段表、查页表、访存 引入快表机构后仅需一次访存

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毓见美好.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值