시스템 콜
시스템 콜 의미
- 운영체제가 제공하는 서비스를 사용하기 위한 프로그래밍 인터페이스
- 커널 모드(Kernel Mode)와 사용자 모드(User Mode)로 나뉘어 구동
- 운영체제에서 프로그램이 구동되는데 있어 파일을 읽어 오거나, 파일을 쓰거나, 혹은 화면에 메시지를 출력하는 등 많으 부분이 커널 모드를 사용
- 시스템 콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게, 즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 함
- 통상적으로 시스템 콜은 여러 종류의 기능으로 나뉘어져 있음
- 각 시스템 콜에는 번호가 할당되고 시스템 콜 인터페이스는 이러한 번호에 따라 인덱스 되는 테이블을 유지된다. 아래 그림은 open() 시스템 콜을 호출 했을 때 운영체제에서 어떻게 처리되는지를 보여줌
필요 이유
- 사용자가 일반적으로 사용하는 프로그램은 '응용프로그램'
- 유저레벨의 프로그램은 유저레벨의 함수들 만으로는 많은 기능을 구현하기 힘듦
- 따라서 커널(kernel)의 도움을 반드시 받아야 함
- 이러한 작업은 응용프로그램으로 대표되는 유저 프로세스(User Process)에서 유저모드에서는 수행할 수 없음
- 커널에 관련된 것은 커널모드로 전환한 후에야, 해당 작업을 수행할 권한이 생김
- 커널 모드를 통한 이러한 작업은 반드시 시스템 콜을 통해 수행하도록 설계되어 있음
- 해커가 피해를 입히기 위해 악의적으로 시스템 콜을 사용하는 경우나 초보 사용자가 하드웨어 명령어를 잘 몰라서 아무렇게 함수를 호출했을 경우에 시스템 전체를 망가뜨릴 수도 있기 때문에 필요
- 이러한 명령어들은 특별하게 커널 모드에서만 실행할 수 있도록 설계되었고, 만약 유저 모드에서 시스템 콜을 호출할 경우에는 운영체제에서 불법적인 접근이라 여기고 trap을 발생
종류
- 프로세스 컨트롤
- 프로세스 생성 및 종료
- 메모리에 로드, 실행
- 프로세스 속성 값 확인, 지정
- wait 이벤트, signal 이벤트
- 메모리 할당
- 파일 메니지먼트
- 파일 생성, 파일 삭제
- 열기, 닫기
- 읽기, 쓰기, Reposition
- 파일 속성 값 확인, 지정
- 디바이스 매니지먼트
- 디바이스 요청 및 해제
- 읽기, 쓰기, Reposition
- 디바이스 속성 확인, 지정
- 비 물리적인 디바이스 해제 및 장착
- 정보 관리
- 시간 확인, 시간 지정
- 시스템 데이터 확인, 지정
- 프로세스, 파일, 디바이스 속성 가져오기
- 프로세스, 파일, 디바이스 속성 설정하기
- 커뮤니케이션
- 커뮤니케이션 연결 생성 및 삭제
- 메시지 송신, 수신
- 상태 정보 전달
- remote 디바이스 해제 및 장착
- 보안
- Permission 획득
- Permission 설정
작동 방식
- 라이브러리 함수(printf)를 호출
- 라이브러리 함수 내부에서 시스템 콜(write)를 호출
- 해당 시스템 콜의 인덱스(4)를 CPU 레지스터에 저장
- 0x80 인터럽트를 발생시킨다.(커널 모드로 전환)
- IDT(Interrupt Descriptor Table)를 참조하여 system_call()을 호출
- 이때 3에서 저장한 인덱스를 system_call() 함수 내에 전달
- sys_call_table을 참조해 해당 인덱스에 맞는 기능(sys_write)을 호출
- 수행이 모두 끝나면 사용자 모드로 전환
'공부 > 운영체제' 카테고리의 다른 글
[운영체제] 주소 공간과 가상 메모리(Address Space, Virtual Memory) (0) | 2024.02.24 |
---|---|
[운영체제] PCB와 Context Switching (0) | 2024.02.24 |
[운영체제] 인터럽트(Interrupt) (0) | 2024.02.24 |
[운영체제] CPU 스케줄링 알고리즘 (0) | 2024.02.24 |
[운영체제] 프로세스와 스레드 (0) | 2024.02.20 |