시스템 콜 (System Calls)
운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스.
즉, 사용자와 커널 사이의 통로
1. 시스템 콜의 목적
- 추상화된 하드웨어 인터페이스를 유저 프로세스에게 제공한다.
- 시스템의 보안과 안정성을 보장한다.
- 가상화된 유저 프로세스와 시스템이 소통할 수 있는 유일하고 공통적인 소통수단
2. 시스템 콜의 이해
- 우리는 그동안 표준 라이브러리 함수를 사용하였다.
- 예를 들어 printf 함수를 사용 시에 우리는 입출력 장치를 이용해야 한다. 이때 반드시 OS 즉 커널의 도움이 필요하다.
- 거의 모든 Program들은 user mode에서만 동작할 수 없다. 결국 OS의 service(kernel mode)가 필요하다.
- printf 함수를 사용하면 내부적으로 시스템콜(write())를 이용해서 kernel에 도움받아서 리턴 받은 후 terminal에 출력한다.
3. System Call의 동작
- 운영체제가 제공하는 시스템 콜에 대한 연결고리 역할을 하는 시스템 콜 인터페이스를 제공한다.
- 시스템 콜에는 번호가 할당되고 시스템 콜 인터페이스는 이 번호에 따라 색인되는 테이블을 유지한다.
- 시스템 콜 인터페이스는 의도하는 시스템 콜을 부르고 시스템 콜의 상태와 반환 값을 돌려준다.
- 사용자는 시스템 콜이 어떻게 구현되고 실행 중 무슨 작업을 하는지 알 필요가 없다.
4. System Call의 동작 (Linux)
- 사용자 프로세스 -> 시스템 콜 호출 -> lib.a -> 0x80 인터럽트 발생 -> 커널에서 처리
- user process에서 시스템 콜 호출 시
- C 라이브러리에서 fork 시스템콜의 고유번호 '2'를 eax 레지스터에 저장한 후 0x80 인터럽트 발생
- 0x80 인터럽트는 소프트웨어 인터럽트인 trap이다.
- 인터럽트 발생시 "사용자 모드"(user mode)에서 "커널 모드"(kernel mode)로 전환된다.
- 커널은 IDT에서 0x80 주소를 통해 인터럽트가 시스템 콜에 의해 발생된 것을 알게 된다.
- IDT(Interrupt discriptor table) : trap에 대한 정보를 table로 가지고 있다.
- system_call() 함수에서는 호출된 시스템 콜 번호와 레지스터들을 스택에 저장하고 올바른 시스템 콜 번호인지 검사 후 sys_call_table에서 시스템 콜 번호에 해당하는 함수를 호출한다.
- 함수가 종료되면 user process로 반환된다.
반응형
'OS(운영체제)' 카테고리의 다른 글
프로세스 통신 (Interprocess Communication, IPC) (0) | 2021.12.09 |
---|---|
프로세스 스케줄링 (Process Scheduling) (0) | 2021.12.09 |
프로세스(Process) (메모리, PCB, 상태) (0) | 2021.12.09 |
운영체제 서비스 (Operating System Service) (0) | 2021.10.21 |
운영체제 구조 (Operating System Structure) (0) | 2021.10.20 |
댓글