시스템 콜(System Call)

HyeonWoo·2021년 1월 8일
0

운영체제

목록 보기
4/6
post-thumbnail

커널 모드

프로그램 카운터가 운영체제가 존재하는 부분을 가리키고 있다면, 현재 운영체제의 코드를 수행 중이며 CPU가 커널 모드에서 수행 중이라고 한다.

프로세서의 특권 레벨로 프로세서의 모든 명령을 처리하며 시스템의 자원이나 하드웨어를 직접적으로 엑세스하여 컨트롤한다. 그리고 실제 장치 드라이버나 운영체제 프로그램이 구동하는 모드.

*커널 : 운영체제의 핵심 부분으로서, 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공.
(보안, 자원관리, 추상화)

*자원관리 : CPU 스케줄링, 메모리관리, 입출력관리, 파일시스템 관리 등등

사용자 모드

프로그램 카운터가 사용자 프로그램이 존재하는 메모리 위치를 가리킬 경우, 사용자 프로그램을 수행 중이며 CPU가 사용자 모드에서 수행 중이라고 한다.

일반 응용 프로그램이 동작하는 비특권 모드, 시스템의 자원이나 하드웨어를 직접적으로 컨트롤 할 수 없으며, 이를 하려면 시스템 콜을 사용해야 한다.

  • 일반 명령 : 메모리에서 자료를 읽어와서 CPU에서 계산하고 결과를 메모리에 쓰는 일련의 명령들. 모든 프로그램이 수행할 수 있음.(사용자 모드)

  • 특권 명령: 보안이 필요한 명령으로 입출력 장치, 타이머 등 각종 장치를 접근하는 명령.(커널 모드)

  • CPU 내에 모든 비트를 두어 두 명령을 수행한다.

  • 사용자 프로그램이 디스크의 파일을 접근하거나, 화면에 결과를 출력하는 등의 작업이 필요한 경우가 있다. 하지만, 이러한 작업은 특권 명령의 수행을 필요로 한다.

  • 이와 같은 경우, 사용자 프로그램은 스스로 특권 명령을 수행할 수 없으므로 운영체제에게 특권 명령의 대행을 요청한다. 이러한 서비스 요청은 시스템 콜이라고 부른다. (즉, 특권 명령의 대행을 요청하여 사용자 프로그램이 커널 영역의 기능을 수행하게 해준다.)


디스크에서 자료를 읽어오는 시스템 콜이라고 가정

  1. 사용자 프로그램이 시스템 콜을 하게 되면 운영체제는 자신의 커널 영역에 정의된 시스템 콜 처리 코드를 수행한다.

  2. CPU가 컨트롤 레지스터를 세팅해 디스크 컨트롤러에게 데이터를 읽어오라고 명령한다.

  3. 디스크 컨트롤러는 디스크로부터 데이터를 읽어와서 자신의 로컬 버퍼에 저장한다.

  4. 작업이 완료되면 디스크 컨트롤러가 CPU에게 인터럽트를 발생시켜 입출력 작업이 완료되었음을 통지한다.

통상적으로 시스템 콜은 여러 종류의 기능으로 나뉘어져 있다. 각 시스템 콜에는 번호가 할당되고 시스템 콜 인터페이스는 이러한 번호에 따라 인덱스되는 테이블을 유지한다. 아래 그림은 open() 시스템 콜을 호출했을 때, 운영체제에서 어떻게 처리되는지를 보여준다.

필요한 기능이나 시스템 환경에 따라 시스템 콜이 발생할 때, 좀 더 많은 정보가 필요할 수도 있다. 그러한 정보가 담긴 매개변수를 운영체제에 전달하기 위해서는 대략 3가지 정도의 방법이 있다.

  1. 매개변수를 CPU 레지스터 내에 전달한다. 이 경우에 매개변수의 갯수가 CPU 내의 레지스터 갯수보다 많을 수 있다.

  2. 위와 같은 경우에 매개변수를 메모리에 저장하고 메모리의 주소가 레지스터에 전달된다.

  3. 매개변수는 프로그램에 의해 스택으로 전달될 수도 있다.

2,3번은 전달되는 매개변수의 갯수나 길이에 제한이 없기 때문에 몇몇 운영체제에서 선호하는 방식이다.


시스템 콜의 유형

  1. 프로세스 제어 : 프로세스 특권 모드를 사용해 직접적으로 프로세스 제어가 가능

  2. 파일 조작 : 파일을 생성하거나 삭제, 관리 등

  3. 장치 관리 : 장치 요구 및 장치 해제, 읽기, 쓰기, 재배치 등

  4. 정보 유지: 시간과 날짜의 설정과 획득, 시스템 자료의 설정과 획득

  5. 통신 : 통신 연결의 생성 및 제거, 메시지의 송수신, 상태 정보 전달 등


참고자료

profile
학습 정리, 자기 개발을 위한 블로그

0개의 댓글