여러 작업이 동시에 시행되는 것처럼 보이기 위해서는 CPU 시간을 나누어 써서 가상화를 구현하면 되는데, 다음과 같은 문제가 발생한다.
프로그램을 빠르게 실행하기 위해 개발. 프로그램을 CPU 상에서 ‘직접’ 실행하는 것.
이때 제한적인 이유
운영체제가 원치 않는 일 방지
예) 프로그램이 할당받은 영역을 벗어나는 메모리 영역을 제어하려고 시도하는 경우
프로그램 실행 중단과 전환 제어의 필요
예) 무한 루프로 인해 프로그램을 강제 종료할 필요가 있을 때
디스크 입출력 요청, 시스템 자원 추가 할당 등 특수한 종류의 연산은 접근 권한 등의 문제로 시스템의 제어를 받아야 할 필요가 있다. 그래서 프로세스가 자유롭게 다룰 수 있도록 하는 것은 적절하지 않다.
시스템을 두 가지 모드로 나눠서 각각 주어진 권한에 맞게 실행할 수 있도록 한다.
<aside> ✏️ 사용자 모드 (User Mode)
</aside>
특수한 종류의 요청(파일 입출력, 자원 추가 할당, 다른 프로세스와 통신, 프로세스 생성 및 제거 등)을 직접 실행할 수 없도록 제한. 해당 요청 시 예외 발생하여 운영체제가 프로세스를 제거
<aside> ✏️ 커널 모드 (Kernel Mode)
</aside>
운영체제의 중요한 코드를 실행. 원하는 모든 작업 실행 가능.
<aside> ✏️ 시스템 콜 (System Call)
</aside>
사용자 모드에서 실행하는 프로세스가 특수한 요청을 수행해야 할 때 시스템에 요청하기 위해 사용. 초기 Unix 시스템은 20개, 대부분의 운영체제는 수 백개 단위의 시스템 콜 제공.