linux中页面计算

 

Linux主要采用分页机制来实现虚拟内存管理。内存页的大小为PAGE_SIZE字节,而不是4 KB。在不同的平台上,页大小范围可以是4 KB64 KB

关于页号和页内偏移量有关的三个个宏如下:

(1) PAGE_SHIFT 

 

#define PAGE_SHIFT    12   

#define PAGE_SHIFT    13   

#define PAGE_SHIFT    14    

#define PAGE_SHIFT    15   

…………………

作用:PAGE_SHIFT的作用是通过对地址右移PAGE_SHIFT得到一个地址所在页的页号。

(2) PAGE_SIZE 

#define PAGE_SIZE       (1UL << PAGE_SHIFT)

我们以 #define PAGE_SHIFT      12为例来说明PAGE_SIZE的大小。

1UL << PAGE_SHIFT 即:0x0000 0001<<12  =  0x0000 1000 = 212 = 4K

页面的大小即为4K

(3) PAGE_MASK

#define PAGE_MASK       (~(PAGE_SIZE-1))

我们以PAGE_SHIFT12为例来说明PAGE_MASK的值,当PAGE_SHIFT12时,PAGE_SIZE 4K = 0x0000 1000.

PAGE_SIZE -1 = 0x0000 1000 -1 = 0x0000 0FFF

~(PAGE_SIZE-1) = ~0x0000 0FFF = 0xFFFF F000

也就是说,任何地址与上PAGE_MASK,结果为这个地址所在的页面的页面号。PAGE_MASK用于屏蔽掉偏移量域的所有位,而只剩下页面号域。

总之,得到一个地址所在页面的页号有两种方法,一种方法就是用这个地址与PAGE_MASK相与,相与得到的结果就是页号;第二种方法就是把这个地址右移PAGE_SHIFT,移位的结果就是页号。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值