Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
해당되는 게시물 5건
  Internals 2장 System Architechture 
작성일시 : 2007.11.05 17:29 | 분류 : Windows Server/Kernel | 태그 : smp, Windows Internals, 대칭형 멀티프로세싱, 아키텍처 개관

아키텍처 개관

Four basic types of user-mode processes
system support processes 와  Environment subsystem server processes만이 Native Windows oerating system service를 직접 호출 할 수 있다.

. Fixed (or hardwired) system support processes
. Service processes
. User applications
. Environment subsystem server processes

The kernel-mode components
. Executive : 기본 운영체제 서비스
. Kernel : 저 수준 운영체제 함수 들로 실행부를 위한 루틴과 기본 개체 제공
. Device drivers
. HAL
. Windowing and graphics system

핵심 Windows 시스템 파일들

대칭형 멀티프로세싱

Windows 는 멀티프로세서를 잘 지원하는 대칭형 멀티프로세싱(SMP)운영체제 이다. 어떠한 마스터 프로세서도 없으며 운영체제 및 사용자 스레드들은 실행을 위해 어떤 프로세서에서도 스케줄링 될 수 있다.

핵심 시스템 구성요소

이전 포스트를 참조 하자 http://maystyle.tistory.com/entry/Windows-Architecture

신고
  Windows Internals Chapter 1 개념과 도구 
작성일시 : 2007.10.22 19:17 | 분류 : Windows Server/Kernel | 태그 : Windows Internals

기본 개념과 용어

. 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 에 해당하는 함수가 실행 되게 된다.
신고
  Windows Architecture 
작성일시 : 2007.09.28 11:35 | 분류 : Windows Server/Kernel | 태그 : architecture, Windows Internals



Session Manager : smss.exe
Subsystem DLLs : kernel32.dll, gdi32.dll, user32.dll
Win32 Subsystem : csrss.exe
Graphic driver : Win32k.sys
Kernel : Ntoskrnl.exe
Drivers : xxx.sys
HAL : hal.dll

이제 부터 Windows의 기본적인 architecture에 대해서 몇 일에 걸쳐 설명하려고 합니다.
Windows는 Micro Kernel 이론에 근거한 운영 체제 입니다.
그 근간은 DEC의 VMT에서 시작됩니다.

그림에서 보듯이 Windows 는 기본적으로 User 가 접근 할 수 있는 Address 영역과 Kernel 이 접근 할 수있는 Address 영역을 완전히 분리하여 OS의 안정성을 보장하고 있습니다.

User Mode

크게 User mode에서 실행되는 Program은 System support processes, Service processes, Application, Environment로 나누어 볼 수 있습니다. (관점에 따라 다르게 분류 가능합니다.)

1. System Support Processes
smss.exe : Session manager csrss.exe, winlogon.exe 호출
csrss.exe : Process 와 Thread 관리 및 GDI Control
winlogon.exe : registry의 userinit에 정의된 실행 파일 (services.exe, lass.exe, login prompt) 호출
services.exe : Services Controller
lsass.exe : local security authentication server
userinit.exe : logon > start explorer.exe

2. Services Processes
log on 이 필요없이 시스템 부팅과 동시에 실행 되는 프로그램

3. Application
lon in 이 되어 유저가 호출하면 실행 되는 프로그램

4. Environment
Win 32 Subsystem은 크게 kernel32.dll, gdi32.dll, user32.dll 등의 subsystem dll과 csrss.exe로 이루어져 있습니다.
실질적으로 application이 실행 되는 기반이 되며 csrss.exe의 역활을 생각하시면 충분이 예상 할 수 있습니다.

현재는 os2, posix의 경우 SFU 서비스로 분리 되어 있습니다. Windows Cluster Computing의 경우 Posix가 기본적으로 필요하다고 하며, 이들은 OS2 계열 및 Unix 계열 Application을 실행 하기 위하여 필요한 서브 시스템들이입니다.

(여담 : 추가 적으로 여러 주요 Services 실행하는 하나의 서버의 경우 자원 경합이 일어나 서버 성능 저하가 일어 날 수 있습니다. memory paging)

Kernel mode

커널은 크게 xxx.sys 라는 device driver와 Ntoskrnl.exe 라는 커널 그리고 Windows 그래픽 환경을 위한 GDI 및 Win32k.sys 그리고 하드웨어 추상화 계층인 hal.dll 로 구성되어 있습니다.
커널은 사용자와 하드웨어 간의 인터페이스를 하고 프로세스와 쓰레드를 관리하는 등의 역활을 하는 하나의 커다란 프로세스 입니다.

일반 적으로 우리가 커널이라고 부르는 부분이 ntoskrnl.exe 입니다. 그런데 Windows의 경우 다양한 하드웨어 회사들이 지원을 하고 있습니다. 즉 각각의 하드웨어들을 OS 상에서 다 지원하는데 한계가 있습니다. 그래서 만들어 진게 하드웨어 추상 계층과 하드웨어 벤더에서 제공하는 xxx.sys 즉 드라이버 입니다.

그리고 중요한 부분이 Graphic 처리에 관련 된 GDI와 Win32k.sys 입니다. 문제는 GDI가 커널 내부로 들어온 것인데....

어쩌면 양날의 검이라 볼 수도 있습니다. GUI 운영체제로써 뛰어난 속도 향상 하지만 그 이면에 안정성의 약화... 물론 Win32k.sys 의 안정성 측면의 문제도 집고 넘어가야 하지만 몇가지 의구심이 드는건 떨쳐 버릴 수 없습니다. (미나시는 안정성에 확신이 있어서 GDI를 커널 내로 넣었다고 하네요... 하지만 전 종종 Win32k.sys의 leak 으로 인한 블루스크린을 본답니다...ㅡㅡ;)

참고

사용자 삽입 이미지

Windows Start up Registry

신고
  Private Memory, Working Set 
작성일시 : 2007.09.18 10:35 | 분류 : Windows Server/Kernel | 태그 : Windows Internals

일반적으로 Private Memory는 Paging File을 포함한 한 프로세스가 사용하는 메모리 공간을 말하고, Working Set은 해당 공간 중 Paging 을 제외한 공간을 말한다.

그런데  Windows XP 및 Windows 2003 에서 확인 하면 항상 Working Set이 크다.

그 이유는 Windows XP의 Working Set은 공유 메모리 까지를 포함 하기 때문이다.
실질적으로 Windows XP에서는 한  Process의 공유 메모리를 제외한 순수  RAM에 올라있는 영역을 카운팅하는 Performance  카운터 값은 없다.

예를 들면 NTDLL.dll 은 대부분의 프로세스가 사용하는데, 각각의 프로세스가 해당  dll 을 각자 메모리에 올려 사용하게 되면 메모리 공간의 낭비가 일어 나게 된다.
이 경우 각각의 메모리가 공동적으로 접근하는 메모리 공간은 공유 메모리로 사용하게 된다.

신고
  Win32 API, CSRSS.exe, Win32k.sys 
작성일시 : 2007.09.18 10:32 | 분류 : Windows Server/Kernel | 태그 : Windows Internals,

Win32API 는 Windows Application 을 작성하기 위한 API 모음이다.
CSRSS.exe 는 한 프로세스 내에서 Process 나 Thread의 생성 삭제 context swithing을 관장 한다.

- thread context switching
  cpu가 실행하기 위한 메모리 (register)의 명령이 변경 되는 것을 말함

또한 GDI 호출을 위한 interface를 제공하는데, 이때 호출하는 그래픽 드라이버가 Win32k.sys 다.

신고
 Prev   1   Next 

티스토리 툴바