본문 바로가기

System/Basic

윈도우의 이해

윈도우의 구조

 

윈도우의 구조를 알기 위해서는 커널(Kernal)의 개념을 알아야 한다. 커널은 운영체제의 중심에 위치하며, 운영체제의 모든 작업의 시작을 커널이 제어한다. 즉, 커널은 인터럽트 처리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 프로그래밍 인터페이스 제공 등 운영체제 기본 기능을 제공하는 역할을 한다.

 

 

인터럽트(Interrupt)

인터럽트란 작동 중인 컴퓨터에 문제가 발생한 경우 CPU가 하드웨어적으로 상태를 확인하여 변화에 대응하는 기술이다. 인터럽트가 발생하면 운영체제의 제어 프로그램에 있는 인터럽트 처리 루틴이 작동하며, 인터럽트를 해결한 후에 인터럽트가 생기기 전의 상태로 복귀시킨다. 인터럽트의 종류로는 4가지가 있다.

 

■ 기계 검사 인터럽트 : 기계적인 문제가 발생할 경우

■ 외부 인터럽트 : 오퍼레이터 또는 타이머가 프로그램을 의도적으로 중단할 경우

■ 입출력 인터럽트 : 입출력 종료 또는 입출력 오류로 CPU 기능이 요청될 경우

■ 프로그램 검사 인터럽트 : 프로그램 실행 중 보호

 

 

윈도우의 커널 구조

윈도우와 유닉스의 커널의 기본 개념은 같더라도 형태는 다르다. 두 커널의 공통점으로는 동작할 때 커널의 손상을 피하기 위해 접근이 불가능한 메모리에 로드하는 것이다. 윈도우 시스템은 일반적으로 아래의 그림과 같은 링 구조로 되어있다.

 

[그림 1] 윈도우 링 구조

 

링 구조의 계층은 각 보안 요소를 충족하고 개별적으로 운영할 때 시스템 보안 수준이 높은 상태로 유지될 것이라는 생각에 고안되었다고 한다. 윈도우에서는 HAL(Hardware Abstraction Layer)에서 각종 관리자까지를 커널 모드로 구분하고, 응용 프로그램 부분을 사용자 모드로 구분한다.

 

커널 모드는 시본적으로 사용자가 접근할 수 없는 영역으로 프로그램을 실행하는 기본 관리 시스템이 위치한다. 윈도우는 사용자가 프로그램을 만들고 실행하는 모든 과정을 사용자 모드에서만 가능하도록 설계했지만, 완벽하게 구현하지 못했다. 윈도우에서는 마이크로 커널이 HAL을 무시하고 하드웨어와 통신이 가능한데, 이것이 보안에서의 허점이 될 수 있다.

 

[그림 2] 윈도우 시스템 구조

위의 그림은 각 요소를 사용자 모드와 커널 모드로 자세히 표현한 것이다. 그림에서 보면 하드웨어 바로 위에 HAL이 있다. 윈도우에서는 유닉스와 달리 새로 개발된 하드웨어를 시스템에 장착해도 드라이버 개발자가 새 하드웨어의 자세한 내용을 알 필요가 없다. HAL이 윈도우의 기본 표준이 되어 드라이버 개발자와 하드웨어 개발자가 이 표준만 따르면 되기 때문이다. 즉, HAL은 하드웨어와 소프트웨어 간 원활한 통신을 도와주는 역할을 한다.

 

그리고 바로 위에는 마이크로 커널이 있다. 본래 커널은 프로세스의 스케줄링, 메모리 관리, 데이터 입출력, 하드웨어 제어 등과 같은 작업들을 모두 제어했다. 하지만, 윈도우는 이러한 작업들을 여러 관리자에게 맡기고 커널 자신은 하드웨어와 통신만을 제어하는 최소한의 커널이 되었는데, 이를 마이크로 커널이라 한다. 윈도우에서는 system32 폴더의 ntoskrnl.exe 파일이 마이크로 커널이다.

 

그 위에는 여러가지 윈도우 관리자가 존재한다.

 

입출력 관리자(I/O Manager) : 시스템의 입출력을 제어한다. 즉, 장치 드라이버 사이에서 메시지를 전달한다. 그리고 응용 프로그램이 하드웨어와 바로 통신할 수 있는 통로를 제공한다.

개체 관리자(Object Manager) : 윈도우는 파일, 포트, 프로세스, 스레드 등 모든 것을 개체로 정의하는데, 개체 관리자는 이런 각 개체 정보를 제공한다.

보안 참조 관리자(Security Reference Monitor) : 각 데이터나 시스템 자원의 제어를 허가 또는 거부함으로써 시스템의 강제 보안 설정을 해준다.

프로세스 관리자(Process Manager)

스레드를 생성하고 요청에 따라 처리한다.

로컬 프로시저 호출(Local Procedure Call) 관리자

각 프로세스는 서로의 메모리 공간을 침범하지 못하므로 프로세스 간 통신이 필요할 때 이를 대신할 수 있는 장치 역할을 한다.

가상 메모리 관리자(Virtual Memory Manager)

응용 프로그램의 요청에 따라 RAM 메모리를 할당하고, 가상 메모리의 페이징을 제어한다.

그래픽 장치 관리자(Graphics Device Interface)

화면에 선 또는 곡선을 그리거나 폰트 등을 관리한다.

기타 관리자

캐시 관리자(Cache Manager), PNP(Plug and Play) 관리자, 전원 관리자 등이 있다.

 

사용자 모드에는 다양한 응용 프로그램이 존재하며, 응용 프로그램을 실행하는 서브시스템이 존재한다. 서브시스템은 윈도우에서 여러 응용 프로그램을 실행하는 컨테이너라 생각하면 된다. 윈도우는 여러 응용 프로그램 실행을 위한 몇 가지 서브시스템이 동작하는데, 그 중 하나는 Win32이다. Win32는 기본 서브시스템으로 32비트 응용 프로그램이 동작할 수 있게 도와주고, 기본 윈도우 사용자 인터페이스를 제공한다. 윈도우 7 또는 2008부터는 64비트 서브시스템을 지원한다. 그 외에 보안 서브시스템과 유닉스 운영체제에 기반을 둔 일련의 표준 운영체제 인터페이스로 POSIX가 있다. 보안 서브시스템은 사용자가 로그인할 때 데이터를 보호하고, 운영체제가 이를 제어하도록 도와준다. 윈도우 10부터 도입된 서브시스템으로 윈도우 리눅스 서브시스템(WSL, Windows Subsystem for Linux)가 있다. 이는 윈도우에서 리눅스 운영체제를 설치해서 사용할 수 있게 해주고, 리눅스 프로그램도 그 안에서 실행할 수 있게 해준다.

 

 

윈도우의 파일 시스템

파일 시스템은 단산한 데이터 저장에서 벗어나 다양한 설정 및 보안 사항과 관련이 있다. 윈도우의 파일 시스템에는 FAT, FAT32, NTFS와 같은 파일 시스템이 존재한다. 각각 다른 특징들을 가지고 있지만, 이 글에선 종류만을 다루겠다.

 

 


윈도우의 부팅 순서

 

윈도우는 버전에 따라 부팅 순서에 조금씩 차이가 있다. 그렇기 때문에 윈도우 서버 2003 이전의 버전과 윈도우 비스타 이후 버전으로 나누어 알아보겠다.

 

 

윈도우 XP, 윈도우 서버 2000/2003

Step 1. POST(Power On Self Test) 실행

POST는 운영체제와 직접적으로 관련된 부분은 아니다. 하지만, 어떠한 운영체제를 설치하더라도 POST 과정을 무조건 거치게 되는데, 이는 하드웨어 스스로 시스템에 문제가 존재하는지 기본적인 사항을 검사하는 과정이다. BIOS(Basic Input/Output System)에서 POST를 실행하고, 하드웨어에서 문제가 발생하면 문제 발생 사실을 여러가지 방법으로 사용자에게 알려준다.

■ Step 2. 기본 부팅 관련 설정 사항 로드

CMOS(Complementary Metal-Oxide Semiconductor)에서 기본 부팅 매체 등 부팅 관련 사항을 설정한 내용을 BIOS가 읽어와 시스템에 적용한다.

■ Step 3. MBR(Master Boot Record) 로드

MBR은 저장 매체의 첫 번째 섹터에 위치하는 512바이트 영역으로 부팅 매체의 기본 파일 시스템 정보가 들어 있다. 운영체제를 부팅할 때 저장 매체의 첫 번째 섹터를 호출하면 해당 부트 코드를 수행한다. 부트 코드의 주 역할을 파티션 테이블에서 부팅 가능한 파티션을 찾아 해당 파티션의 부트 섹터를 호출하는 것이다. 만약, 부팅 가능한 파티션이 존재하지 않으면 미리 정의된 오류 메시지를 출력한다.

■ Step 4. NTLDR(NT LoaDeR) 실행

NTLDR은 하드 디스크의 부팅 파티션에 있는 프로그램으로 윈도우를 부팅할 수 있게 파일 시스템을 실행하고, boot.ini 파일 내용을 읽어 가능한 부팅 옵션을 보여 준다.

[boot loader]
timeout = 30
default=multi(0)disk(0)rdisk(0)partition(3)\WINNT

[operating systems]
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows 2000 Pro"
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows NT Server Version 4.00"

 

위의 내용은 boot.ini 파일의 예이다. [boot loader] 영역의 'timeout = 30'은 운영체제 선택하는 화면의 대기 시간을 의미한다. 설정되어 있는 30초를 지나게 되면 [boot loader] 영역의 두 번째 라인인 'default'로 부팅한다. 이 라인에서 multi(0)은 SATA 또는 E-IDE 컨트롤러를 가지는 디스크임을 나타내고, SCSI 컨트롤러에 부착된 디스크에서 부팅할 경우에는 scsi(0)을 사용한다. 숫자 0은 첫 번재 컨트롤러임을 나타낸다. 두 번째 요소인 disk(0)은 scsi로 시작할 때를 표현하고, 세 번째 요소인 rdisk(0)은 IDE, E-IDE, SCSI with BIOS 방식의 디스크에 해당하는 표현이다. 마지막 요소인 partition(3)은 파티션 순서를 의미하며, 순서는 1부터 시작하므로 이 라인에서는 디스크의 세 번재 파티션에 운영체제가 존재함을 의미한다. [operating systems] 영역은 선택 가능한 운영체제를 이런 규칙에 따라 나열한 것이다.

■ Step 5. NTDETECT.com 실행

NTDETECT는 NTLDR에서 제어권을 위임받아 시스템에 설치한 다음 하드웨어를 검사한다. 검사 항목은 아래와 같다.

▶ PC의 CPU 유형

 버스 유형

 비디오 보드 유형

 키보드와 마우스 종류

 컴퓨터에 장착된 직렬 포트와 병렬 포트플로피 드라이브

NTDECT가 문제없이 작동하면 레지스트리에 하드웨어 키가 만들어지는데, 이 키는 'HKEY_LOCAL_MACHINE'에 존재한다. 컴퓨터를 재부팅할 때마다 레지스트리에 해당 부분이 만들어지며, 항상 현재의 하드웨어 구성이 반영된다.

■ Step 6. ntoskrnl.exe 실행

ntoskrnl.exe HAL.DLL을 로드한다. ntoskrnl.exe의 기능은 다음 네가지로 나눌 수 있다.

 커널 로드

시스템 설정을 로드하고, 이를 'HKEY_LOCAL_MACHINE\System\CurrentControlset\Services'에 저장한다. 그리고 이 정보를 확인하여 로드할 드라이브와 그 순서를 결정한다.

 커널 초기화

드라이버에서 현재 제어 설정을 검사하고 작업을 시작한다.

 서비스 로드

세션 관리자 서브 시스템(smss.exe)와 Win32 서브 시스템을 로드한다.

 서브 시스템 시작

윈도우 서브시스템을 초기화한다. Win32 서브 시스템은 로그인을 처리하고 'Winlogon.exe'를 시작한다. 'Ctrl + Alt + Del'을 누르면 로그인 창을 활성화하고, 계정과 패스워드를 입력받아 로컬 보안 인증 서버(Local Security Authentication Server, lsass.exe)에 보낸다. 계정과 패스워드를 전달받은 로컬 보안 인증 서버는 보안 계정 관리자(Security Accounts Manager)에 저장된 정보와 비교하여 서로 일치할 경우 'Userinit.exe''HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'의 셀 값에서 참조되는 셀을 실행한다.

 

 

윈도우  비스타 이후 버전 부팅 순서

■ Step 1~3. POST 실행 및 기본 부팅 관련 설정 사항 로드, MBR 로드

POST, CMOS에서 기본 부팅 관련 설정 사항, MBR 로드는 이전 버전과 동일하다.

Step 4. 윈도우 부트 서브 시스템(Window Boot Manager) 실행

MBR에서는 NTLDR을 실행하지 않고 윈도우 부트 서브 시스템을 실행한다. 윈도우 부트 서브 시스템은 'bootmgr.exe'를 실행하고 부트 설정 데이트(Boot Configuration Data, BCD)를 읽어 실행 가능한 운영체제의 목록을 보여 준다. 이는 NTLDR이 'boot.ini'을 읽어 실행 가능한 운영체제의 목록을 보여 주는 것과 동일하다. BCD는 'boot.ini'처럼 텍스트 파일로 구성된 것이 아니며, 'bcdedit.exe'를 이용하여 편집이 가능하다.

■ Step 5. 윈도우 OS 로더(Winload.exe) 실행

윈도우 OS 로더인 'Winload.exe'는 NTDETECT처럼 각종 장치 드라이버를 로드하고 'ntoskrnl.exe'를 실행한다. 

'System > Basic' 카테고리의 다른 글

운영체제의 개념과 기능  (0) 2019.10.21