시스템 콜(System Call)이란?
시스템 콜이란 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
즉 프로세스가 컴퓨터를 관리하는 시스템(System)인 운영체제에 어떤 기능(서비스)를 사용하게 해달라고 요청할 때 사용하는 방법이다.
예를 들어 프로세스A가 디스크에 존재하는 파일1에서 데이터를 읽어 파일2로 복사하는 일을 하려고 할 때 키보드 입력을 통하거나,마우스를 통해 직접 파일을 선택해서 입력 받는 등(I/O작업)
파일1,파일2가 무엇인지 사용자로 부터 입력 받기 위해 시스템 콜(System Call)이 필요하다.
또한 입력 받은 후 파일1을 디스크에서 가져오고, 복사하여 파일2에 저장하는 작업도 시스템 콜이 필요하다.
이를 통해 프로세스가 직접 I/O장치에 직접 접근하여 일을 수행 할 권리가 없지만
운영체제는 I/O의 장치의 controller에게 접근할 수 있는 권한이 있기 때문에 시스템 콜(System Call)을 하여 자신이 필요한 것을 운영체제에게 부탁한는 것을 알 수 있다.
시스템 콜(System Call)의 목적
- 추상화 된 하드웨어 인터페이스를 유저 프로세스에게 제공
- 시스템이 보안과 안정성 보장
- 가상화 된 유저 프로세스와 시스템이 소통할 수 있는 유일하고 공통적인 소통 수단
시스템 콜(System Call)의 특징
- 시스템 콜은 여러 종류의 기능으로 나누어 진다.
- 운영체제는 자신의 커널 영역에서 해당 인덱스가 가르키는 주소에 저장 되어 있는 루틴을 수행한다.
- 각 시스템 콜에는 번호가 할당 되고 시스템 콜 인터페이스는 시스템 콜 번호와 시스템 콜 핸들러 함수 주소로 구성되는 시스템 콜 테이블을 유지한다.
- 작업이 완료되면 CPU에게 인터럽트를 발생시켜 수행이 완료 되었음을 알려준다.
시스템 콜(System Call)의 종류
- 프로세스 제어(Process Control)
- 프로세스 생성 및 종료
- 끝내기,중지
- 적재(Load),실행
- 대기
- 메모리 할당 및 해제
- 파일 조작(File Manipulation)
- 파일 생성 및 삭제
- 열기,닫기,읽기,쓰기
- 디바이스 조작(Device Manipulation)
- 장치 요청 및 해제
- 장치 읽기,쓰기,위치 변경
- 속성 설정
- 정보 유지(Information Maintenace)
- 시간,날짜 설정 및 요청
- 보호(Protection)
- 권한 관리
시스템 콜(System Call) 동작 과정
1. 사용자가 printf() 함수를 실행한다.
2. 라이브러리 함수 내부에서 시스템 콜(write())를 호출한다.
3.해당 시스템 콜의 인덱스를 cpu 레지스터에 저장한다.
(레지스터란? cpu가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 다목적 공간)
4.0x80 인터럽트를 발생시킨다.
5.인터럽트가 발생하면 유저 모드에서(1) -> 커널모드(0)로 전환한다.
(유저모드: 접근 할 수 있는 영역에 제한이 있기 때문에 프로그램 자원간 함부로 침범할 수 없다.)
(커널모드 : 운영체제 내부에서 실제로 하드웨어를 제어할 수 있다.)
6.커널은 IDT에서 0x80 주소에 있는 명령어를 찾는다.
(IDT : 인터럽트 백터 테이블을 구현하기 위해 사용되는 데이터 구조체)
7.System_call() 함수에서는 호출 된 시스템 콜 번호와 레지스터 들을 스택에 저장 하고 올바른 시스템 콜인지 검사후 시스템 콜 테이블에서 번호에 해당하는 함수를 호출한다.
8.함수가 종료 되면 user process로 반환한다.
🙇 참고 사이트 🙇
https://mamu2830.blogspot.com/2021/01/whatIsSystemCall.html https://straw961030.tistory.com/65 https://kariskan.tistory.com/156