xv6 中的 PGROUNDUP 和 PGROUNDDOWN 是什么意思?

K.W*_*.Wu 3 c operating-system xv6

在 xv6mmu.h文件中,有这 2 行代码

    #define PGROUNDUP(sz)  (((sz)+PGSIZE-1) & ~(PGSIZE-1))
    #define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1))
Run Code Online (Sandbox Code Playgroud)

他们在做什么?

小智 8

PGROUNDUPPGROUNDDOWN是用于将地址四舍五入到PGSIZE. 这些通常用于获取页面对齐的地址。PGROUNDUP会将地址四舍五入到 的较高倍数,PGSIZEPGROUNDDOWN将其四舍五入到 的较低倍数PGSIZE

让我们举一个例子,如果在地址为 620 的 1KBPGROUNDUP系统上调用PGSIZE

  • PGROUNDUP(620) ==> ((620 + (1024 -1)) & ~(1023)) ==> 1024
  • 地址 620 被四舍五入为 1024。

同样PGROUNDDOWN考虑:

  • PGROUNDDOWN(2400) ==> (2400 & ~(1023)) ==> 2048
  • 地址 2400 向下舍入为 2048。