System Call
System Call
System Call
Prerequisites
CPU Instruction은 2가지 명령어 타입이 존재
- 특권 명령 (privileged instruction)
- 일반 명령
이 중에서 특권 명령은
kernel mode
에서만 동작한다.CPU의 mode bit를 통해서, 현재 CPU가 커널 모드로 동작하는지 유저 모드로 동작하는지 알 수 있음
- user process는 이러한 mode bit에 접근할 수 없음
- 참고
일부 유저 프로세스에서는 특권 명령을 사용해야할 필요가 있음
- 대부분의 경우 직접 시스템 콜을 이용하기 보다는, high-level의 API를 사용함. 간접적으로 API에서 System call을 호출하는 형식
- e.g.)
printf()
➡️ APIwrite()
➡️ System Call
이 경우에 Kernel Mode로 진입하기 위한 Interface로 System call이 존재한다.
- 대부분의 경우 직접 시스템 콜을 이용하기 보다는, high-level의 API를 사용함. 간접적으로 API에서 System call을 호출하는 형식
System Call의 구조
System Call은 user application이 kernel mode의 특권 명령을 실행하기 위해서 반드시 직.간접적으로 거쳐야하는 interface이다.
위 diagram을 설명하자면 아래와 같다.
- User Application의 상태를 저장
- Interrupt Vector Table에서 Interrupt Service Routine의 주소를 찾는다.
- Interrupt Service Routine(일종의 Interrupt Handler) 실행
Under the hood
System call 발생 시작 ~ Interrupt Vector Table 까지
Interrupt Service Routine 실행 ~ 이 후
- 일반적으로 인터럽트 처리 이후에 프로세스의 실행 흐름을 이어나가기 위하여 ISR에서는 아래와 같은 과정을 수행
- 인터럽트 내부에서 또 다른 인터럽트 금지
- 프로세스의 상태 저장 (
SAVE ALL
) - 인터럽트 처리
- system call과 같이 parameter를 필요로 할 경우에는 아래와 같은 방법들로 넘길 수 있음
- 레지스터
- 메모리 블록 할당 이후, 시작 주소 레지스터에 넣어서 전달
- 스택 이용
- system call과 같이 parameter를 필요로 할 경우에는 아래와 같은 방법들로 넘길 수 있음
- 프로세스 상태 복구
- 인터럽트 허용
- kernel space로 진입할 때, 자동으로 하드웨어적으로
mode bit
가 1(User mode)에서 0(kernel mode)로 전환되어 ISR 실행
This post is licensed under CC BY 4.0 by the author.