Windows NT 커널이 어떻게 하드웨어 관리, 메모리 관리, 입출력 장치 제어 등의 기능을 수행하는지에 관한 핵심 메커니즘 250429
q1: Windows NT 커널이 실제로 어떻게 하드웨어 관리, 메모리 관리, 입출력 장치 제어 등의 기능을 수행하는지에 관한 핵심 메커니즘
a1:
Windows NT 커널이 실제로 어떻게 하드웨어 관리, 메모리 관리, 입출력 장치 제어 등의 기능을 수행하는지에 관한 핵심 메커니즘
⸻
1. 하드웨어 관리
1-1. CPU 스케줄링
• 스레드 우선순위 기반 선점(preemptive) 스케줄러
• 각 스레드에 0–31 사이의 우선순위(priority) 할당
• 실시간(real-time) 클래스(16‐31)와 가변 클래스(dynamic, 1‐15)로 구분
• 디스패처(Dispatcher)
• Ready Queue: 우선순위별로 여러 개의 대기 큐를 유지
• 양자(quantum): 스레드가 CPU를 독점할 수 있는 시간 단위(default 15–30ms)
• 타이머 인터럽트 시점에 현재 실행 스레드의 남은 양자를 감소시키고, 0이 되면 Ready 큐로 돌려보낸 뒤 다음 우선순위 스레드 실행
• 컨텍스트 스위치
• 레지스터 상태, 스택 포인터, 페이징 정보 등 CPU 상태를 저장/복원
• 비동기 이벤트(디바이스 인터럽트)나 스케줄러 타임 슬라이스 만료 시 일어남
1-2. 메모리 관리
• 가상 메모리(Virtual Memory) 시스템
• 각 프로세스에 64-bit 주소 공간(Windows x64 기준)을 독립 제공
• 페이지(4 KiB 기본) 단위로 물리 메모리 ↔ 디스크(Paging File) 전환
• 페이지 테이블 & TLB
• 프로세스별 페이지 디렉터리/PTE(Page Table Entry) 관리
• CPU 내장 TLB(Translation Lookaside Buffer)로 자주 참조되는 매핑 캐싱
• 작업 집합(Working Set)
• 프로세스가 “당장 물리 메모리에 갖고 있어야 할 페이지” 집합
• 커널이 페이지 폴트(page fault) 빈도, 시스템 전체 메모리 압력 등을 보고 동적으로 확장·축소
• 비관리 메모리
• 파일 캐시, 시스템 캐시(바이트 맵버리)로 디스크 I/O 최소화
1-3. 입출력 장치 제어
• I/O 매니저(I/O Manager)
• IRP(I/O Request Packet): 모든 디바이스 I/O 요청을 IRP 형태로 추상화
• 장치 드라이버 스택:
1. 최상위 드라이버(File System Driver 또는 Class Driver)
2. 필터 드라이버(optional)
3. 펑션 드라이버(Function Driver)
4. 버스 드라이버(Bus Driver)
• IRP를 위 계층 구조대로 전달(pass‐down)하면서, 각 드라이버가 처리 후 Completion Routine으로 역전달
• 윈도우 드라이버 모델(WDM) / KMDF
• 공통 드라이버 프레임워크 제공 → 하드웨어별 차이는 최소화
• Plug & Play, 전원 관리, 에러 처리 등을 표준화된 콜백으로 구현
⸻
2. 시스템 자원 분배
2-1. 다중 사용자·다중 작업 관리
• 세션(Session) 분리
• 터미널 서비스(원격 데스크톱) 환경에서 사용자별로 세션 오브젝트 생성
• 프로세스·윈도우 오브젝트·레지스트리 뷰 등을 세션별로 격리
• 잡(Job Object)
• 프로세스 그룹 단위로 CPU 시간, 메모리 사용량, I/O 대역폭 등 리소스 한계 설정
• 관리자 → 작업 관리자 등에서 ‘작업 집합’만 봐도 여러 프로세스를 하나로 묶어 관리
2-2. 권한·격리 (보안)
• 보안 토큰(Security Token)
• 로그인 시 생성되는 “사용자 신분증”으로, SID(보안 식별자), 그룹, 권한(Privilege) 포함
• 액세스 제어(ACL / DACL)
• 파일·레지스트리·프로세스·스레드 등 모든 커널 오브젝트(Object)에 보안 디스크립터 부착
• 요청 시 커널이 보안 토큰과 비교하여 허가 여부 결정
• 커널/유저 모드 분리
• 유저 모드 프로세스가 직접 하드웨어 접근 불가 → 시스템 콜로만 커널 서비스 호출
• 크래시나 악성 코드가 커널로 침투하는 것을 방어
⸻
3. 추상화 제공
3-1. 시스템 콜(System Call) 인터페이스
• Win32 API → ntdll.dll → kernel
1. 애플리케이션이 CreateFile() 같은 Win32 API 호출
2. ntdll.dll에서 NtCreateFile로 변환 후 Intel syscall(x64) 명령어 실행
3. CPU가 유저 모드 → 커널 모드 전환, **서비스 디스패처(SSD)**가 해당 함수 핸들러로 분기
4. 커널 함수가 처리 완료 후 결과를 유저 모드에 반환
• 추상화 계층
• 파일 시스템, 네트워크 소켓, 프로세스 제어 등 공통 인터페이스(Win32 API) 제공
• 실제 구현은 커널 오브젝트(Object Manager), I/O 매니저, 네트워크 스택(TCP/IP 클램프) 등이 담당
3-2. 커널 오브젝트 Manager
• 모든 자원(이벤트, 뮤텍스, 세마포어, 파일 등)을 Handle 기반으로 관리
• 프로세스별 Handle Table → 공통 Object Table에 인덱스
• 응용프로그램은 Handle만 알면, 내부 구조 몰라도 안전하게 사용
⸻
이처럼 Windows NT 커널은
1. 스케줄러/메모리 매니저/I/O 매니저로 하드웨어를 직접 제어하고,
2. 세션·잡·보안 토큰·ACL로 다중 사용자·다중 작업을 격리·관리하며,
3. Win32 API→시스템 콜→커널 서비스와 Handle 기반 오브젝트 추상화 계층을 통해 응용프로그램에 일관된 인터페이스를 제공합니다.