闲话Linux内核——学习,揣摩与玩味
最早接触Linux内核是在大三的时候,那时《操作系统》的课程设计就是进行Linux内核源代码的分析与进程调度的改进。题目是大的有点吓人,特
别是对那时一个涉足未深的年轻人看来。不过那时做的事情很简单,认认真真的看了《Linux内核源代码情景分析》的前言部分(主要讲的AT&T汇
编语言,内核中一些特殊的编程规则),与进程调度相关的部分,包括进程的管理,进程的切换,进程与中断,软中断,系统调用,进程互斥与同步机制。并画了几
张图阐述了进程调度的路线,对spinlock机制进行了深入的剖析。明白了2.4的内核为何是非抢占式内核,进程调度器其实也不是什么神奇的东 东——
一个函数罢了,啥叫process
context。同时,为了完成“进程调度机制的改进”,看了实现可抢占的两个补丁,哦,现在已经整合进2.6了,也怪不得昨天看2.6进程调度的介绍有
种似曾相识的感觉。
可以说,那时的分析完全是理论学习。对于内核编程的实践几乎没有。带来的好处最主要的在于提高了对操作系统运行的认识与提高了代码的阅读能
力。
回头去看这段往事,总觉得存在着有所改进的地方。
现在看来,内核是啥呢?只是一个比较大的软件项目,可以拿它与Eclipse相比,或者mplayer相比,或者就是与任何一个开源软件处
于同层次的东西,只是它更具复杂性,涉及到的软件与硬件的东西更全面罢了。
或者说,经过这几年对开源项目的接触,对软件项目的参与,Linux内核在我心目中的神秘感已然消失,Eclipse在软件架框方面应该可
以算出类拔萃,EFI在BIOS这一层上也实现了新的可扩展的和良好的设备管理模型,而Linux在操作系统的层次上也应该是一个典范,值得去学习,去揣
摩,去玩味。
2.6内核之于2.4内核,无疑是前进了一大步,进程调度,设备管理等等方面都形成了更良好的framework。同时也涌现出了好多优秀
的传道士及其杰作,如《Linux Kernel Development Second Edition》《Linux Device Driver
Third Edition》。我更想把这些带有浓厚实践性质的书籍当做进入Linux
内核世界的一个极佳的“切入点”。想起Eclipse世界一本与此类似的书《contributing to
eclipse》,一个提倡的规则就是“MONKEY SEE/MONKEY DO RULE Always start by copying the
structure of a similar plug-in.”。从内核中学习内核,增强内核,应该是内核编程的一个原则。
不可否认地,“情景分析”是《Linux内核源代码情景分
相关文档:
学东西,往往实例才是最让人感兴趣的,老是学基础理论,不动手,感觉没有成就感,呵呵。
下面先来一个实例。我们通过创建两个线程来实现对一个数的递加。
或许这个实例没有实际运用的价值,但是稍微改动一下,我们就可以用到其他地方去拉。
下面是我们的代码:
/*thread_example.c : c multiple thread programmi ......
包含3个文件夹
目录组织结构如下:
inc/hello.h
main/main.c, Makefile
src/hello.c
文件内容如下:
hello.h:
void hello(char name[]);
main.c:
#include <stdio.h>
#include "../inc/hello.h"
// The second hello.h should in ""
int main()
{
hello("GCC");
printf("Haha Linux Ub ......
包含3个文件夹,和一个文件Makefile
目录组织结构如下:
Makefile
inc/hello.h
main/main.c
src/hello.c
Makefile文件在外面,这样生成的.o和可执行文件都在外面,clean之后会很干净,结构清晰
文件内容如下:
Makefile(之所以用大写,因为make可以识别Makefile和makefile,用大写可以鲜明一些)::
# String declar ......
google怎样使用linux(内核)
今年的linux内核开发大会上,google的开发人员也上台做了名为“how google use linux"的演讲。我斗胆翻译注解一番——括号内为注解,欢迎读者斧正。
(前面几段讲google对linux kernel代码的管理及跟进,偏细碎,不翻译了)
在google为linux加入的代码中,3/4是对内核核心 ......