当前位置:首页 > 公众号精选 > Linux阅码场
[导读]通用操作系统,通常都会开启mmu来支持虚拟内存管理,而页表管理是在虚拟内存管理中尤为重要,本文主要以回答几个页表管理中关键性问题来解析Linux内核页表管理,看一看页表管理中那些鲜为人知的秘密。

1.开场白

  • 环境:
  • 处理器架构:arm64
  • 内核源码:linux-5.11
  • ubuntu版本:20.04.1
  • 代码阅读工具:vim ctags cscope
通用操作系统,通常都会开启mmu来支持虚拟内存管理,而页表管理是在虚拟内存管理中尤为重要,本文主要以回答几个页表管理中关键性问题来解析Linux内核页表管理,看一看页表管理中那些鲜为人知的秘密。

2.页表的作用是什么?

1)地址转换
将虚拟地址转换为物理地址
2)权限管理
管理cpu对物理页的访问,如读写执行权限
3)隔离地址空间
隔离各个进程的地址空间,使其互不影响,提供系统的安全性
打开mmu后,对没有页表映射的虚拟内存访问或者有页表映射但是没有访问权限都会发生处理器异常,内核选择杀死进程或者panic;通过页表给一段内存设置用户态不可访问, 这样可以做到用户态的用户进程不能访问内核地址空间的内容;而由于用户进程各有一套自己的页表,所以彼此看不到对方的地址空间,更别提访问,造成每个进程都认为自己拥有所有虚拟内存的错觉;通过页表给一段内存设置只读属性,那么就不容许修改这段内存内容,从而保护了这段内存不被改写;对应用户进程地址空间映射的物理内存,内核可以很方便的进行页面迁移和页面交换,而对使用虚拟地址的用户进程来说是透明的;通过页表,很容易实现内存共享,使得一份共享库很多进程都可以映射到自己地址空间使用;通过页表,可以小内存加载大应用程序运行,在运行时按需加载和映射...

3.页表的存放在哪?

页表存放在物理内存中打开mmu之后,如果需要修改页表,需要将页表所在的物理地址映射到虚拟地址才能访问页表(如内核初始化后会将物理内存线性映射,这样通过物理地址和虚拟地址的偏移就可以获得页表物理地址对应的虚拟地址)。

4. 页表项中存放是虚是实?

页表基地址寄存器和各级页表项中存放的都是物理地址,而不是虚拟地址。

5. 开启mmu后地址转换过程?

虚拟地址转换物理地址的过程:打开mmu后,cpu访问的都是虚拟地址,当cpu访问一个虚拟地址的时候,会通过cpu内部的mmu来查询物理地址,mmu首先通过虚拟地址在tlb中查找,如果找到相应表项,直接获得物理地址;如果tlb没有找到,就会通过虚拟地址从页表基地址寄存器保存的页表基地址开始查询多级页表,最终查询到找到相应表项,会将表项缓存到tlb中,然后从表项中获得物理地址。

6. Linux内核为何使用多级页表?

1)使用一级页表结构优劣:
优势:
只需要2次访问内存(一次访问页表,一次访问数据),效率高,实现简单
劣势:
需要连续的大块内存存放每个进程的页表(如32位系统每个进程需要4M页表),浪费内存,虚拟内存越大页表越大,内存碎片化的时候很难分配到连续大块内存,大多数虚拟内存并没有使用。
2)使用多级页表结构优劣:
优势:
1.节省内存
2.可以按需分配各级页表
3.可以离散存储页表
劣势:
需要遍历多级页表,需要多次访问内存,实现复杂度高点
3)Linux内核综合考虑:
典型的以时间换空间,可以将各级页表放到物理内存的任何地方,无论是硬件遍历还是内核遍历,比一级页表更复杂,但是为了节省内存,内核选择多级页表结构。

7.减小多级页表遍历的优化?

1)mmu中添加tlb
来缓存最近访问的页表表项,根据程序的时间和空间的局部性原理,tlb能有很高的命中率。
2)使用巨型页
减少访存次数(如使用1G或2M巨型页),可以减少tlb miss和缺页异常。

8. 硬件做了哪些事情?

遍历页表,将va转换为pa,页面权限管理
涉及到的硬件为:
mmu
->功能:查询tlb或者遍历页表
tlb
->功能:缓存最近转换的页表条目
页表基地址寄存器 如ttbr0_el1  ttbr1_el1
->功能:存放页表基地址(物理地址)作为mmu遍历多级页表的起点
mmu进行多级页表遍历时当发现虚拟地址的最高bit为1时使用 ttbr1_el1作为遍历起点,最高bit为0时使用 ttbr0_el1作为遍历起点。

9. 软件做了哪些事情?

1)应用程序
访问虚拟内存即可如执行指令、读写内存, 没有权限管理页表
不管虚拟内存如何转换为物理内存,对应用来说透明。
2)Linux内核
填写页表,将页表基地址告诉mmu
内核初始化建立内核页表,实现缺页异常等机制为用户任务按需分配并映射页表。
当然,内核也可以遍历页表,如缺页异常时遍历进程页表。

10. 内核中涉及到的页表基地址?

内核:
idmap_pg_dir    恒等映射页表(va=pa 映射2M)
init_pg_dir        粗粒度内核页表
swapper_pg_dir   主内核页表
用户:
tsk->mm->pgd 用户进程fork的时候分配私有的pgd页,用于保存pgd表项(仅仅分配了第一级页表)。

11. 页表填写/切换时机

1)内核页表填充
内核初始化过程:
物理地址 -> 恒等映射(建立恒等映射页表和粗粒度内核页表) ->打开mmu ->  paging_init(建立细粒度的内核页表和内存线性映射)  -> ...
恒等映射阶段:
将恒等映射页表idmap_pg_dir  地址保存到ttbr0_el1
将 粗粒度内核页表init_pg_dir 地址保存到ttbr1_el1
paging_init阶段:
将内核主页表swapper_pg_dir 地址保存到ttbr1_el1
paging_init之后丢弃idmap_pg_dir init_pg_dir 页表的使用。
2)用户页表填充
访问时缺页填充:
用户进程访问已经申请的虚拟内存时,发生缺页,缺页处理程序中为分配各级页表等物理页并建立页表映射关系。
进程切换时切换进程页表:
switch_mm的时候切换tsk->mm->pgd到ttbr0_el1以及asid 到ttbr1_el1,从而完成了进程地址空间切换。

12.页表遍历过程

下面以arm64处理器架构多级页表遍历作为结束(使用4级页表,页大小为4K):
Linux内核中 可以将页表扩展到5级,分别是页全局目录(Page Global Directory, PGD),  页4级目录(Page 4th Directory, P4D),   页上级目录(Page Upper Directory, PUD),页中间目录(Page Middle Directory, PMD),直接页表(Page Table, PT),而支持arm64的linux使用4级页表结构分别是 pgd,  pud, pmd, pt ,arm64手册中将他们分别叫做L0,L1,L2,L3级转换表,所以一下使用L0-L3表示各级页表。
tlb miss时,mmu会进行多级页表遍历遍历过程如下:
1.mmu根据虚拟地址的最高位判断使用哪个页表基地址寄存器作为起点:当最高位为0时,使用ttbr0_el1作为起点(访问的是用户空间地址);当最高位为1时,使用ttbr1_el1作为起点(访问的是内核空间地址) mmu从相应的页表基地址寄存器中获得L0转换表基地址。
2.找L0级转换表,然后从虚拟地址中获得L0索引,通过L0索引找到相应的表项(arm64中称为L0表描述符,内核中叫做PGD表项),从表项中获得L1转换表基地址。
3.找到L1级转换表,然后从虚拟地址中获得L1索引,通过L1索引找到相应的表项(arm64中为L1表描述符,内核中叫做PUD表项),从表项中获得L2转换表基地址。
4.找到L2级转换表,然后从虚拟地址中获得L2索引,通过L2索引找到相应的表项(arm64中为L2表描述符,内核中叫做PUD表项),从表项中获得L3转换表基地址。
5.找到L3级转换表,然后从虚拟地址中获得L3索引,通过L3索引找到页表项(arm64中为页描述符,内核中叫做页表项)。
6.从页表项中取出物理页帧号然后加上物理地址偏移(VA[11,0])获得最终的物理地址。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭