内存分层体系

连续内存分配:

就是跟嵌入式差不多,一整段内存然后不断申请,之后就会出现内存碎片。
其中内存碎片的整理有两个策略:

  • 压缩式碎片整理
    就是将各个内存copy到一起,使得整体紧凑一点;
  • 交换式碎片整理
    将后面要用到的放到硬盘,节省出大块的空间

非连续内存分配:

为了解决内存碎片的问题,我们引进虚拟内存来和连续内存进行对应,其中可以是大小不等的段加上段表映射到真实的内存,但是段的大小不一这处理起来就不规则了;于是我们引进大小相等的页,页的大小是一样的,注意这里每次读取数据都需要两次访存,第一次是根据访存页表对应找到对应的帧表(帧是物理内存的概念,帧跟页大小是一样的,只不过前者在对应实际内存,后者对应虚拟内存)。

但这又会出现页表很大的问题,因为虚拟地址是可以很大的,这样页表就会很大,可能内存都装不下,可以进行以下的改进:

  • TLB(加快查找速度):块表,将页表中常用的页帧的映射放到cache中,这样找起来就快了。
  • 二级页表(减小页表大小):有点像间接寻址,首先找到页地址的高位部分看是否存在对应的数据,如果存在,继续查看二级页表,注意这里二级页表就不用满映射了,因为它是任p1的页表对应到随便哪个二级页表中去,这就减少了页表的大小。但这里的缺点是增加了访存的次数,这是典型的用时间换取空间。
二级页表.png
多级页表.png
  • 反向页表(减小页表大小):前面我们说到虚拟内存大导致的页表大,每个页都需要一个映射,这里采用帧和页反向对应,查找的时候采用相连存储器,可以同时查找所有的页表项,但是价格和功耗就上去了。于是我们用哈希来计算帧和页之间的映射,这里需要处理哈希时候的碰撞(多个映射到一个)。
反向页表
哈希算出帧号
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 我们都知道一个进程是与其他进程共享CPU和内存资源的。正因如此,操作系统需要有一套完善的内存管理机制才能防止...
    SylvanasSun阅读 9,283评论 0 25
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,385评论 0 27
  • 前段时间看了进程管理,觉得对编程简直大有裨益,至少对于多线程编程方面,对系统的进程管理有了非常深刻的理解,看来还是...
    KevinCool阅读 4,881评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,892评论 25 709
  • 写文以来,我经常收到读者的信息,大意是这样的:毕业后独自来到大城市打拼,一个人吃饭,一个人回到出租屋,出租屋内也不...
    美猫是我阅读 3,596评论 1 1