[시스템 아키텍처] 윈도우 OS 아키텍처 개요
[시스템 아키텍처] 윈도우 OS 아키텍처 개요
아키텍처 개요
- 아키텍처의 단순화된 버전을 살펴보자.
- 윈도우 OS의 유저 모드와 커널 모드를 선으로 구분하고 있다.
- 유저 모드 스레드는 개별 프로세스 주소 공간에서 실행된다.
- 시스템 프로세스와 서비스 프로세스, 유저 애플리케이션, 환경 서브 시스템은 각기 고유한 개별 프로세스 주소 공간을 가진다.
- 커널 모드에서는 윈도우와 하이퍼바이저를 선으로 구분하고 있다.
- 하이퍼바이저는 커널과 동일한 CPU 특권 수준(Ring 0)에서 실행한다.
- 하이퍼바이저는 특수한 CPU 명령어(VT-x, SVM)를 사용하므로 커널을 감시하면서 자신을 커널로부터 격리할 수 있다.
- Subsystem DLLs 박스가 서비스 프로세스와 유저 프로세스 아래에 위치한다.
- 윈도우에서 유저 애플리케이션은 네이티브 윈도우 OS 서비스를 직접 호출하지 않고 하나 이상의 서브시스템 동적 링크 라이브러리(
DLL
)를 통해 호출한다. - 서브시스템 DLL의 역할은 문서화된 함수를 적절한 내부 네이티브 시스템 서비스 호출로 변환한다.
- 윈도우에서 유저 애플리케이션은 네이티브 윈도우 OS 서비스를 직접 호출하지 않고 하나 이상의 서브시스템 동적 링크 라이브러리(
✏️ 유저 모드 프로세스의 4가지 기본 유형
- 유저 프로세스
- 윈도우 32비트/64비트, 윈도우 3.1 16비트, MS-DOS 16비트, POSIX 32비트/64비트
- POSIX는 윈도우 8부터 더 이상 지원되지 않음
- 서비스 프로세스
- 작업 스케줄러나 프린터 스풀러와 같은 윈도우 서비스를 호스팅하는 프로세스
- 일반적으로 유저 로그온과는 별개로 실행
- Microsoft SQL 서버나 Microsoft Exchange 등의 많은 윈도우 서버 애플리케이션 또한 서비스로 실행되는 컴포넌트를 가지고 있음
- 시스템 프로세스
- 로그온 프로세스, 세션 관리자와 같이 고정된 프로세스 (서비스가 아님)
- 환경 서브시스템 서버 프로세스
- OS 환경 지원의 일부분이나 사용자와 프로그래머에게 제공되는 개인 환경을 구현
- 윈도우 NT는 최초 세 가지 환경 서브 시스템(윈도우, POSIX, OS/2)과 함께 배포
✏️ 윈도우의 커널 모드 컴포넌트
- 익스큐티브
- 메모리 관리와 프로세스/스레드 관리, 보안, I/O, 네트워킹, 프로세스 간 통신과 같은 기본 OS 서비스
- 윈도우 커널
- 스레드 스케줄링, 인터럽트, 예외 디스패칭, 멀티프로세서 동기화 같은 저수준 OS 함수
- 익스큐티브의 나머지 부분이 상위 구성체를 구현하기 위해 사용하는 일련의 루틴과 같은 기본 객체 제공
- 디바이스 드라이버
- 유저 I/O 함수 호출을 특정 하드웨어 디바이스 I/O 요청으로 변환
- 하드웨어 디바이스 드라이버, 파일 시스템 및 네트워크 드라이버 같은 비하드웨어 디바이스 드라이버
- 하드웨어 추상화 계층(HAL)
- 커널, 디바이스 드라이버, 기타 윈도우 익스큐티브의 나머지 부분을 플랫폼마다 다른 하드웨어의 차이점으로부터 분리시키는 계층의 코드
- 윈도잉(windowing)과 그래픽 시스템
- 윈도우, 유저 인터페이스 컨트롤, 드로잉 같은 것을 다루는 GUI 함수(윈도우 USER/GDI)
- 하이퍼바이저 계층
- 하이퍼바이저 단일 컴포넌트로, 드라이버와 모듈이 존재하지 않음
- 자체적인 메모리 관리자, 가상 프로세서 스케줄러, 인터럽트/타이머 관리, 동기화 루틴, 파티션 관리, 파티션 간 통신 등 다수의 내부 계층과 서비스로 구성
✏️ 핵심 윈도우 시스템 파일
파일명 | 컴포넌트 |
---|---|
Ntoskrnl.exe | 익스큐티브와 커널 |
Hal.dll | 하드웨어 추상화 계층 |
win32k.sys | 윈도우 서브시스템의 커널 모드 부분(GUI) |
Hvix64.exe, Hvax64.exe | 하이퍼바이저 |
\SystemRoot\System32\Drivers 내의 .sys 파일 | DirectX, 볼륨 관리자, TCP/IP, TPM, ACPI 지원 같은 핵심 드라이버 파일 |
ntdll.dll | 내부 지원 함수와 익스큐티브 함수에 대한 시스템 서비스 디스패치 스텁 |
kernel32.dll, advapi32.dll, user32.dll, gdi32.dll | 핵심 윈도우 서브시스템 DLLs |
이식성
- 계층적 설계의 사용
- 윈도우는 프로세서 아키텍처 한정적이거나 플랫폼 한정적인 시스템 저수준 부분을 분리된 모듈로 나눈 계층적 설계를 가진다.
- OS 이식성을 제공하는 두 개의 핵심 컴포넌트는 커널(
Ntoskrnl.exe
)과 하드웨어 추상화 계층(Hal.dll
)이다.- 커널은 스레드 컨텍스트 전환과 트랩 디스패칭 같은 아키텍처 한정적 기능이 구현되어 있음
- HAL은 같은 아키텍처 내에서 시스템 간에 다를 수 있는 기능들이 구현되어 있음
- 하이퍼바이저는 AMD와 인텔 구현 간의 공유 부분들과 각 프로세서만의 특별한 부분에 있어 이와 유사한 설계를 따른다.
- C의 사용
- 윈도우의 대부분은 C로 작성되었으며 일부만 C++로 작성되어 있다.
- 어셈블리 언어는 운영체제의 일부인 시스템 하드웨어와 직접 통신해야 하거나 극도로 성능에 민감한 부분에만 사용되며, 유저 모드 라이브러리에도 일부 존재한다.
대칭형 멀티프로세싱
- 멀티태스킹(Multitasking)은 다중 실행 스레드가 단일 프로세서를 공유하기 위한 운영체제의 기법이다.
- 컴퓨터가 하나 이상의 프로세서를 가진 경우 동시에 다중 스레드를 실행할 수 있다.
- 멀티태스킹 OS는 단지 같은 시간에 여러 스레드가 실행되는 것처럼 보이지만, 멀티프로세싱 OS는 실제로 그렇게 한다.
즉, 각 프로세서별로 하나의 스레드를 실행한다.
- 대칭형 멀티프로세싱(SMP; Symmetric Multiprocessing)
- 마스터 프로세서 없이 OS는 유저 스레드와 마찬가지로 어떤 프로세서에서나 실행되게 스케줄될 수 있다.
- 모든 프로세서는 단일 메모리 공간을 공유한다.
- 병렬 멀티스레드(SMT; Simultaneous Multi-Threaded)
- 두 개의 논리 프로세서에 각각의 물리 코어를 제공하는 인텔의 하이퍼스레딩 기술 지원을 추가함으로써 윈도우 시스템에 처음 도입되었다.
- 최신 AMD 프로세서는 유사한 SMT 기술을 구현해 논리 프로세서 수를 2배로 늘린다.
- 각각의 논리 프로세서는 자신만의 CPU 상태를 갖지만, 실행 엔진과 온보드 캐시는 공유함으로써 나머지 논리 CPU가 캐시 실패/분기 예측 이후 멈춰있는 동안에도 나머지 한 논리 CPU가 진행을 하게 한다.
- NUMA(Non-Uniform Memory Access)
- NUMA 시스템에서 프로세서는 노드로 불리는 작은 단위로 그룹 지어진다.
- 각 노드는 고유한 프로세서와 메모리를 가지며, 캐시 일관성 내부 연결 버스를 통해 좀 더 큰 시스템으로 연결된다.
- 모든 프로세서는 모든 메모리에 접근할 수 있으나, 노드-로컬 메모리는 다른 노드에 연결되어 있는 메모리보다 빠르게 참조된다.
- 멀티코어 시스템
- 멀티코어 시스템은 진짜 물리적인 코어를 갖고 있기 때문에 윈도우는 이들 코어를 개별 프로세서로 다룬다.
- 이기종 간 멀티프로세싱(HMP; Homogeneous Multi-Processing)
- big.LITTLE로 불리는 이 설계는 각 프로세서 코어가 성능에 있어서 동일하지 않지만, 동일한 명령어를 실행할 수 있다.
- 차이점은 클럭 속도, 최대 전력, 유휴 전력 소비에서 발생하며, 속도가 느려진 코어를 빠른 코어와 쌍을 이루게 할 수 있다.
- 다양한 윈도우 에디션을 구분하는 라이선스 정책을 제외하면 윈도우는 특정 프로세서 개수를 염두에 두고 설계하지 않았다.
- 편의성과 효율성을 위해 윈도우는 머신의 고유 데이터 유형(32/64bit)과 동일한 수의 비트로 이루어진 비트마스크를 통해 프로세서를 추적한다. 이로 인해 윈도우 시스템은 원래 네이티브 워드만큼으로 CPU 수가 제한되었다.
- 이를 극복하기 위해 윈도우는 프로세서 그룹으로 불리는 고차 구조 방식을 사용한다.
- 프로세서 그룹은 하나의 비트마스크로 정의될 수 있는 모든 프로세서의 집합이다.
- 애플리케이션과 더불어 커널도 비트마스크 갱신 동안에 자신들이 참조하는 그룹을 선택할 수 있다.
- 지원되는 실제 프로세서의 수는 윈도우 에디션에 따라 다르며, 시스템 라이선스 정책 파일
%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Microsoft\WSLicense\tokens.dat
에Kernel-RegisteredProcessors
값으로 저장된다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.