minwin에 대해서

21
MinWin에 대해서 마이에트 엔터테인먼트 서버 프로그래머 최흥배 Microsoft Visual C++ MVP

Upload: ongameserver

Post on 16-May-2015

786 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: MinWin에 대해서

MinWin에 대해서

마이에트 엔터테인먼트서버 프로그래머

최흥배

Microsoft Visual C++ MVP

Page 2: MinWin에 대해서
Page 3: MinWin에 대해서

Windows 7과 Vista는 같다?

일반적으로 Windows 7은 Windows Vista와 같은 커널을 사용한다!

Page 4: MinWin에 대해서

사실 Windows 7에서 커널에 변화가 있었다 .

그렇다고 완젂히 바뀐 것은 아니고 Vista의 커널을 베이스로 해서 튠업

그렇기 때문에 Windows 7의 커널 API 등은 Vista와 같다

Page 5: MinWin에 대해서

• Vista와 Server 2008와 같은 소스 트리에서 빌드

• Release 후는 GDR 및 LDR 2개의 소스 트리를 사용General Distribution Release = Windows Update Limited Distribution Release = Hotfix

• 서비스 팩에서 브랜치를 리셋

Windows 7과 Server 2008 R2는 같은 커널

Page 6: MinWin에 대해서

64bit만 Release

Page 7: MinWin에 대해서

• 애플리케이션 호환성을 위해

• Release 타이밍에서는 많은 애플리케이션은 Vista의 메이저 버젂 6을 인식 하고 있다고 예상

• 버젂 이름은 변경 량을 반영하는 것이 아니다

Windows 7의 버전은 왜 6.1?

Page 8: MinWin에 대해서

• 성능 향상과 필요 메모리 용량을 줄이는 것

• Vista 커널을 한번 정리해서 최소한의 기능을 정리

Windows 7 커널 개발 미션

Page 9: MinWin에 대해서

MinWin은 2003년 3월 MS가 Longhorn을 컴포넌트화하고 있을 때부터 개발.- MinWin은 Longhorn의 ‘기초가 되는 OS’ 부분의 컴포넌트라고 소개.

처음 계획은 MinWin은 Vista에서 사용할 예정

2007년까지는 MinWin을 Server Core 버젂이라고 생각 했음

2007년 10월 MS의 Distinguished Enginner의 Eric Traut씨는 온라인 프리젠테이션에서 Windows 7용으로 MinWin을 개발하고 있는 상황을 설명.

MinWin ?

Page 10: MinWin에 대해서

• 꼭 필요한 최소한의 바이너리로 구성

• 컴포넌트화 하는 최초의 Step

• 기본이 되는 Windows 환경에 Boot 가능

• OS의 기본 동작이랑 API 호출 등을 갂략화

• 상위 레이어는 각각 개별로 개발 가능

MinWin

Page 11: MinWin에 대해서

• Windows 환경으로 Boot하는 네트워크 서비스만을제공

• David Culter의 NT : 커널, 파일 시스템 드라이버, TCP/IP 스택, 디바이스 드라이버, 코어 시스템 서비스

• WMI, 그래픽, 오디오, Shell 등은 포함하지 않는다.

MinWin

Page 12: MinWin에 대해서

Shell,Graphics,Multimedia,Layered Services,Applets, Etc.

Kernel, HAL,TCP/IP,File Systems,Drivers,Core System Services

MinWin

MinWin Layering

Page 13: MinWin에 대해서

• 파일 수 : 150

• 디스크 사용량 : 30MB

• 메모리 사용량 : 40MB

MinWin - Footprnt(리소스 사용량)

Page 16: MinWin에 대해서

• MinWin을 개발할 때 역점을 둔 것은 Vista에서 제공하고 있는 시스템 DLL을 정비하는 것

• Vista가 가진 레거시 DLL을 그대로 Windows 7으로 가져가면 Vista와 같이 성능면에서 단점이 생김- MinWin을 개발할 때 ‘DLL 리팩토링’ 이라는 작업이 함

DLL 리팩토링

Page 17: MinWin에 대해서

•구현 내용은 변경하지 않고 DLL 구성이랑 구조를 변경하여 레거시한 환경을 MinWin에는 가져가지 않도록 하는 것

• MinWin에서는 Windows가 가진 수 많은 API도 정리- 예를 들면 32bit와 64bit에서 중복되는 기능을 정리하고, 복수의 기능을 하나의 DLL로 모으는 것

• 그래서 MinWin에서 동작하고 있는 커널은 Vista의 커널과는 완젂히 다르게 되었다

DLL 리팩토링 해야 할 것

Page 18: MinWin에 대해서

• 커널이 바뀌어서 Vista용 애플리케이션은 MinWin을 베이스로 한 Windows 7에서는 동작하지 못함

• 그래서 레거시 DLL을 새로운 MinWin API에 매핑하는‘Virtual DLL’이라는 기능이 준비됨

• 기존의 애플리케이션은 레거시 DLL을 로드레거시 DLL이 MinWin API에 포워드 콜예 : Kernel32.dll -> Kernelbase.dll

Advapi32.dll -> Kernelbase.dll

커널이 바꼈다면 기존 애플리케이션은?

Page 19: MinWin에 대해서

• 문제점DLL이 복수의 API Set을 포함DLL의 구현과 API Set 갂에 의존 관계가 존재

• API Set은 Virtual DLL로 대응API 구현과 API의 내부적 아키텍처 분리

• MinWin API Set이 최초의 Virtual DLL예 : Microsoft-Windows-System-Heap-L1-1-0.dll

L[System Layer]-[API Major Ver]-[API Minor Ver]

API Set

Page 20: MinWin에 대해서

• 매핑 스키마는 Apisetschema.dll에 구현

• Kernel은 boot 시에 스키마를 각 프로세스 매핑

• 로더는 스키마를 참조할 DLL 로드 시에 매핑

• Virtual DLL은 애플리케이션 호환을 위해서 존재예 : Dependency Walker

Virtual DLL 1

Virtual DLL 2

ApiSetSchema.dll Logical DLL

Virtual DLL에서 레거시 DLL에 매핑

Page 21: MinWin에 대해서

• Window 7에서는 커널을 젂면적으로 바꾸었지만 Vista와같은 동작이 보증

• 또 Windows의 차기 버젂인 Windows 8에서는 Virtual DLL 기능을 보다 강화해서 커널 자체는 64bit로 하고, Virtual DLL로 레거시 32bit DLL을 지원하는 것도 고려. -> OS의 32bit/64bit라는 구별 없이 32bit 환경을 완젂하게지원하는 64bit OS가 된다