加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理、内存管理等主要模块知识。
通过阅读教复杂的代码,锻炼自己复杂项目代码的阅读能力。对于一般简短的程序,可以从main函数逐行阅读理解;对于复杂的项目,只能在了解源码主要结构的情况下,抓住某个具体的功能进行阅读。
Linux较新版本代码在百万行以上,而0.11版本内核不超过2万行代码。比较新版本的Linux内核源码太多且内容庞杂,自身能力不足,没有能力阅读。早期版本的代码虽然功能简陋,但基本功能都有,属于麻雀虽小五脏俱全,对于新手来说最适合不过。
不足在于0.11版本的代码中不包含专门的进程等待队列、TCP/IP网络等方面非常重要的代码,对内存的分配和使用与先进的内核也有所区别。可以在学习0.11版本代码之后,通过较新版本源码学习。
内核位于用户层与硬件层之间,向下管理底层CPU、内存、磁盘等硬件,并向上通过系统调用的方式提供服务。0.11内核主要部分包括文件子系统和进程管理子系统,进程管理子系统进一步可分为内存管理、进程调度、进程通信三个主要模块。
代码文件从功能上可分为三类:
主要包括两个代码文件:
Linux中应用程序调用内核的功能是通过中断调用int 0x80进行的,寄存器eax中放调用号,每个调用号对应一个系统调用函数。实现系统调用的相关文件包括system_call.s、fork.c、signal.c和exit.c文件。
包括schedule.c、mktime.c、panic.c、printk.c和vsprintf.c。