시스템 콜(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 번째 방법을 많이 사용
'Operating System' 카테고리의 다른 글
SISD / SIMD / MISD / MIMD (0) | 2022.03.02 |
---|---|
인터럽트(Interrupt) (0) | 2015.08.14 |
프로세서 vs 프로세스 (0) | 2015.07.20 |
프로세스간 통신(IPC - InterProcess Communication) (0) | 2015.07.08 |
Process(프로세스) vs Thread(스레드) (0) | 2015.07.06 |
댓글