非连续内存分配

非连续内存分配

为什么要非连续内存分配?

  • 分段
  • 分页
  • 页表

连续内存分配的缺点:

  • 分配给一个程序的物理内存是连续的
  • 内存利用率较低
  • 有外碎片,内碎片的问题

非连续分配的优点:

  • 一个程序的物理地址空间是非连续的
  • 更好的内存利用和管理
  • 允许共享代码与数据
  • 支持动态加载和动态链接

非连续分配的缺点:

  • 如何简历虚拟地址和物理地址的转换
    • 软件方案
    • 硬件方案

硬件方案

分段

  • 程序的分段地址空间
  • 分段寻址方案
    • 一个段一个内存“块”:一个逻辑地址空间
    • 一个二维的二元组(s, addr):s 一个段号,addr 一段内偏移

分页

  • 分页地址空间
    • 划分物理内存至固定大小的帧:大小是2的幂
    • 划分逻辑地址空间至相同大小的页:大小是2的幂
    • 建立方案 转换落地地址为物理地址:
      • 页表
      • MMU/TLB
    • 帧:物理内存被分割成大小相等的帧
    • 页:一个程序的逻辑地址空间被划分为大小相等的页
  • 页寻址方案
    • 页表保存了逻辑地址-物理地址之间的映射关系
  • 页寻址机制
    • 页映射到帧
    • 页是连续的虚拟内存
    • 帧是非连续的物理内存
    • 不是所有的页都有对应的帧
页表
  • 每一个运行的程序都有一个页表
    • 属于程序运行状态,会动态变化
    • PTRB:页表基址寄存器
  • 分页机制的性能问题:
    • 访问一个内存单元需要2次内存访问
      • 一次用于获取页表项
      • 一次用于访问数据
    • 页表可能非常大
      • 64位机器如果每页1024字节,那么一个页表大小会是多少?
    • 如何处理:
      • 缓存 TLB
        • 缓存TLB使用associative memory 关联内存实现,具备快速访问性能
        • 如果TLB命中,物理页号可以很快被获取
        • 如果TLB未命中,对应的表项被更新到TLB中(跟CPU有关,可能由操作系统或者是硬件来实现)
      • 间接访问
        • 多级页表:通过把页号分为k个部分,来实现多级间接页表
          • 建立页表
大地址空间问题

有大地址空间,前项映射页表变的繁琐

不是让页表与逻辑地址空间的大小相对应,而是让页表与物理空间的大小相对应

  • 基于页寄存器的方案
    • 每个帧和一个寄存器关联,寄存器包括哟
      • residence bit 此帧是否被使用
      • occupier 对应的页号p
      • protection bits 保护位
    • 优点
      • 转换表的代销相对于物理内存来说很小
      • 转换表的大小和逻辑地址大小无关
    • 缺点
      • 需要的信息对调了,即根据帧号可找到页号
      • 如何转换回来?
      • 在需要的反向页表中搜索想要的页号
  • 使用关联内存的方案
  • 基于hash计算的查找方案
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

turbolove

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

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

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

打赏作者

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

抵扣说明:

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

余额充值