2017-04-08 3 views
0

Dans le fichier xv6 mmu.h, il y a ces 2 lignes de codeQue signifient PGROUNDUP et PGROUNDDOWN dans xv6?

#define PGROUNDUP(sz) (((sz)+PGSIZE-1) & ~(PGSIZE-1)) 
    #define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1)) 

Que font-ils?

+1

"arrondir" et "arrondir vers le bas" pourrait être déduit des noms. Et étant donné "mmu", PG signifie probablement "page". –

+0

la chose importante à savoir est que '~' est l'opérateur bitwise NOT – bruceg

+0

Merci @OliverCharlesworth, ma compréhension est que, si je remplace "sz" dans PGROUNDUP avec la taille du processus en cours, il renverra la taille de tous pages allouées au processus, et diviser cela par la taille d'une seule page, puis nous obtenons le nombre de pages allouées à ce processus. Pensez-vous que c'est correct? –

Répondre

1

PGROUNDUP et PGROUNDDOWN sont des macros pour arrondir l'adresse envoyée à un multiple du PGSIZE. Ceux-ci sont généralement utilisés pour obtenir l'adresse alignée de la page. PGROUNDUP arrondira l'adresse au multiple supérieur de PGSIZE tandis que PGROUNDDOWN l'arrondira au multiple inférieur de PGSIZE. Prenons un exemple, si PGROUNDUP est appelé sur un système avec PGSIZE 1KB avec l'adresse 620.

PGROUNDUP (620) ==> ((620 + (1024 -1)) & ~ (1023)) = => 1024 si l'adresse 620 a été arrondie à 1024.

de même pour PGROUNDDOWN envisager

PGROUNDDOWN (2400) ==> (2400 & ~ (1023)) ==> 2048