운영체제(OS)는 하드웨어와 애플리케이션 사이에서 핵심적인 역할을 수행합니다.
운영체제의 역할
| 기능 | 설명 |
|---|
| 프로세스 관리 | 여러 앱(프로세스)의 실행을 관리 |
| 메모리 관리 | RAM의 사용을 효율적으로 분배 |
| 파일 시스템 | 데이터의 저장 및 접근을 관리 |
| 하드웨어 추상화 | 디바이스 드라이버를 통해 하드웨어 접근을 통제 |
| 보안 및 권한 관리 | 사용자와 앱의 권한을 제어하여 시스템을 보호 |
iOS의 운영체제 구조
iOS는 macOS 기반의 XNU 커널 위에 구축되어있으며 다음과 같은 계층으로 구성됨
- Core OS(Kernel)
- XNU 커널: Mach + BSD
- 보안, 메모리, 쓰레드, 파일 시스템
- Core Services
- Foundation, Grand Central Dispatch (GCD), SQLite 등
- Media Layer
- AVFoundation, CoreAudio, CoreGraphics 등
- Cocoa Touch (UIKit)
- 사용자 인터페이스 구성 요소, 이벤트 처리
운영체제가 없다면 앱 개발은 어떻게 달라질까?
- 하드웨어 접근을 직접 구현해야 하며, 모든 디바이스(메모리, 카메라 등)의 명세에 맞는 코드를 수동으로 작성해야함
- 멀티태스킹, 메모리 보호, 보안기능 x
- 애플리케이션 간 충돌 위협 증가, 리소스 공유 문제 발생
즉, 모던 앱 개발이 사실상 불가능 or 펌웨어 수준 저수준 코드 개발 필요
iOS의 샌드박스 구조란?
Sandboxing은 각 앱이 독립된 환경(디렉토리 및 권한)에서만 실행되도록 격리하는 보안 메커니즘
- 앱은 오직 자신의 컨테이너 디렉토리에만 접근 가능
- 다른 앱의 데이터나 시스템 자원에 접근 x
- 시스템 호출, 파일 접근, 네트워크 요청 등은 권한 기반으로 제한
샌드박스 구조의 장단점
| 장점 | 단점 |
|---|
| 앱 간 간섭 최소화 | 앱 간 데이터 공유 어려움 |
| 시스템 보호 강화 | 기능 제한 (예: 파일 시스템 접근 제한) |
| 악성 앱 감염 차단 | 특정 기능(백업, 디버깅 등) 구현 복잡 |
Kernel이란?
커널은 운영체제의 핵심으로, 하드웨어와 소프트웨어 간 중재자 역할 수행
- 메모리, CPU, I/O 장치 관리
- 시스템 호출 처리 (open, read, fork 등)
- 스케줄링 및 인터럽트 처리
iOS는 XNU 커널을 사용하며, Mach 커널과 BSD 계층이 통합된 구조
앱에서 직접 커널 기능을 호출할수 있나?
불가능
- iOS 앱은 User Space에서 실행되며, Kernel Space에 접근 불가
- 시스템 API(Foundation, POSIX, GCD등)를 통해 간적접으로 커널 기능을 사용
- 시스템 호출(System Calls)은 라이브러리를 통해 래핑되어 제공
ex) DispatchQueue -> GCD -> Mach 메시지 -> 커널 스케줄링