본문 바로가기
사이버보안/OS(윈도우즈)

[윈도우 구조 #3] 윈도우 전체 구조 이해

by 홍주은 2022. 6. 5.
반응형

도우 전체 구조는 다음과 같다. 어떻게 보면 윈도우 구조는 이 그림을 설명하는 것이다. 그림은 윈도우 2000으로 구조 면에서 크게 변한 것은 없다. 윈도우는 크게 커널 모드와 유저 모드로 나누어진다. 유저 모드에서도 System Process와 Service가 있어 전체 시스템이 안정적으로 동작하도록 한다.

 


커널 모드에서 하는 일은 대략적으로 프로세스 관리, 메모리 관리, 디바이스 관리이다. 윈도우에서는 (1) 하드웨어를 직접 제어하는 HAL(Hardware Abstraction Layer) 계층, (2) 실제 운영체제 일을 수행하는 커널 계층, (3) 유저 모드와 서로 일을 주고 받는 System Serivce Dispatcher 계층이 있다.


HAL은 실제 물리 디바이스와 통신을 하기 때문에 어셈블리 코드로 작성된 부분과 위의 커널 계층과 통신을 하기 위해 C로 작성된 부분이 있다. 이름이 말해주는 것처럼 하드웨어를 추상화하기 때문에 커널 계층에서는 하부의 하드웨어에 상관없이 운영체제의 일을 할 수 있다.


커널 계층은 커널 모드에서 운영체제로서 중요한 일을 수행한다. 기능별로 나누어져 있으며, 일은 System thread에서 수행한다. 즉 이들은 기능적 단위이지, 이들이 어떻게 동작을 하는지 알기 위해선 System thread를 분석해야 한다. 커널은 ntoskrnl.exe에 구현되어 있다.

 

  • I/O Manager : 디바이의 입출력 기능 제공
  • File System Cache : 파일 입출력의 속도를 높이기 위한 메모리 내의 캐시 관리 기능 제공
  • Object Manager : 윈도우의 자원은 object로 표현되며, object 관리 기능 제공
  • Plug and Play Manager : 디바이스 탈부착인 PnP 관리 기능 제공
  • Security Reference Monitor : 윈도우의 보안 기능 제공
  • Virtual Memory Manager : 윈도우의 가상 메모리 관리 기능 제공
  • Process Mananger : 윈도우의 프로세스 관리 기능 제공
  • Configuration Manager : 레지스트리와 같은 설정 기능 제공
  • Local Procedure Call : LPC 통신 기능 제공

System Service Dispatcher는 리눅스로 치면 시스템콜이다. 함수는 NtXxxxXxxx로 구현되어 있다. ntdll.dll과 ntoskrnl.exe에 동일한 이름의 함수가 구현되어 있는데, ntdll.dll에서 단지 호출만 하고, 커널에서 실제 일을 수행한다.

Windows USER, GDI는 커널과 독립된 일을 수행한다. 그래픽 관련 일을 수행하는데 커널과 독립된 파일로 구현되어 있는건 속도 처리 때문이다. 그래픽은 다른 디바이스와 다르게 사용자에게 바로 화면이라는 결과값을 보여 주어야 한다. 그래서 System Service Dispatcher의 함수를 이용하지 않고, win32k.sys에 구현된 별도의 함수를 이용하여 그래픽을 제어한다.


유저 모드는 실제 프로세스가 돌아간다. 커널은 스레드라 하였고, 유저 모드는 프로세스라 하였다. 차차 설명을 하겠다. 암튼 유저 모드 부터는 exe의 실행파일이 각각의 가상 메모리 영역을 할당 받아 프로세스로 일을 수행한다.

System Process는 사용자가 윈도우를 사용하기 위해 필요한 시스템적 기능을 제공한다. Session Manager, Winlogon, LSASS, Service Control Manager 등 기능별로 나누어져 일을 수행한다.

Service는 리눅스로 치면 데몬이다. UI가 없고 백엔드로 돌아가는 프로세스라 할 수 있다. 보통 서비스는 서버 처럼 윈도우가 부팅이 되었을 때 상시 일을 수행한다. 프로그램을 많이 설치하면 서비스가 과도하게 설치되어 돌아가는 경우가 많은데, 시스템 속도 저하 요소 중 하나이다.

Environment Subsystem은 윈도우에서 제공하는 타 운영체제 환경이다. 쉽게 말하면 다른 운영체제에서 돌아가는 실행파일을 윈도우에서 동작시키기 위한 환경이라 보면 된다. 윈도우 NT를 개발했을 당시에는 OS/2와 POSIX를 지원하였다. OS/2는 윈도우 NT가 나오기 전 MS가 IBM과 공동 개발하여 사용할 운영체제 였지만, 윈도우 NT가 나온 후 IBM만 개발하게 되었다. POSIX는 당연히 유닉스를 위해 지원해야 할 환경이었다. 하지만 OS/2와 POSIX는 이 후 지원을 하지 않는다. 최근들어 리눅스를 지원하기 위해 WSL(Windows Subsystem for Linux)가 윈도우에 들어가 있다.


대략적으로 윈도우의 전체 구조에 대해 이야기를 하였다. 단어 하나하나가 윈도우에서 중요한 개념이고 말할 내용들이 많다. 그래서 이런저런 이야기를 하다보면 산으로 갈 수 있는데, 가능한 Windows Internals의 차례를 기준으로 윈도우의 구조에 대해 이야기 해 나가도록 하겠다.


반응형