0
在XV6 mmu.h
文件,有這2行代碼xv6中的PGROUNDUP和PGROUNDDOWN是什麼意思?
#define PGROUNDUP(sz) (((sz)+PGSIZE-1) & ~(PGSIZE-1))
#define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1))
他們做些什麼?
在XV6 mmu.h
文件,有這2行代碼xv6中的PGROUNDUP和PGROUNDDOWN是什麼意思?
#define PGROUNDUP(sz) (((sz)+PGSIZE-1) & ~(PGSIZE-1))
#define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1))
他們做些什麼?
PGROUNDUP和PGROUNDDOWN是將地址發送到PGSIZE的倍數的宏。這些通常用於獲得頁面對齊的地址。 PGROUNDUP將把地址四捨五入到PGSIZE的更高倍數,而PGROUNDDOWN會將其舍入到PGSIZE的較低倍數。讓我們採取一個實例,如果PGROUNDUP被調用PGSIZE 1KB的系統與地址620
PGROUNDUP(620)上==>((620 +(1024 - 1))&〜(1023))= => 1024 因此地址620被向上舍入到1024
類似地,對於PGROUNDDOWN考慮
PGROUNDDOWN(2400)==>(2400 &〜(1023))==> 2048
可以從名稱推斷出「向上取整」和「向下取整」。給出「mmu」,PG可能意味着「頁面」。 –
重要的是要知道'〜'是按位NOT運算符 – bruceg
感謝@OliverCharlesworth,我的理解是,如果我將PGROUNDUP中的「sz」替換爲當前正在運行的進程的大小,它將返回所有大小分配給進程的頁面,並將其除以單個頁面的大小,然後我們得到分配給該進程的頁面數量。你認爲這是正確的嗎? –