본문 바로가기

CS/운영체제

시스템콜과 modebit

커널(kernel)

  • 파일 입출력, 프로세스 관리 등과 같이 운영체제의 기능을 담당
  • 일반 사용자(사용자 모드)는 커널에 접근 할 수 없기 때문에 원칙적으로는 파일 입출력, 프로세스 생성 등 커널의 기능을 사용하지 못함
  • 커널의 기능을 사용하기 위해, 운영체제에서 시스템 콜(system call)을 제공함

 

시스템 콜이란?

  • 시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
  • 시스템 콜은 커널과 사용자 사이의 인터페이스 역할을 하는 것으로 쉘(Shell)에서 명령어나 서브 루틴 형식으로 운영체제의 기능을 호출할 수 있음. 즉, 사용자가 직접 커널에 접근을 할 수 없기 때문에 시스템 콜을 활용해야함
  • 보통 시스템 콜을 직접 사용하기 보단, 해당 시스템 콜을 사용해서 만든 각 언어별 라이브러리(API)를 사용함→운영체제의 기능을 호출하는 함수
  • →즉, 사용자 프로세스가 소프트웨어 인터럽트를 통해 커널을 이용하기 위한 서비스를 요청하는 하나의 방법

 

- 시스템콜이란 운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의
서비스를 받기 위해 커널 함수를 호출할 때 씀.

유저 프로그램이 I/O 요청으로 트랩(trap)을 발동하면
- 올바른 I/O 요청인지 확인한 후 유저 모드가 시스템콜을 통해 커널 모드로 변환되어 실행됩니다. 이때 시스템콜이 작동될 때 modebit을 참고해서 유저 모드와 커널 모드를 구분함. modebit은 1 또는 0의 값을 가지는 플래그 변수입니다
- modebit의 0은 커널 모드, 1은 유저 모드라고 설정되며, 유저 모드일 경우 반드시 시스템콜을 통해
커널모드로 변경된 상태에서 시스템 자원을 쓰게 됨.

쉘(Shell)

  • 운영체제는 쉘을 통해서 사용자 인터페이스를 제공함
  • →즉 쉘은 사용자가 운영체제 기능과 서비스를 조작할 수 있도록 인터페이스를 제공하는 프로그램
  • 쉘은 터미널 환경(CLI)와 GUI 환경 두 종류로 나뉜다.

API(Application Programming interface)

  • 운영체제는 사용자 뿐만이 아니라 응용프로그램을 위해서도 인터페이스를 제공
  • 응용프로그램에서 프로그래밍 언어를 통해 운영체제에 무언가를 요청할 수 있기 때문에 API라는 형태로 응용프로그램을 위한 인터페이스를 제공해줌
  • API는 함수로 제공됨 ex)C언어의 open() 함수
  • 보통은 종류별로 묶어 라이브러리 형태로 제공
  • API는 각 언어별 운영체제 기능 호출 인터페이스 함수

시스템 콜 처리방식

  • 사용자 프로세스가 시스템 콜을 요청하면 제어가 커널로 넘어옴(사용자 모드→ 커널 모드)
  • 커널은 내부적으로 각각의 시스템 콜을 구분하기 위해 기능별로 고유번호를 할당하고 그 번호에 해당하는 제어루틴을 커널 내부에 정의
  • 커널은 요청받은 시스템 콜에 대응하는 기능번호를 확인
  • 커널은 그 번호에 맞는 서비스 루틴을 호출
  • 서비스 루틴을 모두 처리하고 나면 커널모드에서 사용자 모드로 다시 전환

 

시스템 콜은 왜 필요할까?

  • 우리가 일반적으로 사용하는 프로그램은 '응용프로그램'이다.
  • 유저레벨의 프로그램은 유저레벨의 함수들 만으로는 많은 기능을 구현하기 힘듦
  • 따라서→커널의 도움을 반드시 받아야 함
  • 커널(kernel)에 관련된 것은 커널 모드로 전환한 후에야, 해당 작업을 수행할 권한이 생김
  • 커널 모드를 통한 작업은 반드시 시스템 콜을 통해 수행하도록 설계되어 있음

 

 

출처 : 면접을 위한 CS 전공지식 노트

출처: https://gona.tistory.com/37

 

시스템 콜(System Call)

시스템 콜이 필요한 이유 커널(kernel) 파일 입출력, 프로세스 관리 등과 같이 운영체제의 기능을 담당 일반 사용자(사용자 모드)는 커널에 접근 할 수 없기 때문에 원칙적으로는 파일 입출력, 프

gona.tistory.com