[운영체제] 시스템 호출

kimgwon·2023년 9월 24일

CS

목록 보기
9/10
post-thumbnail

1️⃣ 시스템 호출

시스템 호출은 응용프로그램에서 커널에 작성된 함수를 실행하는 기법으로, 커널과 응용프로그램 사이의 인터페이스다.
즉, 커널 모드의 기능을 사용자 모드에서 사용할 수 있게 해준다.

2️⃣ 시스템 호출의 필요성

일반적으로 사용자가 사용하는 프로그램은 응용 프로그램이다. 사용자 모드에서는 파일 읽기 및 쓰기/ 메모리 할당 및 해제/ 프로세스 생성 및 관리 등의 작업을 구현할 수 없다. 즉, 응용 프로그램은 커널이 있는 메모리에 접근할 권한이 없기 때문에, 커널에 작성된 함수를 직접 호출할 수 없다. 커널 모드로 전환된 후 수행할 수 있는 권한이 생긴다.

운영체제는 응용프로그램을 대신하여 커널 함수에 접근할 수 있는 시스템 호출 라이브러리를 제공한다. 응용프로그램이 커널의 기능을 활용하려면 시스템 호출 라이브러리에 들어 있는 시스템 호츨 함수(fork(), exit(), open(), write() 등)를 호출하면 된다.

이러한 함수를 통해 응용프로그램이 커널 코드를 불러 활용할 수 있다. 시스템 호출은 응용프로그램이 커널 코드를 호출할 수 있는 유일한 방법이다.

시스템 호출을 trap이라고도 한다. 시스템 호출이 진행되는 과정을 'trap을 실행한다.'고 한다. trap을 실행하면, 모드비트가 0으로 전환된다.

모드 비트
값에 따라 현재 운영체제의 모드를 알 수가 있다.
0: 커널 모드 / 1: 사용자 모드

UserMode to KernelMode

사용자 공간과 커널 공간을 나누는 이유

우선, 메모리를 사용자 공간과 커널 공간으로 나누어 사용하는 이유는 응용프로그램으로부터 커널 코드와 데이터를 지키기 위해서이다. 사용자 응용프로그램이 실수로 혹은 악의적인 개발자가 고의적으로, 커널 코드와 데이터를 훔쳐보거나 훼손하는 것을 막기 위해서이다. 커널이 개방되어 있으면 바이러스 침범, 시스템 훼손, 시스템 중단 등 심각한 문제가 발생할 수 있다.

따라서, 응용프로그램은 시스템 호출을 통해서만 커널 공간을 액세스 할 수 있다.

사용자 모드와 커널 모드 비교

사용자 모드커널 모드
CPU의 메모리 액세스 범위사용자 공간에 국한. 커널 공간 액세스 불가커널 공간을 포함한 모든 메모리 공간
CPU의 하드웨어 액세스 여부불가모든 하드웨어 액세스 가능
CPU가 처리 가능한 명령특권 명령을 제외한 모든 CPU 명령특권 명령을 포함한 모든 CPU 명령
오류 발생 시 처리사용자 프로그램만 실행 종료. 시스템이 종료되지 않으므로 안전시스템에 심각한 오류가 발생한 것으로 시스템 종료

3️⃣ 시스템 호출 함수

범주기능WindowsLinux
프로세스 컨트롤프로세스 실행CreateProcess()execlp(), execv()
프로세스 종료ExitProcess()exit(), kill()
프로세스 생성CreateProcess()fork(), clone()
이벤트, 시간동기WaitForSingleObject()wait()
파일 관리파일 생성/삭제CreateFile()open()
파일 열기/닫기CloseHandle()close()
파일 읽기/쓰기ReadFile()/WriteFile()read()/write()
디바이스 관리장치로 읽기/쓰기ReadFile()/WriteFile()read()/write()

시스템 호출 함수 처리 과정

  • 각 시스템 호출에는 번호가 부여되고, 시스템 호출 인터페이스는 시스템 호출 번호시스템 호출 핸들러 함수 주소로 구성된 시스템 호출 테이블을 가진다.

  • 시스템 호출 함수가 실행되면 시스템 호출 핸들러가 실행되고, 운영체제는 시스템 호출 번호를 분석하여 해당 커널 함수를 실행시킨다.

  • 작업이 완료되면 CPU에게 인터럽트를 발생시켜 수행이 완료 되었음을 알린다.

  • 예시
    open()의 호출
    open()


함수 호출과 시스템 호출의 차이

함수 호출시스템 호출
메모리 영역사용자 영역의 코드에서 사용자 영역의 함수 호출사용자 영역의 코드에서 커널 함수 호출
CPU 실행 모드사용자 모드사용자 모드에서 커널 모드로 전환
비용함수 호출에 따른 비용커널 모드로 전환하는 등 함수 호출에 비해 큰 비용


참고

0개의 댓글