Project2 System call 준비

이후띵·2022년 1월 5일
0

PintOS

목록 보기
16/31

System call handler 구현해야함. userprog/syscall.c

현재 상태(skeleton) : 프로세스를 제거하여 시스템콜을 핸들하고있다.

시스템 호출 번호를 검색한 다음 시스템 호출 인수를 검색하고 적절한 작업을 수행해야 한다.

운영 체제는 프로그램 코드에서 발생하는 이벤트인 소프트웨어 예외도 처리한다. page fault 또는 0으로 나누기와 같은 오류가 발생할 수 있다. 예외 또한 사용자 프로그램이 운영 체제로부터 시스템콜을 요청할 수 있는 수단이다.

핀토스에서, syscall을 불러서 시스템콜을 처리할 수있다. 2가지 빼고 일반적으로 처리하는 방식을 똑같이 하면된다.

  1. rax : 시스템콜 번호 (일반적으로는 return value저장)
  2. 4번째 argument 는 r10 (not rcx)

따라서, syscall_handler()가 동작하면, 시스템콜 번호를 rax에 저장, rdi, rsi, rdx, r10, r8, r9 순서로 argument가 넘어간다.

caller 의 레지스터들은 intr_frame 구조체에 접근할 수 있다. (intr_frame 은 커널스택에 존재한다.
x86-64에서는 함수의 return value를 RAX 레지스터에 놓는다.반환값이 있는 시스템콜은 intr_frame의 rax를 조정하여 똑같이 할 수있다.

profile
이후띵's 개발일지

0개의 댓글