第11章 页式内存管理

11.1 基址极限管理模式的问题

上一章介绍的内存管理方法,分别是固定加载地址的内存管理(单道编程),固定分区的内存管理、非固定分区的内存管理和交换内存的内存管理;各自于自己的优缺点,但用于多道编程的内存管理模式均使用同一种实现机制: 基址与极限,二者的工具原理,我们知道内存地址的2个特性:地址保护和地址独立,所为的地址独立就是程序有自己的虚拟地址,在程序启动运行时才会把程序的虚拟地址跟内存的物理地址建立一一对应关系,就是把虚拟地址翻译成物理地址,实质就是给程序分配物理内存。

   内存的物理地址  = 程序的虚拟地址  + 基址 ,如果物理地址超过指定的极限,则视为地址出界而禁止访问,否则访问正常进行。

   多道编程里面交换内存管理最先进的,是解决了固定分区内存管理、非固定分区内存管理的问题提出的一种内存管理方式,但交换内存管理方式也存在问题:

  • 程序内存不够,需要通过交换来分配更大的内存,交换过程中造成程序访问缓慢,效率低下,基本难以接受
  • 因为旧程序不断释放内存资源,新程序不断申请内存资源;释放的资源再次被分配利用,会剩下一部分碎片化的内存,导致碎片化内存比较严重;碎片化也导致内存浪费


12.2 分页内存管理


解决交换内存管理的方案就是分页内存管理: 将虚拟内存和物理内存空间皆划分大小相同的页面,比如大小是4KB、8KB或者16KB等,并以页面作为内存空间分配的最小分配单位,内存管理机制只需要维护所有的内存页面就ok,维护所有内存页的使用或者空闲状态,然后及时释放资源、合理分配资源。
  • 因为分配是以内存页为最小单位,那释放资源也是最小单位;所以释放后可以被100% 的重新分配、利用
  • 分配给一个程序的内存资源地址不再是连续的,可能是很多个内存页,只要内存管理机制做好信息的维护就好
  • 内存管理机制(操作系统),只需要维护所有的内存页和各个内存页的状态,并完成及时释放内存页、合理分配内存页即可
  • 程序虚拟内存翻译成物理内存的方式: 虚拟内存可以翻译成任何一个物理地址,所以分配内存就变的更加简单、灵活、高效

11.2.1 地址翻译

上面讲的分页系统能够工作的前提是: 对任何一个虚拟页面,系统知道该页面是否在物理内存中,如果在其对应物理页面是哪个,如果不在,则会产生一个系统中断(缺页中断),并将该虚页从磁盘转到内存,然后将分配给它的物理页号返回;也就是说页面管理系统要能够将虚拟地址转换未物理地址,这个过程就叫做地址翻译。所以分页内存管理的核心是页面的地址翻译;下面是程序的虚拟地址到内存的物理地址翻译的过程 

  • 虚拟地址:程序在加载到内存之前都是虚拟地址(虚拟页面号 + 页内偏移量)2部分组成;
  • 其中页表的功能非常关键:提供虚拟页面到物理页面的一一映射关系;
  • 物理地址:把物理内存和虚拟内存(实质是磁盘,swap 交换区)分成大小相同的页,每个页都有一个页号

11.3 分页内存管理的优缺点

分页内存管理解决了交换内存的问题,但也引入了新的问题:页表因为记录的信息很多,导致页表占用的内存空间也很大,这在早期内存比较昂贵时比较显著;
那怎么来解决这个问题呢;现在又2种方案,一种是多级页表,一种是反转页表

11.4 多级页表

程序再处理内存不够的策略是分配一部分虚拟内存,把一些不活跃的数据放到swap区域(也就是磁盘区域),那页表也可以用这个思想来优化,把页面分为多级页面,把映射关系按照一定的算法进行分类,分成多个页表,然后根据页面决定放在内存还是暂时放在磁盘,等需要的时候再加载到内存中.


11.5 反转页面

虚拟内存(2的52次方)比较多,物理内存比较少(256MB --2的16次方);现在虚拟内存对应物理内存需要2的52次方条映射记录,但用物理内存去映射虚拟内存页需要2的16此方条映射记录,这样页表占用的内存空间也会大大减少!


11.6 锁住页面

如果发生缺页中断,就需要从磁盘上将需要的页面调入内存,如果内存没有多余的空间来分配,就需要在现有的页面里面选择一个页面进行替换;但是我们对某一些很重要或者非常活跃的数据不替换到磁盘上, 这样需要在页表中打一个标签,让这个数据不被替换出去;其实就是锁住一些页面数据不被交换到磁盘上


11.7 页面尺寸

内存页设置多大是件艺术,不同的场景下大小也不同;可以采用可变的页尺寸,可以分成多个大小不同的内存页,然后根据程序需要给程序分配大小适合的内存页。

11.8 内存抖动

前面说的如果一个数据不在内存,在磁盘上,这时会发生缺页中断,需要从磁盘中把数据交换到内存;但是这时又会把另外一个数据从内存交换到磁盘,如果很快又有请求访问刚才交换出去的数据,又会出现缺页中断,就会频繁造成缺页中断,频繁从磁盘交换数据到内存,因为从磁盘读数据的数据是内存的百万分之1,所以造成系统服务慢很多,延迟也很多,这种最简单的是重启服务会有缓解,但很快又会出现类似的情况。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值