设为首页 收藏本站
查看: 1434|回复: 0

[经验分享] Linux arm64的虚拟内存布局

[复制链接]

尚未签到

发表于 2017-6-24 22:23:21 | 显示全部楼层 |阅读模式
  原创翻译,转载请注明出处。
  页表转换
arm64在硬件体系结构上支持4级的每页大小为4K的页表转换,也支持3级的页大小64KB的页表转换。
在linux arm64中,如果页的大小为4KB,使用3级页表转换或者4级页表转换,用户空间和内核空间都支持有39bit(512GB)或者48bit(256TB)大小的虚拟地址空间。
如果页的大小为64KB,就只有2级页表转换,支持42bit(4TB)大小的虚拟地址,用户空间和内核空间也大小一样。


地址分布
虚拟地址都用64位无符号数表示。
用户虚拟地址从高位的63到低位的48都是0,内核虚拟地址则相反,63~48都是1. TTBR x(Translation table base register)的选择是通过虚拟地址的第63 bit位来确定的。swapper_pg_dir只包含内核地址映射,而用户

pgd 只包含用户地址映射,swapper_pg_dir 指向的地址只会写入到 TTBR1,绝不会写入到TTBR0。



AArch64 Linux memory layout with 4KB pages + 3 levels:
Start            End            Size        Use
-----------------------------------------------------------------------
0000000000000000    0000007fffffffff     512GB        user
ffffff8000000000    ffffffffffffffff     512GB        kernel


AArch64 Linux memory layout with 4KB pages + 4 levels:

Start            End            Size        Use
-----------------------------------------------------------------------
0000000000000000    0000ffffffffffff     256TB        user
ffff000000000000    ffffffffffffffff     256TB        kernel


AArch64 Linux memory layout with 64KB pages + 2 levels:
Start            End            Size        Use
-----------------------------------------------------------------------
0000000000000000    000003ffffffffff       4TB        user
fffffc0000000000    ffffffffffffffff       4TB        kernel


AArch64 Linux memory layout with 64KB pages + 3 levels:
Start            End            Size        Use
-----------------------------------------------------------------------
0000000000000000    0000ffffffffffff     256TB        user
ffff000000000000    ffffffffffffffff     256TB        kernel
  想看内核虚拟地址布局的详细情况,可以通过观察内核boot日志。



Translation table lookup with 4KB pages:
+--------+--------+--------+--------+--------+--------+--------+--------+
|63    56|55    48|47    40|39    32|31    24|23    16|15     8|7      0|
+--------+--------+--------+--------+--------+--------+--------+--------+
|                 |         |         |         |         |
|                 |         |         |         |         v
|                 |         |         |         |   [11:0]  in-page offset

|                 |         |         |         +-> [20:12] L3 index

|                 |         |         +-----------> [29:21] L2 index

|                 |         +---------------------> [38:30] L1 index

|                 +-------------------------------> [47:39] L0 index
+-------------------------------------------------> [63] TTBR0/1


Translation table lookup with 64KB pages:
+--------+--------+--------+--------+--------+--------+--------+--------+
|63    56|55    48|47    40|39    32|31    24|23    16|15     8|7      0|
+--------+--------+--------+--------+--------+--------+--------+--------+
|                 |    |               |              |
|                 |    |               |              v

|                 |    |               |            [15:0]  in-page offset

|                 |    |               +----------> [28:16] L3 index

|                 |    +--------------------------> [41:29] L2 index

|                 +-------------------------------> [47:42] L1 index
+-------------------------------------------------> [63] TTBR0/1
  当使用kvm时,虚拟机管理器(hypervisor)内核页表映射在EL2(CPU异常级别),通过对内核虚拟地址固定的偏移来确定(高24位内核虚拟地址设置为0):



Start            End            Size        Use
-----------------------------------------------------------------------
0000004000000000    0000007fffffffff     256GB        kernel objects mapped in HYP

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387721-1-1.html 上篇帖子: VirtualBox中使用ubuntu-16.04.1安装devstack的Compute节点 下篇帖子: 泰发TF680视频信号延长方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表