System call이란?
OS에서 제공하는 서비스에 대한 programming interface를 말한다.
I/O 장치에서 system call은 OS의 서비스를 필요로하는 함수를 뜻한다. I/O가 완료될 때 까지 사용자를 기다리게 한다.
System Call
- 일반적으로 C나 C++과 같은 high-level language로 작성된다.
- 주로 직접 system call을 사용하는 대신 Application Programming Interface, API를 통해 프로그램이 접근할 수 있다.
- system call 호출 -> interrupt, trap(소프트웨어 interrupt) 발생
implementation
- 각 system call과 관련된 번호가 있고, system call interface는 이 번호들로 index를 만든 table을 가지고 있다.
- system call interface는 kernel에서 요구되는 system call을 호출하고, state와 values를 return한다.
- 사용자는 system call이 어떻게 구현되는지 알 필요가 없습니다. 필요한 API를 실행하고, 그 작업에 따른 작업 내용을 알기만 하면 됩니다.
parameter passing
- OS나 system call에 따라서 호출에 필요한 정보의 type이나 양이 더 많을 수 있다.
- OS에서 parameter를 전달하는 방법에는 일반적으로 세 가지 방법이 있다.
1. 가장 간단한 방법으로, register를 통해 parameter를 전달한다.
때로는 register보다 필요한 parameter의 갯수가 더 많을 수도 있다. 그렇게 되면 전달이 불가능하다.
🍕 따라서 아래의 두 방법을 더 많이 사용한다.
아래의 두 방법은 parameter의 길이에 제한이 없다 🍕
2. parameter가 memory, block, tables 중 한 곳에 저장됩니다.
그리고 block의 주소가 parameter로 register에 전달됩니다.
🍨 이 방법이 Linux에 사용됩니다.
3. parameter가 프로그램에 의해 stack에 배치되고 push된다. 그리고 OS에 의해 stack에서 pop된다.
즉, 스택에 저장 후 필요할 때 마다 pop한다.
System call의 종류
- process control
- device / file management
- communication
- information maintenance
- protection
🍙 OS는 두 가지 모드를 가진다.
User Mode와 Kernel Mode인데, 이는 OS스스로와 기타 시스템 구성요소를 보호하기 위함이다.
하드웨어에서 생성하는 Mode Bit를 통해서 시스템이 현재 어떤 모드인지 알 수 있다.
kernel mode에서만 사용가능한 instructions, 명령어들이 있다.
System Call이 모드를 kernel로 바꿀 수 있다.