시스템 콜 (System Call)
시스템 콜은 운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
즉, 커널 영역의 기능을 사용자 모드에서 사용할 수 있게 해준다.
시스템 콜은 왜 필요한가?
•
보통 일반적으로 사용하는 프로그램은 응용 프로그램이다. 유저 레벨의 프로그램은 유저 레벨의 함수들 만으로는 많은 기능을 구현하기 힘들기에 커널의 도움을 반드시 받아야한다.
•
이러한 작업은 유저 모드에서는 수행할 수 없고, 커널 모드로 전환한 후에 수행할 수 있는 권한이 생긴다.
•
커널 모드를 통한 이러한 작업은 반드시 시스템 콜을 통해 수행하도록 설계되어 있다.
*유저모드 : PC 레지스터가 사용자 프로그램이 올라가 있는 메모리 위치를 가리키고 있을 때, 현재 사용자 프로그램을 수행중 이라고 하며, CPU가 유저모드에서 수행중이라고 한다.
*커널모드 : PC 레지스터가 운영체제가 존재하는 부분을 가리키고 있다면, 현재 운영체제의 코드를 수행중이라고 하며, CPU가 커널 모드에서 수행중이라고 한다.
권한이 필요한 이유?
•
해커들이 악의적으로 시스템 콜을 사용하는 경우나 초보자가 아무렇게 함수를 호출해서 시스템 전체를 망가지게 할 수 도 있다.
•
그래서 커널 모드에서만 실행할 수 있게 설계되었고, 호출하면 운영체제에서 불법적인 접근이라 여겨 trap 을 발생시킨다.
•
trap이 발생하면 모드비트 를 0으로 전환한다.
어떤 식으로 처리 되는가?
•
시스템 콜은 여러 종류의 기능으로 나누어진다.
•
각 시스템 콜에는 번호가 부여되고, 시스템 콜 인터페이스는 시스템 콜 번호와 시스템 콜 핸들러 함수 주소로 구성된 시스템 콜 테이블을 가진다.
•
운영체제는 자기 커널 영역에서 해당 인덱스가 가리키는 주소에 저장되어 있는 루틴을 수행한다.
•
작업이 완료되면, CPU에게 인터럽트를 발생시켜 수행이 완료 되었음을 알린다.
•
open() 의 호출
시스템 콜 예시
•
cp in.txt out.txt : in.txt에 있는 파일 내용과 같은 내용을 복사하여 out.txt 파일을 만드는 것
1.
먼저 사용자로부터 입력을 받는데, 이때 I/O 시스템 콜 호출이 필요하다.
2.
이후 ‘cp’ 프로그램을 실행하면 먼저 in.txt 파일이 현재 디렉토리에서 접근 가능한지를 확인하기 위한 시스템 콜 호출
•
접근이 불가능하다면, 에러를 발생시킨 후 프로그램이 종료되는데 이때 시스템 콜 호출!
3.
파일이 존재해 접근 가능하다면 복사한 파일을 저장하기 위해 output.txt 파일명이 있는지를 검사하기 위한 시스템 콜 호출
시스템 콜의 유형
•
프로세스 컨트롤 fork(), wait() 등
◦
프로세스 생성 및 종료
◦
메모리에 로드, 실행
◦
메모리 할당
•
파일 관리 open(), read(), write(), close() 등
◦
파일 생성, 파일 삭제
◦
열기, 닫기
◦
읽기, 쓰기
•
디바이스 관리 read(), write() 등
◦
디바이스 요청 및 해제
◦
읽기, 쓰기
◦
디바이스 속성 확인, 지정
•
정보 관리 getpid(), alarm(), sleep() 등
◦
시간 확인, 시간 지정
◦
시스템 데이터 확인, 지정
◦
프로세스, 파일, 디바이스 속성 가져오기/설정하기
•
통신 pipe(), mnap()
◦
커뮤니케이션 연결 생성 및 삭제
◦
메시지 송신, 수신
◦
상태 정보 전달
•
보안 chmod(), umask() 등
◦
퍼미션 획득/설정