Windows OS 구조 개관 — 계층 구조로 한번에 이해하기
Windows는 계층(Layer)으로 쌓여 있다
Windows는 마치 양파처럼 여러 계층으로 이루어져 있어요. 아래에서 위로 갈수록 사용자에게 가까워지고, 위에서 아래로 갈수록 하드웨어에 가까워집니다.
아래 구조를 한번 봐볼게요:
크게 보면 유저 모드와 커널 모드로 나뉘고, 그 아래에 HAL, 맨 아래에 하드웨어가 있습니다. 이 두 모드의 차이는 3화에서 자세히 다루고, 지금은 각 계층에 뭐가 있는지만 살펴볼게요.
유저 모드(User Mode)에는 뭐가 있을까?
우리가 매일 쓰는 크롬, 엑셀, 메모장 같은 앱들은 모두 유저 모드에서 실행돼요. 유저 모드의 특징은:
- 메모리 접근이 제한적이에요 — 다른 프로세스 메모리를 함부로 읽을 수 없어요.
- 하드웨어에 직접 접근이 불가능해요 — 디스크에 쓰고 싶으면 커널에 요청해야 합니다.
- 앱이 크래시해도 다른 앱이나 OS 자체는 살아있어요.
유저 모드에서 중요한 구성요소 몇 가지만 살펴볼게요.
NTDLL.dll
유저 모드와 커널 모드 사이의 다리 역할을 해요. 우리가 CreateFile() 같은 Win32 API를 호출하면, 결국 NTDLL.dll의 NtCreateFile()을 거쳐 커널로 들어갑니다. 직접 눈에 띄지는 않지만, 모든 API 호출의 관문이에요.
환경 서브시스템 (CSRSS, Win32 서브시스템)
Windows는 단순히 Win32만 지원하는 게 아니라, 다양한 실행 환경을 지원할 수 있도록 설계되어 있어요. CSRSS(Client-Server Runtime Subsystem)는 콘솔 창 관리, 프로세스/스레드 생성 등을 담당합니다.
커널 모드(Kernel Mode)에는 뭐가 있을까?
이곳이 우리의 주 무대입니다. 커널 모드에는 크게 세 가지 영역이 있어요.
1. Windows Executive
Executive는 커널 모드의 "상위 계층"이에요. 여러 매니저(Manager)들의 집합이라고 생각하면 됩니다.
| 구성요소 | 역할 |
|---|---|
| I/O Manager | 입출력 요청 처리의 총괄. 드라이버와 직접 대화하는 주체 |
| Memory Manager | 가상 메모리 관리, 페이지 폴트 처리 |
| Process Manager | 프로세스와 스레드의 생성, 종료, 스케줄링 |
| Object Manager | 파일, 레지스트리 키, 뮤텍스 등 모든 커널 오브젝트 관리 |
| Security Reference Monitor | 보안 정책 적용 — 누가 뭘 할 수 있는지 결정 |
| Cache Manager | 파일 시스템 캐시 관리 |
| Registry | 시스템 설정 저장소 관리 |
2. Windows Kernel (ntoskrnl.exe)
커널 중의 커널이에요. Executive 아래에 있고, 다음을 직접 담당합니다:
- 스케줄링 — 어떤 스레드를 언제 CPU에서 실행할지 결정
- 인터럽트 처리 — 하드웨어 인터럽트를 받아서 처리
- 동기화 프리미티브 — 스핀락, 뮤텍스 등의 기반 구현
- 예외 처리 — 0으로 나누기, 페이지 폴트 등 CPU 예외 처리
ntoskrnl.exe — 이 파일이 바로 Windows 커널의 실체예요. Task Manager에서는 "System" 프로세스로 보이고, 이 프로세스의 PID는 항상 4입니다.
3. 디바이스 드라이버
드라이버는 커널 모드에서 동작하는 모듈이에요. 하드웨어와 OS 사이의 통역사 역할을 합니다. 파일시스템 드라이버(NTFS.sys), 네트워크 드라이버, USB 드라이버 등이 모두 여기에 해당돼요.
그리고 우리가 이 시리즈에서 직접 만들 것들도 바로 이 영역에 올라가는 코드들입니다.
HAL — 하드웨어 추상화 계층
HAL(Hardware Abstraction Layer)은 커널과 하드웨어 사이에 있는 얇은 계층이에요. 역할이 명확합니다 — 하드웨어 차이를 커널로부터 숨기는 것이에요.
예를 들어, Intel CPU와 ARM CPU는 인터럽트를 처리하는 방식이 달라요. HAL이 이 차이를 추상화해 주기 때문에, 커널 코드는 "HAL을 통해 인터럽트를 처리해"라고만 하면 되고, CPU 종류를 신경 쓰지 않아도 됩니다.
Win32K.sys — GDI와 USER의 세계
화면에 창을 그리거나 마우스 클릭을 처리하는 코드는 어디에 있을까요? 바로 win32k.sys입니다. 이 드라이버는 조금 특이한데, 커널 모드에서 동작하지만 GUI 관련 작업(GDI, USER)을 담당해요.
보안 관점에서 보면 win32k.sys는 역사적으로 취약점이 많이 발견된 곳이기도 합니다. Windows 8부터 서버 프로세스에서는 win32k.sys 호출을 제한하는 "Win32k System Call Filtering"을 도입했어요.
실제로 눈으로 확인해보기
WinDbg나 Process Explorer 없이도 지금 바로 커널 모듈들을 확인할 수 있어요. 관리자 권한 PowerShell을 열고 아래 명령을 실행해보세요:
# 현재 로드된 커널 드라이버 목록 확인 Get-WmiObject Win32_SystemDriver | Select-Object Name, State, PathName | Sort-Object Name수십 ~ 수백 개의 드라이버가 나올 거예요. 이 중에는 마우스 드라이버, USB 드라이버, 파일시스템 드라이버 등이 전부 포함되어 있습니다. 지금 당장은 뭔지 몰라도 괜찮아요 — 이 시리즈가 끝날 때쯤엔 각각이 뭘 하는지 읽힐 겁니다.
🔍 추가로 확인해보면 좋은 것들
- Sysinternals Process Explorer — System 프로세스 하위에 로드된 드라이버 목록 확인 가능
- Sysinternals Autoruns — 부팅 시 자동으로 로드되는 드라이버 확인
- msinfo32.exe → 소프트웨어 환경 → 시스템 드라이버
- Windows는 유저 모드 / 커널 모드 / HAL / 하드웨어 4계층으로 나뉩니다.
- 커널 모드는 Executive(여러 Manager), Windows Kernel(ntoskrnl.exe), 디바이스 드라이버로 구성됩니다.
- 드라이버 개발자가 가장 많이 상대하는 Executive 구성요소는 I/O Manager입니다.
- HAL은 하드웨어 차이를 추상화해서 커널이 하드웨어를 직접 신경 쓰지 않아도 되게 해줍니다.
#Windows아키텍처 #커널모드 #Executive #HAL #ntoskrnl
'Programming > 7. Device Driver' 카테고리의 다른 글
| Windows 아키텍처 기초 - 5화 페이징 메커니즘 (0) | 2026.05.22 |
|---|---|
| Windows 아키텍처 기초 - 4화 가상 메모리와 주소 공간 (0) | 2026.05.21 |
| Windows 아키텍처 기초 - 3화 커널 모드 vs 유저 모드 (0) | 2026.05.20 |
| Windows 커널 & 드라이버 완전 정복 목차 (0) | 2026.05.18 |
| Windows 아키텍처 기초 - 1화 시리즈 소개 & 전체 로드맵 (0) | 2026.05.18 |