개요
운영체제는 응용 프로그램과 하드웨어 간의 상호작용을 관리하고, 리소스를 효율적으로 활용하기 위한 다양한 작업을 한다.
이 작업에 대한 방식을 두 가지(유저 모드와 커널 모드)로 나누어, 컴퓨터 자원을 안정적으로 보호한다.
이 두 가지 작업 모드에 대해서 알아보자.
Kernel이란
커널은 OS의 핵심이되는 프로그램으로, 시스템의 모든 것(하드웨어의 동작, 메모리, CPU 등)을 제어한다.
프로세스 간 통신과 System Call을 이용하여, 하드웨어 리소스에 접근하여 수행되는 응용 프로그램과 데이터 처리 사이의 중간다리 역할을 한다. 커널에는 모든 활성 프로세스를 추적하는 프로세스 테이블이 있어, 이들을 관리한다.
커널은 OS가 로드되면 메모리에 먼저 로드되고, OS가 종료될 때까지 메모리에 남아있다.
Monolithic Kernel의 종류에는 Unix, Linux, Open VMS 등이 있다.
User Mode와 Kernel Mode
프로세스가 실행되는 동안 프로세스는 계속 유저 모드와 커널 모드를 왔다갔다 하면서 실행된다.
예를 들어 다음과 같은 작업이 있다.
- 유저 모드에서 실행되고 있는 어플리케이션은 시스템 콜/인터럽트/라이브함수 등을 통해 I/O 요청을 한다.
- 이는 컴퓨터 자원에 접근이 필요한 작업이므로, 인터럽트를 걸게되고 커널모드로 전환된다.
- 장치 드라이버에서 I/O 장치에서 수행한 값을 커널에 return하고, 커널은 해당 값을 애플리케이션으로 리턴한다.
- 커널 작업을 마친 후, OS는 해당 작업을 다시 유저 모드로 전환한다.
User Mode와 Kernel Mode 비교
Kernel Mode | User Mode | |
자원에 대한 접근 | 직접적으로 시스템 자원에 접근 가능하다 | 프로세스는 직접적으로 시스템 자원에 접근하지 못한다. 만약 자원에 접근하려면 System Call을 통해 커널 모드로 전환해야 한다. |
가상 공간 | 모든 프로세스는 하나의 가상 공간을 공유한다. | 모든 프로세스는 개별적인 가상 공간을 갖는다. |
알려진 이름 | privileged mode, system mode | restricted mode, slave mode |
실행 방법 | 커널모드 코드가 실행 | 유저 애플리케이션 코드가 실행 |
- 유저 모드에서는 시스템 자원(파일 시스템, I/O 관리, 메모리/CPU 관리 등)이나 커널 프로그램에 직접적으로 접근이 불가능하다. 이 자원에 접근하려면 System Call을 통해 커널 모드로 변경해야 한다.
- 우리가 보통 코드를 짜고 간단한 프로그램을 돌릴 때,
'CS > OS' 카테고리의 다른 글
[OS] 멀티 프로세서, 멀티 태스킹, 멀티 프로세스, 멀티 스레드! (0) | 2024.03.10 |
---|---|
[OS] Synchronous, Asynchronous, Blocking, Non-Blocking (1) | 2024.01.31 |
[CS] 비트마스킹 | 비트 연산자 | 비트마스킹과 집합 (0) | 2023.07.19 |
[OS] CPU Scheduling | preemptive & non-preemptive | 스케줄링 알고리즘 | 스케줄러 알고리즘 평가 (0) | 2023.05.11 |
[OS] 운영체제가 하는 일4가지 (0) | 2023.04.15 |