ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:57.02KB ,
资源ID:3379903      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3379903.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux操作系统源代码详细分析报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Linux操作系统源代码详细分析报告.docx

1、Linux操作系统源代码详细分析报告Linux 操作系统源代码详细分析容简介:Linux 拥有现代操作系统所有的功能,如真正的抢先式多任务处理、支持多用户,存保护,虚拟存,支持 SMP UP,符合POSIX标准,联网、图形用户接口和桌面环境。具有快速性、稳定性等特点。本书通过分 析 Linux 的核源代码,充分揭示了 Linux 作为操作系统的核是如何完成保证系统正常运行、协调多个并发 进程、管理存等工作的。现实中,能让人自由获取的系统源代码并不多,通过本书的学习,将大大有助于 读者编写自己的新程序。第一部分 Linux 核源代码arch/i386/kernel/entry.S 2arch/i

2、386/kernel/init_task.c 8arch/i386/kernel/irq.c 8arch/i386/kernel/irq.h 19arch/i386/kernel/process.c 22arch/i386/kernel/signal.c 30arch/i386/kernel/smp.c 38arch/i386/kernel/time.c 58arch/i386/kernel/traps.c 65arch/i386/lib/delay.c 73arch/i386/mm/fault.c 74arch/i386/mm/init.c 76fs/binfmt-elf.c 82fs/bi

3、nfmt_java.c 96fs/exec.c 98include/asm-generic/smplock.h 107include/asm-i386/atomic.h 108include/asm-i386/current.h 109 include/asm-i386/dma.h 109 include/asm-i386/elf.h 113include/asm-i386/hardirq.h 114include/asm-i386/page.h 114include/asm-i386/pgtable.h 115 include/asm-i386/ptrace.h 122 include/as

4、m-i386/semaphore.h 123 include/asm-i386/shmparam.h 124 include/asm-i386/sigcontext.h 125 include/asm-i386/siginfo.h 125 include/asm-i386/signal.h 127 include/asm-i386/smp.h 130 include/asm-i386/softirq.h 132 include/asm-i386/spinlock.h 133 include/asm-i386/system.h 137 include/asm-i386/uaccess.h 139

5、 include/linux/binfmts.h 146 include/linux/capability.h 147 include/linux/elf.h 150 include/linux/elfcore.h 156 include/linux/interrupt.h 157 include/linux/kernel.h 158 include/linux/kernel_stat.h 159 include/linux/limits.h 160 include/linux/mm.h 160 include/linux/module.h 164 include/linux/msg.h 16

6、8 include/linux/personality.h 169 include/linux/reboot.h 169 include/linux/resource.h 170 include/linux/sched.h 171 include/linux/sem.h 179 include/linux/shm.h 180 include/linux/signal.h 181 include/linux/slab.h 184 include/linux/smp.h 184 include/linux/smp_lock.h 185 include/linux/swap.h 185 includ

7、e/linux/swapctl.h 187 include/linux/sysctl.h 188 include/linux/tasks.h 194 include/linux/time.h 194 include/linux/timer.h 195 include/linux/times.h 196 include/linux/tqueue.h 196 include/linux/wait.h 198 init/main.c 198 init/version.c 212 ipc/msg.c 213 ipc/sem.c 218 ipc/shm.c 227 ipc/util.c 236 kern

8、el/capability.c 237 kernel/dma.c 240 kernel/exec_domain.c 241 kernel/exit.c 242 kernel/fork.c 248 kernel/info.c 255 kernel/itimer.c 255 kernel/kmod.c 257 kernel/module.c 259 kernel/panic.c 270 kernel/printk.c 271kernel/sched.c 275 kernel/signal.c 295 kernel/softirq.c 307 kernel/sys.c 307 kernel/sysc

9、tl.c 318 kernel/time.c 330 mm/memory.c 335 mm/mlock.c 345 mm/mmap.c 348 mm/mprotect.c 358 mm/mremap.c 361 mm/page_alloc.c 363 mm/page_io.c 368 mm/slab.c 372 mm/swap.c 394 mm/swap_state.c 395 mm/swapfile.c 398 mm/vmalloc.c 406 mm/vmscan.c 409 第二部分 Linux 核源代码分析 第1章 Linux 简介让用户很详细地了解大多数现有操作系统的实际工作方式是不可

10、能的,因为大多数操作系统的源代码都是 严格的。除了一些研究用的及为操作系统教学而设计的系统外。尽管研究和教学目的都很好,但是这类系 统很少能够通过对正式操作系统的小部分实现来体现操作系统的实际功能。对于操作系统的一些特殊问 题,这种折衷系统所能够表现的就更是少得可怜了。在以实际使用为目标的操作系统中,让任何人都可以自由获取系统源代码,无论目的是要了解、学习还是 改进,这样的现实系统并不多。本书的主题就是这些少数操作系统中的一个: Linux 。Linux的工作方式类似于 Uinx ,它是免费的,源代码也是开放的,符合标准规的 32位(在64位CPU上是64 位)操作系统。 Linux 拥有现代

11、操作系统的所具有的容,例如:*真正的抢先式多任务处理,支持多用户。*存保护。* 虚拟存。*支持对称多处理机 SMP( symmetric multiprocessing ),即多个CPU机器以及通常的单 CPU( Up机器。*符合POSIX标准。* 联网。* 图形用户接口和桌面环境(实际上桌面环境并不只一个)* 速度和稳定性。严格说来, Linux 并不是一个完整的操作系统。当我们在安装通常所说的 Linux 时,我们实际安装的是很 多工具的集合。这些工具协同工作以组成一个功能强大的实用系统。 Linux 本身只是这个操作系统的核, 是操作系统的心脏、灵魂、指挥中心(整个系统应该称为 GNU/

12、Linux ,其原因在本章的后续容中将会给以 介绍)。核以独占的方式执行最底层任务,保证系统正常运行协调多个并发进程,管理进程使用的存, 使它们相互之间不产生冲突,满足进程访问磁盘的请求等等。在本书中,我们给大家揭示的就是 Linux 是如何完成这一具有挑战性的工作的。1.1Linux 和 Unix 的简明历史为了让大家对本书所讨论的容有更清楚的了解,让我们先来简要回顾一下 Linux 的历史。由于 Linux 是在 Unix 的基础上发展而来的,我们的话题就从 Unix 开始。Unix是由AT&T贝尔实验室的 Ken Thompson和Dennis Ritchie 于1969年在一台已经废弃

13、了的 PDP-7上开发的;它最初是一个用汇编语言写成的单用户操作系统。不久, Thompson和Ritchie成功地说服管理部门为他们购买更新的机器,以便该开发小组可以实现一个文本处理系统, Unix就在PDP-11上用C语言重新编写(发明 C 语言的部分目的就在于此) 。它果真变成了一个文本处理系统不久之后。只不过问题是他 们先实现了一个操作系统而已最终,他们实现了该文本处理工具,而且 Unix (以及Unix上运行的工具)也在 AT&T得到广泛应用。在1973年,Thompson和Ritchie 在一个操作系统会议上就这个系统发表了一篇论文,该论文引起了学术界 对 Unix 系统的极大兴趣

14、。由于1956年反托拉斯法案的限制, AT&T不能涉足计算机业务,但允许它象征性地收取费用发售该系统。就这样, Unix 被广泛发布,首先是学术科研用户,后来又扩展到政府和商业用户。伯克利加州大学是学术用户中的一个。在这里, Unix得到了计算机系统研究小组(CSRG的广泛应用。并且在这里所进行的修改引发了 Unix的一大系列,这就是广为人知的伯克利软件开发 (BSDUnix。除了 AT&T所提供的Unix系列之外,BSD是最有影响力的 Unix系列。BSD在 Unix中增加了很多显著特性, 例如TCP/IP 网络,更好的用户文件系统( UFS,工作控制,并且改进了 AT&T的存管理代码。多年

15、以来,BSD版本的Unix 直在学术环境中占据主导地位,但最终发展成为 System V版本的AT&T的Unix 则成为商业领域的领头羊。从某种程度上来说,这是有社会原因的:学校倾向于使用非正式但通常更好用的BSD风格的Unix,而商业界则倾向于从 AT&T获取Unix。在用户需求和用户编程改进特性的促进下, BSD风格的Unix 般要比AT&T的Unix更具有创新性,而且改进也更为迅速。但是,在 AT&T发布最后一个正式版本 System V Release 4 ( SVR4时,System V Unix已经吸收了 BSD的大多数重要的优点,并且还增加了一些自己的优势。这部分由于从 1984

16、年开始,AT&T逐渐可以将Unix商业化,而伯克利 Unix的开发工作在1993年BSD4.4版本完成以后就逐渐收缩,以至终 止了。然而,BSD的进一步改进由外界开发者延续下来,到今天还在继续进行。正在进行的 Unix系列开发中至少有四个独立的版本是直接起源于 BSD4.4,这还不包括几个厂商的 Unix版本,例如惠普的 HP-UX都是部分地或者全部基于 BSD而发展起来的。实际上Unix的变种并不止 BSD和System V。由于Unix主要使用C语言来编写,这就使得它移植到新的机 器上相对比较容易, 它的简单性也使其重新设计与开发相对比较容易。 Unix 的这些特点大受商业界硬件供 应商的

17、欢迎,比如 Sun、SGI、HP IBM、DEC Amdahl等等;IBM还不止一次对 Unix进行了再开发。厂商 们设计开发出新的硬件,并简单地将 Unix 移植到新的硬件上,这样新的硬件一经发布便具备一定的功能。 经过一段时间之后,这些厂商都拥有了自己的专有 Unix 版本。而且为了占有市场,这些版本故意以不同 的侧重点发布出来,以更好地占有用户。版本混乱的状态促进了标准化工作的进行。其中最主要的就是 POSIX系列标准,它定义了一套标准的操作系统接口和工具。从理论上说, POSIX标准代码很容易移植到任何遵守 POSIX标准的操作系统中,而且严格的POSIX测试已经把这种理论上的可移植性

18、转化为现实。直到今天,几乎所有的正式操作系统都以支持 POSIX标准为目标。现在让我们回顾一下,在 1984 年,杰出的电脑黑客 Richard Stallman 独立开发出一个类 Unix 的操作系 统,该操作系统具有完全的核、开发工具和终端用户应用程序。在 GNU(“GNU誷Not Unix ”首字母的缩写)计划的配合下, Stallman 开发这个产品有自己的技术理想: 他想开发出一个质量高而且自由的操作系 统。Stallman使用了“自由” (free )这个词,不仅意味着用户可以免费获取软件;而且更重要的是,它 将意味着某种程度的“解放” :用户可以自由使用、拷贝、查询、重用、修改甚

19、至是分发这份软件,完全 没有软件使用协议的限制。 这也正是Stallman创建自由软件基金会 (FSF)资助GNU软件开发的本意(FSF也在资助其他科研方面的开发工作) 。15年来,GNUX程已经吸收、产生了大量的程序, 这不仅包括Emacs gcc (GNU的 C编译器)、bash(shell命令),还有大部分Linux用户所熟知的许多应用程序。 现在正在进行开发的项目是 GNUHurd核,这是GNU操作系统的最后一个主要部件(实际上 Hurd 核早已能够使用了,不过当前的版本号为 0.3 的系统在什么 时候能够完成,还是未知数) 。尽管 Linux 大受欢迎,但是 Hurd 核还在继续开发

20、。原因有几个方面,其一是 Hurd 的体系结构十分清晰地 体现了 Stallman 关于操作系统工作方式的思想,例如,在运行期间,任何用户都可以部分地改变或替换Hurd (这种替换不是对每个用户都是可见的,而是只对申请修改的用户可见,而且还必须符合安全规) 另一个原因是据介绍 Hurd 对于多处理器的支持比 Linux 本身的核要好。还有一个简单的原因是兴趣的驱 动,因为程序员们希望能够自由地进行自己所喜欢的工作。只要有人希望为 Hurd 工作, Hurd 的开发就不 会停止。如果他们能够如愿以偿, Hurd 有朝一日将成为 Linux 的强劲对手。不过在今天, Linux 还是自由 核王国里

21、无可争议的统治者。在GNU发展的中期,也就是 1991年,一个名叫 Linus Torvalds 的芬兰大学生想要了解 Intel的新CPU 80386。他认为比较好的学习方法是自己编写一个操作系统的核。出于这种目的,加上他对当时 Unix 变种版本对于80386类机器的脆弱支持十分不满,他决定要开发出一个全功能的、支持 POSIX标准的、类Unix的操作系统核,该系统吸收了 BSD和System V的优点,同时摒弃了它们的缺点。 Linus (虽然我知道我应该称他为 Torvalds ,但是所有人都称他为 Linus )独立把这个核开发到 0.02 版,这个版本已经可以运行 gcc、 bas

22、h 和很少的一些应用程序。这些就是他开始的全部工作了。后来,他又开始在因特网上寻求广泛 的帮助。不到三年, Linus 的 UnixLinux ,已经升级到 1.0 版本。它的源代码量也呈指数形式增长,实现了基本 的 TCP/IP 功能(网络部分的代码后来重写过,而且还可能会再次重写) 。此时 Linux 就已经拥有大约 10 万用户了。现在的 Linux 核由 1 50多万行代码组成, Linux 也已经拥有了大约 1000万用户(由于 Linux 可以自由获取 和拷贝,获取具体的统计数字是不可能的) 。Linux核GNU/Linux附同GNU工具已经占据了 Unix 50%的市场。一些公司

23、正在把核和一些应用程序同安装软件打包在一起,生产出 Linux 的发行版本,这些公司包括Red Hat 和 Caldera 公司。现在的 GNU/Linux 已经备受瞩目,得到了诸如 Sun、 IBM、 SGI 等公司的广泛支持。SGI最近决定在其基于In tel的Merced的系列机器上不再搭载自己的 Unix变种版本IRIX,而是直接采用 GNU/Linux; Linux 甚至被指定为 Amiga 将要发布的新操作系统的基础。1.2GNU 通用公共许可证中国这样一个如此流行的操作系统当然值得我们学习。按照通用公共许可证 (GPL, General Public License)的规定,Li

24、nux的源代码可以自由获取,这满足了我们学习该系统的强烈愿望。 GPL这份非同寻常的软件许可证,充分体现了上面提到的 Stallman 的思想:只要用户所做的修改是同等自由的,用户可以自由地 使用、拷贝、查询、重用、修改甚至重新发布这个软件。通过这种方式, GPL保证了 Linux (以及同一许可证保证下的大量其他软件)不仅现在自由可用,而且以后经过任何修改之后都仍然可以自由使用。请注意这里的自由并不是说没有人靠这个软件盈利,有一些日益兴起的公司,比如发行最流行的 Linux 发行版本的 Red Hat 就是一个例子( Red Hat 自从上市以来,市值已经突破数十亿美元,每年盈利数十万美 元

25、,而且这些数字还在不断增长) 。但是任何人都不能限制其他用户涉足本软件领域,而且所做的修改不 能减少其自由程度。本书的附录B中收录了 GNU!用公共许可证协议的全文。1.3Linux 开发过程 中国如上所述,由于 Linux 是一个自由软件,它可以免费获取以供学习研究。 Linux 之所以值得学习研究,是 因为它是相当优秀的操作系统。如果 Linux 操作系统相当糟糕,那它就根本不值得我们使用,也就没有必 要去研究相关的书籍。 Linux 是一个十分优秀的操作系统还在于几个相互关联的原因。原因之一在于它是基于天才的思想开发而成的。在学生时代就开始推动整个系统开发的 Linus Torvalds

26、 是一个天才,他的才能不仅展现在编程能力方面,而且组织技巧也相当杰出。 Linux 的核是由世界上一些 最优秀的程序员开发并不断完善的,他们通过 Internet 相互协作,开发理想的操作系统;他们享受着工 作中的乐趣,而且也获得了充分的自豪感。 中国Linux 优秀的另外一个原因在于它是基于一组优秀的概念。 Unix 是一个简单却非常优秀的模型。在 Linux 创建之前, Unix 已经有 20 年的发展历史。 Linux 从 Unix 的各个流派中不断吸取成功经验,模仿 Unix 的 优点,抛弃 Unix 的缺点。这样做的结果是 Linux 成为了 Unix 系列中的佼佼者:高速、健壮、完

27、整,而且 抛弃了历史包袱。然而, Linux 最强大的生命力还在于其公开的开发过程。每个人都可以自由获取核源程序,每个人都可以 对源程序加以修改,而后他人也可以自由获取你修改后的源程序。如果你发现了缺陷,你可以对它进行修 正,而不用去乞求不知名的公司来为你修正。如果你有什么最优化或者新特点的创意,你也可以直接在系 统中增加功能,而不用向操作系统供应商解释你的想法,指望他们将来会增加相应的功能。当发现一个安 全漏洞后,你可以通过编程来弥补这个漏洞,而不用关闭系统直到你的供应商为你提供修补程序。由于你 拥有直接访问源代码的能力,你也可以直接阅读代码来寻找缺陷,或是效率不高的代码,或是安全漏洞, 以

28、防患于未然。除非你是一个程序员,否则这一点听起来仿佛没有多少吸引力。实际上,即使你不是程序员,这种开发模 型也将使你受益匪浅,这主要体现在以下两个方面:* 可以间接受益于世界各地成千上万的程序员随时进行的改进工作。* 如果你需要对系统进行修改,你可以雇用程序员为你完成工作。这部分人将根据你的需求定义单独为你 服务。可以设想,这在源程序不公开的操作系统中将是什么样子。Linux 这种独特的自由流畅的开发模型已被命名为 bazaar (集市模型) ,它是相对于 cathedral (教堂)模 型而言的。在 cathedral 模型中,源程序代码被锁定在一个的小围。只有开发者(很多情况下是市场)认

29、为能够发行一个新版本,这个新版本才会被推向市场。这些术语在Eric S. Raymond的教堂与集市(TheCathedral and the Bazaar )一文中有所介绍,大家可以在 www.tuxedo.org/esr/writings/ 找到这篇文章。 bazaar 开发模型通过重视实验,征集并充分利用早期的反馈,对巨大数量的脑力资源进行平衡配置, 可以开发出更优秀的软件。 (顺便说一下,虽然 Linux 是最为明显的使用 bazaar 开发模型的例子,但是它 却远不是第一个使用这个模型的系统。 )为了确保这些无序的开发过程能够有序地进行, Linux 采用了双树系统。一个树是稳定树(

30、 stable tree ), 另一个树是非稳定树( unstable tree )或者开发树( development tree )。一些新特性、实验性改进等都 将首先在开发树中进行。 如果在开发树中所做的改进也可以应用于稳定树, 那么在开发树中经过测试以后, 在稳定树中将进行相同的改进。按照 Linus 的观点,一旦开发树经过了足够的发展,开发树就会成为新的 稳定树,如此周而复始的进行下去。源程序版本号的形式为 x.y.z。对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大一(因此,是奇数) 。截至到本书截稿时,最新的稳定核版本号是 2.2.10 ,最新的开发核的版本号是 2.3

31、.12 。对2.3树的缺陷修正会回溯影响 (back-propagated )2.2 树, 而当 2.3 树足够成熟的时候会发展成为 2.4.0 。(顺便说一下,这种开发会比常规惯例要快,因为每一版本所包含的改变比以前更少了,核开发人员只需 花很短的时间就能够完成一个实验开发周期。 ) .kernel.org 及其镜像站点提供了最新的可供下载的核版 本,而且同时包括稳定和开发版本。如果你愿意的话,不需要很长时间,这些站点所提供的最新版本中就 可能包含了你的一部分源程序代码。中国 第2章 代码 初 识本章首先从较高层次介绍 Linux 核源程序的概况,这些都是大家关心的一些基本特点。随后将简要介

32、绍一 些实际代码。最后介绍如何编译核。2.1Linux 核源程序的部分特点在过去的一段时期,Linux核同时使用C语言和汇编语言来实现。这两种语言需要一定的平衡: C语言编写的代码移植性较好、易于维护,而汇编语言编写的程序则速度较快。一般只有在速度是关键因素或者一 些因平台相关特性而产生的特殊要求(例如直接和存管理硬件进行通讯)时才使用汇编语言。正如实际中所做的,即使核并未使用 C+的对象特性,部分核也可以在 g+ (GNU勺C+编译器)下进行编译。同其他面向对象的编程语言相比较,相对而言 C+的开销是较低的,但是对于核开发人员来说,这已经是太多了。核开发人员不断发展编程风格,形成了 Linux 代码独有的特色。本节将讨论其中的一些问题。2.1.1gcc 特性的使用Linux核被设计为必须使用 GNU的C编译器gcc来编译,而不是任何一种 C编译器都可以使用。核代码有时要使用 gcc 特性,本书将陆续介绍其中的一部分。一些gcc特有代码只是简单地使用 gcc语言扩展,例

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1