[CS - 운영체제] 시스템 콜

Jo HangJoon·2022년 9월 22일
0

CS 공부

목록 보기
3/17

질문의 핵심

  • 시스템 콜이란?
  • 함수 호출과 시스템 콜의 차이점은?
  • 인터럽트와 시스템 콜의 차이점은?

1. 이중 동작 모드

시스템 콜을 알아보기 앞서 운영체제의 동작 모드에 대해 알아볼 필요가 있다. 현대 운영체제는 다중 프로그래밍 환경에서 동작하기 때문에 하드웨어에 대한 각종 보안 기법이 필요하다. 따라서, 운영체제는 커널모드(Kernel Mode)와 사용자 모드(User Mode) 를 지원하는 이중 동작 모드로 동작한다.

커널 모드(Kernel Mode)

  • 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드.
  • 중요한 정보에 접근하는 연산은 커널모드에서만 실행할 수 있도록 통제된다.
  • 모드비트(Mode Bit)가 0이면 커널모드이다.

사용자 모드(User Mode)

  • 사용자가 사용하는 응용 프로그램은 사용자 모드에서 작동된다.
  • 사용자 모드에서 특권 명령(Privileged Instruction)을 실행하려고 시도하면 운영체제는 이를 실행하지 않고 트랩을 건다.
  • 인터럽트 또는 트랩이 발생할 때마다 사용자 모드에서 커널 모드로 전환된다.
  • 모드비트(Mode Bit)가 1이면 커널모드이다.

이처럼 사용자 모드에서 응용 프로그램을 통해 하드웨어 등 OS의 자원에 접근하기 위해서는 OS가 제공하는 시스템 콜(System Call) 을 통해서만 자원을 이용할 수 있다.


2. 시스템 콜

시스템 콜(System Call)이란

  • 운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
  • 운영체제에 정의된 함수이다.
  • 시스콜(Syscall)이라고도 한다.

통상적으로 시스템 콜에는 번호가 할당되고, 시스템 콜 인터페이스는 이러한 번호에 따라 인덱스되는 테이블을 유지한다.

시스템 콜의 처리방식은 다음과 같다.
1. 사용자 프로세스가 시스템 콜을 요청하면 제어가 커널로 너머온다.
2. 커널은 내부적으로 각각의 시스템 콜을 구분하기 위해 기능별로 고유번호를 할당하고, 그 번호에 해당하는 제어루틴을 커널 내부에 정의한다.
3. 커널은 요청받은 시스템 콜에 대응하는 기능번호를 확인한다.
4. 커널은 그 번호에 맞는 서비스 루틴을 호출한다.
5. 서비스 루틴을 모두 처리하고 나면 커널 모드에서 사용자 모드로 다시 전환한다.

시스템 콜의 유형

프로세스 제어(Process Control)

  • 끝내기(end), 중지(abort)
  • 적재(load), 실행(execute)
  • 프로세스 생성(create process)
  • 프로세스 속성 획득과 설정(get process attribute and set process attribute)
  • 시간 대기(wait time)
  • 사건 대기(wait event)
  • 사건을 알림(signal event)
  • 메모리 할당 및 해제 : malloc, free

파일 조작(File Manipulation)

  • 파일 생성(create file), 파일 삭제(delete file)
  • 열기(open), 닫기(close)
  • 읽기(read), 쓰기(write), 위치 변경(reposition)
  • 파일 속성 획득 및 설정(get file attribute and set file attribute)

장치 관리(Devide Management)

  • 장치를 요구(request devices), 장치를 방출release device)
  • 읽기, 쓰기, 위치 변경
  • 장치 속성 획득, 장치 속성 설정
  • 장치의 논리적 부착(attach) 또는 분리(detach)

정보 유지(Information Maintenance)

  • 시간과 날짜의 설정과 획득(time)
  • 시스템 데이터의 설정과 획득(date)
  • 프로세스 파일, 장치 속성의 획득 및 설정

통신(Communication)

  • 통신 연결의 생성, 제거
  • 메시지의 송신, 수신
  • 상태 정보 전달
  • 원격 장치의 부착 및 분리

매개변수 전송

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

레지스터를 통한 전송

매개변수를 CPU 레지스터 내에 전달한다. 이 경우에 매개변수의 개수가 CPU 내의 총 레지스터 개수보다 많을 수 있기 때문에 좋지 않은 방법이다.

블록 or 테이블을 통한 전송

매개변수를 메모리 내의 블록이나 테이블에 저장하고 해당 메모리의 주소가 레지스터에 전달된다.

스택을 통한 전송

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


참조

0개의 댓글