시스템 콜
시스템 콜은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스다.
시스템 콜이 필요한 이유
우리가 일반적으로 사용하는 프로그램은 응용프로그램이다.
유저레벨의 프로그램은 유저레벨의 함수들 만으로는 많은 기능을 구현하기 힘들기 때문에, 커널의 도움을 반드시 받아야 한다.
이러한 작업은 응용프로그램으로 대표되는 유저 프로세스가 있는데, 유저모드에서는 수행할 수 없다.
그렇기 때문에 반드시 kernel에 관련된 것은 커널모드로 전환을 해야 작업을 수행할 수 있다.
결국 시스템 콜이 필요한 이유는 해커가 피해를 입히기 위해 악의적으로 시스템 콜을 사용하는 경우나
초보 사용자가 하드웨어 명령어를 잘 몰라서 아무렇게 함수를 호출했을 경우에 시스템 전체를 망가뜨릴 수도 있기 때문이다.
따라서 이러한 명령어들은 특별하게 커널 모드에서만 실행할 수 있도록 설계되었고,
만약 유저 모드에서 시스템 콜을 호출할 경우에는 운영체제에서 불법적인 접근이라 여기고 trap을 발생시킵니다.
드라이버
응용 프로그램과 커널의 인터페이스가 시스템 콜이라면 커널과 하드웨어의 인터페이스는 드라이버가 담당한다.
하드웨어의 종류는 다양하고 직접 각 하드웨어에 맞는 인터페이스를 개발하기는 어렵기 때문에 커널은 입출력의 기본적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행되도록 한다.
이때 하드웨어 제작자가 만든 소프트웨어를 디바이스 드라이버라고 부른다.
CPU 모드
CPU는 사용자 애플리케이션 (User application)이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드를 제공한다.
CPU에 있는 Mode bit로 모드를 구분하여 0은 커널모드, 1은 사용자모드로 나뉘어서 구동된다.
운영체제에서 프로그램이 구동되는 데 있어서 파일을 읽어오거나, 파일을 쓰거나, 혹은 화면에 메시지를 출력하는 등 많은 부분이 커널 모드를 사용한다.
사용자 모드
사용자 모드에서 사용자 애플리케이션 코드가 실행된다. 사용자가 접근할 수 있는 영역에 제한이 있기 때문에 해당 모드에서는 하드웨어(디스크, I/O 등)에 접근할 수 없다.
접근을 위해서는 시스템 콜을 사용해야 한다.
커널 모드
운영체제(OS)가 CPU를 사용하는 모드이다.
시스템 콜을 통해 커널모드로 전환이 되면 운영체제는 하드웨어를 제어하는 명령어를 실행한다.
명령어는 사용자 모드에서 실행되면 에러가 발생한다.
'CS > 운영체제' 카테고리의 다른 글
| PCB와 Context Switching (0) | 2024.06.18 |
|---|---|
| 인터럽트 (0) | 2024.06.17 |
| CPU 스케줄링 알고리즘 (2) | 2024.06.16 |
| 프로세스와 스레드 (0) | 2024.06.13 |
| 메모리 계층 (1) | 2024.06.13 |
