MINIX3 源码导读
----内核与部分 PM 源码
作者: 郑涛
1
目录
前言________________________________________________________________ 5
第一章 _____________________________________________________________ 6
MINIX3 导读分析 ____________________________________________________ 6
第2 章_____________________________________________________________ 13
中断机制 __________________________________________________________ 13
2.1 分析前得实现说明 ___________________________________________________ 13
2.2 中断机制概述 _______________________________________________________ 13
2.3Intel 386 中断机制 ____________________________________________________ 13
2.4MINIX 操控下的 386 中断硬件机制 _____________________________________ 14
2.5 MINIX3 中断机制源码分析____________________________________________ 15
2.6MINIX3 其部件处理中断举例 __________________________________________ 30
2.7 MINIX3 系统调用处理机制____________________________________________ 33
2.8MINIX3异常处理 _________________________________________________ 36
第三章 ____________________________________________________________ 40
MINIX3 保护模式分析 _______________________________________________ 40
3.1 INTEL 保护模式概要 _________________________________________________ 40
MINIX3 保护模式源码分析 ______________________________________________ 41
第四章 ____________________________________________________________ 55
MINIX3 内核时钟分析 _______________________________________________ 55
4.1 内核时钟概要 _______________________________________________________ 55
4.2 MINIX3 内核时钟源码导读____________________________________________ 57
4.3 与内核时钟有关的系统任务 __________________________________________ 70
第5 章_____________________________________________________________ 75
MINIX3 进程调度分析 _______________________________________________ 75
5.1MINIX3 进程调度概要 ________________________________________________ 75
5.2 MINIX3 进程调度源码分析____________________________________________ 76
5.3 MINIX3 进程调度与中断返回处理的结合 ________________________________ 84
5.4MINIX3 时间调度与内核其他模块的关系 _________________________________ 85
第6 章_____________________________________________________________ 87
2
MINIX3 进程通信分析 _______________________________________________ 87
6.1MINIX3 进程通信概要 ________________________________________________ 87
6.2 MINIX3 进程通信原语介绍____________________________________________ 87
6.3 MINIX3 消息机制的消息格式__________________________________________ 88
6.4 MINIX3 消息机制源码导读____________________________________________ 90
6.5 MINIX3 内核部件使用消息机制举例 ___________________________________ 110
6.6 MINIX3 IPC 总结 ___________________________________________________ 112
第7 章____________________________________________________________ 113
MINIX3 系统任务分析 ______________________________________________ 113
7.1 MINIX3 系统任务概要_______________________________________________ 113
7.2 MINIX3 源码导读___________________________________________________ 116
7.3 系统调用函数举例 __________________________________________________ 126
第8 章____________________________________________________________ 137
MINIX3 启动初始化 ________________________________________________ 137
8.1MINIX3 启动汇编部分源码分析 _______________________________________ 137
8.2 MINIX3 内核主函数源码分析_________________________________________ 140
第9 章____________________________________________________________ 147
MINIX3 服务器PM 框架分析 ________________________________________ 147
9.1 PM 机制概述 _______________________________________________________ 147
9.2 PM 进程主循环导读 _________________________________________________ 147
9.3 进程属性设置部分 __________________________________________________ 152
第10 章___________________________________________________________ 155
PM 时钟机制 ______________________________________________________ 155
10.1 Minix3 PM 时钟机制概述 ___________________________________________ 155
10.2 MINIX3PM 时钟机制源码导读: ____________________________________ 155
第11 章 ___________________________________________________________ 169
信号量机制 _______________________________________________________ 169
11.1 2 个程序的例子 ____________________________________________________ 169
11.2 MINIX 信号量机制概述 _____________________________________________ 170
11.3 MINIX3 信号量机制源码导读 ________________________________________ 171
第12 章___________________________________________________________ 188
MINIX3 内核整体架构回顾及内核定性分析 ____________________________ 188
3
12.1 注意事项 _____________________________________________________ 188
12.2 MINIX3 架构______________________________________________________ 188
12.3MINIX3 的系能分析 ________________________________________________ 189
12.4 MINIX3 内核部分定量分析尝试______________________________________ 192
附录______________________________________________________________ 195
参考文献: _______________________________________________________ 195
4
前言
你现在拿的这本小册子(当然它不是很薄)只能算上一份技术文档,不能称之为
书,书是可以公开印刷的,这本小册子是不能印刷的,我是以 MINIX3 为源码对
其部分模块进行分析,MINIX3 设计者已经郑重说明:MINIX3 源码禁止以任何
的形式出现公共出版物中。所以技术文档严禁用于任何商业用途
现在来谈谈 MINIX3 和本技术文档,为什么选取 MINIX3 进行分析呢?首先,
我认为 MINIX3 的架构很吸引人-----微内核,一个我个人认为是未来计算机操作
系统的主流设计思想。其次,公开源码操作系统不是很多,选择的也比较少,当
今主流的开源操作系统是 LINUX,说来也奇怪,分析 LINUX 内核的书籍多的不
得了,不知道是不是因为 LINUX 是商业的原因!读 LINUX 内核可以赚钱,网
上搜搜 MINIX3 的分析,很少,甚至很多学 OS 的都不知道这款操作系统。也正
是因为 MINIX3 的技术文档少,几乎没有,除了那本操作系统设计与实现那本书
有,其他都没有。但是 MINIX3 设计者写 MINIX3 太过简单,可能他认为只要这
么简单的讲解读者就应该明白,(谁让他是世界级的顶级大牛)文档少造成分析
的困难和更加有成就感,自然分析 MINIX3 更加给力,最后,如果分析 LINUX
那就是一个没完没了的体力活,我还是一个本科生,我才不想天天搂着一沓厚重
的源码跑到图书馆里分析到每天晚上闭馆,那样子很伤人啊!!我还是应该腾出
时间玩,运动,跑步,还有打游戏,像星际争霸,而 MINIX3 内核又是我可以接
受的范围之内,加之 MINIX3 是微内核结构,所以我是非常的有兴趣。
谈完了我为啥选择 MINIX3 分析的原因之后,我想谈谈这份技术分析文档,由于
我时间非常短,从拿到源码到开始写这份文档的时候,我中间就是度过了一个寒
假,大概一个半月的时间,加上写这份文档,大概 2 个半月,虽说我以前看过部
分 Linux 内核,但是之前是看,这次本身时间短,加之又要形成书面文字,所以
里面的错误肯定有,希望读者你能够及时告诉我,或者你看到有任何问题 请与
我联系 我的邮件是 sfw_toms@163.com 我大概是 1 个礼拜看一次邮箱。
谈谈技术文档的内容吧,时间关系,我主要是分析 kernel 模块和 PM 模块的信号
量机制模块,关于 FS i/o 以及 pm 其他模块我想我有时间在分析吧,现在是没有
时间!
最后给大家一个建议:读内核 心要静,禅定有助于你静心,只有足够的静,足
够的冷静,你才能进入内核的世界!!!
最后在此强调一点:2 个半月来分析内核并写出内核文档,对我来讲是一个非常
大的挑战,我希望你们发现任何问题 一定要和我联系。我的邮件已经写在上面,
最后的最后,我实在想睡觉了 都已经凌晨 5 点了!我先睡觉了,欢迎你们往后
面“旅行”,祝你“旅途”愉快!
sfwtoms
5
第一章
MINIX3 导读分析
一个操作系统的分析是属于一个非常庞大的工程,操作系统就像是一个人造的
人,每一个模块想完全发挥功效,很有可能需要很多模块的支持才能够实现。所
以在分析 MINIX3 时,我认为同时看多个模块对于理解 MINIX3 是有好处的,特
别是因为 MINIX3 是采用微内核结构,也就造成阅读源码的一个比较大的障碍。
在此我统领的描述下 MINIX3 和 PM 部分内容,给读者 MINIX3 形成一个整体的
导读框架:
1 MINIX3 采用微内核结构,什么是微内核呢?MINIX3 设计者认为除了部分非
常重要的 像中断机制,消息机制,保护模式机制等实现,必须处在内核里执行,
其他模块都放在放在用户模块执行。这种设计思想可能和 LINUX/UNIX 有非常
大的不同,以 LINUX 为例,LIUNX 将驱动,进程管理,内存管理,中断,消息
机制等等都放在内核中,这就造成了 LINUX 内核非常的庞大,MINIX3 设计者
认为,内核越大,不安全的可能性就越大,这点我没有把握,但是有点我是相信
的,内核越大,维护越大,随着内核不断的扩大,给内核维护者带来极大的困难。
MINIX3 怎么实现这种微内核机制呢?MINIX3 采用非常巧妙的方法:------消息
传递机制。利用消息传递机制来实现内核和外核的通信,当然不光光是消息传递
机制,也要通过非常复杂的布局才能够实现,关于消息传递机制,可以参考进程
间通信模块分析那一章。
6
2 MINIX3 怎么实现中断机制呢?MINIX3 为了兼容 8259,设立了非常多的编
程技巧来完成整个中断机制,对于中断陷入,中断执行,以及中断的收尾工作,
都体现了 MINIX3 优秀的设计思想-------简明,技巧. 具体内核可以参考 MINIX3
7
中断处理分析
3 MINIX3 在 386 平台能够得以运行,就必须容忍 386 这个历史包袱。MINIX3
很巧妙的省去了一些繁杂的工作。以很简单的模式驾驭了 386,具体可以参考
MINIX3 保护模式分析
4 时钟是可谓是整个 MINIX3 一个最核心的部件,事实上时钟是所有分时操作
系统的运行的心脏,MINIX3 是如何使得时钟能够得以高效安全的运行呢?怎么
来处理多个内核警报器问题呢? 具体内容可以参考 MINIX3 内核时钟分析那一
章
8