mmu页表机制

8 篇文章 1 订阅

给个链接

https://www.cnblogs.com/arnoldlu/p/8087022.html


1. 段, 大页, 小页, 极小页的划分

     4种映射长度:段(1MB)、大页(64KB)、小页(4KB)、极小页(1KB)。

 

ok, 以这个为前提, 我们设计mmu 两级页表的方式。


假设, 需要寻址 0x12345678这个虚拟地址。

已知它对应的页是0x56789000页,  即真实的物理地址为0x56789678。

我们考虑二级页表该如何设计。

以二级页表方式寻址。

将0~4G空间 4K 一页为单位, 分成1024*1024个页。

256个页组成1M 称之为段。(Section)

4K 的大小为0x0 1000

1M 的大小为0x10 0000

 

4K 一页, 分页后

0x0000 0000

0x0000 1000

0x0000 2000

0x0000 3000

....

 

1M 一段, 分段后

0x0000 0000

0x0010 0000

0x0020 0000

0x0030 0000

0x0040 0000

....

 

共计4096个段, 

故虚拟地址前12字节, 0x123 可以作为段的寻址序号。

即以及页表的第0x123个就是我要找的段地址页表。

 

这个页表在哪里,  首先需要找到段页表地址的基地址, 这个存在cp15协处理器的某个寄存器中(忘记是C1还是C2啥的了)

ok, 读取段页表基地址, 假设是0xC100 0000, 其中每个页表项是32位整数, 即4byte

所以, 寻找到第0x123个页表项, 地址为 0xC100  0| 0100 | 1000 | 1100, 即为 0xC100 048C

ok, 找到一级段地址页表项了。 我们就能找到实际的映射的段物理地址了。 是的0xC100 048C中存放的32位数中,

我们想想这个32位段页表项该存放写什么??

没错, 要存放二级页表的基地址。 假设是0xC300 0000....

ok, 二级页表项的具体位置该如何明确呢??


先说结论, 虚拟地址的第12位到第19位这8位数据就是页表项的序号。

1). 二级页表应该有256个。

2). 前12位0x123为段地址的序号。

3). 中间8位0x45是页表项的序号。

     中间8位数字, 刚好可以表示0x00 ~ 0xFF共256个页表项目的序号


ok, 我们找到0xC300 0000的第0x45号页表项。

里面存放这最终的物理页地址。即0x56789000页, 该页表的基地址为就是0x56789

总共5字节,  即20位数据。


ok, 最后12位数据为真实的页偏移地址/序列号。

故拼接最终的物理地址, 0x56789678。


寻址成功。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值