XNU

XNU(X is Not Unix)는 Apple의 Darwin과 macOS·iOS 등 운영체제의 핵심을 이루는 하이브리드 커널이다. 카네기 멀런 대학교의 Mach 기술과 BSD 프로세스·파일 시스템·네트워크 구성 요소, C++ 기반의 I/O Kit 드라이버 프레임워크를 하나의 커널 환경에...

정식 명칭X is Not Unix
분류하이브리드 운영체제 커널
개발Apple
선행 기술Mach, BSD, NeXTSTEP
상위 운영체제Darwin
내부 구성Mach, BSD, I/O Kit
프로세스 관리Mach task·thread 및 BSD 프로세스
네트워크·파일BSD 하위 시스템
장치 관리I/O Kit 및 현대 드라이버 기술
대표 사용처macOS, iOS, watchOS, tvOS, visionOS
아키텍처x86-64, ARM64
라이선스APSL 및 구성 요소별 라이선스
소스 코드Apple 공개 XNU

XNU(X is Not Unix)는 Apple의 Darwin과 macOS·iOS 등 운영체제의 핵심을 이루는 하이브리드 커널이다. 카네기 멀런 대학교의 Mach 기술과 BSD 프로세스·파일 시스템·네트워크 구성 요소, C++ 기반의 I/O Kit 드라이버 프레임워크를 하나의 커널 환경에 결합한다. Mach에서 유래한 기능을 포함하지만 전체 시스템을 순수한 Mach 3.0식 사용자 공간 마이크로커널이라고 분류할 수는 없다.[1]

XNU의 Mach 구성 요소는 태스크와 스레드, 프로세서 스케줄링, 가상 메모리 보호와 메시지 중심 IPC를 제공한다. BSD 계층은 UNIX 프로세스 의미론과 사용자·그룹 권한, 파일 디스크립터, 소켓, 파일 시스템 및 시스템 호출을 담당하며, I/O Kit은 장치와 드라이버를 관리하는 객체 모델을 제공한다. 이러한 부분들은 하나의 커널 주소 공간에서 결합되므로 XNU는 Mach 3.0의 서버 분리형 마이크로커널과 구현 방법이 다르다.[2]

XNU의 직접적인 역사적 기반은 NeXT의 Mach·BSD 결합 운영체제와 Apple의 Darwin으로 이어진다. 이후 macOS뿐 아니라 iOS, iPadOS, watchOS, tvOS와 visionOS 등의 시스템 기반이 되었고, 하드웨어에 따라 드라이버, 보안 모델, 사용자 공간 서비스를 별도로 조정해 왔다. Apple이 공개하는 커널 소스는 Darwin 및 XNU의 기술 구조를 연구할 수 있게 하지만 각 제품의 독점 그래픽 환경과 모든 프레임워크까지 함께 제공하는 것은 아니다.[3]

XNU에서 Mach 하위 시스템은 스레드와 태스크, CPU 스케줄링, 가상 메모리와 메시지 전달을 처리한다. BSD 계층은 프로세스 ID, 사용자 자격 정보, 파일·소켓과 POSIX API를 구현하고 I/O Kit은 장치 드라이버의 계층 구조를 제공한다. 이 요소들은 한 커널 안에서 상호 작용하므로 Mach 3.0 마이크로커널 위의 개별 사용자 공간 UNIX 서버와 같은 구성이라고 볼 수 없다.[4]

커널의 핵심 기술은 NeXT 계열 UNIX 운영체제에서 시작하여 Apple의 Darwin·Mac OS X 개발과 함께 확장되었다. 이후 Apple silicon으로의 전환과 각기 다른 제품군에 맞는 하드웨어·보안 정책을 수용하면서도 공통적인 XNU 기반을 유지했다. macOS와 iOS 등 운영체제가 커널 코드를 공유한다는 사실은 그래픽·응용 프로그램 프레임워크나 사용자 공간 전체가 동일하다는 뜻이 아니다.[5]

역사

Mach와 NeXTSTEP

Darwin의 공개

macOS·iOS로의 확장

커널 구조

Mach 하위 시스템

BSD 하위 시스템

I/O Kit

보안 모듈

프로세스와 스레드

Mach 태스크

BSD 프로세스

스케줄러

메모리 관리

가상 메모리

메모리 압축

IPC

Mach 포트

메시지

MIG

파일 시스템과 네트워크

장치 드라이버

시스템 호출 및 ABI

커널 소스와 개발

지원 아키텍처

관련 문서

  1. 관련 자료 ↩
  2. Apple: Kernel Architecture Overview ↩
  3. Apple 공개 XNU 소스 ↩
  4. Apple Kernel Architecture ↩
  5. Apple XNU README ↩