✔️ System Call 이란 ?
시스템 콜(System Call)은 운영체제의 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스다.
✔️ System Call 사용 이유 ?
운영체제는 PC를 보호하기 위해 커널 모드(Kernel Mode)와 사용자 모드(User Mode)로 나뉘어 구동된다.
Kernel Mode VS User Mode
Kernel Mode
I/O Devices를 포함해서 모든 주소 영역에 접근 가능하다.
User Mode
명령어의 일부와 HW feature의 일부만 사용이 가능하다.
I/O나 Memory Protection을 포함한 명령은 사용이 불가하다.
커널 모드와 유저 모드의 구분에는 모드 비트(mode bit)를 사용하며 이 비트가 1이면 일반적으로 유저 모드를 0이면 커널 모드를 가리킨다.
OS는 프로세스의 실행, 종료나 I/O 작업 등의 사용자가 함부로 사용하면 문제가 될 만한 명령들을 Privileged Instruction으로 분류하여 막아놓았다. 만약 유저 모드에서 시스템 콜을 호출할 경우에는 운영체제에서 불법적인 접근이라 여기고 trap을 발생시킨다. 따라서 사용자들이 이와 같은 기능을 사용하기 위해서는 OS가 제공하는 System Call을 사용하여야 한다.
시스템 콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게, 즉 프로세스가 하드웨어에서 직접 접근해서 필요한 기능을 사용할 수 있게 해준다.
✔️ System Call 동작 방식
각 시스템 콜에는 번호가 할당되고 시스템 콜 인터페이스는 이러한 번호에 따라 인덱스되는 테이블을 유지한다.
① User mode의 어플리케이션이 System Call(open() 함수)를 호출
② Trap이 발생하며 System Call Interface를 통해 Kernel mode로 진입 (이때 현재 상태를 저장, mode bit를 0으로 설정)
③ 요청 받은 System Call을 수행한다.
④ User mode로 return (mode bit를 1로 변경한다.)
시스템 콜을 발생시킬 때 더 많은 정보가 필요할 수 있는데 그 정보가 담긴 매개변수를 운영체제에 전달하기 위한 3가지 방법이 있다.
📌시스템 콜 매개변수 전달 방법
1. 매개변수를 CPU 레지스터 내에 전달한다. 이 경우에 매개변수의 갯수가 CPU 내의 총 레지스터 개수보다 많을 수 있다.
2. 위와 같은 경우에 매개변수를 메모리에 저장하고 메모리의 주소가 레지스터에 전달된다.
3. 매개변수는 프로그램에 의해 스택(stack)으로 전달(push) 될 수도 있다.
Interrupt와 Trap 차이
Interrupt - Asynchronous
Interrupt란 프로그램 수행 중 CPU가 강제로 제어를 가져오는 것을 말한다. 주로 허용되지 않은 작업이 수행될 때 발생한다(비동기적). Interrupt가 발생하면 Interrupt service routine(명령어)의 위치가 기록되어 있는 interrupt vector로 이동하여 해당하는 명령어를 찾아 수행한다.
Trap - Synchronous
Trap은 Interrupt의 한 종류로서 명령의 수행 결과로 발동한다.(동기적) 주로 System Call을 호출할 때나 Segmentation Fault(할당되지 않은 메모리 참조)로 인해 발생한다. Trap이 발생하면 Trap Table로 이동하여 해당하는 명령을 수행한다.
✔️ System Call 종류
리눅스에서 System Call을 확인하고 싶다면 다음 명령어를 입력하면 된다.
man 2 intro
man 2 open
- 프로세스 컨트롤
- 프로세스 생성 및 종료
- 메모리에 로드, 실행
- 프로세스 속성 값 확인, 지정
- wait 이벤트, signal 이벤트
- 메로리 할당
- 파일 매니지먼트
- 파일 생성, 파일 삭제
- 열기, 닫기
- 읽기, 쓰기, Reposition
- 파일 속성 값 확인, 지정
- 디바이스 매니지먼트
- 디바이스 요청 및 해제
- 읽기, 쓰기, Reposition
- 디바이스 속성 확인, 지정
- 비 물리적인 디바이스 해제 및 장착
- 정보 관리
- 시간 확인, 시간 지정
- 시스템 데이터 확인, 지정
- 프로세스, 파일, 디바이스 속성 가져오기
- 프로세스, 파일, 디바이스 속성 설정하기
- 커뮤니케이션
- 커뮤니케이션 연결 생성 및 삭제
- 메시지 송신, 수신
- 상태 정보 전달
- remote 디바이스 해제 및 장착
- 보안
- Permission 획득
- Permission 설정
🔗참고
'CS > 운영체제' 카테고리의 다른 글
[운영체제] Process Management (0) | 2022.03.17 |
---|---|
[운영체제] PCB(Process Control Block) & Context Switching (0) | 2022.03.17 |
[운영체제] 인터럽트(Interrupt) (0) | 2022.03.14 |
[운영체제] 프로세스 & 스레드 (0) | 2022.03.14 |
[운영체제] 운영체제란..? (0) | 2022.02.16 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!