🚨 시스템 콜 호출 시 시스템 콜 핸들러가 호출되는 과정 (이동)
시스템 콜을 통해 들어온 포인터로부터 데이터를 읽어야 하는 경우에, 이 주소가 유효하지 않은 주소라면 유저 프로세스를 종료시킬 수 있어야 한다. 따라서 이런 역할을 하는 함수가 필요하다.
🔎 유효하지 않은 주소란 ?
다행히 핀토스에서는 위 두가지를 체크해주는 함수를 이미 제공하고 있다. 따라서 아래와 같이 정의할 수 있다.
void check_addr(void * addr) {
struct thread *t = thread_current();
if(is_kernel_vaddr(addr) || pml4_get_page(t->pml4, addr)== NULL ){
syscall_abnormal_exit(-1);
}
}
🗒️ syscall_abnormal_exit() 함수