4. 사실 Windows 7에서 커널에 변화가 있었다 .
그렇다고 완젂히 바뀐 것은 아니고 Vista의 커널을 베이스로 해서 튠업
그렇기 때문에 Windows 7의 커널 API 등은 Vista와 같다
5. Windows 7과 Server 2008 R2는 같은 커널
• Vista와 Server 2008와 같은 소스 트리에서 빌드
• Release 후는 GDR 및 LDR 2개의 소스 트리를 사용
General Distribution Release = Windows Update
Limited Distribution Release = Hotfix
• 서비스 팩에서 브랜치를 리셋
7. Windows 7의 버전은 왜 6.1?
• 애플리케이션 호환성을 위해
• Release 타이밍에서는 많은 애플리케이션은 Vista의 메
이저 버젂 6을 인식 하고 있다고 예상
• 버젂 이름은 변경 량을 반영하는 것이 아니다
8. Windows 7 커널 개발 미션
• 성능 향상과 필요 메모리 용량을 줄이는 것
• Vista 커널을 한번 정리해서 최소한의 기능을 정리
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을 개발하고 있는 상황을 설명.
10. MinWin
• 꼭 필요한 최소한의 바이너리로 구성
• 컴포넌트화 하는 최초의 Step
• 기본이 되는 Windows 환경에 Boot 가능
• OS의 기본 동작이랑 API 호출 등을 갂략화
• 상위 레이어는 각각 개별로 개발 가능
11. MinWin
• Windows 환경으로 Boot하는 네트워크 서비스만을
제공
• David Culter의 NT : 커널, 파일 시스템 드라이버,
TCP/IP 스택, 디바이스 드라이버, 코어 시스템 서비스
• WMI, 그래픽, 오디오, Shell 등은 포함하지 않는다.
12. MinWin Layering
Shell,
Graphics,
Multimedia,
Layered Services,
Applets,
Etc.
Kernel,
HAL,
MinWin TCP/IP,
File Systems,
Drivers,
Core System Services
16. DLL 리팩토링
• MinWin을 개발할 때 역점을 둔 것은 Vista에서 제공하
고 있는 시스템 DLL을 정비하는 것
• Vista가 가진 레거시 DLL을 그대로 Windows 7으로 가
져가면 Vista와 같이 성능면에서 단점이 생김
- MinWin을 개발할 때 ‘DLL 리팩토링’ 이라는 작업이 함
17. DLL 리팩토링 해야 할 것
•구현 내용은 변경하지 않고 DLL 구성이랑 구조를 변경
하여 레거시한 환경을 MinWin에는 가져가지 않도록 하
는것
• MinWin에서는 Windows가 가진 수 많은 API도 정리
- 예를 들면 32bit와 64bit에서 중복되는 기능을 정리하
고, 복수의 기능을 하나의 DLL로 모으는 것
• 그래서 MinWin에서 동작하고 있는 커널은 Vista의 커
널과는 완젂히 다르게 되었다
18. 커널이 바꼈다면 기존 애플리케이션은?
• 커널이 바뀌어서 Vista용 애플리케이션은 MinWin을 베
이스로 한 Windows 7에서는 동작하지 못함
• 그래서 레거시 DLL을 새로운 MinWin API에 매핑하는
‘Virtual DLL’이라는 기능이 준비됨
• 기존의 애플리케이션은 레거시 DLL을 로드
레거시 DLL이 MinWin API에 포워드 콜
예 : Kernel32.dll -> Kernelbase.dll
Advapi32.dll -> Kernelbase.dll
19. API Set
• 문제점
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]
20. Virtual DLL에서 레거시 DLL에 매핑
• 매핑 스키마는 Apisetschema.dll에 구현
• Kernel은 boot 시에 스키마를 각 프로세스 매핑
• 로더는 스키마를 참조할 DLL 로드 시에 매핑
• Virtual DLL은 애플리케이션 호환을 위해서 존재
예 : Dependency Walker
Virtual DLL 1
ApiSetSchema.dll Logical DLL
Virtual DLL 2
21. • Window 7에서는 커널을 젂면적으로 바꾸었지만 Vista와
같은 동작이 보증
• 또 Windows의 차기 버젂인 Windows 8에서는 Virtual
DLL 기능을 보다 강화해서 커널 자체는 64bit로 하고,
Virtual DLL로 레거시 32bit DLL을 지원하는 것도 고려.
-> OS의 32bit/64bit라는 구별 없이 32bit 환경을 완젂하게
지원하는 64bit OS가 된다