User Program을 만들기 위해 우리가 프로그래밍을 할 때, malloc(메모리 할당). read 및 write(파일 시스템의 이용), 페이지 할당 같은 기능을 이용하고 할 때 운영체제의 제어 아래에서 이런 기능들을 사용할 수 있도록 만들어진 인터페이스를 system call이라 할 수 있다.
이런 과정은 user mode와 kernel mode로 전환이라는 개념으로 구현되고 이해될 수 있다.
intr_handler
함수를 통해 호출이 된다. 시스템 콜은 인터럽트의 한 종류이다. (내부 인터럽트를 일으키는 것이다.)lib/user/syscall.c
를 통해 제공된다. 우리는 여기서 정의된 syscall을 쓸 수 있는 것 이다.
syscall
은 x86-64에서 정의한 instruction이다. syscall
명령어를 통해 내부 인터럽트를 발생시켜 그에 맞는 인터럽트 루틴을 처리해주도록 한다. 32bit에서는 sysenter
또는 int 0x80
instruction을 쓰기도 한다고 한다. (int
는 인터럽트를 발생시키는 instruction이고 그 뒤에는 번호를 적는다.)