
iPhone OS X Architecture: the Mach Kernel and RAM
Thursday, July 12, 2007
다른 통신망에서 사용하거나, 소프트웨어의 수정, 설치를 위해 아이폰을 크랙킹하려는 사람들이 많다. 필자는 그들이 발견하는 것들이 더 흥미롭다. 아이폰의 숨겨진 기능이 무엇인지 알아낼 힌트를 제시해서이다. 그들이 아이폰 내부의 코어 OS에서 무엇을 발견했는지, 커널부터 시작해 보자.
The iPhone Kernel.
그렇다. Mach다. 애플이 마흐에 묶여있으며, 될 수만 있다면 리눅스 커널로 이주해야 하고, 에이비 티베이니언(Avie Tevanian)이 애플을 떠날 때가 적기이리라 주장하던 소위 전문가들이 얼마나 많았는지 아시는가?
애플이 리눅스 커널로 이주하리라는 억측을 파헤친지가 벌써 지난 해이다. 그런데 이 루머는 WWDC 07에서도 지속되었다. 이번에는 리눅스가 아니라, 썬의 솔라리스 커널로 이주해야 한다는 주장이었다.
마흐 자체에는 잘못이 없다. 현실적으로 애플의 필요에 마흐가 꽤 잘 맞다. 애플이 다른 OS 아키텍쳐로 이주해야 한다면, 아이폰부터 분명 교체를 하든지 했을 것이다. 마이크로소프트도 데스크톱 상에서는 NT 커널을 사용하는 윈도 NT/2000/XP/비스타를 만들었지만, WinCE용으로는 커널을 따로 만들었었다.

[
More Predictions for WWDC 2007: Solaris, Google, Surround: Mac OS X with the Solaris Kernel]
[
Mac OS X 마이크로커널의 미신을 벗긴다 2]
[
Mac OS X 리눅스 커널 미신을 벗긴다 11]
[
윈도모바일과 아이폰은 어떻게 다를까]
Kernel Extensions.
아이폰의 마흐 커널은 맥오에스텐과 동일한 I/O Kit 아키텍쳐를 사용한다. 덕분에 애플은 맥에서 이미 검증이 된 성숙한 코드를 대량으로 재사용할 수 있었다. 마흐의 I/O 킷은 kext와 커널 익스텐션으로 로레벨 하드웨어 지원을 한다.
kext와 커닐 익스텐션은 커널에 직접 접속하기때문에, 견고하고 성숙해야 한다. 소프트웨어가 커널 바깥에서 충돌을 일으키면, 보통은 재시작할 수 있다. 그런데 커널 안에서 충돌을 일으키면, 커널패닉을 일으켜서 시스템 자체를 재부팅시켜야 한다. 안 좋은 현상이다
애플은 도저히 다른 방법이 없는 때가 아니라면, 커널 익스텐션 추가를 하지 않도록 권장한다. 이 때문에, 별 다른 이유 없이 kext를 설치하려는 써드파티 소프트웨어가 있을 때 불만이 많다. 안정성에 문제를 가져다줄 수 있기 때문이다.
애플은 아이폰에 두 가지 종류의 kext를 사용하는 스스로의 지침을 세웠다. 첫 번째는 USB 입력이다. 사용자의 휴먼인터페이스와 멀티터치 스크린에 특히 관련있다.
- IOUSBDeviceFamily
- IOHIDFamily
- AppleMultitouchSPI
두 번째는 VPN(Virtual Private Networks)와 관련 있는 익스텐션이다. 이 익스텐션은 네트워크 스택에 붙어서 인터넷과 같은 공공 네트워크를 통한 보안 트래픽을 제공한다.
[
The iPhone Dev Wiki]
Comparing the iPhone Kernel to the Mac's.
아이폰의 커널과 kext는 맥과 동일하지 않다. 가령 데스크톱 맥은 iSight 카메라와 오디오, 비디오 하드웨어, 전력과 온도 관리, 시리얼 인터페이스용으로 있지만, 아이폰은 그런 kext가 없다. 물론 하드웨어 관련은 있으며, PPP.kext도 없다.
아이폰의 모든 하드웨어 지원은 kext보다는 아이폰의 커널 안에 들어가 있는 것으로 보인다. 각 맥 모델은 별다른 하드웨어를 갖고 있기 때문에, 모듈화된 플러그인이 필요하다. 현재 아이폰은 단일 기종이다.
I/O Kit 아키텍쳐로 보면, 애플은 하드웨어 지원을 차후에 늘릴 계획인 것으로 보인다. 그렇다고 하여 별도의 확장 메커니즘 지원에 의존할 필요는 없다. 마흐와 I/O Kit가 처음부터 폭넓은 범위의 하드웨어 지원을 시작했기에 아이폰 또한 이 기능을 물려받아서, "휴대용 OS 커널"을 따로 만들 필요 없이 사용할 수 있다.
마흐 안에는, 시스템이 대기상태나 슬립 상태로 갔을 때 전력을 영리하게 조절하는 세련된 전력 관리가 들어 있다. 이 때문에 아이폰이 첫 번째 세대임에도 불구하고 대단히 효율적인 배터리 수명을 보여준다. 아이폰의 배터리 수명은 비교할 만한 스마트폰들의 두 배에 이른다.
[
KernelCache Files List - The iPhone Dev Wiki]
System RAM and Flash RAM.
아이폰과 다른 스마트폰 간의 중대한 차이는 또 있다. 시스템 RAM과 Flash RAM 용량이다. 전문가들은 이 점에 대해 거론하지 않는 분위기이다. 다른 제조업체들에게 많이 불리하기 때문이다. 아이폰이 기술면에 있어서 압도함을 지적하는 것 또한, 정치적으로 불공정하게 느껴지는 모양이다.
아이폰에는 물리적인 디스크 드라이브가 없다. 플래시 RAM 디스크이미지만이 있으며, 이 이미지가 맥 데스크톱의 표준형 DMG 파일 역할을 한다. 데스크톱 DMG 파일은 드라이브 안의 아카이브가 들어 있으며, 맥오에스텐이 이 이미지를 띄울 때, 물리적인 드라이브처럼 행동한다. 하지만 실제로 물리적으로 이동하는 부분이 없이 RAM 안에서만 돌아가기 때문에 속도는 훨씬 더 빠르다.
아이폰은 아이포드처럼 아이튠스를 통해 복구가 가능하다. 그 경우 아이튠스가 초기 DMG 파일을 아이폰으로 복제한다. 그러면 플래시 RAM 상의 디스크 이미지에서 돌리는 오에스텐이 아이폰 안에서 뜨게 된다. Palm OS나 Symbian, 윈도모바일 기기는 "플래시 RAM에서 돌아가는" 유사한 구조이다.

아이폰과 기존 휴대폰이 제일 다른 점은, 기존 휴대폰이 64MB나 128MB의 RAM을 갖고서, 40MB를 OS에 쓴다는 점이다. 즉, 이용자가 쓸 용량이 줄어들어버리고만다. 이 때문에 SD Flash RAM 슬롯으로 더 많은 용량을 확보해야 하지만, 그것마저도 2GB로 제한적이다.
아이폰은 4096MB(4GB)나 8192MB(8GB)를 제공한다. 오에스텐용과 애플리케이션용으로는 700MB이다. 또한 애플리케이션용으로 128MB의 시스템 RAM이 아이폰 안에 들어가 있다. 시스템 RAM만 두 배요, Flash RAM 용량으로는 64배에서 128배이다.
이 때문에 아이폰에는 SD 카드슬롯이 없다. 이미 SD를 합쳤을 때보다도, 이용자가 2~4배의 용량을 더 사용할 수 있기 때문이다.
이 때문에 아이폰은 진정한 인터넷 애플리케이션을 제공할 수 있다. Palm과 Symbian, 윈도 모바일은 아이폰에 따라가려면 운영체제를 완전히 재작성해야한다. 어째서일까?
[Update: SDHD 카드에 대해 물어본 독자들이 있었다. 이 카드는 2GB보다 더 많은 용량을 제공하지만, SDHD 표준을 지원하는 하드웨어에서만 돌아간다. 즉, 예전의 SD 슬롯 휴대폰은 이 카드를 사용할 수 없다. 몇몇 하이엔드급만 SDHD를 사용할 수 있으며, N95가 그 중 하나이다. N95에 SDHD를 통한 8GB 추가는 250달러를 더 요구한다. 원래 가격이 750달러이다. 즉, 아이폰과는 대단히 다른 가격대를 갖게 된다.
]
[
OS X은 어떻게 iPhone에 들어갔을까?]
Where's the Kernel?
아이폰 커널이 맥과 다른 점은 또 하나 있다. 로케이션이다. 맥에서 마흐 커널은 시스템이 부팅될 때, 표준형 부팅 디스크에서 RAM 안으로 로딩된다. 그런데 맥 커널은 다윈 오픈소스 프로젝트의 일부로서도 나오기에, 개발자들은 자기 코드가 어떻게 돌아가는지 더 잘 알 수 있다.
아이폰은 맥오에스텐 커널의 관련 포트를 돌리지만, 오픈소스가 아니다. 또한 ARM 아키텍쳐이기때문에, 수정이나 최적화를 요구한다.
다윈과 애플의 XNU 마흐 커널에 대해 잘 알고 있는 모든 이들에게 물어보시라. 이들 중 ARM에 대해 잘 아는 사람은 얼마나 될까? 핏자 몇 판으로 충분한 정도밖에 없잖을까? 아이폰 보안의 의미가 이러하다. 아이폰의 코어 OS와 보안에 대해서는 다음 기사에서 쓰겠다.
Like reading RoughlyDrafted? Share articles with your friends, link from your blog, and subscribe to my podcast!
Did I miss any details?
iPhone OS X Architecture: the Mach Kernel and RAM