小默

Linux内核完全注释 赵炯 第1章 概述 //50min

  

1   概述

 本章回顾 Linux  操作系长过书为会选 Linux 系统象的说明 Linux 核版不 足之步的内容

 1.1 Linux 的诞生和发展

 Linux 操作 UNIX 操作。它 1991 10 5 日(正 式向此后 Internet 网络全世的共现已为当 今世使的一 UNIX 使用长。

Linux  发展下五柱:UNIX 操作MINIX  操作 系GNU POSIX Internet 网络根据线 Linux 的开历程、 它的发展其中 Linux 的创 Linus Toravlds 感兴趣而心里己的系统 Linux 0.01 如何地在 hacker 帮助下最完善1.0版本,也 Linux 展历

当然 Linux 核版本已 2.5.52 。而 Linux 统中所用2.4.20  2 数字在开系统 Linux的一和书不重

1.1.1 UNIX 操作统的诞生

Linux  系统UNIX 作系个克隆 UNIX  系统贝尔Ken.Thompson  Dennis Ritchie  1969  DEC PDP-7 开发的一

Ken  Thompson 在闲置不 PDP-7 机上运行行(Space  travel)游 戏 1969 他夫渡假 UNIX 型。使用的 BCPL 语言,后 Dennis  Ritchie 1972 C 语言使 UNIX 系统到了推广。

1.1.2 MINIX 操作系统 

MINIX 系统 Andrew S. TanenbaumAST开发AST Amsterdam Vrije 数学 与计 ACM IEEE 深会(两会会员) 100 5 算机籍。

AST  虽出在美国纽约,但却是荷兰(1914  他的祖辈来美国)。他纽约上的中M.I.T 上的大学 Berkeley 分校念于读缘故他来到了荷兰与 家乡 Vrije 研究 Amsterdam 是个常的 城市 AST 这最样的待在机了MINIX 1987 的,作系理。 1991 1.5要 有两使用1.5 2.0 在大使其它 MINIX 免费的,从许 FTP 上下
Linux 系统,曾表 Linus 的称 Linux 的发于 他为 MINIX 小型化,内就纳全 MINIX 的扩的前激发 Linus Linux 系统 Linus 也正。 作为MINIX 提供 C 编语言编。 这是使程序 hacker 操作一直密。

1.1.3 GNU 计划 

GNU 基金 FSF(the Free Software Foundation) Richard M. Stallman 1984 年一 手创 UNIX 件的GNU 系统GNU "GNU'Not Unix"的发音为"guh-NEW"种使 Linux 作为 GNU 操作广的使 用。称作"Linux",但 Stallman 认为它们应该 GNU/Linux 统。

到上90 GNU 质量括有 emacs 编辑系 统bash shell gcc 列编gdb 程序等等 Linux 操作了一 合适 环境  Linux  生的础之一 以至 目前  Linux  系统 GNU/Linux”操作统。

1.1.4 POSIX 标准 

POSIXPortable Operating System Interface for Computing Systems)是 IEEE ISO/IEC 的一 簇标 UNIX 描述务接用程序可以在源代码一级上在多种操作系统上移植和运行。它是  1980  早期一  UNIX  用户组(usr/group)基础上取 UNIX 户组原来 AT&T System V 操作系统 BerkeleyCSRG  BSD 统的调用调和。并 1984 年定制出了/usr/group

1985 IEEE 系统技术TCOS-SS开始 ANSI 的支下责 IEEE 标准源代服务 1986 4 月,IEEE 出 了试标准。第一个正式标准  1988    9  月份批准IEEE  1003.1-1988,也既以经常提到的 POSIX.1

1989 POSIX 被转 ISO/IEC 15 制定 ISO 1990POSIX.1  C  IEEE 1003.1-1990 ANSI  ISO/IEC9945-1:1990

POSIX.1 统服务应口(API统服务标作组 期望制定 IEEE  POSIX 。刚的计 划在 300 参加工具(POSIX.2)法标准(POSIX.3、实 APIPOSIX.4。到 1990 25 个计 16 个工此同在制 X/OpenAT&TOSF 等。 

90 POSIX 标准的制定的时候 1991-1993 Linux 刚刚 UNIX Linux 提供极为使 Linux 下进 行开 UNIX 统兼容。在最 Linux 内核源代码中0.01 版、0.11 就 已 Linux 系统 POSIX 准备 Linux 0.01 核的/include/unistd.h 中 就已 POSXI 常数 Linus 在注释中已写道OK是个玩 笑,

1991 年7 月3 日在comp.os.minix 上发布的post 上就已经提到了正在搜集POSIX 的资料。其中透露了他正在着手一个操作系统的开发,并且在开发之初已经想到要实现与POSIX 相兼容的问题了。

1.1.5 Linux 操作系统的诞生

在 1981 年,IBM 公司推出了享誉全球的微型计算机IBM PC。在1981-1991 年间,MS-DOS 操作系统一直是微型计算机操作系统的主宰。此时计算机硬件价格虽然逐年下降,但软件价格仍然居高不下。当时Apple 的MACs 操作系统可以说是性能最好的,但是其天价使得没人能够轻易靠近。

当时的另一个计算机技术阵营就是UNIX 世界。但是UNIX 操作系统就不仅是价格昂贵的问题了。为了寻求高利润率,UNIX 经销商们把价格抬得极高,PC 小用户根本不能靠近它。曾经一度收到Bell Labs许可而能在大学中用于教学的UNIX 源代码也一直被小心地守卫着不许公开。对于广大的PC 用户,软件行业的大型供应商们始终没有给出有效的解决这个问题的手段。

正在此时,出现了MINIX 操作系统,并且有一本描述其设计实现原理的书同时发行。由于AST 的这本书写的非常详细,并且叙述得有条有理,于是几乎全世界的计算机爱好者都开始看这本书,以期能理解操作系统的工作原理。其中也包括Linux 系统的创始者Linus Benedict Torvalds。

当时(1991 年),Linus Benedict Torvalds 是赫尔辛基大学计算机科学系的二年级学生,也是一个自学的计算机hacker。这个21 岁的芬兰年轻人喜欢鼓捣他的计算机,测试计算机的性能和限制。但当时他所缺乏的就是一个专业级的操作系统。

在同一年间,GNU 计划已经开发出了许多工具软件。其中最受期盼的GNU C 编译器已经出现,但还没有开发出免费的GNU 操作系统。即使是教学使用的MINIX 操作系统也开始有了版权,需要购买才能得到源代码。虽然GNU 的操作系统HURD 一直在开发之中,但在当时看来不能在几年内完成。

为了能更好地学习计算机知识(或许也只是为了兴趣☺),Linus 使用圣诞节的压岁钱和贷款购买了一台386 兼容电脑,并从美国邮购了一套MINIX 系统软件。就在等待MINIX 软件期间,Linus 认真学习了有关Intel 80386 的硬件知识。为了能通过Modem 拨号连接到学校的主机上,他使用汇编语言并利用80386 CPU 的多任务特性编制出一个终端仿真程序。此后为了将自己一台老式电脑上的软件复制到新电脑上,他还为软盘驱动器、键盘等硬件设备编制出相应的驱动程序

通过编程实践,并在学习过程中认识到MINIX 系统的诸多限制(MINIX 虽然很好,但只是一个用于教学目的简单操作系统,而不是一个强有力的实用操作系统),而且通过上述实践Linus 已经有了一些类似于操作系统硬件设备驱动程序的代码,于是他开始有了编制一个新操作系统的想法。此时GNU 计划已经开发出许多工具软件,其中最受期盼的GNU C 编译器已经出现。虽然GNU的免费操作系统HURD正在开发中。但Linus 已经等不急了。

从 1991 年4 月份起,他通过修改终端仿真程序和硬件驱动程序,开始编制起自己的操作系统来。刚开始,他的目的很简单,只是为了学习Intel 386 体系结构保护模式运行方式下的编程技术。但后来Linux的发展却完全改变了初衷。根据Linus 在comp.os.minix 新闻组上发布的消息,我们可以知道他逐步从学习MINIX 系统阶段发展到开发自己的Linux 系统的过程。

Linus 第1 次向comp.os.minix 投递消息是在1991 年3 月29 日。所发帖子的题目是“gcc on minix-386 doesn't optimize”,是有关gcc 编译器在MINIX-386 系统上运行优化的问题(MINIX-386 是一个由Bruce Evans 改进的利用Intel 386 特性的32 位MINIX 系统)。由此可知,Linus 在1991 年初期就已经开始深入研究了MINIX 系统,并在这段时间有了改进MINIX 操作系统的思想。在进一步学习MINIX 系统之后,这个想法逐步演变成想重新设计一个基于Intel 80386 体系结构的新操作系统的构思。

他在回答有人提出MINIX 上的一个问题时,所说的第一句话就是“阅读源代码”(“RTFSC (Read the F**ing Source Code :-)”)。他认为答案就在源程序中。这也说明了对于学习系统软件来说,我们不光需要懂得系统的工作基本原理,还需要结合实际系统,学习实际系统的实现方法。因为理论毕竟是理论,其中省略了许多枝节,而这些枝节问题虽然没有太多的理论含量,但却是一个系统必要的组成部分,就象麻雀身上的一根羽毛。
从 1991 年4 月份开始,Linus 几乎花费了全部时间研究MINIX-386 系统(Hacking the kernel),并且尝试着移植GNU 的软件到该系统上(GNU gcc、bash、gdb 等)。并于4 月13 日在comp.os.minix 上发布说自己已经成功地将bash 移植到了MINIX 上,而且已经爱不释手、不能离开这个shell 软件了。

第一个与Linux 有关的消息是在1991 年7 月3 日在comp.os.minix 上发布的(当然,那时还不存在Linux 这个名称,当时Linus 脑子里想的名称可能是FREAX ☺,FREAX 的英文含义是怪诞的、怪物、异想天开等)。其中透露了他正在进行Linux 系统的开发,并且已经想到要实现与POSIX 兼容的问题了。

在 Linus 另一个发布的消息中(1991 年8 月25 日 comp.os.minix),他向所有MINIX 用户询问“What would you like to see in minix?”(“你最想在MINIX 系统中见到什么?”),在该消息中他首次透露出正在开发一个(免费的)386(486)操作系统,并且说只是兴趣而已,代码不会很大,也不会象GNU 的那样专业。

希望大家反馈一些对于MINIX 系统中喜欢哪些特色不喜欢什么等信息,并且说明由于实际和其它一些原因,新开发的系统刚开始与MINIX 很象(并且使用了MINIX 的文件系统)。并且已经成功地将bash(1.08版)和gcc(1.40 版)移植到了新系统上,而且在过几个月就可以实用了。

最后,Linus 申明他开发的操作系统没有使用一行MINIX 的源代码;而且由于使用了386 的任务切换特性,所以该操作系统不好移植(没有可移植性),并且只能使用AT 硬盘。对于Linux 的移植性问题,Linus 当时并没有考虑。但是目前Linux 几乎可以运行在任何一种硬件体系结构上。


到了 1991 年的10 月5 日,Linus 在comp.os.minix 新闻组上发布消息,正式向外宣布Linux 内核系统的诞生(Free minix-like kernel sources for 386-AT)。这段消息可以称为Linux 的诞生宣言,并且一直广为流传。因此10 月5 日对Linux 社区来说是一个特殊的日子,许多后来Linux 的新版本发布时都选择了这个日子。所以RedHat 公司选择这个日子发布它的新系统也不是偶然的。

1.1.6 Linux 操作系统版本的变迁

Linux 操作系统从诞生到1.0 版正式出现,共发布了表1–1 中所示的一些主要版本。
表 1–1 内核的主要版本
 

版本号

发布日期

说明

0.00

(1991.2-4)

两个进程,分别在屏幕上显示’AAA’BBB’

 

0.01

 

(1991.8)

第一个正式向外公布的 Linux 内核版本多线程文件系统分段

和分页内存管理。

0.02

(1991.10.5)

该版本以及 0.03 版是内部版,目前已经无法找到特点同上。

0.10

(1991.10)

Ted Ts’o 发布的 Linux 版本。增加了内存分配库函数。

0.11

(1991.12.8)

基本可以正常运行的内核版本。至此硬盘和软驱驱动。

 

0.12

 

(1992.1.15)

主要增加了数学协处理器的软件模拟程序增加了作业控制

拟控制台、文件符号链接和虚拟内存对换功能。

 

0.95(0.13)

 

(1992.3.8)

加入虚拟文件系统支持增加了登录功能改善了软盘驱动程序

和文件系统的性能。改变了硬盘编号方式。支持 CDROM

 

0.96

 

(1992.5.12)

开始加入网络支持改善了串行驱动高速缓冲内存管的性

能,支持动态链接库,并能运行 X-Windows 程序。

0.97

(1992.8.1)

增加了对新的 SCSI 驱动程序支持。

0.98

(1992.9.29)

改善了对 TCP/IP0.8.1)网的支持,纠正了 extfs 的错误。

0.99

(1992.12.13)

重新设计进程对内存的使用分配,每个进程有 4G 线性空间。

1.0

(1994.3.14)

第一个正式版。

 

 Linux  0.13 直接 0.95 版,Linus 的意 1.0 0.95 对内核的(序的) Linus 的主任务 开始决定为止新的内核版本 2003 12 18 日公 2.6.2 中包 15000 使 gz 后源件包 40MB !到现在 1–2  

12 字节数

内核版本号

发布日期

源代码大小( gz 压缩后)

2.4.22

2004.2.4

35MB

2.6.5

2004.4.4

41MB

  

1.1.7 Linux 称的由来

 Linux 时并没有被称 LinuxLinus 给他 FREAX怪诞等意操作系统上载 ftp.funet.fi 务器上时 Ari Lemke 很不为既 Linus 的操作统就 Linux 作为该操Linux 流传下来。

Linus 的自传Just for FunLinus 解释1

“坦想到过要 Linux 这个称发为这负 了版准备的呢?Freax中某些早 Makefile -  用于描 述如  -  文件中含有Freax”了,大在了左右。但实这 也没不需还没核代

Ari Lemke,他坚持用自 ftp 上,非常 Freax 这个名 字这个名字(Linux)当时我并这都名字。所以我 可以自负我并但我名 字,能说做的

 1.1.8 Linux 系统开发的要贡献者

  Linux 早期以看Linux 早期主要 Linus 本人以外员之一就 Theodore Ts'o (Ted Ts'o) 1990 年毕 MIT 。在积极参 加学活动行车有就 Hacking  on  Linux开始 喜欢线 IBM 从事系统操 作、 IETF 成员。

Linux  行也 Linux  操作时,怀热 情 linux Maillist,几乎是 Linux 刚开 Linux 做出他 也是最早 Linux 内核加程Linux 0.10 ramdisk.c 和内核配 程 kmalloc.c)目前为止事着 Linux 洲地区他设立 Linux ftp tsx-11.mit.edu而且广 Linux 用户 Linux 献 之一实现 ext2 文件 Linux 世界上的他 又推 ext3 统。该系统的访作为 97 2002 5 Linux Journal 了封面人了采访 IBM Linux   技术 Linux  LSB(Linux Standard Base)工作。 

Linux    Alan  Cox作于西(Swansea  University College)别喜欢玩游戏 MUDMulti-User Dungeon or Dimension网络 游戏 90 games.mud 新闻组 posts 中你可帖子还写了 一 MUD 展史(rec.games.mud 新闻1992 3 9 A history of MUD)

MUD 切相计算了玩运 行游输速最为是他操 作系使 MINIX 不起 Linux 0.11 386BSD 算 购置了一 386SX 386BSD 处理而采 Intel 386SX CPU 不带 数学 Linux 系统于是他开 Linux Linux 系统有关 Linux 式问 Linux 实现巧妙(beautifully)

Linux 0.95 ,他 Linux 系统丁程记得他最丁程 序, Linus 采纳,并 Linux TCP/IP 使用人之加入 Linux 的开成为 Linux 码的可以说成 Linux 社团Linus 之后 Microsoft 曾经邀请拒绝 2001 始, 他负 Linux 2.4.x Linus 主要负责的研制( 2.5.x)

《内The Linux Kernel Hackers' Guide)一 Michael K. Johnson 接触 Linux 之一( 0.97 )。他 Linux 计划Linux Document Project - LDP起者 Linux Journel RedHat 公司作。 

Linux  些中天这计算 Linux  出了里就不一举了贡献者的可参 Linux CREDITS 文件, 其中出了 Linux 献的 400 括他 email 地址和信地 址、迹等息。 

通过 Linux 的五归纳下:
UNIX   --  UNIX  1969  Bell 室。Linux  UNIX 的一种克统。UNIX的重了。
MINIX 操作  --  MINIX UNIX 一种,它 1987 年由教授 Andrew  S.  Tanenbaum 开发完 MINIX 系统的出(能免)界的 UNIX 系统风。Linux 始就是参 MINIX 1991
GNU 计划--   Linux 操作 Linux 上所用 GNU 划。Linux只是 GNU 环境( bash shell) Linux 将寸
POSIX  --  该标准 Linux 操作系朝着要的 Linux 进的塔。INTERNET --  如果没 Intenet 界的无数 Linux 最多 只能发展 0.13(0.95)水平。

 1.2 内容综述

 本文 Linux 0.11 细描述和释。Linux-0.11 1991 12 日发以下件: 

bootimage.Z           -  具有美键盘码的动映像件;
rootimage.Z            -   1200kB 压缩的根文件统映像件;
linux-0.11.tar.Z       -  内核源码文。大 94KB,展开后也 325KB
as86.tar.Z               -  Bruce  Evans'二进制执行件。是 16 位的汇程序装入程
INSTALL-0.11      -  更新过安装息文 

目前原来 rootimage.Z 文件其它能找到。不 Internet 上的源为Linux  0.11  出了一个使用 rootimage-0.11  重新出能 0.11 环境使 gcc 1.40 实验开发环境些文件均可以 oldlinux.org 网站 上下 

本文  linux-0.11  序,进行,包 括 Makefile 注释算机结 束内始调 shell 序均针对有连贯性根据自 己的分析用实 

所有如果理解关知比 如, C 时, GNU  C 内嵌汇编介 绍;进行/ Intel 中断控8259A并列使。这码的解所使作 者认单独介绍率高多。 

Linux 0.11 们认 Linux 运行Linux-0.11 版整内核 源代码只 325K 节左基本 Linux 的精目前最新 2.5.XX 内核非 常大 188 ,即使阅读。也简 入手 Linux  0.01 码呢 240K 左右 0.01 版的足之有很 的使动程序的不太一样 0.11 的引导 启动基本外一个原 0.11 早期(bootimage)示。文件(rootimage)那么运行 

 Linux  0.11  处。不包待队TCP/IP 当前内存使的内Linux  上是机制此可了解 Linux  工作 的基这些码。 

Linux 内核的代了保代码中 源代的,码中行介件 的次列表。整 Linux 内核源 1.1 构均 linux 目录

列表  1-1 Linux/目录 


本书 1  4  32 位运行方为学全部 5 10 内核代码 5 章内分后 11 13 三部读 第二

2 章概 Linux 操作内核织结大 致功 Linux 使使用线使用内核  Linux/下的,也Makefile 文件编译译管具软 make 使

3 boot/录下中包导程 bootsect.s BIOS 中参 setup.s 32 位运 head.s了把引导 加载工作并对系统探测完成了进 32 模式运行内 核系化工备。

4 要介 init/中内 main.c。它是所有初始入正 常运地方在完成了 shell 时将需 要查序,读可序进序 的函广使该最先选看懂 main.c 的所有 程序 Linux  ,可统、程序读。

5 要介 kenel/目录中的程序最重要的度函 schedule()sleep_on()函数序。中的解。

6   kernel/dev_blk/目录了注有硬备 的驱文件交道关的这 章内资料下文节。

7   kernel/dev_chr/目录序进中主线驱 动程序和显示些驱动程 0.11 核支持的端 设备多与阅读硬件

8 章介 kernel/math/目录中仿真程注释的内有真 正开此本较简了解可。

 9    fs/目录件系序,在看够暂阅读 Andrew S. Tanenbaum 《操作书中 MINIX 系统的章 Linux 系统 MINIX 一种文件统,Linux 0.11 版也不例

 10  mm/目录中内存理解 Intel 80X86 器的足够适当整的 80X86 保护行方的说明,这知识基上都可以 Intel  80386  程序编程手(Intel  80386  Programmer's Reference  Manual)。但此章中以源码中的运用实例对象行解说,应该可更好理解它的工 作原

Linux 内核籍都描述者来程 序时 11 include/录中详细个 定义结构为了便些 经常结构释,能在该 章内章节使的,核的了 解这节。

12 Linux 0.11 版内 lib/所有件主统等 系统,对有较版本容 并不看完 0.11

13 tools/录下 build.c 不会核映像(image)中, 它仅引导核模内核kernel image)文件。

14 核源代码验方 Bochs 仿使用和 编 Linux 内核法以及磁法。 Linux  0.11 使其 RedHat 9 顺利编译

最后中给 Linux 一些结构模 式运述。 

为了便附录中要 PC  考 文献阅读书籍有包的 繁杂如在 Linux LDPLinux Document Project)中会 明确 HOWTO ,而并不仅给 LDP 站地

Linus 在最 Linux 作系 3 M. J. Bach UNIX 操作 系统 UNIX System V 内核原理结构Linus 使用了的算 法,Linux 内核源代码很多重要数的名自该书。此,在书时,这一本必的 内核书籍一本 John H. Crawford 的《Programming the 80386讲解80x86 法的好书 Andrew S.Tanenbaum MINIX 与实 1 Linus 主要使 MINIX 文件系 1.0 版,而且 Linux 内核 中也所以系统统的完 全可 Tanenbaum 中获 

在对,我的主输出程 序的的完码进对原任 何方 C 类语文注名 等也息。更为码中件 方面。如回头会有

对于些基散布方,了 能够便结合些基解。

最后完全一切经成 Linux 行家了,你只刚踏 Linux 的征途 Linux  GURU 知识多的渐进 1.0  到最数编本 书时 Linux 内核 2.5.44 速理解这甚至补 丁(patch我也甘拜

 1.3 本章小结 

首先 Linux 诞生发展UNIX 开放原代码版 Linux 提供了 实现Rechard Stallman GNU Linux 富且POSIX 出现 Linux 提供兼容系统南、A.S.T MINIX 操作系统 Linux 的诞参考Internet Linux 成长和后本容。

posted on 2010-02-06 03:00 小默 阅读(446) 评论(0)  编辑 收藏 引用 所属分类: Linux


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

留言簿(13)

随笔分类(287)

随笔档案(289)

漏洞

搜索

积分与排名

最新评论

阅读排行榜