以下为每周六实验室内核讨论课我所主讲的主要内容,在百度文库和CSDN下载频道中上传有我所讲的PPT原稿。
现对以前做个补充,以后每次讲完之后及时更新。
9月29日星期六上午:
主讲进程描述符结构体task_struct数据结构,由于task_struct这个结构体是系统感知进程存在的唯一标志,linux内核涉及进程和程序的所有算法都是围绕这个数据结构建立的,里面存在上百个字段,表示了进程的状态、标识符、进程之间的链接关系、进程调度相关的信息、时间和定时器信息、 文件系统信息、虚拟内存信息、与进程间通信相关信息等等等等。
可以说进程描述符是我阅读Linux内核源代码的起点,很多概念都没有,因此无论是看书还是看代码可以说是煎熬。
此次主要讲解的内容包括:
- 内核中经常出现的两个数据结构——双向链表、散列表;
- 进程的状态标志;
- 进程的标识符;
- 进程之间的关系——父子关系、兄弟关系;
- PID与PID散列表的联系;
对于最后一点,由于2.6以后内核版本引入了命名空间机制,导致较2.6之前内核代码有较大变化,网上资料也较少,完全是我一点一点抠出来,感觉还有一个点不是很明白,准备找个时间再次阅读一遍。
PPT下载地址:
百度文库:http://wenku.baidu.com/view/d3aa15c089eb172ded63b78d.html?st=1
CSDN:http://download.csdn.net/detail/hazir/4736028
10月20日星期六上午:
主讲进程切换的一段汇编代码switch_to,这段我精简之后只有10行的汇编代码,是内核完成进程切换的核心代码,比较晦涩难懂。主要参考《情景分析》一书,才有点眉目。
此次主要讲解的内容包括:
- 深入分析进程切换的核心代码switch_to;
- 解释为什么使用三个参数prev,next,last;
- 对新建进程切换的特殊情况进行说明;
我们小组主讲进程调度,但我由于花太长时间在几行汇编代码上,导致对于调度整个过程没有做很好的理解,不过刘杰同志最后编写的关于进程调度非常详细的读书笔记对我帮助很大。
PPT下载地址:
百度文库:http://wenku.baidu.com/view/f9a17542b307e87101f6968d.html?st=1
CSDN:http://download.csdn.net/detail/hazir/4736033
11月3日星期六上午:
主讲信号机制中关于信号传递部分。经过近两个月的阅读内核源码,现在读源码已经没有开始时候头大的感觉,慢慢找到一些套路,因此信号机制这块我自认为理解的还是不错的,当然参考了不少书和网上的资源的前提下。
此次主要讲解的内容包括:
- 信号的处理阶段;
- 信号处理的时机及方式;
- 深入讲解了进程处理信号时由内核态到用户态,再由用户态到内核态的过程;
由于电脑出现了异常状态,后半部分都没有使用PPT,只好在小黑板上画出整个过程,对于这种动态的过程,感觉这样效果比放映PPT效果要好很多。这也启示我下次要注意讲解之前测试好设备,否则耽误大家的时间了。
PPT下载地址:
百度文库:http://wenku.baidu.com/view/50e007cbda38376baf1fae8d.html?st=1
CSDN:http://download.csdn.net/detail/hazir/4736049
最近更新:2012.11.6
Read the Fucking Source Code!
——Linus Torvalds