APP下载

基于“Linux内核分析”的教学内容研究与实践

2009-08-28陈莉君王小银

计算机教育 2009年14期
关键词:源代码教学改革

陈莉君 梁 琛 王小银

摘要:开放源代码Linux为操作系统教学内容研究与改革带来良好的契机,本文在对Linux内核入门途径分析的基础上,给出了分析Linux内核的原理基础和硬件基础,并探究了操作系统的执行机制,最后给出了实践途径和方法。

关键词:Linux内核;源代码;教学改革

中图分类号:G642 文献标识码:B

1引言

芬兰大学生Linus在赫尔辛基大学学习“操作系统”课程时,不满足于使用教学用操作系统Minix,从着手开发一个简单的程序开始,到逐步开发显示器、键盘和调制解调器的驱动程序,然后写了磁盘驱动程序,文件系统,这样,一个操作系统的原型就形成了。

这个诞生于学生之手的Linux,在Internet这片肥沃的土壤中不断成长,逐步发展为与Unix、Windows并驾齐驱的实用操作系统。与Windows不同,Linux 与Unix外表相似,但它的窗口向所有人完全敞开,任何想了解其内在机理的爱好者都可以走进其内部世界。

在1999年的春季,我们有幸走进了这个开放的世界,那时分析的是Linux内核2.0版,在阅读源代码的基础上,我们编写了《Linux操作系统内核分析》一书,该书曾被指定为中科院考博参考书。随着Linux内核版本的不断更新,我们又陆续编写和翻译了针对Linux内核2.2、2.4及2.6的相关书籍。

Linux内核是由C语言和汇编语言编写的,其全部源代码是一个庞大的世界,如何在这庞大而又复杂的世界中抓住主要内容,如何找到进入Linux内部的突破口,又如何能把Linux的源代码变为自己的所需,并在此基础上进行内核级程序的开发,很多学过操作系统原理而又想进一步实践的软件开发者,对以上问题都有过种种困惑。针对这些问题,在教学的过程中,从教学内容,教学方法以及实践环节等方面,我们进行了探索和改革。

2Linux内核入门

Linux内核入门是不容易的,它之所以难学,在于庞大的规模和涉及的层面。规模一大就不易现出本来面目,浑然一体,自然不容易找到着手之处;层面一多,就会让人眼花缭乱,盘根错节。

Linux源码研究的方法不同于小规模软件。这是由于规模和层面决定的,比如说,在语言学习中,可以采取小步快跑的方法,通过一个个小程序和小尝试,就可以取得渐进的成果,就能从新技术中有所收获。针对Linux,如果没有对整体的把握,即使你对某个局部的算法、技术或是代码再熟悉,也无法将其融入实用。因此,Linux内核入门从以下几方面着手。

2.1Linux内核整体结构

Linux内核虽然实现和Unix系统有很大不同,但是其结构还基本保持和Unix一致,其中功能与操作系统原理中所涉及到的内容大体一致。

Linux 内核除系统调用外,由5个主要的子系统组成,如图1所示。

从图1可以看出,处于中心位置的是进程调度,所有其它的子系统都依赖于它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起,当操作真正完成时,进程恢复执行。例如,当一个进程通过网络发送一条消息时,发送进程被挂起,一直到硬件成功地完成消息的发送。其它子系统(内存管理,虚拟文件系统及进程间通信)以相似的理由依赖于进程调度。

2.2硬件基础

操作系统是一组软件的集合。但它和一般软件不同,因为它是充分挖掘硬件潜能的软件,也可以说,操作系统是横跨软件和硬件的桥梁。因此,要想深入解析操作系统内在的运作机制,就必须搞清楚相关的硬件机制——尤其是内存寻址的硬件机制。

操作系统的设计者必须在硬件相关的代码与硬件无关的代码之间划出清楚的界限,以便于一个操作系统很容易地移植到不同的平台。Linux的设计就做到了这点,它把与硬件相关的代码全部放在arch(architecture一词的缩写,即体系结构相关)的目录下,在这个目录下,可以找到Linux目前版本支持的所有平台,例如,支持的平台有arm、alpha,、i386、m68k、mips等十多种。在这众多的平台中,大家最熟悉的就是X86。因此,首先要了解和熟悉X86与内存管理相关的机制—保护模式机制。

2.3原理基础

操作系统的原理中主要讲述了进程管理、内存管理、文件管理和设备管理。尽管这些原理基于的背景为Unix,但是,因为其要涵盖更多的操作系统,因此,各部分内容显得抽象。而在Linux内核源代码分析中,就是让这些原理适时地落到实处。

进程管理是操作系统的灵魂,因此要从内核实现的角度分析进程赖以存活的各种数据结构。进程作为一个动态变化的实体,可以从生命历程的角度说明进程从诞生到死亡的艰难过程,并给出具体的实现函数。

内存作为计算机系统的重要资源,因为其容量的有限和程序规模的不断扩大,需要从技术上对其容量进行扩充,Linux中对虚拟内存管理的实现建立在分段和分页的原理之上,具体给出其中的部分源代码,使学生体会从理论过渡到实践之间的真实跨越。

3探究操作系统的执行机制

如果说操作系统是资源的管理者,那么归根结底,操作系统是程序赖以执行的坚实基础;因为所谓的进程管理,内存管理,文件管理以及设备管理等,都是因为执行程序而引发的。以这样的大思路为前提,引领学生探究事物本质的兴趣。

进程概念的引入是为了执行程序,这是毋庸置疑的。那么,内存管理呢?一个死气沉沉存放在磁盘上的程序是毫无意义的。程序只有从外存装入内存一行行执行,才会变得生龙活虎,因此,所谓的文件系统以及内存管理等等都是为程序的执行而服务的。

3.1并发执行之根本

多个程序之所以能够有条不紊地执行,是因为Linux内核的核心仲裁者调度程序,也就是内核代码中schedule()函数,鼓励学生阅读这一函数,从根本上认识进程调度的过程,从而明白内核为了进程的并发执行而牵引出一系列的相关东西,真正理解图1中的进程调度所处的核心位置。

3.2内核任务的并发执行

所谓内核任务是指内核态下可以独立执行的内核例程(一个或多个内核函数),每个内核任务运行时都拥有一个独立的程序计数器、栈和一组寄存器。一般来说,内核任务包括内核线程、系统调用、中断服务程序、异常处理程序、下半部等几类。

如果我们把内核看作不断对各种请求进行响应的服务器,那么,正在CPU上执行的进程、发出中断请求的外部设备等就相当于客户。正如服务器要随时响应客户的请求一样,内核也会随时响应进程、中断等的请求。所以说内核中各个任务并不是严格按着顺序依次执行的,而是相互交错执行的。搞清楚各种内核任务的执行机制,犹如把学

生从森林中引领出来,使学生体会操作系统执行机制的奥妙。

4动手实践

内核初学者对内核各个核心子系统有个整体把握,包括它们提供什么样的服务,为什么要提供这样的服务,又是怎样实现的有了初步了解之后,总希望自己写代码一试身手。我们的“内核之旅”www.kerneltravel.net网站,填补课堂教学和实践开发之间的鸿沟。网上发布多期原创专题性电子刊物。针对操作系统爱好者学习Linux之后,苦于无用武之地的现状,在网站上讨论如何进行Linux内核层面上的系统软件开发。并配以大量有实用价值或指导意义的实验,深入浅出的教授学生认识Linux内核,学习Linux内核,开发Linux内核。每期都配有相关的实验和相应的源代码,供大家下载实践。实践内容如下:

(1) 搭建Linux试验系统实例:学生通过亲手构建系统的过程,消除对Linux的恐惧感;

(2) 构建一个简易操作系统(一个可启动的操作系统);

(3) 编写Shell解释程序;

(4) 编写自己的系统调用;

(5) 编写一个内存映射;

(6) 编写一个内核共享链表同步访问的程序;

(7) 实现一个文件系统;

(8) 编写自己的中断系统。

5结束语

“Linux内核分析”是一门引领初学者进入Linux内核的课程,在这样一条引领的路途上,会遇到各种困难和绊脚石。如果说,庞大的Linux内核源代码是一片望不到边的森林,那么,我们教师恰恰就是要给学生以引领,使大家不被茂密森林中的杂草或荆棘所绊倒,为此,我们编写了《Linux操作系统原理与应用》一书,并建设了配套的Linux内核之旅网站的。另外,针对当前2.6内核,我们陆续在网站发布相应的实验代码,同时鼓励读者把网站电子杂志部分的实验代码移植到2.6,以让更多的人分享。在Linux内核之旅的讨论区http://www.lupaworld.com/bbs/ forum-255-1.html,设有专门解答Linux内核问题的论坛。同时,在作者的技术博客http://linuxkernel.lupaworld.com上,不定期发布与内核相关专题的知识。Linux教学与学习之路漫漫兮,在课堂之外,我们西邮Linux兴趣小组www.xiyouLinux.cn在积极主动的学习Linux相关知识。

Linux最本质的思想体现其“自由”和“开放”的思想。自由,意味着世界范围内的知识共享;而开放,则意味着Linux对所有的人都敞开大门。走入Linux内核,源于我们的兴趣,对Linux源代码的深入分析和研究,源于开源社区良好的氛围。这种氛围深深影响了我们,于是,我们对Linux内核源代码的分析结果也无偿的共享于开源社区,希望更多的Linux爱好者分享到我们的成果。

参考文献:

[1] 陈莉君, 康华. Linux操作系统原理与应用[M]. 北京:清华大学出版社,2006.

[2] ANIEL P. BOVET, MARCO CESATI . 深入理解Linux内核[M].3版. 陈莉君,张琼声,张宏伟,译. 北京:中国电力出版社,2007.

[3] Claudia Salzberg Rodriguez, Gordon Fischer, Steven Smolski. Linux内核编程[M]. 陈莉君,贺炎,刘霞林,译. 北京:机械工业出版社,2006.

[4] Robert Love. Linux内核设计与实现[M]. 陈莉君,康华,张波,译. 北京:机械工业出版社,2006.

猜你喜欢

源代码教学改革
基于TXL的源代码插桩技术研究
保护好自己的“源代码”
中职学校“生本课堂”的调查研究与实践
高校三维动画课程教学方法研究
基于人才培养的技工学校德育实效性研究
解密别克安全“源代码”
现代信息技术在高职数学教学改革中的应用研究
以职业技能竞赛为导向的高职单片机实践教学改革研究
微课时代高等数学教学改革的实践与探索
民用飞机A级别机载软件项目源代码到目标代码追溯性分析研究