[App 개발] Mac OS X 커널의 내부 (1)
본문
Mac OS X 에는 마하 커널, 마이크로 커널, FreeBSD 커널, C++, 64 비트, 유닉스,... 그리고 이 모든 것이 포함된 "XNU" 등 여러 전문용어가 담겨있습니다. Mac OS X 커널은 마하 커널도, FreeBSD 커널도 아닙니다. C++ 로 작성되지도 않았고, 64 비트도 아닙니다. 하지만 오픈 소스이며 유닉스입니다.
이 페이퍼는 Mac OS X 아키텍쳐, 마하 커널, BSD, IOKit 과 같은 컴포넌트, 그리고 이러한 디자인이 어떤 특징이 있고 어떤 장점을 가지고 있는지에 대한 자세한 내용을 소개함으로써 앞서 살펴본 혼란을 불식시키기 위하여 씌어졌습니다.
- 역사
다른 운영체제와는 달리, Mac OS X 는 초기부터 확실한 계획을 가지고 설계되지 않았고, 그 대신 지난 수십년간 있었던 서로 다른 소스들이 합쳐진 결과입니다.
- Mac OS
Mac OS 는 1984년에 오리지날 128KB 매킨토시용으로 개발되었으며, 마우스로 조작되는 그래픽 운용체제였습니다. 하지만 메모리 한계상 멀티태스킹은 지원하지 않았습니다. 멀티태스킹은 1988년 멀티파인더라는 이름의 단순한 협력형 멀티태스킹을 지원하게 됩니다. 90년대 들어서 애플은 모토롤라 68000 기반의 싱글 태스킹 코드를 버리고 파워피씨 프로세서를 지원하게 되었습니다. 커널의 일부는 68K 에뮬레이터로 동작했으며, 메모리 보호 기능도 지원하지 않았습니다. 이래서는 윈도우 95 와도 경쟁하기 어려울 지경이었기 때문에, 애플은 마이크로소프트가 윈도우 NT 를 개발했던 것처럼, Mac OS API 와 유저 인터페이스를 유지하면서 새로운 현대식 운영체제를 설계하려는 코플랜드 프로젝트를 1994년에 시작하였습니다. 애플은 코플랜드를 집중적으로 개발자들에게 홍보하고 다수의 서적을 출판하였으며 베타판을 보급하였으나, 코플랜드는 1996년도까지도 전혀 안정적인 모습을 보이지 못하였습니다.
- Mac OS 후계자
애플은 Mac OS 의 후계자를 간절히 원했기 때문에 외부에서 운영체제를 구입해서 Mac OS 호환성을 이식하기로 결정하였습니다. 초기에는 BeOS 와 협상을 벌였으나 최종적으로는 스티브 잡스가 1985년 애플을 떠나서 설립한 NEXT 를 인수하기로 결정하고, NEXTSTEP/OpenStep 을 변환하여 차세대 Mac OS 인 Mac OS X 를 만들기로 결정합니다.
- Mach
NEXTSTEP 은 Mach 에 전적으로 의존합니다. Mach 는 유닉스와 BSD 커널의 증가하는 복잡성에 대응하기 위하여 1985년 카네기 멜론 대학에서 진행된 운영체제 프로젝트입니다. 최초의 마이크로커널로서, 메모리 관리 (어드레스 영역, 태스크), 스케쥴링 (쓰레드; 당시 유닉스에게 생소한 컨셉), 그리고 프로세스간 통신 (IPC) 만을 포함하고 있었고, 다른 운영체제에서 흔히 볼 수 있는 파일 시스템, 네트워킹, 보안, 디바이스 드라이버 등은 유저 공간에 "서버" 라 불리우는 모듈로 구현되어야 합니다. 이런 방식은 시스템 신뢰도를 크게 향상시켰습니다. 디바이스 드라이버가 고장나도 시스템이 죽지 않게 되었고, 커널과 유저 공간의 서버간의 정형화된 인터페이스는 시스템 유지보수에 유리했습니다. 유닉스와 달리 운영체제 구성요소들은 서로를 마구잡이로 호출하지 않게 되었습니다. 마하 커널같은 마이크로커널의 또 다른 장점으로 다양성을 들 수 있습니다. 마하 커널 기반 시스템에서는 유닉스와 윈도우 응용프로그램을 동시에 운용할 수 있게 되었습니다. 최소한의 코드가 최고 우선순위로 하드웨어를 구동하는 동안 서로 다른 운영체제가 그 위에서 동시에 동작한다는 개념은 기본적으로 오늘날 가상화 기술과 동일한 방식입니다. 하지만 마하 운영체제의 기본 구성은 유저 모드에서 단일 BSD 서버를 운용합니다. 따라서, BSD 커널의 메모리 관리나 스케쥴링 등은 제거하고, 마하 커널 위에 프로세스 관리만 담당하게 됩니다.
마하 설계의 문제점은 커널과 유저 공간에 위치한 서버와의 통신으로 인하여 기존 단일 커널 구조에 비해 마하 커널의 속도가 느리다는 점이었습니다. 이러한 문제점의 해결책으로 "co-location" 이 있었습니다. 퍼스낼리티 서버를 커널 모드로 실행하여 속도를 향상시키는 것입니다. 마이크로커널의 원래 개념에서 조금 후퇴하긴 하였지만, 기능이 잘 구분된 커널 구조는 아직도 장점을 가지고 있었습니다. 이후 마하 메모리 관리 코드는 BSD 로 통합되었습니다.
- NEXTSTEP
1989년에 버젼 1.0 이 발표된 NEXTSTEP 은 위의 디자인을 따르기로 결정합니다. NEXT 는 4.3 BSD 커널에서 코어 커널 구성을 제거한 후 마하 커널 위에 위치시킵니다. 이렇게 함으로써 NEXTSTEP 은 최초의 선점형 멀티태스킹과 메모리 보호 그리고 유닉스 호환성을 가지는 데스크탑/그래픽 환경 운영체제로서 수 년 이상 앞선 경쟁력을 확보하였습니다. 최초의 NEXTSTEP 은 자사의 모토롤라 68K 기반 컴퓨터에서만 동작하였으나 이후 SPARC, PA-RISC, i386 등에 "OpenStep" 이라는 이름으로 다른 하드웨어 제조업체에게 NEXT 를 라이센스 하기 시작함으로써 상당히 좋은 이식력을 갖게 되었습니다. 애플이 NEXT 를 인수하던 1997년에는 PowerPC 를 지원하게 되었고, i386 을 제외한 다른 모든 아키텍쳐에 대한 지원을 중단하였습니다. 이것은 이후 애플이 2005/2006 년에 PowerPC 에서 i386 으로 플랫폼을 변경할 당시 유용하게 활용됩니다.
- 랩소디와 OS X
애플이 OpenStep 을 인수하면서 많은 변경을 가한 새 운영체제, 이름하여 "랩소디" 를 만듭니다. "DriverKit" 드라이버 모델을 새로운 "I/O-Kit" 구조로 변경하고, Mach 2.5 를 Mach 3.0 코드베이스로 업데이트하고, 4.4BSD 와 FreeBSD 코드에 HFS 파일시스템과 애플 네트워킹 프로토콜 기능을 추가하였습니다. 사용자 측면에서 보면 Mac OS X 는 상당히 NEXTSTEP/OpenStep 과 유사합니다. "NS" API 는 Cocoa 로 개명되었으며, Mac OS 9 API "툴박스" 는 호환성 API (카본 이라는 이름의)로 통합, "카본화"된 OS 9 파인더와 퀵타임, OS 9 과 응용프로그램을 수정 없이 구동하기 위하여 VMware 와 유사한 Blue-Box 라는 이름의 가상 머신 ("클래식") 을 추가하였습니다.
최신글이 없습니다.
최신글이 없습니다.
댓글목록 1
이성훈님의 댓글
재밋게 잘 읽었습니다.