본문 바로가기

컴퓨터 공학/운영체제

[운영체제] 시스템 콜 (System Call)

본 포스팅의 내용은 Operating System Concepts 10th, Operating Systems Three Easy Pieces를 참조하여 작성되었습니다.

오늘은 운영체제를 배우다 보면 많이 접하게 되는 시스템 콜에 대해 알아보겠습니다.

시스템 콜 이란?

위키피디아의 정의에 따른 시스템 콜의 정의는 다음과 같다.

시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다.

시스템 콜은 왜 필요할까? 

 우리가 일반적으로 사용하는 프로그램은 '응용프로그램'입니다. 유저레벨의 프로그램은 유저레벨의 함수들 만으로는 많은 기능을 구현하기 힘들기 때문에, 커널(kernel)의 도움을 반드시 받아야 합니다. 이러한 작업은 응용프로그램으로 대표되는 유저 프로세스(User Process)에서 유저모드에서는 수행할 수 없습니다. 반드시 kernel에 관련된 것은 커널모드로 전환한 후에야, 해당 작업을 수행할 권한이 생깁니다. 커널 모드를 통한 이러한 작업은 반드시 시스템 콜을 통해 수행하도록 설계되어 있습니다. 아래 그림(1.13)을 살펴보면 이해가 빠를 것입니다.

출처: Operating System Concepts 10th - SILBERSCHARTZ

 그렇다면 권한은 왜 필요한 것일까? 의문이 생길 수 있습니다. 그 이유는 해커가 피해를 입히기 위해 악의적으로 시스템 콜을 사용하는 경우나 초보 사용자가 하드웨어 명령어를 잘 몰라서 아무렇게 함수를 호출했을 경우에 시스템 전체를 망가뜨릴 수도 있기 때문입니다. 따라서 이러한 명령어들은 특별하게 커널 모드에서만 실행할 수 있도록 설계되었고, 만약 유저 모드에서 시스템 콜을 호출할 경우에는 운영체제에서 불법적인 접근이라 여기고 trap을 발생시킵니다.

시스템 콜 예시

cp in.txt out.txt

리눅스 터미널에 위와 같은 명령어를 입력한다면 이때 순차적으로 호출되는 시스템 콜은 어떤 것이 있을까 생각해보세요. 참고로 위의 문장은 in.txt에 있는 파일내용과 같은 내용을 복사하여 out.txt 파일을 만드는 것입니다.

일반적으로 윈도우 운영체제라면 라면 마우스가, 리눅스라면 키보드가 사용자로부터 입력을 받는데 이때 I/O 시스템 콜을 사용한다. 위와 같은 문장을 입력을 받아서 'cp' 프로그램을 실행시키면 먼저 'in.txt' 파일이 현재 디렉터리에서 접근할 수 있는 파일인지를 검사하기 위해 시스템 콜을 호출합니다. 만약 파일이 존재하지 않는 다면 애러를 발생시켜야 하고, 프로그램을 종료하는데 이때 시스템 콜이 사용됩니다. 만약 파일이 존재한다면, 복사한 파일을 저장하기 위해 'output.txt' 파일명이 있는지 검사합니다. 그리고 이 때도 마찬가지로 이 파일 명이 존재하는지 존재하지 않는지 검사하기 위해 시스템 콜을 통해 확인합니다. 그리고 만약 파일 명이 이미 존재한다면, 덮어 씌워야 할지 아니면, 이어서 붙여야 하는지 User에게 물어볼 수 있습니다. 만약 저장하고자 하는 파일 이름이 겹치지 않다면, 파일을 저장해야 하는데 이 때도 시스템 콜을 이용합니다. 그림 2.5는 이 과정에서 필요한 시스템 콜의 호출 과정을 나타낸 것입니다.

 

출처: Operating System Concepts 10th - SILBERSCHARTZ 63page

 텍스트를 복사하는 간단한 프로그램임에도 불구하고, 상당히 많은 시스템 콜이 발생함을 알 수 있습니다. 그리고 아래는 시스템 콜의 종류입니다. UNIX 운영체제의 실재 응용프로그램에서 수행하는 시스템 콜 함수의 이름입니다.

시스템 콜의 종류

  • 프로세스 컨트롤
    • 프로세스 생성 및 종료
    • 메모리에 로드, 실행
    • 프로세스 속성 값 확인, 지정
    • wait 이벤트, signal 이벤트
    • 메모리 할당
  • 파일 메니지먼트
    • 파일 생성, 파일 삭제
    • 열기, 닫기
    • 읽기, 쓰기, Reposition
    • 파일 속성 값 확인, 지정
  • 디바이스 매니지먼트
    • 디바이스 요청 및 해제
    • 읽기, 쓰기, Reposition
    • 디바이스 속성 확인, 지정
    • 비 물리적인 디바이스 해제 및 장착
  • 정보 관리
    • 시간 확인, 시간 지정
    • 시스템 데이터 확인, 지정
    • 프로세스, 파일, 디바이스 속성 가져오기
    • 프로세스, 파일, 디바이스 속성 설정하기
  • 커뮤니케이션
    • 커뮤니케이션 연결 생성 및 삭제
    • 메시지 송신, 수신
    • 상태 정보 전달
    • remote 디바이스 해제 및 장착
  • 보안
    • Permission 획득
    • Permission 설정

실재 UNIX  System Calls

출처: Operating System Concepts 10th - SILBERSCHARTZ 68page

이상으로 운영체제 System Call 포스팅을 마치겠습니다.!