Windows ETC

Windows NT 아키텍처 - Part 2

2012.11.30 08:26

호스트웨이 조회 수:427

*** NT 아키텍쳐 구성요소 ***

 

 NT가 어떻게 그리고 왜 동작하는가를 이해하기 위해서는 OS    부분들이

어떤 역할을 하는지 알아야 하고, 어떻게 그것들이 상호 작용하는지를 알아야

한다. NT아키텍처의 가장 중요한 4가지는 다음과 같다.

 

   하드웨어 추상화 계층(HAL)

   커넬

   NT 실행부 서비스(Executive Services)

   환경 서브시스템들(Environment Subsystems)

 

***HAL (하드웨어 추상화계층)

 

 HAL은 하드웨어와 OS를 연결해주는 인터페이스 소프트웨어이다.  이것은 DLL

처럼 사용되고, 인터럽트 사용, I/O 인터페이스 사용 등으로부터 NT를 감싸준

. 이러한 추상화는 NT를 포터블하게 만들어주는데 그 이유는 하드웨어와 직

접 통신하는 부분만 아니면  O/S자체는 실제로 수행되고 있는 플랫폼이  어떤

것인지에 상관하지 않기 때문이다.  NT가 돌아가는 하드웨어 플랫폼들은 거기

에 맞는 HAL을 필요로 한다.  이러한 구조의 설계 목적은 NT가 새로운 프로세

서 환경으로 이동될 때, HAL은 다시 만들어져야 하지만,  나머지 부분은 간단

하게 재 컴파일하기만 하면 이동할 수 있기 때문이다.

 HAL은 또한 시메트릭 멀티프로세싱에 대한 인터페이스도 제공한다. NT서버는

각각의 프로세서 구조 (알파, 밉스, 인텔 등)를 위한 두 개의 HAL사이를 왔다

갔다 한다. 첫 번째 HAL은 싱글프로세서를 지원하기 위해 쓰인다.  반면에 두

번째 HAL 1~4개의 프로세서들을 지원한다. 추가적인 HAL은 하드웨어 벤더들

로부터 제공되어 지며, 32개까지의 SMP를 지원한다.

 컴퓨터 안에 상주하는 각각의 물리적인 프로세서를 위해, HAL은 가상 프로세

서를 마이크로 커넬에 제공한다.  그 목적은 이 가상화 프로세서가 모든 프로

세서 자체의 특성들을 O/S로부터 숨겨주는 데에 있다. 예를 들면,  어떤 사용

자가 두 대의 SMP 시스템을 가지고 있는데, 하나는 펜티엄시스템이고,  또 하

나는 알파칩이라고 하자.  물론 각각의 시스템의 HAL은 서로 다르다.  하지만

마이크로커넬의 입장에서  보면  HAL이 제공하는 가상  프로세서에 의해 서로

동일한 프로세서를 취급하는 것처럼 생각되는 것이다.

 HAL의 목적이 하드웨어 의존적인 특성을 버리고  NT를 더 포터블하게 만드는

것임에도 불구하고, 실제로는, 그것은 항상 그렇게 간단하지만은 않다.  대신

하드웨어 의존적인 특성을 감소시킴에 따라,  NT개발자들은 새로운  플랫폼에

OS를 이식하기가 수월해졌을 뿐이다.

 HAL NT 수행부의 요소들에게만 액세스된다.  그리고 유저모드  프로그램과

직접 통신할 수가 없다.  또한,  HAL만이  하드웨어와 직접 통신할 수 있도록

규정되어졌다.  이것은  잘못된 프로그램이 하드웨어를 직접  액세스함으로서

생기는 시스템 크래시를 미연에 방지할 수 있다. 또한 이 구조 자체가 NT자체

의 보안 모델에 부합하는 형태이다.

 윈도우 NT의 설계 목적이 모든 하드웨어 관계 콜들을 HAL을 통해 이루어지게

하겠다는 것임에도 불구하고,  사실은 소수의 디바이스 드라이버와  하드웨어

콜은 HAL을 지나쳐버리고 직접 하드웨어와 정보를 주고받는다.  HAL모델의 단

점은 하드웨어와 직접 통신을 하는 기존 도스와 윈도우즈 프로그램들이  제대

로 동작하지 않는다는 것이지만, 이는 HAL이 제공하는 시스템 안정성과  신뢰

성에 비하면 큰 문제는 아니다.

 

***커넬

 

 윈도우 NT의 커넬은 대통령과 비슷하다. 커널은 궁극적으로 모든 시스템상의

동작에 대해 신뢰성이 있고, 거의 모든 시스템 함수들이 커넬을 통해  이루어

진다. 윈도우 NT는 마이크로 커넬을 사용하는데,  그것은 본질적으로 커넬 자

체가 함수들에 대해 아주 기본적인 요소만 갖도록 몸집을 줄였다는 의미이다.

 NT에서 이 마이크로커넬 디자인은 기존의 전통적인 O/S모델에서는 커넬 속으

로 들어가던 많은 수의 함수들을 NT 실행부라고 불리는 곳에 할당한다.  NT

행부(마이크로커넬도 사실은 NT실행부의 일부임)는 프로세서의 특권화된 커넬

모드에서 동작한다. NT 마이크로커넬은 NT실행부와  저수준  OS부분을 통해서

통신한다.

 윈도우 NT 커넬의 주요한 역할은 쓰레드의 스케쥴링과 디스패칭이다. 쓰레드

는 특정 프로세스에 연관된  코드 세그먼트를 말한다.  각각의 쓰레드는 우선

순위를 0~31사이의 숫자로 할당받고 있다.  커넬은 그 우선 순위 숫자에 의거

해 사용 가능한 프로세서에 쓰레드를 디스패치한다. 커널은 그리고 나서 일정

시간동안 그 쓰레드가 실행되는 것을 허가한다. 즉 커넬이 선점형으로 프로세

서 타임을 틀어쥐고 있는 것이다. 이러한 프로시저가 바로 선점형 멀티태스킹

을 가능하게 하는 일이다. 커넬은 모든 시스템의 코드의 실행을 스케줄링하기

때문에 그것 자체는 선점될 수 없다. 또한 당연히 어떤 이유로도 페이징 되지

않는다.

 멀티프로세서 시스템에서는, 각각의 프로세서마다 커널의 복사본이 동작한다.

이러한 커널 조각들은 공유된(모든  프로세서에서 돌아가는 쓰레드에 의해 액

세스될 필요성이 있는)시스템 자원들의 일관성을 유지하기 위해 쓰인다. 커넬

은 또한 물리적인 장치(I/O장치,  타이머,  시계 등)로부터  발생하는 시스템

인터럽트들을 처리해야 한다. 보통, 시스템 인터럽트일 때에는 커넬은 이것을

처리하는 쓰레드를 선점한다.

 부가적으로, 커넬은 프로세서 예외 처리를 한다. 이러한 예외들은  프로세서

가 허용되지 않는 작업을 했을 때, 즉 잠기어진 메모리 구역에 라이팅을 했다

든지, 디비전 바이 제로 현상이 나타났을 때에 일어난다.

 NT커넬의 마지막 역할은 전원 공급 중단에 대한 복원  기능을 제공하는 것이

. 만약 NT시스템에 UPS(Uninterruptable power Supply)가 장착되어 있다면,

커넬은 전원 공급에 차질이 생겼음을 알 수 있다.  커넬은 그 때 시스템의 셧

다운을 지시하는 한편, I/O디바이스들에게 전원 공급 중단을 알리고 장비들이

초기화하는 것을 허가한다.