본문 바로가기
Operating System

시스템 콜(System Call)

by 기리의 개발로그 2015. 8. 14.

시스템 콜(System Call)



시스템 콜


- 시스템 콜은 응용프로그램에서 운영체제에게 어떠한 기능(시스템 자원)을 수행해달라고 하는 하나의 수단



시스템 콜의 이해


- 사용자 프로세스가 소프트웨어 인터럽트를 통해 커널의 기능을 이용하기 위한 서비시를 요청하는 하나의 방법

- 처리방식

- 사용자 프로세스가 시스템 콜을 요청하면 제어가 커널로 넘어옴(사용자 모드 -> 커널 모드)

- 커널은 내부적으로 각각의 시스템 콜을 구분하기 위해 기능별로 고유번호를 할당하고 그 번호에 해당하는 제어루틴을 커널 내부에 정의

- 커널은 요청받은 시스템 콜에 대응하는 기능번호를 확인

- 커널은 그 번호에 맞는 서비스 루틴을 호출

- 서비스 루틴을 모두 처리하고 나면 커널 모드에서 사용자 모드로 다시 전환



시스템 콜의 종류


- 프로세스 제어

- 파일 조작

- 장치 관리

- 시스템 정보 및 자원 관리

- 통신 관련



시스템 콜 처리과정


- 사용자 프로세스 -> 시스템 콜 -> libc.a -> 0x80 인터럽트 발생 -> 커널에서 처리



- 사용자가 fork() 시스템콜 호출 시

- c라이브러리에서 fork 시스템 콜의 고유번호 '2'를 레지스터에 저장하고 0x80 인터럽트를 발생시킴

- 인터럽트가 발생하면 "사용자 모드" -> "커널 모드"로 전환

- 커널은 IDT에서 0x80 주소에 있는 system_call()을 찾음

- system_call() 함수에서는 호출된 시스템 콜 번호와 레지스터들을 스택에 저장하고 올바른 시스템 콜 번호인지 검사 후 sys_call_table 에서 시스템 콜 번호에 해당하는 함수를 호출

- 이 함수가 종료되면 ret_from_sys_call() 함수에 의해 사용자 프로세스로 리턴


- ex)


< open() 시스템 호출을 호출한 사용자 응용의 처리 >



시스템 콜 - 매개변수 전송


< 시스템 콜 in C Language >


1. 레지스터를 통한 전송

- 매개변수가 레지스터로 직접 전달되나, 레지스터 크기보다 더 많은 매개변수가 존재하므로 좋지 않은 방법


2. 블록 or 테이블을 통한 전송

- 매개변수가 메모리 내의 블록이나 테이블에 저장되고, 해당 주소가 레지스터의 매개변수로 전달


3. 스택을 통한 전송

- 매개변수는 프로그램에 의해 스택에 넣어지고, 운영체제에 의해 꺼내짐


- 전달되는 매개변수들의 개수나 길이를 제한하지 않기 때문에 2 번째 방법을 많이 사용


반응형

댓글