User mode
- 우리가 개발하는 프로그램은 일반적으로 User mode
에서 실행
User mode -> Kernel mode
- 프로그램 실행 중에 인터럽트가 발생하거나 시스템 콜을 호출하게 되면 커널 모드로 전환
Kernel mode
- 프로그램의 현재 CPU 상태를 저장한다. 커널이 인터럽트나 시스템 콜을 직접 처리 즉, CPU에서 커널 코드가 실행 됌
처리가 완료되면 중단됐던 프로그램의 CPU 상태를 복원
어떤 경우에는 중단됐던 프로그램이 바로 실행되지 않고 나중에 실행될 수 있다.
Kernel mode -> User mode
다시 통제권을 프로그램에게 반환
User mode
- 프로그램이 이어서 실행
Kernel - 운영체제의 핵심 시스템의 전반을 관리/감독하는 역할 하드웨어와 관련된 작업을 직접 수행
시스템을 보호하기 위해 - 프로그램이 하드웨어에 대한 무분별한 사용을 막기 위해
시스템에서 발생한 다양한 종류의 이벤트, 그런 이벤트를 알리는 메커니즘
ex) 전원에 문제가 생겼을 때, I/O 작업이 완료됐을 때, 시간이 다 됐을 때, 0으로 나눴을 때, 잘못된 메모리 공간에 접근을 시도할 때
인터럽트가 발생하면 CPU에서는 "즉각적으로" 인터럽트 처리를 위해 커널 코드를 커널 모드에서 실행프로그램이 OS커널이 제공하는 서비스를 이용하고 싶을 때 시스템 콜을 통해 실행
ex) 프로세스/스레드 관련, 파일 I/0 관련, 소켓 관련, 장치(device) 관련, 프로세스 통신 관련
시스템 콜은 프로세스가 운영체제의 서비스를 요청하기 위해 사용하는 인터페이스이다.
시스템 콜이 발생하면 해당 커널 코드가 커널 모드에서 실행
하드웨어 혹은 시스템 관련 기능은 어떤 프로그램이라도 반드시 시스템 콜을 통해서만 사용 가능
우리가 사용하는 프로그래밍 언어들이 시스템 콜을 포장(wrapping)하여 간접적으로 사용할 수 있도록 제공했기 때문이다.