Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
  Windows Internals Chapter 1 개념과 도구 
작성일시 : 2007. 10. 22. 19:17 | 분류 : Windows Server/Kernel

기본 개념과 용어

. Windows API

Windows에서 제공하는 기능을 모아 놓은 함수의 집합
카테고리
- 기본 서비스들
- 구성 요소 서비스들
- 사용자 인터페이스 서비스들
- 그래픽스및 멀티미디어 서비스들
- 메세징 및 협업
- 네트워킹
- 웹 서비스

. .NET Framework
자바 Runtime (JRE) 와 동일한 역활을 하는 응용 프로그램 구동 환경

. 서비스, 함수 루틴
- Windows API 함수 : Windows API에서 문서화되고 호출 가능한 서브 루틴 CreateProcess, CreateFile...
- 네이티브 시브템 서비스 : 문서화 되지 않은 서비스들 NtCreateProcess 와 같은 Windows 의 CreateProcess 함수가 호출하는 내부 시스템 서비스
- 커널 지원 함수 : 커널 모드에서만 호출 될 수 있는 Windows 서브 루틴 ExAllocatePool
- Windows 서비스 : SCM (Service Control Manager)에 의해 시작되는 프로세스
- DLL (Dynamic-Link Library)

. 프로세스, 스레드 및 작업

프로세스는 프로그램의 인스턴스를 실행할때 사용되는 리소스 집합에 대한 컨테이너
실제로는 메모리 공간

- 전용 가상 공간 : 프로세스가 사용할 수 있는 가상 메모리 주소들의 집합
- 실행 프로그램 : 초기의 코드와 데이터 및 프로세스의 가상 주소공간 매핑된 것
- 핸들 : 스레드 액세스가 가능한 세마포어, 통신 포트, 파일등의 시스템 리소스 핸들 목록
- 엑세스 토큰
- 프로세스 ID
- 최소 하나의 스레드

스레드는 Windows가 실행하는 프로세스 내의 실체

- 프로세스의 상태를 표시하는 CPU 레지스터 집합의 내용
- 커널 모드 와 유저 모드에서 실행 되는 동안 사용될 2개의 스텍
- TLS for use by subsystems, Run-time libraries, DLLs
- Thread ID
- Security Context (항상 가지는 것은 아니다.)

추가)
VAD 는 Linked List 형태의 메모리 집합
Tread는 CPU의 한 클럭을 의미

사용자 삽입 이미지



















. 가상 메모리

사용자 삽입 이미지












프로세스가 Access 하는 선형의 주소 공간
실제는 물리적으로 불연속 적인 공간에 위치함

대부분의 시스템에서 가상 메모리는 실제 메모리 보다 크기 때문에 메모리의 일부 Page를 디스크로 옮긴다. 데이터의 페이징 작업을 통해 단일 프로세스의 물리 메모리 점유를 방지 한다.

보통의 32bit 운영체제의 CPU는 32bit의 어드레스 버스 즉 2의 32승 bit에 대한 메모리 어드레싱 밖에 못하게 된다. 하지만 Boot.ini 에 /PAE 옵션을 통해 4G 이상의 메모리에 대한 Access도 지원 하긴 한다.

본디 OS는 CPL을 이용하여 실행 가능한 명령어를 제한한다.
거기에 Windows 아에 커널 단과 유저 단에서 접근할 수 있는 메모리 영역을 분리하여 안정성을 보안 하였다.

기본 적으로 2G / 2G 로 총 4G 의 공간을 나눠 쓰게 된다. 즉 Kernel의 최대 메모리 사용 한계도 2G 유저 프로세스의 최대 메모리 한계도 2G가 된다. 그런데 위에서 말한 것 처럼 /PAE를 이용하면 4G 이상의 메모리를 어드레싱 할 수 있게 된다. (물론 커널은 2G만 사용한다.) 그렇다면 프로세스가 2G 이상을 쓰는 것인가...?? 결론만 말하자면 쓸 수 있다. 물론 모든 Application이 그렇지 않고, SQL의 경우에만 지원하고 있으며, 실제로 2G 이상의 영역은 버퍼로만 사용하게 된다.

그렇다면 4G 일때 유저 Process가 너무 무거워서 2G 이상 주고 싶다면 어떻게 해야할까?
이때는 /3GB 옵션을 주게 된다. 이때 /Userva 한정자를 주는데 이는 /3GB를 주면서 작아지는 PTE (나중에 설명하겠다.) 의 크기를 고정해준다. 왜 PTE가 작아질까? 이유는 간단하다. /3GB를 주면 User Process는 3G를 사용하는 대신 kernel은 1G만 사용하게 되기 때문이다.

물론 64 비트 머신의 경우 2의 64승의 Address 영역을 지원한다. (이론적으로... 현재 기술상 8T/6T 수준으로 지원하는 것으로 알고 있다.)

.커널 모드와 사용자 모드

방금전에 언급 했지만 실행 가능 명령어는 CPL과 DPL을 비교하여 이루어 진다.
참조 : http://maystyle.tistory.com/entry/동작-레벨-CPL-Current-Privilege-Level

거기에 Windows의 가장 큰 차이는 바로 메모리 Address 영역이 분리 되는 것이다. 즉 4G의 메모리 가상 메모리 주소 공간이 있다고 할때 0x0000 0000 ~ 7FFF FFFF 는 User Process 가 8000 0000 ~ FFFF FFFF 는 Kernel이 사용하며, CPL이 3일때는 User 영역을 CPL이 0일때는 Kernel 영역의 메모리의 데이터를 실행 할 수 있고, 실제 실행 되는 명령어 또한 각 Level에 맞춰 시스템 영역을 컨트롤 할 경우 CPL 0 에 해당하는 함수가 실행 되게 된다.
|