gitbook - introduction
내용
because the user can pass a null pointer, a pointer to unmapped virtual memory, or a pointer to kernel virtual address space (above KERN_BASE
).
⇒ mmu.c
와 페이지 관련 내용 공부하기
mmu.c
NULL pointer이거나
kernel address에 접근하거나
할당되지 않은 가상 메모리 주소에 접근하는 경우 프로세스를 종료해야한다.
예림이가 pml4_get_page
vs pml4e_walk
의 차이에 대해 물어봤다.
➕깃북에서 아래 문장의 의미 생각해보기
what if the user provides an invalid pointer, a pointer into kernel memory, or a block partially in one of those regions?
// [Project 2-2]
void check_address(void *addr){
struct thread *current = thread_current ();
if (addr == NULL || is_kernel_vaddr(addr) || pml4e_walk(current->pml4, addr, false) == NULL){
// process 종료 -> 뒤에 시스템콜 읽어보고 추가하자
exit(-1);
}
}
invalid pointer → NULL 처리
pointer into kernel memory → is_kernel_vaddr(vaddr)
매크로에서 하는 일은 현재 넘어온 주소가 KERN_BASE보다 큰 주소인지 확인
연속된 공간임을 가정하면 가상주소 - 물리주소 변환은 KERN_BASE를 더하고 빼면 된다.