커널 vs 유저 영역
시스템 콜 호출 과정(리눅스)
구현 예시
시스템 종료
구현 전 힌트
void
halt(void)
{
power_off(); // 시스템 종료
}
현재 프로세스 종료
구현 전 힌트
void
exit(int status)
{
struct thread *cur = thread_current(); // 현재 실행중인 스레드 가져오기
cur->exit_status = status; // 프로세스 디스크립터에 exit status 저장.
printf("%s: exit(%d)\n", cur->name, status);
thread_exit();
}
파일 생성
구현 전 힌트
bool
create(const char *file, unsigned initial_size)
{
return filesys_create(file, initial_size);
}
파일 제거
구현 전 힌트
bool
remove(const char *file)
{
return filesys_remove(file);
}
주소 유효성 검사 - 포인터가 가리키는 주소가 사용자 영역 인지 확인.
구현 전 힌트
void
check_address(void *addr)
{
if(addr == NULL || !is_user_vaddr(addr))
{
exit(-1);
}
}