Search

kva, va, userpool, kernelpool

아 그냥 감도 안 온다!

Q1) 메모리 주소 종류

void *kpage = palloc_get_page(PAL_USER); // kpage = 0x1000 struct page *page = ...; page->va = 0x5000;
C
복사
kpage의 0x1000이랑 page→va의 0x5000은 같은 종류의 주소일까? 아니면 다른 종류의 주소일까?
답변

Q2) 물리 메모리와 가상 메모리

프로세스 A: va = 0x1000 프로세스 B: va = 0x1000
C
복사
두 프로세스의 0x1000이 실제로 같은 물리 메모리를 가리킬까? 아니면 다른 물리 메모리를 가리킬까?
답변

Q3) 커널과 사용자

palloc_get_page(PAL_USER); // A palloc_get_page(PAL_KERNEL); // B
C
복사
두 호출의 차이는? 왜 굳이 나눈걸까?
답변

Q4) kva 의미

“커널 가상 주소”가 무슨 말이지? 커널이 가상 주소를 사용한다고? 커널은 물리 메모리를 사용하는 거 아닌가?
답변

Q5) 물리 메모리와 1:1 매핑된다는 것의 의미

프로세스 A: va 0x1000 → 물리 0x5000 프로세스 B: va 0x1000 → 물리 0x8000xx
C
복사
사용자 프로세스의 가상 주소 : 동일 가상주소가 다른 물리주소로 매핑
커널: kva 0x8004001000 → 항상 물리 0x1000 kva 0x8004002000 → 항상 물리 0x2000
C
복사
프로세스가 바뀌어도, 언제나 같은 물리주소를 가리킴
답변

Q6) kva = 물리주소 + KERN_BASE 의미

/* Physical address of kernel base. */ #define LOADER_KERN_BASE 0x8004000000
C
복사
include/threads/loader.h
// 물리 메모리 주소가 0x1000이라면: kva = 0x8004000000 + 0x1000 = 0x8004001000 // 물리 메모리 주소가 0x2000이라면: kva = 0x8004000000 + 0x2000 = 0x8004002000
C
복사
답변

Q7) kva랑 va의 차이?

답변
커널도 가상 주소를 사용하는 것까진 오케이.
사용자 프로그램은 PML4로 하드웨어(CPU/MMU)가 참조하고 해당하는 페이지가 있는지 유무는 운영체제(커널)가 SPT를 이용해 페이지 폴트를 발생시킬지 여부를 판단한다는 것도 오케이.
커널도 가상 주소를 사용할 테니 PML4(페이지 테이블)을 이용해서 물리 주소로 변환해 CPU가 명령어를 처리할텐데, 어떤 식의 흐름을 가지고 있는 걸까?
그리고 사용자 프로그램도 커널 영역/사용자 영역으로 나눈다고 알고 있는데, 그럼 커널 영역/사용자 영역의 PML4 & SPT가 다른 흐름을 갖는걸까?

Q1) 커널 또한 가상 주소를 사용하는 것이라면, spt와 pml4를 사용한다는건가?

답변

Q2) 커널, 사용자, SPT, PML4

답변

Q3) 사용자 프로그램이 커널/사용자 영역으로 나뉜다고 알고 있는데, 각 영역의 가상주소가 PML4랑 SPT와 어떤 식으로 매핑된다는거지?

사용자 프로세스는 PML4랑 SPT를 사용하는데, 커널 영역 내용은 base_pml4를 여러 프로세스가 동일하게 가리키는 것이고, SPT는 사용자 프로그램에 한정된 페이지들의 메타데이터를 저장한다는게 맞나?
답변