当前位置: 首页 > news >正文

内存管理篇-16二级页表工作原理

1.修正上节课的转换图

上节课的页表的一级页表其实并不完全正确,一般虚拟页帧和物理页帧号不会都占用实际字段,这样毕竟很浪费内存。

2.再分析一下页表的开销情况: 

一级页表:以4KB物理页为映射单位,每个进程4MB的虚拟地址空间,4GB/4KB=1MB个页表项entry,每个一级页表都需要4MB存储空间,每个进程需要4M的内存存储页表,100个进程需要400M。

二级页表:相当于把一级页表的4MB个entry拆分成,4096个二级entry(256个entry),但是如果全量映射的话,4096*256本质上也是1024 KB个entry。 所以这个角度分析没有任何内存优化。

  • 一级页表PGD:一共占用12位,31-20位,也就是需要4K的页表项。(如果每个entry占用4字节,32位的话也就是16KB)
  • 二级页表PTE:占据19-10一共10位,也就是1024个二级页表项,一般每个entry也是4字节,二级页表也就占据1KB。因为每个一级页表的entry都会执行一个二级页表,所有的二级页表加起来是4K * 1K = 4M。也就是每个进程如果全部映射的话也是需要4MB。(这里如果全部映射其实是无法节约空间的,这是因为一个进程不会映射所有的进程空间,只需要映射什么代码段,数据段,堆栈等等)
  • 注意:因为一级页表找对应的entry时,是用虚拟地址的高22位作为偏移的,所以这里需要用连续的4MB内存。

二级页表的优缺点

优点

  1. 节省内存:通过使用二级页表,可以显著减少页表项的数量,从而节省内存空间。
  2. 提高效率:由于页表项数量减少,地址转换的效率得到提高。
  3. 易于管理:页表和页目录的分离使得内存管理更加灵活和高效。

缺点

  1. 两次内存访问:在转换过程中需要两次内存访问(一次访问页目录,一次访问页表),这可能会增加一些延迟。
  2. 复杂性增加:相对于一级页表,二级页表的实现更为复杂

3.举例:二级页表地址转换

在二级页表(Two-Level Paging)机制中,虚拟地址被分成三个部分:页目录索引(Page Directory Index)、页表索引(Page Table Index)和页内偏移(Offset)。这种机制通过增加一层间接寻址,可以显著减少页表项的数量,从而减少页表在内存中的占用空间,并提高地址转换的效率

首先通过虚拟地址的0x800作为一级页表的偏移,0x03作为二级页表的偏移,0x160作为页内偏移。


http://www.mrgr.cn/news/16361.html

相关文章:

  • 揭秘!糖尿病:从绝望到希望的治愈之路
  • Java高级Day34-流补充
  • 【自由能系列(初级)】第一性原理与自由能——从基础到系统做功的桥梁
  • 52基于SpringBoot+Vue+uniapp的旅游管理系统的的详细设计和实现(源码+lw+部署文档+讲解等)
  • 【STM32】BKP备份寄存器与RTC实时时钟
  • Stable Diffusion 必备插件推荐,菜鸟轻松成高手!
  • 海外融合CDN怎样优化?
  • C#学习笔记(二)安装开发环境、代码编译运行
  • Windows系统下不小心把输入法切换成了繁体怎么办
  • <数据集>车辆识别数据集<目标检测>
  • win10环境下gvim离线配置插件的一些补充
  • 强缓存和协商缓存
  • 【大数据算法】时间亚线性算法之:串相等判定算法。
  • Upload-LABS通关攻略【1-20关】
  • 【Python】简单的爬虫抓取
  • pycharm安装本地插件
  • 零基础转行学网络安全怎么样?
  • 【Python进阶】学习Python必须要安装PyCharm。一篇文章带你总结一下安装PyCharm的注意事项,文末附带PyCharm激活码!!!
  • 2024年交安安全员考试题库及答案
  • 【SuperCraft AI:无限工作流画布】