2017-04-08 14 views
0

, 코드xv6의 PGROUNDUP 및 PGROUNDDOWN은 무엇을 의미합니까? xv6 <code>mmu.h</code> 파일에서

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

의이 두 라인은 무엇을 하는가가 있습니까?

+1

"반올림"및 "반올림"이 이름에서 추론 될 수 있습니다. 그리고 "mmu"라고하면 PG는 아마도 "페이지"를 의미합니다. –

+0

알아 두어야 할 중요한 점은'~'이 비트 NOT 연산자입니다. – bruceg

+0

감사합니다. @OliverCharlesworth, 제 생각에 PGROUNDUP의 "sz"를 현재 실행중인 프로세스의 크기로 바꾸면 모든 크기가 반환됩니다. 프로세스에 할당 된 페이지를 하나의 페이지 크기로 나눈 다음 해당 프로세스에 할당 된 페이지 수를 얻습니다. 맞습니까? –

답변

1

PGROUNDUP 및 PGROUNDDOWN은 PGSIZE의 배수로 보내지는 주소를 반올림하는 매크로입니다. 이들은 일반적으로 페이지 정렬 주소를 얻는 데 사용됩니다. PGROUNDUP은 주소를 PGSIZE의 더 높은 배수로 반올림하고, PGROUNDDOWN은 PGSIZE의 배수 중 배수로 반올림합니다. PGROUNDUP이 주소 620

PGROUNDUP (620)와 PGSIZE 1킬로바이트있는 시스템에서 호출하면 우리가 예를 보자 ==> (+ (1,024 (620 -1)) & ~ (1023)) = => 그래서 어드레스 620

PGROUNDDOWN (2400) ==> (~ (1,023 2,400 &)) ==> 2,048

고려 마찬가지로 PGROUNDDOWN 1024.

올림 하였다 1,024 을