윈도우 이식성 및 대칭형 프로세싱

By 01/11/2018Windows Internal

윈도우 이식성 및 대칭형 프로세싱

  • Windows Server 2008

 

[이식성]

윈도우는 인텔 기반 CISC 시스템과 RISC 시스템 등의 다양한 하드웨어 아키텍처에서 동작하게 설계되었다. 윈도우는 다음 두 가지 방법으로 하드웨어 아키텍처와 플랫폼 간의 이식성을 달성 한다.

  • 윈도우는 프로세서 또는 플랫폼 한정적인 시스템의 로우 레벨 부분을 분리된 모듈로 나눈 계층적 설계를 갖는다. 따라서 시스템의 상위 계층은 아키텍처와 하드웨어 플랫폼 간의 차이로부터 감춰질 수 있다. 이식성의 핵심 컴포넌트는 커널(Ntoskrnl.exe)과 하드웨어 추상화 계층(HAL.dll)이 있다. 아키텍처에 한정적인 함수는 커널에서 구현되며 같은 아키텍처 내에서 시스템 간에 다룰 수 있는 기능들은 HAL에서 구현된다.
  • 윈도우 대부분이 C로 작성되었으며 일부 c++로 작성 되었다. 어셈블리 언어 코드는 커널과 HAL뿐만 아니라 핵심 운영체제와 윈도우 서브시스템의 커널 부분, Ntdll.dll내의 프로세스 스타트업 코드 같은 유저모드 라이브러리 등 일부 다른 부분에도 존재 한다.

 

[대칭형 멀티프로세싱 (Symmetric Multiprocessing, SMP)]

멀티태스킹은 다중 실행 스레드가 단일 프로세서를 공유하기 위한 운영체제의 기법이며 하나 이상의 프로세서를 갖고 있는 경우 동시에 다중 스레드를 실행할 수 있다.

 

윈도우는 대칭형 멀티프로세싱(Symmetric Multiprocessing, SMP) 운영체제이다. 마스터 프로세서 없이 운영체제는 유저 스레드와 마찬가지로 어떤 프로세서에서나 실행되게 스케줄될 수 있다. 또한 모든 프로세스는 단일 메모리 공간을 공유한다. 이 모델은 보통 운영체제에서 한 프로세서가 유저 코드를 실행하는 동안 운영체제 커널 코드를 실행하기 위해 다른 한 프로세서를 선택하는 비대칭형 멀티프로세싱과 대조를 이룬다.

 

윈도우는 네이티브 멀티코어 시스템을 지원한다. 이들 시스템은 진짜 물리적인 코어를 갖고 있으므로 윈도우 원래 SMP 코드 같은 프로세서상에 코어가 여러 개인지 다른 소켓상에 코어가 여러 개인지를 식별하는 사용 통계나 식별 작업(라이선스 등)을 제외하고 이들을 개별 프로세서로 다룬다.

 

하이퍼스레딩은 인텔이 소개한 기술로 하나의 물리적 프로세서상에 여러 개의 논리적 프로세서를 제공한다. 각 논리 프로세서는 고유한 CPU 상태를 갖지만 실행엔진과 온보드 캐시는 공유한다. 다른 논리 CPU가 바쁜동안(인터럽트 프로세싱 작업을 처리하는 동안 논리 프로세서상의 스레드를 가로막는 것과 같은 것) 한 논리 CPU는 계속 진행해나가도록 허용 한다.

 

NUMA(non-uniform memory architecture)시스템에서 프로세스는 노드라고 하는 작은 유닛으로 그룹이 이루어 진다. 각 노드는 고유한 프로세서와 메모리를 가지며 캐시 일관성 내부 연결 버스를 통해 좀 더 큰 시스템으로 연결된다. NUMA 시스템상의 윈도우는 여전히 SMP 시스템으로 동작한다. 모든 프로세스는 모든 메모리에 접근할 수 있다. 단지 노드-로컬 메모리는 다른 노드에 붙어있는 메모리보다 빠르게 참조 된다.

 

시스템은 프로세서상의 스레드를 스케줄링하는 것으로 성능 향상을 시도 한다. 노드 내의 메모리가 할당되게 시도하지만 필요할 경우 다른 노드의 메모리를 할당 하기도 한다.

 

윈도우에서 지원되는 실제 프로세서의 수는 사용하는 윈도우 에디션에 따라 다르며 이 수는 시스템 라이선스 정책 파일에 저장된다.

Windows Server 2008R2

C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat

 

 

윈도우 비스타 이상, 서버 2008 이상 부터는 단일, 멀티 프로세서 관계없이 단일 커널이다.(단일 프로세서만을 위한 최적화가 결과적으로 큰 성능향상이 없었다고 한다.) 다만 32비트 버전의 윈도우는 PAE를 지원하기 위한 커널이 별도로 있다. 64비트 윈도우 시스템에서는 PAE 커널이 없으며(PAE 기능이 필요가 없음) 단일 커널 이미지만 있다. 윈도우를 구성하는 나머지 부분(유틸리티, 디바이스 등)은 모든 유형의 시스템에서 같은 버전을 갖는다.

 

윈도우 설치 시점에 적절한 파일이 선택되고 로컬 %SystemRoot%에 복사된다.

파일 유형 PAE 버전 이름 PAE가 아닌 버전 이름
커널 Ntkrpamp.exe Ntkrnlmp.exe
HAL 시스템 타입에 따라 다르다 시스템 타입에 따라 다르다

 

현재 실행된 Ntoskrnl의 버전은 이벤트로그를 통해서 확인 할 수 있다. EventID 6009번이다.

 

PAE 커널 부팅 여부는 레지스트리 또는 WinDbg로 커널 디버깅을 통해서 확인 할 수 있다.

Windows Server 2008R2

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PhysicalAddressExtension

 

 

[참고자료]

Windows Internals

 

2013-08-13 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

OS, Windows, 윈도우아키텍처, Windowsinternals, OS아키텍처, 윈도우서버, WindowsServer, 윈도우커널, 멀티프로세싱, SMP, sqlmvp, SQL Angeles

Leave a Reply

%d bloggers like this: