操作系统笔记:(二)物理内存分配2:非连续内存分配

本文组织结构如下:

  • 动机
  • 段式
  • 页式
  • 段页式

非连续内存分配动机

  • 提高内存利用率(没有外碎片)
  • 允许程序使用非连续地址
  • 共享代码和数据
  • 动态加载和链接

需要实现的依然是从逻辑地址到物理地址的转换。

段式

段式就是将内存分成很多个段,段与段之间不连续,但每个段是连续的。(e.g.: 代码段,数据段,堆栈段…)

下图是一种硬件实现方式
这里写图片描述

逻辑地址是一个段号和段偏移,OS维护一个段表(<段基址,段长度>)

页式

页帧

物理地址被划分为大小相同的块,称为帧(frame),通常是 2n 2 n 个字节(e.g.:4KB)
帧的结构如下图
这里写图片描述

逻辑页面

顾名思义是把逻辑页面分成大小相同的页,大小与帧大小相同,保证页内偏移与帧内偏移相同
如下图:
这里写图片描述

页表: 从页面到帧

页表就是一个从页面到页帧的映射
这里写图片描述

页表项

  • 页表项包括: 帧号和标志位(存在位,引用位,修改位,只读位)
  • 每个页面对应一个页表项
  • 每个进程维护一个页表
  • 页表基地址寄存器(PTBR): 将页表放在内存中需要知道它的起始地址.

性能问题

  • 需要两次访存 ,页表再内存中需要访存一次,再根据帧号访问物理地址又是一次
  • 页表可能会很大

解决方案一个就是 缓存 (TLB),另一个可以用多级页表

TLB

由于TLB放在CUP中所以很快,而根据程序访问内存的局部性可以利用很好的命中策略提高命中率。
这里写图片描述

页表的一些实现方式

多级页表

这里写图片描述

多级页表就是建立页表树,做多级访存,通过设置存在位减少页表项,当然这种策略会带来访存次数的代价

下面是一个二级页表的例子
这里写图片描述

反置页表

待填坑

HASH页表

待填坑

段页式

这个比较好理解就是在段式的基础上给每个段加一级页表
这里写图片描述

有一个优点就是 容易实现共享代码段共享
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值