Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1270746
  • 博文数量: 160
  • 博客积分: 4132
  • 博客等级: 中校
  • 技术积分: 2086
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-06 21:56
文章分类

全部博文(160)

文章存档

2012年(25)

2011年(120)

2010年(15)

分类: LINUX

2011-09-27 19:04:53

PAGE_ALIGN()

将物理地址addr修整为页边界地址(页的上边界)

#define PAGE_ALIGN(addr)    (((addr)+PAGE_SIZE-1)&PAGE_MASK)

        |------------|<-- PAGE_ALGN(addr)
        |            |
        |            |
        |            |
        |            |<-- addr
        |            |
        |            |
        |            |
        |            |
        |------------|
          one page(4K)

#define PAGE_SHIFT 12
#define PAGE_SIZE   (1UL << PAGE_SHIFT)
#define PAGE_MASK   (~(PAGE_SIZE-1))




PAGE_MASK = ~(1 0000 0000 0000 - 1) = ~(1111 1111 1111) = 0000 0000 0000 
PAGE_SIZE = 1 0000 0000 0000        = 2^12              = 4K


如addr为0x22000001 。。PAGE_ALIGN(addr)=(0x22000001+4096-1)&0xfffff000
=(0x22000001+0xfff)&0xfffff000=0x22001000&0xfffff000
=0x22001000;
同样,比如addr为0x22000003,PAGE_ALIGN(addr)后仍然是0x22001000;

就是和下一个页对齐,一个页为4k。起始地址为0x xxxxx 000;
阅读(3042) | 评论(0) | 转发(1) |
0

上一篇:seq_file

下一篇:atomic_inc 原子操作

给主人留下些什么吧!~~