Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
  Windows Internals 다시 보기 01 
작성일시 : 2010. 2. 17. 18:27 | 분류 : Windows Server/Kernel

* 아직은 많이 부족하기 때문에 제가 자신이 생길 때 까지 본 글은 제 블로그에 대한 링크만 허용합니다.

근래 몇 일 동안 Windows Internals 5th Edition 을 확보하는 바람에 아주 지루한 시간들을 보냈습니다. 여전히 끝까지 읽는 건 GG 쳐야 되나 봅니다. 하지만 적어도 전보다는 많은 내용이 보이더군요. 역시 아는 만큼 보이나 봅니다.

오늘부터 몇 주 ~ 몇 달에 거쳐서 제가 읽고 이해한 내용을 쓰려고 합니다.
같이 따라  할 수도 있겠죠.

순서는 프로세스로 갔다가 메모리에 대한 설명을 좀 하고 다시 객체로 갔다가 쓰래드 를 거친 후에 인터럽트나 콜게이트 같은 내용 역시 거친 후 마지막으로 커널 메모리 레이아웃 정도로 끝내볼려고 합니다.

참고서적 : Windows Internals / Windows 구조와 원리

제 1장 준비하기

사전 준비 사항

(본 글은 인텔 x86 프로세서 기반의 Windows 20003과 XP 기반으로 기술 되었습니다.)

준비물 : Virtual PC 및 XP 가상 머신, Windbg
가상 Windows XP 머신에 대한 설정
image

커널 디버거 설정
image

그리고 디버깅될 대상 PC의 C:\boot.ini 에 아래와 같이 디버깅을 위한 내용을 추가합니다.
Boot.ini 정보 추가
/debug /debugport=COM1 /baudrate=57600
image 

디버거를 시작하면 아래의 명령어를 차례로 입력합니다.
.symfix > .reload >.reload /user

OS는 사용자 프로그램과 하드웨어를 이어줍니다.

OS는 지금 여러분이 이 글을 보고 있는 지금도 많은 일들을 처리하고 있습니다.
우리가 오피스 프로그램을 열어 문서를 작성하고 저장한다면, OS는 오피스 프로그램의 구동 부터 시작해서 하드웨어인 HDD에 파일을 열고 저장하는 등의 많은 일들을 처리하고 있습니다.

그렇다면 OS는 이런 요청들에 대한 처리를 어떻게 하고 있을까요?

프로그램과 프로세스와 쓰래드

먼저 우리가 실행 하는 프로그램을 들여다 보도록 하겠습니다.

일반적으로 프로그램은 하나 이상의 실행 이미지(.EXE)로 이루어져 있습니다.
아래 그림에서 보는 것처럼 우리가 실행하는 프로그램은 1개 이상의 exe 파일로 이루어져 있습니다.

image

그리고 이 실행 이미지인 exe 파일은 OS 상에서 실행 될때 프로세스가 됩니다. 간단하게 노트패드를 실행 시킨 다음 실행 이미지를 보도록 하겠습니다.

kd> !process        
PROCESS 81e5db78 SessionId: 0 Cid: 094c Peb: 7ffda000 ParentCid: 00d8
         DirBase: 05642000 ObjectTable: e1669348 HandleCount: 109.
         Image: notepad.exe
         VadRoot 81afd5f0 Vads 101 Clone 0 Private 285. Modified 191. Locked 0.
         DeviceMap e16598f0
         Token e19a7d10
         ElapsedTime 00:01:32.386
         UserTime 00:00:00.000
         KernelTime 00:00:00.000
         QuotaPoolUsage[PagedPool] 37608
         QuotaPoolUsage[NonPagedPool] 4136
         Working Set Sizes (now,min,max) (1554, 50, 345) (6216KB, 200KB, 1380KB)
         PeakWorkingSetSize 1740
         VirtualSize 37 Mb
         PeakVirtualSize 48 Mb
         PageFaultCount 2852
         MemoryPriority BACKGROUND
         BasePriority 8
         CommitCharge 715

자 위 내용을 보면 우리는 대충 이 Process 에 어떤 정보가 들어있는지 확인 할 수 있습니다. 먼저 우리는 Image: notepad.exe 를 통해 해당 프로세스가 notepad 라는 것을 알 수 있습니다. 프로세스는 실제 일(Thread)이 동작할 수 있도록 필요한 모든 것들을 모아 놓은 일종의 모음입니다. 이 안에는 보안 식별자 그리고 파일 같은 기타 여러 가지 오브젝트를 접근할 때 쓰는 핸들 그리고 메모리 공간 마지막으로 Thread가 포함 됩니다.

프로세스의 특징 (출처 : Windows 구조와 원리)
- 자원 소유의 단위 : 자신의 이미지 로드와 실행에 필요한 메모리 공간 및 파일, I/O 장치들 등은 프로세스 단위로 할당 받고 관리됨.

쓰래드의 특징 (출처 : Windows 구조와 원리)
- 디스패칭의 단위 : 운영체제로 부터 CPU 자원을 할당 받아 실행 하는 단위

|