User Memory Access
Implement user memory access
시스템 호출을 구현하려면 사용자 가상 주소 공간에서 데이터를 읽고 쓸 수 있는 방법을 제공해야 합니다. 인수를 받을 때는 이 기능이 필요하지 않습니다. 그러나 시스템 호출의 인수로 제공된 포인터에서 데이터를 읽을 때는 이 기능을 통해 프록시해야 합니다. 사용자가 잘못된 포인터를 제공하거나 커널 메모리에 대한 포인터를 제공하거나 해당 영역 중 하나에 부분적으로 블록을 제공하면 어떻게 될까요? 이러한 경우 사용자 프로세스를 종료하여 처리해야 합니다.
void check_address(void *addr) // 유효한 주소 확인
{
struct thread *cur = thread_current();
if (addr == NULL || is_kernel_vaddr(addr) || pml4_get_page(cur->pml4, addr) == NULL)
// 주소가 NULL 또는 커널 영역이거나 페이지 테이블에 없으면
sys_exit(-1); // exit
}
'운영체제(OS) > with PintOS' 카테고리의 다른 글
(Project2-User Programs) - Process Termination Message (0) | 2023.12.26 |
---|---|
(Project2-User Programs) - System Calls (0) | 2023.12.26 |
(Project2-User Programs) - Argument Passing (0) | 2023.12.26 |
(Project1-Threads) - Advanced Scheduler (0) | 2023.12.26 |
(Project1-Threads) - Priority Scheduling (0) | 2023.12.26 |