33 | iOS 系统内核 XNU:App 如何加载?
戴铭
你好,我是戴铭。
在专栏的第 2 篇文章《App 启动速度怎么做优化与监控?》更新完之后,我看到很多同学对启动加载 App 的底层原理表示出了浓厚兴趣。所谓工欲善其事,必先利其器,相信有着好奇心的你,一定也会对支撑着 App 运行的操作系统有着各种各样的疑问。
所以,今天我会先跟你说说 iOS 系统的架构是怎样的,各部分的作用是什么,帮助你理解 iOS 系统的原理,进而更全面地理解它在 App 加载时做了哪些事情?
接下来,我就先跟你聊聊 iOS 的系统架构是怎样的。在理解 iOS 系统架构之前,你最好掌握一些操作系统原理的基础知识。
iOS 系统架构
iOS 系统是基于 ARM 架构的,大致可以分为四层:
最上层是用户体验层,主要是提供用户界面。这一层包含了 SpringBoard、Spotlight、Accessibility。
第二层是应用框架层,是开发者会用到的。这一层包含了开发框架 Cocoa Touch。
第三层是核心框架层,是系统核心功能的框架层。这一层包含了各种图形和媒体核心框架、Metal 等。
第四层是 Darwin 层,是操作系统的核心,属于操作系统的内核态。这一层包含了系统内核 XNU、驱动等。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》,新⼈⾸单¥59
《iOS 开发高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(14)
- 最新
- 精选
- 赵国辉老师,有没有计划讲解一下dyld的工作过程和原理,非常想学习一下
作者回复: 可以看这篇 https://www.mikeash.com/pyblog/friday-qa-2012-11-09-dyld-dynamic-linking-on-os-x.html
4 - Bill多从提到了BSD BSD全称到底是啥
作者回复: https://zh.wikipedia.org/zh/BSD
1 - 烩面老师,是先 fork 出新进程,还是先分配内存呢? 小结和上面对 __mac_execve 函数的分析上好像有点出入 。。。
作者回复: fork 新进程之前内存并没有分配给新进程,是在 fork 新进程后再分配的,调用的函数是 exec_activate_image,这个函数会依据 execsw 加载二进制文件格式进行内存映射,对内存进行分配,对于 Mach-O 格式使用的是 exec_mach_imgact() 函数。文中已有说明。
1 - bart推荐大家回顾一下大学的《操作系统》,然后看一下《 深入解析Mac OSX & IOS 操作系统》,这样听起来会畅快很多。29
- 毛成方Mike Ash文章最后总结说道大部分工程师不会去在意这些细节 但是当你在遇到动态链接等报错的时候 你讲更好去分析和解决它们。换句话说 我们要走出自己的舒适区 去研究新的技术 碰壁 总结 才能有更好的成长 去挑战更大的平台。9
- Geek读后感: 真的看不懂,iOS开发需要这么深入吗?42
- xilie读后感: 真的看不懂,iOS开发需要这么深入吗?11
- D所以App的Mach-O 文件到底是由XNU加载到内存的还是由dyld加载到内存的?以前一直认为是dyld 加载App的Mac-o 并解析加载load commands。现在越来越看不懂了...1
- Wim大神能讲一下“点击appIcon到app启动”或者“被别的应用拉起的启动”具体的底层过程吗?
- Geek_9dbcb4文中“加载 Mach-O 文件,内核会 fork 进程,并对进程进行一些基本设置,比如为进程分配虚拟内存、为进程创建主线程、代码签名等”。 问题,这个地方的代码签名,不同于我们证书的私钥对APP的签名吧?也不同于苹果的私钥对APP的再次签名吧?
收起评论