分页机制,一点小小的理解,os 于渊的树上的

mov eax, LinearAddrDemo
shr eax, 22
mov ebx, 4096
mul ebx
mov ecx, eax
mov eax, LinearAddrDemo
shr eax, 12
and eax, 03FFh ; 1111111111 (10 bits)
mov ebx, 4
mul ebx
add eax, ecx
add eax, PageTblBase1
mov dword [es:eax], ProcBar | PG_P | PG_USU | PG_RWW

代码来自于渊的书籍,自己动手写操作系统




今天看到了分页的转换,主要是把两个函数用切换页的方式来显示执行。



线型地址的高10位,10bits是3ff = 1023, 也就是1024个不同的编号。

从高10位找到了PDE, 假设PED位为第x个, 但是一个PDE对应1024个PTE,每个PTE有4个字节,所以相对于PTE基地址偏移了a1 = x*1024*4个字节。

从中间10位找到了表项的位置,也就是第几个表项,设为y,然后每个表项4个字节,他的偏移就是a2 = y*4个字节,所以相对于基地的偏移是PageTblBase+a1+a2

a1为页表相对于PageTblBase的偏移,a2为该指定页表里的表项的偏移地址。

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

哈哈世界

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值