운영체제 모델 및 아키텍처 개요
- Windows Server 2008
대부분 멀티유저 운영체제에서 애플리케이션은 운영체제 자체로부터 분리돼 있다. 운영체제 커널 코드는 특권이 있는 프로세스 모드(커널 모드)에서 시스템 데이터와 하드웨어에 접근하며 실행 된다. 애플리케이션 코드는 특권이 없는 프로세서 모드(유저모드)에서 실행된다.
유저모드 프로그램이 시스템 서비스를 호출 할 때 프로세서는 호출을 트랩하고 호출 스레드를 커널 모드로 전환한다. 시스템 서비스가 완료 되면 운영체제는 스레드 컨텍스트를 다시 유저모드로 변경하고 호출자가 계속 실행되도록 한다.
윈도우 운영체제의 대부분과 디바이스 드라이버 코드가 동일한 커널모드 보호 메모리 공간을 공유 한다는 점에서 대부분의 유닉스 시스템과 유사하다. 이는 어떤 운영체제 컴포넌트나 디바이스 드라이버가 잠재적으로 운영체제의 다른 컴포넌트에 의해 사용되는 데이터를 손상 시킬 수 있다는 의미이다.
윈도우의 커널모드 컴포넌트는 기본 객체지향 디자인 원칙을 구현한다.(하지만 공유된 시스템 리소스를 표현하기 위해 객체를 광범위 하게 사용함에도 불구하고 엄격한 의미에서는 객체지향 시스템은 아니다.) 예를 들면 이들 컴포넌트는 일반적으로 개별 컴포넌트에 의해 유지되는 정보에 접근하기 위해 다른 컴포넌트의 데이터 구조체에 접근하지 않는다. 대신 공식 인터페이스를 통해 인자를 전달하고 데이터 구조체에 접근하거나 수정한다.
다음 그림은 윈도우 시스템의 기본 아키텍처 다이어그램이다. (네트워킹, 디바이스 드라이버 등에 대한 계층은 나타나 있지 않다.)
윈도우 운영체제의 유저모드와 커널모드를 선으로 구분하고 있으며 구분선 위의 부분은 유저모드를 나타내며 아래의 컴포넌트는 커널모드를 나타낸다. 유저모드 스레드는 보호된 프로세스 주소공간에서 실행된다.(커널모드에서 실행되는 동안에는 시스템 공간에 접근할 수 있다.) 따라서 각 시스템은 고유의 개별 프로세스 주소 공간을 갖는다.
[유저모드 프로세스의 4가지 기본 유형]
- 고정된(내장된) 시스템 지원 프로세스 : 로그온 프로세스와 세션 관리자 같은 것으로 윈도우 서비스가 아니다. 서비스 컨트롤 관리자에 의해 시작되지 않는다.
- 서비스 프로세스 : 작업 스케줄러와 프린트 스풀러와 같은 윈도우 서비스를 호스팅한다. 서비스는 일반적으로 유저 로그온과는 별개로 실행된다.
- 유저 애플리케이션 : 23bit / 64bit 윈도우, 32bit POSIX 유형 중 하나가 될 수 있다.
- 환경 서브시스템 서버 프로세스 : 운영체제 환경 지원의 일부분 또는 사용자와 프로그래머에게 제공되는 개인 환경을 구현한다.
그림을 보면 "서브시스템DLL"이 "서비스 프로세스"와 "유저 애플리케이션" 아래에 위치한다. 윈도우에서 유저 애플리케이션은 네이티브 윈도우 운영체제 서비스를 직접 호출 하지 않는다. 하나 이상의 서브시스템 DLL를 통해 실행 된다.
서브시스템 DLL의 역할은 문서화된 함수를 내부 네이티브 시스템 서비스 호출로 변환한다. 이 변환은 유저 애플리케이션을 위해 동작하는 환경 서브시스템 프로세스에 메시지를 전달하거나 하지 않을 수 있다.
[윈도우 커널 컴포넌트 구성]
- 윈도우 익스큐티브는 메모리 관리, 프로세스와 스레드 관리, 시큐리티, I/O, 네트워킹, 프로세스간 통신 같은 기본 운영체제 서비스를 갖고 있다.
- 윈도우 커널은 스레드 스케줄링과 인터럽트와 예외 디스패칭, 멀티프로세서 동기화 같은 저수준 운영체제 함수로 구성 된다. 또한 익스큐티브의 나머지 부분이 상위 구성체를 구현하기 위해 사용하는 일련의 루틴과 기본 객체를 제공한다.
- 디바이스 드라이버에는 파일 시스템과 마찬가지로 유저 I/O 함수 호출을 특정한 하드웨어 디바이스 I/O 요청으로 변환하는 하드웨어 디바이스 드라이버와 네트워크 드라이버가 모두 들어 있다.
- 하드웨어 추상화 계층(HAL : Hardware Abstraction Layer)은 커널과 디바이스 드라이버, 윈도우 익스큐티브의 나머지 부분을 플랫폼마다 다른 하드웨어의 차이로부터 분리시켜 준다.
- 윈도잉과 그래픽 시스템은 윈도우와 유저 인터페이스 컨트롤, 드로잉 같은 것을 다루는 그래픽 유저 인터페이스 함수를 구현한다.
[윈도우 컴포넌트 목록]
파일명 | 컴포넌트 |
Ntoskrnl.exe | 익스큐티브와 커널 |
Ntkrnlpa.exe(32bit only) | 물리 메모리를 64GB까지 어드레싱 할 수 있는 물리적 주소 확장(PAE)을 지원하는 익스큐티브와 커널 |
Hal.dll | 하드웨어 추상화 계층 |
Win32k.sys | 윈도우 서브시스템의 커널모드 부분 |
Ntdll.dll | 내부 지원 함수와 익스큐티브 함수에 대한 시스템 서비스 디스패치 스텁 |
Kernel32.dll | 핵심 윈도우 서브시스템 DLL |
Advapi32.dll | |
User32.dll | |
Gdi32.dll |
[참고자료]
Windows Internals
2013-08-12 / 강성욱 / http://sqlmvp.kr / http://datawaffle.com
'Windows , IIS' 카테고리의 다른 글
Ntdll.dll, 익스큐티브 (0) | 2015.07.16 |
---|---|
POSIX 서브시스템 (0) | 2015.07.16 |
환경 서브 시스템 및 서브시스템 DLL (0) | 2015.07.16 |
윈도우 확장성 및 버전 정보, 체크드빌드 (0) | 2015.07.16 |
윈도우 이식성 및 대칭형 프로세싱 (0) | 2015.07.16 |