유저 모드 User mode vs 커널 모드 Kernel mode
2024/06/07: 초안 작성
2024/06/08: 커널 모드 특징, 예시 작성
2024/06/09: 3가지 커널 모드 추가
2024/06/10: 3가지 커널 모드 보완
※ 내용에 오류가 있을 수 있습니다.
 ※ 내용을 계속 추가, 수정, 보완하고 있습니다.
목차
커널 모드와 유저 모드
운영 체제는 커널 모드와 유저 모드를 분리하여 유저 애플리케이션이 시스템의 핵심 기능을 직접 방해하지 못하도록 함으로써(격리) 안정성과 보안을 보장
- 커널 모드는 운영 체제에서 가장 신뢰할 수 있는 가장 낮은 수준의 기능이자 소프트웨어와 하드웨어 사이의 중간자 역할 
- 커널은 하드웨어와 소프트웨어 간의 통신을 유지하는 것이 주요 임무. 커널은 BIOS 직후에 사용자가 컴퓨터에 처음 설치하는 소프트웨어 
- 커널 모드에서 크래시가 발생하면 PC 전체가 중단되는 치명적인 결과를 초래 
- OS 커널은 설치되는 하드웨어에 따라 다르며, 윈도우의 NT 커널(MS 386에서 처음 사용), 벨 연구소의 유닉스 코드 ae처럼 하드웨어에 유연한 OS(Hardware extraction layer coding)가 있음. 
- 소프트웨어가 CPU에 요청을 할 때 커널 CPU에 따라 다르게 처리하는 시스템 호출이 됨. 
- OS는 커널 모드와 유저 모드의 두 단계로 실행됨. 
- 유저 모드에서는 실행 코드가 하드웨어나 참조 메모리에 직접 액세스할 수 없음. 
- 유저 공간 User Space은 커널 공간 Kernel space보다 권한이 낮으며, 코드, 프로세스 데이터, 날짜 등 커널 공간의 하드웨어와 리소스에 직접 접근할 수 없고 가상 공간에만 접근할 수 있음. 
- 유저 공간에서 예외가 발생하면 단일 프로세스만 충돌되고 OS는 계속 실행되지만, 커널 공간 문제의 경우 컴퓨터를 재부팅하거나 OS를 다시 설치해야 할 수 있음. 
- Win OS에서 프로그램을 실행하면 개인 가상 주소 공간을 주고, 이 공간에선 무언가에 액세스할 수 없음. 
- 심지어 일부 주소는 커널 주소 공간용으로 되어 있으며, 커널 주소 공간에는 가상 주소 공간이 하나만 있음. 
- 프로그램을 실행하면 유저 공간과 커널 공간 사이를 전환함. 어떤 작업이 실행되는 동안 파일을 열거나 둘을 조합하여 파일을 열 수 있음. 
커널 모드와 유저 모드 특징
커널 모드 Kernel Mode 특징
- Privileged Mode라고도 함. 
- 커널 모드는 코드가 컴퓨터의 모든 리소스에 제한 없이 액세스할 수 있는 작동 모드. 하드웨어, 메모리 포함. 
- 운영 체제의 핵심 부분인 커널 Kernel은 커널 모드 Kernel Mode에서 실행됨. 
특징
- 모든 리소스에 대한 풀 액세스: 커널 모드에서 실행되는 코드는 모든 하드웨어 및 시스템 리소스에 대한 전체 액세스 권한을 가짐. 
- 높은 권한 High Privileges: 모든 CPU 명령을 실행하고 모든 메모리 주소를 참조할 수 있음. 
- OS 운영에서의 Critical한 작업 Critical Operations: 장치 드라이버 실행, 인터럽트 처리, 프로세스 스케줄링과 같은 작업은 커널 모드에서 수행됨. - 장치 드라이버 device drivers 및 시스템 호출 system calls과 같은 중요한 작업을 실행
 
- 전체 시스템 보호: 커널 모드에서 충돌이 발생하면 중요한 데이터와 상태가 손상될 수 있고, 전체 시스템이 다운될 수 있음. - 오류가 발생하면 전체 시스템에 영향을 미칠 수 있음(재부팅하거나 OS 재설치 필요할 수 있음).
 
커널 모드 예시
- 장치 드라이버: 하드웨어 구성 요소와 직접 통신 
- 시스템 호출 System Calls: 사용자 애플리케이션과 OS 간의 인터페이스 
- 메모리 관리: 메모리 할당 및 할당 해제를 관리 
유저 모드 User Mode 특징
- 리소스에 대한 제한된 액세스 
- 유저 애플리케이션을 실행 
- 오류는 애플리케이션 내에서 발생(OS는 계속 실행됨). 
커널 모드의 3가지 유형
| 특징 | 모놀리식 커널 | 마이크로커널(사무엘 커널) | 하이브리드 커널 | 
|---|---|---|---|
| 핵심 철학 | 모든 서비스를 커널 모드에서 실행되는 하나의 블록으로 통합 커널 | 기능을 최소화하고 대부분의 서비스를 유저 공간에서 실행 | 일부 서비스는 커널 모드에서, 다른 서비스는 사용자 공간에서 실행 두 가지의 장점 결합 | 
| 성능 | 컨텍스트 전환이 없어 고성능 | IPC로 인한 잠재적 성능 오버헤드 | 균형 잡힌, 중요 서비스에 최적화됨 | 
| 복잡성 | 복잡성이 높고 관리가 어려움 | IPC 메커니즘으로 인해 복잡함 | 트레이드 오프의 균형을 맞추기 어려움 | 
| 안정성 | 덜 안정적, 버그가 시스템을 다운시킬 수 있음 | 더 안정적, 버그가 사용자 공간에 격리됨 | 균형 잡힌 안정성, 설계에 따라 다름 | 
| 보안 | 덜 안전함, 취약점이 전체 시스템에 영향 | 더 안전함, 사용자 공간 격리 | 균형 잡힘, 보안은 설계에 따라 달라짐 | 
| 예제 | Linux, Unix | Minix, QNX | Windows NT, MacOS | 
- 커널 모드와 유저 모드 구분과 달리 커널 모드에는 3가지 유형이 있음. 
- 운영체제마다 채택한 커널 유형이 있음. 
- Linux 운영 체제는 모놀리식 커널, Minix 운영 체제는 마이크로커널, Windows NT 운영 체제는 하이브리드 커널을 사용 
- 모놀리식 커널, 마이크로커널(또는 사무엘 커널), 하이브리드 커널은 운영 체제가 하드웨어 및 소프트웨어 리소스를 관리하는 방식에 관한 고유한 아키텍처 접근 방식과 철학 
- 운영체제가 시스템의 요구 사항에 따라 커널 유형을 선택함. 
- 커널 유형을 이해하면 프로젝트 요구 사항과 제약 조건에 가장 적합한 운영 체제를 설계하고 선택하는 데 도움이 됨. 
모놀리식 커널 Monolithic Kernel
- 성능에 중요한 시스템에 가장 적합. 효율성이 가장 중요하고 엄격한 테스트 및 보안 관행으로 시스템 충돌 위험 최소화
마이크로커널 Microkernels (or Samuel Kernel)
- 성능 raw performance보다 안정성, 보안, 모듈성이 더 중요한 시스템(임베디드 시스템, 높은 안정성이 요구되는 시스템 등)에 이상적
하이브리드 커널 Hybrid Kernel
- 데스크톱 및 서버 운영 체제와 같이 성능과 안정성 간의 적절한 균형이 필요한 범용 운영 체제에 적합
1. 모놀리식 커널 Monolithic Kernel
- 모놀리식 커널은 핵심 기능과 모든 드라이버를 포함한 전체 운영 체제가 커널 모드에서 실행되는 커널 유형 
- 이 설계는 모든 시스템 서비스를 단일 주소 공간에서 실행되는 하나의 큰 코드 블록으로 통합함. 
특징
- 단일 주소 공간: 모든 운영 체제 서비스(예: 장치 드라이버, 파일 시스템 관리, 메모리 관리 등)가 동일한 주소 공간에서 실행 
- 성능: 대부분의 시스템 호출에서 사용자 모드와 커널 모드 간에 컨텍스트 전환이 필요하지 않으므로 모놀리식 커널은 매우 빠를 수 있음. 
- 복잡성: 커널의 크기가 크고 서비스가 통합되어 있어 커널이 복잡하고 관리하기 어려울 수 있음. 
장점
- 고성능: 커널 공간 내에서 직접 통신하므로 시스템 호출을 빠르게 실행할 수 있음. 
- 설계의 단순성: 모든 것이 하나의 큰 프로그램의 일부이므로 초기에 설계하고 구현하기가 더 쉬움. 
단점
- 안정성 및 보안 위험: 커널의 어느 부분에서든 버그가 발생하면 전체 시스템이 다운되거나 보안이 손상될 수 있음. 
- 유지 관리: 크기와 상호 의존성으로 인해 유지 관리 및 업데이트가 어려움. 
예시
- Linux 커널: Linux 운영 체제는 모놀리식 커널을 사용함.
2. 마이크로커널(새뮤엘 커널) Microkernel (or Samuel Kernel)
- 마이크로커널(또는 사무엘 커널)은 커널 모드에서 실행되는 기능을 최소화하는 것을 목표로 하는 커널의 한 유형. 대신 장치 드라이버, 파일 시스템 및 네트워크 프로토콜과 같은 대부분의 서비스를 사용자 공간에서 실행하고 메시지 전달을 통해 통신함.
특징
- 최소한의 코어: 프로세스 간 통신, 기본 스케줄링, 메모리 관리와 같은 필수 서비스만 커널 모드에서 실행됨. 
- 모듈화: 필수적이지 않은 서비스는 사용자 공간에서 별도의 프로세스로 실행됨. 
- 프로세스 간 통신(IPC): 커널과 사용자 공간 서비스 간의 통신을 위해 메시지 전달에 크게 의존함. 
장점
- 안정성 및 보안: 사용자 공간 서비스의 버그가 전체 시스템을 다운시키지 않으며 독립적으로 다시 시작할 수 있음. 
- 모듈성 및 유연성: 전체 시스템에 영향을 주지 않고 개별 서비스를 쉽게 유지 관리, 업데이트 및 확장할 수 있음. 
단점
- 성능 오버헤드: 잦은 컨텍스트 전환과 IPC로 인해 모놀리식 커널에 비해 성능 오버헤드가 발생할 수 있음. 
- 구현의 복잡성: 효율적인 IPC 메커니즘이 필요하기 때문에 설계 및 구현이 더 복잡해짐. 
예시
- Minix: 마이크로커널 기반 운영 체제의 예
3. 하이브리드 커널 Hybrid Kernel
- 하이브리드 커널은 모놀리식 아키텍처와 마이크로 커널 아키텍처의 조합. 일부 서비스는 성능상의 이유로 모놀리식 커널처럼 커널 모드에서 실행하고, 다른 서비스는 모듈성과 안정성을 위해 마이크로커널처럼 사용자 공간에서 실행하여 두 설계의 장점을 모두 활용
특성
- 혼합 접근 방식: 모놀리식 및 마이크로커널 설계의 요소를 모두 통합 
- 선택적 서비스 배치: 성능에 중요한 서비스는 커널 모드에서 실행하고, 다른 서비스는 사용자 공간에서 실행할 수 있음. 
- 유연성: 커널 모드에서 실행되는 서비스와 사용자 공간에서 실행되는 서비스를 조정하여 다양한 요구 사항에 맞게 조정할 수 있음. 
장점
- 균형 잡힌 성능과 안정성: 모놀리식 커널의 고성능과 마이크로커널의 모듈성 및 안정성 사이에서 적절한 균형을 이룰 수 있음. 
- 유연성: 커널과 사용자 공간 간에 서비스를 이동하여 특정 사용 사례에 맞게 더 쉽게 최적화할 수 있음. 
단점
- 복잡성: 모놀리식 설계와 마이크로커널 설계 간의 균형을 맞추기 위해 설계 및 관리가 복잡할 수 있음. 
- 문제 발생 가능성: 신중하게 설계하지 않으면 두 아키텍처의 단점을 모두 계승할 수 있음. 
예시
- Windows NT: 최신 Windows 버전을 포함한 Windows NT 운영 체제는 하이브리드 커널을 사용함.
 
[참고자료]
[Linkedin] Kernel mode V$ User mode!!
 https://www.linkedin.com/pulse/kernel-mode-v-user-pallab-sarma/
[Microsoft Learn] User mode and kernel mode
 https://learn.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/user-mode-and-kernel-mode
[GeeksforGeeks] User mode and Kernel mode Switching https://www.geeksforgeeks.org/user-mode-and-kernel-mode-switching/
