没有合适的资源?快使用搜索试试~ 我知道了~
首页Linux内核源代码深度解析:陈莉君详解核心技术
Linux内核源代码深度解析:陈莉君详解核心技术
5星 · 超过95%的资源 需积分: 4 9 下载量 77 浏览量
更新于2024-09-24
收藏 2.11MB PDF 举报
《深入分析Linux内核源代码》是由陈莉君编著的一本专业书籍,由人民邮电出版社于2002年8月出版。该书旨在深入解析Linux内核2.4版的源代码,为读者揭示了自由软件Linux操作系统的核心技术。全书共分为13个章节,涵盖了广泛的内核组件,如中断机制、进程调度、内存管理、进程间通信、虚拟文件系统、设备驱动程序和网络子系统等。作者尤其关注Linux内核的基础部分,如进程管理、内存管理和文件管理,这些都是理解Linux运行机制的关键。 书中不仅提供技术细节,还探讨了Linux的整体结构、启动过程以及其独特的模块机制,这对于那些想要深入理解Linux内核,进行内核级编程,或者系统实现者、系统程序员、Linux应用开发者、嵌入式系统开发者、系统管理员,乃至对Linux感兴趣的广大读者来说,都具有极高的参考价值。通过本书,读者不仅能掌握Linux的核心技术,还能了解到Linux发展的趋势和潜力。 作者陈莉君以其丰富的经验,结合实例和深入浅出的语言,带领读者穿越Linux内核的复杂世界,使抽象的概念变得易于理解。此外,书中还提供了详尽的目录索引和内容提要,便于读者快速找到所需的信息。本书的印刷和发行信息,包括开本、印张、字数以及联系方式,对读者购买和查询本书问题提供了便利。 《深入分析Linux内核源代码》是一本实用而权威的教程,适合不同层次的学习者,无论是初学者还是有经验的Linux开发者,都能从中收获宝贵的知识和技能。通过学习这本书,读者将能够更好地理解和掌握Linux内核的工作原理,提升自己的技术水平。
资源详情
资源推荐
第一章
走进
Linux
– 3 –
源代码、全面的测试报告及相应的解决方案。开发者不能随意增加程序的特性和修改代码的
关键部分,如果要修改代码,他们得将其写入错误报告中才能使其有效,并随后接收源代码
控制系统的检查,如果发现修改不合适,修改也可能作废。每个开发者设计系统代码的一个
或几个部分,开发者只有在程序检查过程中才能更改相应的代码。质量保证部门在内部对新
的操作系统进行严格的回归测试,并报告发现的问题,开发者则有责任解决所报告的问题。
质量保证部门采用复杂的统计分析系统以确保在下次发行时有百分之几的程序错误已修改。
总之,商业 UNIX 开发过程使得其代码非常复杂,公司为了保证下次操作系统的修订质
量,得收集和统计分析操作系统的性能。开发商业 UNIX 是一个很大的工程,常常大到有数以
百计的编程者、测试员、文档员以及系统管理员参与。
对于 Linux,你可将整个组织开发的概念、源代码控制系统、结构化的错误报告、统计
分析等通通扔到一边去。
Linux 最初是由一群来自世界各地的自愿者通过 Internet 共同进行开发的。通过互联网
和其他途径,任何人都有机会辅助开发和调试 Linux 的内核、链接新的软件、编写文档或帮
助新用户。实际上,并没有单独的组织负责开发此系统,Linux 团体大部分通过邮递清单和
USENET 的消息组进行通信。许多协定已跳过开发过程,如果你想将自己的代码包括进“正式”
内核,只需给 Linus Torvalds 发一个邮件,他就会进行测试并将其包括进内核(只要代码不
使内核崩溃并且不与整个系统设计相悖,Linus 都很乐意将其包括进去)。
Linux 系统本身采用彻底开放、注重特性的方法进行设计。一般规律是大约隔几个月就
发行一个 Linux 内核的新版本。当然发行周期还依赖于其他一些因素,如排除的程序故障数、
用户测试预发行版的返回数以及 Linux 的工作量等。
可以说在两次发行期间,并不是每个故障都已排除,每个问题都已得到了解决。只要系
统不出现很挑剔或明显的故障,就认为比较稳定,可以推出新版本。Linux 开发的动力不在
于追求完美、无故障,而是要开发 UNIX 的免费实现。
如果你想把新的特性或应用软件增加到系统上,就得经过一个“初始”阶段。所谓“初
始”阶段,就是一个由一些想对新代码挑出问题的用户不断进行测试的阶段。由于 Linux 团
体大多在 Internet 上,“初始”软件通常安装在一个或多个 LinuxFTP 上,并且在 LinuxUSENET
消息组上张贴一张如何获取和测试其代码的消息,从而使得下载和测试“初始”软件的用户
可以将结果、故障或问题等邮件告之作者。
初始代码中的问题解决后,代码就进入“第二”阶段:工作稳定但还不完全(即能够工
作,但可能还不具备所有特性)。当然,它也可能进入“最后”阶段,即软件已完备并且可
以使用。对于内核代码,一旦它完备,开发者就可让 Linus 将其包括进标准内核内,或者作
为内核的可增加选项。
注意,这些仅是达成协定,并未形成规则。很多人对他们的软件不必发行“初始”或测
试版充满信心,因此发行哪个版本是根据开发者的决定而定的。
你可能对一群自愿者居然能编写、调试出完整的 UNIX 系统惊讶不已。整个 Linux 内核
通过拼凑而成,没有采用专利的源代码,大量工作都由自愿者完成,他们将 GNU 下的免费软
件移植到 Linux 系统下,同时开发出库、文件系统以及通用的设备硬件驱动程序等。
实际上,Linus 率领的分布在世界各地的 Linux 内核开发队伍仍然在高速向前推进。当
前推出的稳定的 Linux 内核的 2.4.x 版本充分显示了 Linux 开发队伍的非凡的创造能力以及
深入分析
Linux
内核源代码
– 4 –
协作开发模式的价值。
1.3 走进 Linux 内核
如果说 CPU 是计算机硬件的心脏的话,那么,操作系统的内核则是整个计算机系统的心
脏,或者说,是最高管理机构。Linux 的内核包含些什么?简单地说,它包含五大部分内容:
进程调度、内存管理、进程间通信、虚拟文件系统及网络接口这五部分,我们也称为五个子
系统。在走进 Linux 内核前,读者可能想知道,它到底有什么特点呢?
1.3.1 Linux 内核的特征
Linux 是个人计算机和工作站上的类 UNIX 操作系统。但是,它绝不是简化的 UNIX。相
反,Linux 是强有力和具有创新意义的类 UNIX 操作系统。它不仅继承了 UNIX 的特征,而且
在许多方面超过了 UNIX。作为类 UNIX 操作系统,Linux 内核具有下列基本特征。
(1)Linux 内核的组织形式为整体式结构。也就是说整个 Linux 内核由很多过程组成,
每个过程可以独立编译,然后用连接程序将其连接在一起成为一个单独的目标程序。从信息
隐藏的观点看,它没有任何程度的隐藏
—
每个过程都对其他过程可见。这种结构的最大特
点是内部结构简单,子系统间易于访问,因此内核的工作效率较高。另外,基于过程的结构
也有助于不同的人参与不同过程的开发,从这个角度来说,Linux 内核又是开放式的结构,
它允许任何人对其进行修正、改进和完善。
(2)Linux 的进程调度方式简单而有效。可以说 Linux 在追求效率方面孜孜不倦,体现
在调度方式上也是别具一格。对于用户进程,Linux 采用简单的动态优先级调度方式;对于
内核中的例程(如设备驱动程序、中断服务程序等)则采用了一种独特的机制
—
软中断机
制,这种机制保证了内核例程的高效运行。
(3)Linux 支持内核线程(或称守护进程)。内核线程是在后台运行而又无终端或登录
shell 和它结合在一起的进程。有许多标准的内核线程,其中有一些周期地运行来完成特定
的任务(如 swapd),而其余一些则连续地运行,等待处理某些特定的事件(如 inetd 和 lpd)。
内核线程可以说是用户进程,但和一般的用户进程又有不同,它像内核一样不被换出,因此
运行效率较高。
(4)Linux 支持多种平台的虚拟内存管理。内存管理是和硬件平台密切相关的部分,为
了支持不同的硬件平台而又保证虚拟存储管理技术的通用性,Linux 的虚拟内存管理为不同
的硬件平台提供了统一的接口,因此把 Linux 内核移植到一个新的硬件平台并不是一件很困
难的事。
(5)Linux 内核另一个独具特色的部分是虚拟文件系统(VFS Virtul File Systen)。
虚拟文件系统不仅为多种逻辑文件系统(如 ext2,fat 等)提供了统一的接口,而且为各种硬
件设备(作为一种特殊文件)也提供了统一接口。
(6)Linux 的模块机制使得内核保持独立而又易于扩充。模块机制可以使内核很容易地
增加一个新的模块(如一个新的设备驱动程序),而无需重新编译内核;同时,模块机制还
第一章
走进
Linux
– 5 –
可以把一个模块按需添加到内核或从内核中卸下,这使得我们可以按需要定制自己的内核。
(7)增加系统调用以满足特殊的需求。一般来说,系统调用是操作系统的设计者提供给
用户使用内核功能的接口,但 Linux 开放的源代码也允许你设计自己的系统调用,然后把它
加入到内核。
(8)网络部分面向对象的设计思想使得 Linux 内核支持多种协议、多种网卡驱动程序变
得容易。
1.3.2 Linux 内核版本的变化
自从 1991 年 9 月 17 日,Linus Torvals 正式宣布 Linux 的第一个正式版本
—
0.02 版
本,到现在,Linux 的内核版本发生了一系列的变化,新旧版本之间的时间间隔为几个月甚
至几个星期,关于这一变化的非常详细的资料请看站点
http://ps.cus.umist.ac.uk/~rhw/kernel. versions.html 的内容。
我们把内核版本之间内容较大的变化分为三个阶段,第一阶段为 0.02~0.99.15j,第二
阶段为 1.0~1.2.x,第三阶段为 1.2.x~2.x.x。一般来说,一个软件要到理论上已经完备或
者已经没有毛病时才给予 1.0 版本的版本号,而 Linux 2.0 以后的版本比起 1.2.x 版本有了
较大幅度的变化,请看站点 http://www.linuxhq.com/的内容。
从 Linux 诞生开始,Linux 内核就从来没有停止过升级,从 Linus 第一次发布的 0.02 版
本到 1999 年具有里程碑意义的 2.2 版本,一直到现在的 2.4 版本,都凝聚了 Linux 内核开发
人员大量辛苦的劳动。目前 Linux 在各种工作平台上,包括企业服务器和个人电脑上的广泛
应用,使得 Linux 成为了 Windows 的强劲对手。
本书所分析的 Linux 内核版本是 2.4 版的 2.4.16 版。那么 Linux 2.4 版具有什么样的
特点呢,我们可以用四个字来概括,那就是“广、新、快、小”。
1.广泛的支持
• 处理器芯片的广泛支持:Linux 2.4 提供了大量的处理器芯片的支持。原先的 Linux
就可以支持多种处理器体系结构,如 Intel x86、Motorola/IBM PowerPC、Compaq(DEC)Alpha
等,现在还增加了对 IA 64、S/390、SuperH 这 3 种体系结构的处理器的支持。对 Intel 的
x86 系列来说,AMD 和 Cyrix 公司的系列处理器产品也是使用 x86 指令的,同样也能获得很好
的支持。
• 对ISA即插即用设备的支持:过去在Linux核心开发小组里面存在有两种不同的观点,
一种是支持对 ISA 即插即用,另外一种持反对意见,认为对即插即用的支持简直是多余的。
因此过去在 Linux 里对即插即用设置的通用做法只能是利用用户级的工具(如 isapnp
tools),手动配置即插即用设备。现在的内核则有所不同了,在内核级实现了对即插即用的
管理。我们可以看到系统会在启动的时候自动完成对即插即用设备的检测和自动配置,比如
说,我们可以从一个即插即用的 IDE 控制器上启动系统。
• 广泛的文件系统支持:很少有一个操作系统能支持这么多种文件系统。Linux 使用的
是 VFS(虚拟文件系统)的技术,提供了对多种文件系统的支持。从 Linux 1.x 到 Linux 2.2,
Linux 已经可以支持多种文件系统。如 Windows 9x 的 VFAT、DOS 的 FAT、Mac OS 的 HFS、OS/2
深入分析
Linux
内核源代码
– 6 –
的 HPFS、Windows NT 的 NTFS(NTFS 的支持还处于测试阶段)等;当然还包括 Linux 自己使
用的高性能的 Ext2 文件系统。新版本的 Linux 新增支持现在的 DVD 使用的 UDF 文件系统和
SGI 的 IRIX 系统上的 XFS 文件系统。
在 Windows 里面使用 SMB 协议来实现“网上邻居”的共享访问,Linux 2.4 的内核里会
让您自己选择是否从 Windows 98/NT 下载驱动器,还可以自动检测远端的系统类型,使得
Linux 在 Windows 环境的局域网里工作得更好。
对 NFS(网络文件系统)来说,Linux 2.4 版本支持最近发布的 NFS v3 版本的网络文件
系统。
• 对软猫的支持:软猫实际上也被称为 WinModem,就是因为现有的这种软猫的驱动都
是由为 Windows 开发的软件来完成的。这种 Modem 和一般 Modem 的处理方法不同,它的 DSP
处理并不是在硬件层次上完成的,而是使用软件通过 CPU 来实现的,因此无法在现有的 Linux
中配置这种 Modem 上网。现在的 Linux 内核里已经开始了这方面的支持。
2.新思路
• 新型的设备管理方法:Linux 2.4 引入了 I2O(Intelligent Input/Output)的设备
驱动管理方法。它的做法是,将驱动程序分成了两个部分:一个是在操作系统模块的部分,
另外一个是在硬件模块的部分。操作系统模块的部分是独立的,硬件模块的部分是依赖于硬
件结构的。这种新型的管理方法使得 Linux 2.4 可以更好地支持大部分的 ISA 和 PCI 设备。
• 对 USB 总线的支持:近年来,USB(通用串口总线)的技术是计算机界振奋人心的事
情之一,现在已经出现了大量的使用这种接口的设备,如键盘、鼠标、音箱、Modem 等。使
用 USB 接口使得计算机外设的安装和使用变得更为简单,自然成为了一种潮流。现在的 Linux
也可以很好地支持这种总线接口的设备。
• 新型的二进制执行代码类型(Binary Types):Linux 是第一个在内核级提供内建 Java
解释器的支持,从而进行 Java 代码的执行的操作系统之一。这在 Linux 2.2 版本里已经实现
了。Linux 2.4 版本又做了改进,将这种支持的方法改为对“Misc”二进制类型的支持。通
过使用这种类型的二进制代码类型,用户甚至可以利用 DOSEMU(MS DOS 模拟器)或者 WINE
(MS Windows 模拟器)来运行在 DOS/Windows 下的.exe 或.com 的程序。同样用户也可以自己
配置出 Java 字节码运行类型。
• 内核级的 Web 服务器:这种 Web 服务器和所谓的 Apache 用户层上的 Web 服务器并
不冲突。对 HTTP 请求首先由内核级的 Web 服务器进行处理,如果不能处理就将请求提交给
Apache 用户级 Web 服务器来处理。像这样的构思和实现在网络操作系统中实属一绝。
3.高性能
• 对虚拟文件系统(VFS)的修改:Linux 2.4 版本的文件系统修改了 VFS 中的错误,
尤其是在文件的缓存管理上。过去的文件系统的高速缓存管理是建立在复杂的双缓冲池
(dual-buffer pool)上的,这种方法导致连开发人员都不知道什么时候将双缓冲池进行同步。
这种处理方法并没有给文件处理带来好处,反而增加了内存的使用。因为要处理双缓冲系统
的同步,使得系统的处理速度降低。现在开发人员修改这段代码,使用了简单有效的单缓冲
系统,提高了文件系统的处理效率
第一章
走进
Linux
– 7 –
• 对高端服务器的支持:Linux 2.4 版本的内核可以支持在 SMP(对称多处理器系统)
下的多个 IO-APIC(输入输出的高级可编程中断控制器),提高了对高端服务器的支持效率。
Linux 2.4 版本可以支持多达 10 个 IDE 控制器。过去的 Linux 版本只能支持最多 4 个
ID 控制器。一些强大的企业级 Web 服务器正需要这样的硬件支持。
Linux 2.4 版本可以支持 Intel P6 以上芯片的 MTRR(内存类型范围寄存器),对非 Intel
的如 Cyrix 6x86、6x86MX、MII 的 ARR(地址范围寄存器)也能有很好的支持,这使一些高
带宽的设备的运行性能得到了提高。
现在的内核可以支持多达 42 亿个用户。在 Intel 架构上可以支持到多达 4GB 的内存。
并且现在的内核还可以支持多达 16 块以太网卡,同时支持最大容量为 2GB 的文件。
这些性能都使得 Linux 对高端设备的支持能力得到了提高。
• 对高速网的支持:Linux 2.4 版本支持 ATM 网络适配器等高速网络设备,为进一步的
网络发展做好了准备。对低端用户来说,Linux 提供的 PPP 层和 ISDN 层的结合,提供了在并
口线上的 PPP 和在以太网上的 PPP 支持。
4.小内核
• 内核本来就很小:Linux 的整个内核源代码大概需要占用 20 多 MB 的硬盘空间,但是
编译出来的二进制代码只占用 600KB 左右的空间,完全可以放在一张软盘上,随时可以使用
这张软盘启动系统。
• 对内存的需求很小:大家比较关心的一个问题是 Linux 现在需要多少内存才能正常工
作。我们知道,大部分的操作系统在升级的同时,对硬件的需求也在不断提高,尤其是对内
存的需求方面,很大层次上影响了系统的性能。不过 Linux 和其他操作系统不同,Linux 可
以进行个性化的定制,用户完全可以根据自己的系统配置来生成自己需要的操作系统内核,
也可以根据需要启动或关闭一些系统服务,这样可以减少系统对资源的占用,提高系统的运
行效率。
Linux 内核发展到现在已经相当庞大,要想在一段时间内搞清所有的内容几乎是不可能
的,因此,本书对内核的分析也集中在几个主要部分的主要内容上,其运行的平台也只选择
了 i386 的单 CPU,在一些特殊情况下,我们也会讨论 SMP(对称多处理机)的情况。
走进 Linux 不是一件容易的事,但走出来同样不容易。阅读 Linux 源代码如同阅读一
篇优美的作品,会深深地吸引着你,既可以满足你好奇的愿望,也可以检验你挑战困难的
勇气。
1.4 分析 Linux 内核的意义
Linux 开放的源代码为我国软件产业的发展和腾飞提供了前所未有的机遇,这体现在以
下几个方面。
剩余553页未读,继续阅读
shihyuyao
- 粉丝: 6
- 资源: 77
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- zlib-1.2.12压缩包解析与技术要点
- 微信小程序滑动选项卡源码模版发布
- Unity虚拟人物唇同步插件Oculus Lipsync介绍
- Nginx 1.18.0版本WinSW自动安装与管理指南
- Java Swing和JDBC实现的ATM系统源码解析
- 掌握Spark Streaming与Maven集成的分布式大数据处理
- 深入学习推荐系统:教程、案例与项目实践
- Web开发者必备的取色工具软件介绍
- C语言实现李春葆数据结构实验程序
- 超市管理系统开发:asp+SQL Server 2005实战
- Redis伪集群搭建教程与实践
- 掌握网络活动细节:Wireshark v3.6.3网络嗅探工具详解
- 全面掌握美赛:建模、分析与编程实现教程
- Java图书馆系统完整项目源码及SQL文件解析
- PCtoLCD2002软件:高效图片和字符取模转换
- Java开发的体育赛事在线购票系统源码分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功