포스트

[시스템 아키텍처] 윈도우 OS 아키텍처 개요

[시스템 아키텍처] 윈도우 OS 아키텍처 개요

아키텍처 개요

  • 아키텍처의 단순화된 버전을 살펴보자.
  • 윈도우 OS의 유저 모드커널 모드를 선으로 구분하고 있다.
    • 유저 모드 스레드는 개별 프로세스 주소 공간에서 실행된다.
    • 시스템 프로세스와 서비스 프로세스, 유저 애플리케이션, 환경 서브 시스템은 각기 고유한 개별 프로세스 주소 공간을 가진다.
  • 커널 모드에서는 윈도우하이퍼바이저를 선으로 구분하고 있다.
    • 하이퍼바이저는 커널과 동일한 CPU 특권 수준(Ring 0)에서 실행한다.
    • 하이퍼바이저는 특수한 CPU 명령어(VT-x, SVM)를 사용하므로 커널을 감시하면서 자신을 커널로부터 격리할 수 있다.
  • Subsystem DLLs 박스가 서비스 프로세스와 유저 프로세스 아래에 위치한다.
    • 윈도우에서 유저 애플리케이션은 네이티브 윈도우 OS 서비스를 직접 호출하지 않고 하나 이상의 서브시스템 동적 링크 라이브러리(DLL)를 통해 호출한다.
    • 서브시스템 DLL의 역할은 문서화된 함수를 적절한 내부 네이티브 시스템 서비스 호출로 변환한다.

✏️ 유저 모드 프로세스의 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.datKernel-RegisteredProcessors 값으로 저장된다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.