System Call
시스템 콜
- OS가 수행하는 Service를 프로그램에 제공하는 Interface 역할을 하는 함수이다.
- C언어의 함수와 형태가 같으나, 실제로는 H/W Interrupt Instruction으로 구현되어 있다.
Types of System Calls (시스템 콜의 종류)
- 시스템 콜은 아래와 같이 4가지로 분류될 수 있다.
1) Process Manegement (프로세스 제어)
- 프로세스 생성 : fork()
- 프로세스 종료 : exec 계열
- 시그널
2) File, I/O Management (파일 및 입출력 관리)
- 생성 및 종료
- 열기 및 닫기
- read 및 write
3) Communication (통신)
- connect(), accept() 등
4) Interprocess Communication (프로세스 간 통신)
- 프로세스 간 데이터 공유를 위한 시스템 콜
System Call Flow (시스템 콜 수행 절차)
(1) 프로그램에서 syscall Instruction을 호출한다.
- System Call은 자신의 고유 번호(int Type)를 Syscall에 Argument로 넘겨주어 syscall(int)을 실행시킨다.
- Interrupt Vector를 통해 System Call의 고유 번호에 대응되는 Handler가 위치한 메모리 주솟값을 얻을 수 있다.
(2) ia, psw 레지스터 내용을 iia, ipsw 레지스터에 각각 저장한다. (Context Switch)
ia (Instruction Address)
- 다음으로 실행할 명령어의 주소를 저장하고 있는 레지스터이다.
iia (Interrupted Instruction Adderss, 비표준 이름)
- 인터럽트가 발생된 경우, ia에 저장되어 있던 명령어를 백업하는 레지스터이다.
psw
- 실행중인 프로세스의 Status를 저장하는 레지스터이다.
ipsw (Interrupted psw)
- 인터럽트가 발생된 경우, psw에 저장되어 있던 정보를 백업하는 레지스터이다.
(3) psw의 값을 0으로 수정하여 Kernel Mode로 Switching한다.
(4) System Call Handler가 Load된 메모리 주소를 ia에 Loading한다.
(5) System Call Handler가 동작한다.
(6) System Call Handler가 작업을 완료한 후, rti 명령어를 수행하고, rti 명령어는 ia, psw를 복구한다.
rti 명령어
- Return from Interrupt Instruction
(7) 프로세스는 다음 명령어를 수행한다.