33 | iOS 系统内核 XNU:App 如何加载?
该思维导图由 AI 生成,仅供参考
iOS 系统架构
- 深入了解
- 翻译
- 解释
- 总结
iOS系统内核XNU是支撑App加载的关键组成部分。XNU采用了微内核Mach和宏内核BSD的混合内核,具备微内核和宏内核的优点。文章介绍了iOS系统架构,包括用户体验层、应用框架层、核心框架层和Darwin层,以及XNU内部由Mach、BSD、驱动API IOKit组成。在XNU加载App时,Mach负责进程和线程抽象、处理器调度、进程间通信等基本工作,而BSD提供了更现代、更易用的内核接口,以及POSIX的兼容。IOKit则是硬件驱动程序的运行环境。通过深入了解XNU的内部结构和加载App的过程,读者可以更全面地理解iOS系统的原理。文章还介绍了Mach-O文件的加载过程,包括fork新进程、为Mach-O分配内存、解析Mach-O文件、映射到内存空间以及启动dyld的流程。总体来说,XNU加载App的流程可以概括为创建新进程、为Mach-O分配内存、解析Mach-O、映射到内存并启动dyld。这篇文章深入浅出地介绍了iOS系统内核XNU的加载App过程,对于想深入了解iOS系统原理的读者具有很高的参考价值。
《iOS 开发高手课》,新⼈⾸单¥59
全部留言(14)
- 最新
- 精选
- 赵国辉老师,有没有计划讲解一下dyld的工作过程和原理,非常想学习一下
作者回复: 可以看这篇 https://www.mikeash.com/pyblog/friday-qa-2012-11-09-dyld-dynamic-linking-on-os-x.html
2019-05-294 - Bill多从提到了BSD BSD全称到底是啥
作者回复: https://zh.wikipedia.org/zh/BSD
2019-10-091 - 烩面老师,是先 fork 出新进程,还是先分配内存呢? 小结和上面对 __mac_execve 函数的分析上好像有点出入 。。。
作者回复: fork 新进程之前内存并没有分配给新进程,是在 fork 新进程后再分配的,调用的函数是 exec_activate_image,这个函数会依据 execsw 加载二进制文件格式进行内存映射,对内存进行分配,对于 Mach-O 格式使用的是 exec_mach_imgact() 函数。文中已有说明。
2019-05-261 - bart推荐大家回顾一下大学的《操作系统》,然后看一下《 深入解析Mac OSX & IOS 操作系统》,这样听起来会畅快很多。2019-05-3029
- 毛成方Mike Ash文章最后总结说道大部分工程师不会去在意这些细节 但是当你在遇到动态链接等报错的时候 你讲更好去分析和解决它们。换句话说 我们要走出自己的舒适区 去研究新的技术 碰壁 总结 才能有更好的成长 去挑战更大的平台。2019-06-039
- Geek读后感: 真的看不懂,iOS开发需要这么深入吗?2019-05-3042
- xilie读后感: 真的看不懂,iOS开发需要这么深入吗?2019-05-2911
- D所以App的Mach-O 文件到底是由XNU加载到内存的还是由dyld加载到内存的?以前一直认为是dyld 加载App的Mac-o 并解析加载load commands。现在越来越看不懂了...2021-08-111
- Wim大神能讲一下“点击appIcon到app启动”或者“被别的应用拉起的启动”具体的底层过程吗?2020-12-08
- Geek_9dbcb4文中“加载 Mach-O 文件,内核会 fork 进程,并对进程进行一些基本设置,比如为进程分配虚拟内存、为进程创建主线程、代码签名等”。 问题,这个地方的代码签名,不同于我们证书的私钥对APP的签名吧?也不同于苹果的私钥对APP的再次签名吧?2020-04-18