iOS 启动

271 阅读1分钟

、XNU加载App Mach-O

iOS 系统是基于 ARM 架构的,从上到下可以分为四层:用户体验层(含SpringBoard、Spotlight等)、应用框架层(Cocoa等框架)、核心框架层(Metal等图形和媒体核心框架)和 Darwin 层(操作系统核心,含了系统内核 XNU、驱动等)。

XNU是Darwin的内核;主要有Mach、BSD、IOKit;Mach是内环,负责操作系统最基础的工作,包括进程和线程抽象、处理器调度、IPC(进程间通信)、消息机制、虚拟内存管理、内存保护等;而BSD层可以看作围绕 Mach 层的一个外环,其提供了诸如进程管理、文件系统和网络等功能;

App的二进制文件由iOS系统内核XNU加载的;XNU 加载就是为 Mach-O 创建一个新进程,建立虚拟内存空间,解析 Mach-O 文件,最后映射到内存空间;

具体加载流程概括为:fork 新进程;为 Mach-O 分配内存;解析 Mach-O;读取 Mach-O 头信息;遍历 load command信息,将 Mach-O 映射到内存;启动 dyld( 用户态进程,不在 XNU内,加载动态库等)

juejin.cn/post/684490…