# 애플 Darwin OS 및 XNU 커널 심층 분석

> Clean Markdown view of GeekNews topic #20176. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20176](https://news.hada.io/topic?id=20176)
- GeekNews Markdown: [https://news.hada.io/topic/20176.md](https://news.hada.io/topic/20176.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-04-06T18:32:58+09:00
- Updated: 2025-04-06T18:32:58+09:00
- Original source: [tansanrao.com](https://tansanrao.com/blog/2025/04/xnu-kernel-and-darwin-evolution-and-architecture/)
- Points: 2
- Comments: 0

## Topic Body

- Apple의 Darwin 운영체제는 macOS, iOS 등 Apple의 현대적인 OS들의 기반이 되는 Unix 계열 코어 구성임  
- 핵심은 XNU 커널로, "X is Not Unix"라는 이름의 하이브리드 커널임  
- Mach 마이크로커널의 구조와 BSD Unix의 요소를 결합해 성능과 모듈화를 균형 있게 구현함  
- 이 글에서는 Mach과 BSD의 뿌리부터 시작해 Apple Silicon에서의 최신 진화까지 Darwin과 XNU의 구조적 발전 과정을 설명함  
- 커널의 핵심 구성(IPC, 스케줄링, 메모리 관리, 가상화 등)과 현대 하드웨어에 맞춘 적응을 분석함  
  
### Mach 마이크로커널의 기원 (1985–1996)  
  
- Mach는 1985년 Carnegie Mellon University에서 Richard Rashid와 Avie Tevanian에 의해 시작됨  
- UNIX 커널의 복잡성을 줄이기 위해 핵심 기능만 제공하는 마이크로커널로 설계됨  
- 메모리 관리, 스레드 기반 스케줄링, 메시지 기반 IPC 등 저수준 기능만 제공하고, 파일 시스템, 네트워크 등은 사용자 공간 서버로 분리함  
- Mach 2.5는 일부 BSD 커널 코드와 함께 커널 공간에서 실행되어 성능을 보완함  
- Mach 3.0은 진정한 마이크로커널로 전환되며, BSD의 메모리 관리에도 영향을 미침  
- Mach는 작업(Task)과 스레드(Thread)의 개념을 도입하고, 효율적인 가상 메모리 모델을 구현함  
  
* NeXT(1985년 Steve Jobs 설립)는 Mach 2.5 + 4.3BSD 기반으로 NeXTSTEP OS를 개발함  
* NeXTSTEP의 커널은 Mach과 BSD를 커널 공간에서 결합해 하이브리드 구조를 구성함  
* 드라이버는 Objective-C 기반의 DriverKit으로 개발되며 객체 지향적인 접근을 시도함  
  
- Apple은 1996년 NeXT를 인수하며 NeXTSTEP과 Mach/BSD 기반의 XNU 커널을 가져옴  
- Mac OS X의 초기 버전(Rhapsody)은 NeXT의 커널 구조를 기반으로 개발됨  
  
### Mac OS X의 초기 진화 (1997–2005)  
  
- Apple은 OSFMK 7.3 기반 Mach 3.0 코드를 XNU에 통합하고, BSD 계층을 FreeBSD와 4.4BSD 코드로 업데이트함  
- 성능 개선과 하드웨어 지원 확대를 위해 BSD와 Mach의 기능을 내장한 하이브리드 구조 유지  
- 새로운 드라이버 프레임워크 I/O Kit 도입: Objective-C 대신 C++ 기반으로 성능 최적화 및 핫플러깅 지원  
  
* 주요 버전 특징 요약:  
  - **10.1 Puma (2001)**: 실시간 스레드 지원, 성능 향상  
  - **10.2 Jaguar (2002)**: IPv6, IPSec, Bonjour, HFS+ 저널링 도입  
  - **10.3 Panther (2003)**: FreeBSD 5 기반 커널 개선, 멀티코어 지원을 위한 fine-grained locking 도입  
  
- XNU는 PowerPC를 기본 지원하면서도 x86 지원 코드도 유지하여 향후 전환을 준비함  
- **10.4 Tiger (2005)**: UNIX 03 인증 획득, Intel 전환 기반 마련, kqueue/kevent 이벤트 시스템 도입  
  
### 64비트, 멀티코어, iPhone OS 시기 (2005–2010)  
  
- **10.5 Leopard (2007)**:  
  - x86_64 지원 및 64비트 드라이버 가능  
  - ASLR, 샌드박스, DTrace 등 보안 및 디버깅 기능 강화  
  - 마지막 PowerPC 정식 지원  
- **iPhone OS 1 (2007)**:  
  - Darwin 9 기반, XNU를 ARM에 이식  
  - 메모리 부족 대응을 위한 Jetsam 메커니즘 도입  
  - 전체 앱 샌드박스 및 코드 서명 필수화  
- **10.6 Snow Leopard (2009)**:  
  - Intel 전용, 완전한 64비트 커널 지원  
  - Grand Central Dispatch 도입: 커널과 협업하는 유저 공간 태스크 병렬화 프레임워크  
  - OpenCL 통합 및 GPU 연산 지원  
- **iOS 4 (2010)**:  
  - 멀티태스킹 및 우선순위 기반 스케줄링 도입 (백그라운드/포그라운드 구분)  
  
### macOS 및 iOS의 현대화 (2011–2020)  
  
- **10.8~10.9 (2012–2013)**:  
  - Compressed Memory 도입으로 RAM 사용 최적화  
  - Timer Coalescing으로 CPU 절전 강화  
  - App Nap, QoS 등 에너지 효율 중심 스케줄링 발전  
- **10.10~10.11 (2014–2015)**:  
  - SIP(System Integrity Protection) 도입: 루트 권한도 시스템 파일 변경 불가  
  - watchOS, tvOS 등 다양한 기기에서 XNU 확장 가능성 확보  
  - ARM64 지원 및 32비트 ARM 폐기 준비 시작  
- **10.12~10.14 (2016–2018)**:  
  - APFS(Apple File System)로 파일 시스템 전환  
  - 스냅샷, 클로닝, 암호화 지원  
  - kext 보안 강화: 사용자 승인 필요, 코드 서명 검사 강화  
- **10.15 Catalina (2019)**:  
  - DriverKit 도입: 드라이버를 유저 공간에서 실행 (microkernel 철학 회귀)  
  - 시스템 볼륨을 읽기 전용으로 분리하여 보안 강화  
  
### Apple Silicon 시기 (2020–현재)  
  
- **macOS 11 Big Sur (2020)**:  
  - ARM64 기반 Apple Silicon(M1) 지원  
  - big.LITTLE CPU 스케줄링 지원: QoS 기반으로 효율/성능 코어 분배  
  - Mach VM 구조가 통합 메모리 아키텍처에 적합  
  
- **보안 및 가상화 강화**:  
  - PAC(포인터 인증), MTE(메모리 태깅) 등 ARM 하드웨어 보안 기능 지원  
  - Apple Silicon의 하이퍼바이저 기능 기반으로 새로운 가상화 프레임워크 도입  
  - macOS에서 개발자용 경량 VM 구동 가능 (유저 공간 제어)  
  
- **통합 플랫폼 구조**:  
  - XNU는 macOS, iOS, watchOS, tvOS, bridgeOS, visionOS 등 모든 Apple 플랫폼의 커널로 사용됨  
  - Mach의 플랫폼 추상화 덕분에 다양한 CPU 아키텍처에 쉽게 적응 가능  
  
### XNU의 주요 연혁 요약  
  
- 1989 - **NeXTSTEP 1.0** - Mach 2.5 + BSD의 XNU 하이브리드 도입  
- 1996 - **Apple, NeXT 인수** - Mach 3.0 + FreeBSD 기반의 Rhapsody 개발 시작  
- 2001 - **Mac OS X 10.0** - XNU 커널 구조 정립 및 초기 성능 개선  
- 2005 - **10.4 Tiger** - UNIX 인증, Intel 전환 대비  
- 2007 - **10.5 Leopard** - 64비트 지원, 보안 기능 강화, iPhone OS 등장  
- 2009 - **10.6 Snow Leopard** - 완전한 Intel 전환 및 GCD 도입  
- 2011 - **10.7 Lion** - 64비트 커널 강제화, 샌드박싱 확대  
- 2013 - **10.9 Mavericks** - 메모리 압축 및 QoS 스케줄링 도입  
- 2015 - **10.11 El Capitan** - SIP 도입, watchOS 등 기기 확장  
- 2017 - **10.13 High Sierra** - APFS 기본 적용, Kext 보안 강화  
- 2019 - **10.15 Catalina** - DriverKit으로 드라이버를 유저 공간에서 실행  
- 2020 - **11 Big Sur** - Apple Silicon 지원, 새로운 가상화 구조 도입  
- 2022 - **13 Ventura** - M1 Max 등 고성능 코어 대응 스케줄링 개선  
- 2024 - **14 Sonoma** - M2/M3 최적화 및 Memory Tagging 지원  
  
### XNU 커널 구조와 설계  
  
#### 하이브리드 커널 설계: Mach + BSD 통합  
  
- XNU는 마이크로커널(Mach)과 모놀리식 커널(BSD)의 특성을 모두 지닌 하이브리드 커널 구조를 가짐  
- Mach는 저수준 기능(스레드, 메모리, IPC 등)을 추상화하고 모듈화하며, BSD는 전체 UNIX 시스템 콜과 API를 커널 공간에서 직접 실행함  
- BSD와 Mach는 하나의 커널 바이너리로 링크되어 동일한 주소 공간에서 실행됨  
- 커널 내부에서 Mach 함수와 BSD 함수는 메시지 없이 직접 호출되며, UNIX 시스템 콜은 다른 유닉스 커널 수준의 성능으로 처리됨  
- 예시: `read()` 시스템 콜 호출 시, BSD 파일 시스템 코드가 커널에서 직접 실행됨  
  
##### Mach의 역할  
  
- 스레드, 태스크 관리, 컨텍스트 스위칭, 스케줄링 큐, 타이머 등 커널 핵심 인프라 제공  
- Mach 포트를 통한 메시지 기반 IPC 제공 (프로세스 간 메모리 공유 및 큰 버퍼 전송 지원)  
- 메모리 객체, copy-on-write 최적화, 주소 공간 추상화 등 고급 가상 메모리 관리 기능 구현  
  
##### BSD의 역할  
  
- 프로세스 및 PID, 신호, 사용자 ID, POSIX API, 파일 시스템, 네트워크 스택, UNIX IPC 등 UNIX 기능 제공  
- FreeBSD 기반의 BSD 코드에서 유래, OpenBSD/NetBSD 기능도 포함  
- 보안 프레임워크(KAuth, MAC), sandbox, SIP, 코드 서명 검증 등 보안 정책 구현  
- 시스템 콜 구현: `fork()`는 Mach에서 VM 복제, BSD에서 파일 디스크립터 복제 등 수행  
- 파일 시스템(VFS), 네트워크, signal 처리, POSIX 스레드 등 대부분의 UNIX 기능 담당  
  
##### I/O Kit  
  
- 커널 공간에서 실행되는 객체 지향 드라이버 프레임워크 (C++의 Embedded Subset 사용)  
- 장치 계층 구조를 정의하고 각 드라이버가 이를 상속하여 구현  
- 사용자 공간에서 접근 가능한 user client 인터페이스 제공  
- 커널 동기화 및 스레드 제어는 Mach 기능을 사용하며, 파일 시스템, 네트워크 드라이버는 BSD와 연결됨  
- 드라이버는 Kext로 동적 로딩 가능하며, Mach-O 포맷으로 커널 메모리에 로딩됨  
  
##### Mach IPC와 메시지 전달  
  
- Mach 포트는 커널과 사용자 공간 사이, 혹은 사용자 프로세스 간의 주요 IPC 메커니즘  
- 각 프로세스는 Mach 포트를 통해 제어할 수 있으며, launchd 같은 시스템 데몬이 포트를 통해 프로세스를 제어함  
- Grand Central Dispatch, XPC 등 macOS의 고급 기능은 Mach 메시지를 기반으로 구현됨  
- Mach 메시지는 포트 권한 시스템이 있어 보안성이 높고, 포트 전송, 공유 메모리 전송이 가능함  
- MIG(Mach Interface Generator)는 커널과 사용자 간 메시지 기반 RPC 코드 자동 생성에 사용됨  
- DriverKit은 Mach IPC 기반으로 커널과 사용자 공간 드라이버 간 통신을 구현함  
  
#### 스케줄러 및 스레드 관리  
  
- Mach 기반의 우선순위 기반 라운드로빈 스케줄러에서 진화  
- 각 CPU는 개별 Run Queue를 가지며, 스레드는 우선순위 기반으로 스케줄됨  
- iOS 도입 이후 앱 역할(백그라운드/포그라운드)에 따른 스케줄링 정책 도입  
- QoS(Quality of Service) 클래스 기반 스케줄링: 사용자 인터랙티브, 백그라운드 등 작업 유형에 따라 우선순위 조정  
- Apple Silicon에서는 QoS에 따라 효율 코어/고성능 코어에 스레드를 할당  
- 실시간 스레드(오디오 등)는 실시간 큐를 통해 우선 실행되며, macOS 10.4부터 deadline 스케줄링 지원  
- 전력 관리 협업: Idle 스레드, 타이머 결합, 절전 상태 진입 등을 통한 모바일 성능 최적화  
  
#### 메모리 관리와 가상 메모리  
  
- Mach VM은 XNU 메모리 시스템의 핵심 구성으로, 강력하고 유연한 설계를 가짐  
- 가상 주소 공간은 copy-on-write 기반이며, fork() 시 효율적 메모리 복제가 가능함  
- 메모리 객체(Memory Object)와 페이저(Pager) 구조:  
  - `dynamic_pager` 사용자 공간 데몬이 swap 영역을 관리함  
  - 파일 매핑은 vnode pager를 통해 커널 내에서 처리  
- Mavericks부터는 압축 메모리 도입: 메모리 부족 시 디스크 스왑 대신 페이지를 압축해 보존  
- pmap: 각 아키텍처의 물리 메모리와 페이지 테이블을 관리하는 머신 종속 계층  
- 커널은 별도 주소 공간을 가지며 일부 영역은 고정(wired) 메모리로 설정됨  
- macOS는 디버깅용 가드 페이지, zero-fill 할당, 분할 보호 등을 통해 메모리 보안을 강화함  
- Mach VM은 공유 메모리, Inheritance 설정 등을 통해 프레임워크 공유 등을 효율적으로 처리함  
- Apple Silicon에서는 GPU와 메모리 공간이 통합되어 있어 Mach VM이 메모리 특성을 기반으로 할당 최적화 수행  
  
#### 가상화 지원  
  
- XNU는 초기에 하이퍼바이저 기능이 없었지만, OS X 10.10부터 Hypervisor.framework를 통해 가상화 지원 시작  
- Intel 기반에서는 VT-x를 활용해 사용자 공간 VM을 실행할 수 있게 됨  
- ARM 기반 Apple Silicon에서는 Virtualization.framework를 통해 EL2 가상화 기능 활용  
- 커널 내부 하이퍼바이저는 가상 메모리, vCPU 트랩 처리, 스케줄링 등을 담당  
- XNU의 스레드와 Mach 태스크 구조를 활용해 vCPU를 호스트 스레드로 처리  
- macOS에서 Rosetta 2와 같은 x86 에뮬레이션 기능도 제공하며, syscall 트랜슬레이션과 ABI 호환성 제공  
- iOS 15부터는 제한된 형태로 iOS에서도 가상화 허용 (개발자 모드 필요)  
  
#### 보안 컴퓨팅 구조  
  
- **Secure Enclave**:  
  - Apple SoC에 통합된 독립된 보안 서브시스템  
  - sepOS라는 별도 마이크로커널을 실행하며, 생체 정보, 암호 키 등을 보호  
  - 메인 커널이 손상되어도 격리된 보안 처리를 유지함  
- **Exclaves**:  
  - macOS 14.4 및 iOS 17부터 도입된 새로운 격리 영역  
  - Apple ID 인증, 오디오 버퍼, 센서 데이터 등 민감 자원을 메인 커널 외부 영역으로 분리  
  - `ExclaveKextClient.kext` 등 전용 Kext와 프레임워크로 제어  
  - 커널이 손상되어도 exclave 영역은 독립적으로 보호됨  
- enclave는 시스템 내부에 포함된 영역이고, exclave는 시스템 외부에 연결된 분리 영역이라는 개념을 반영함  
  
### 결론  
  
- XNU는 마이크로커널과 모놀리식 커널의 장점을 절충한 실용적인 하이브리드 구조를 가진 커널임  
- Mach의 추상화 계층은 다양한 CPU 아키텍처 전환과 시스템 확장을 가능하게 하며, BSD는 POSIX 호환성과 안정된 유닉스 환경을 제공함  
- Apple은 Mach IPC를 통해 필요할 때 사용자 공간으로 기능을 분리하고, 커널 내부는 효율성을 위해 직접 연결함  
- 드라이버(User-space DriverKit), 가상화(Hypervisor.framework), 스케줄러(QoS), 메모리 관리(Compressed Memory) 등 다층적인 아키텍처를 기반으로 현대 시스템 요구에 유연하게 대응함  
- Darwin과 XNU는 NeXTSTEP에서 출발해 수억 대의 Apple 기기의 코어로 발전하였으며, 계속해서 진화 중임

## Comments



_No public comments on this page._
