




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux操作系统结构分析绪论一、分析对象现今有许多操作系统,从巨型机到台式机到手持机中都有自己的操作系统,经常见到的操作系统就有几十种。如:DOS、Windows 95/98/NT/2000/CE、各种版本的、 etWare,JavaOS 等等。每一种操作系统都有自己的结构,不可能全部分析,必须选择其中最有代表性的一种。选取的原则:流行:主流操作系统,对它的分析具有实用价值; 成熟:采用的都是经过验证的、正确、高效的技术;先进:具有先进性,代表了操作系统发展的潮流;容易得到:能得到可运行的系统、及丰富的文档资料,最好有原码;满足以上条件的操作系统有:DOS、Windows 系列、UNIX 及
2、其变种。DOS 可以分析,但过时了;.Windows 系列所能得到的资料都是应用一级的,很少有介绍其无法得到原码,难以深入分析;实现的,更UNIX 系统发展多年,非常成熟;目前仍有很大的市场,还算流行;经过不断的改进和演化,其技术保持先进性,对整个操作系统的发展影响深远;而且可以得到原码和各种资料,便于分析其结构,所以选择 UNIX 及其变种作为分析对象。“UNIX 的种类可能比你见到的冰淇淋的品牌还要多”,应选择一个有代表性的变种,为此,首先看UNIX 及其变种的发展和演化:1.产生:1969 AT&T 的贝尔;创造者Ken Thompson 和Dennis Ritchie;环
3、境DEC PDP 7/11;1973.10 对外正式发布。2.:两大1956 年(BSD、SVR)司法部依据反托拉斯法向 AT&T 提出,不允许 AT&T 经营计算机产品,因此,UNIX 无法进入商业领域。AT&T 无偿向大学和研究机构提供UNIX 系统(包括原码),用于教学和研究。其间,AT&T 维护着 UNIX,用户从不同的方面对 UNIX 作了许多改进,AT&T 又将用户对 UNIX 的改进加入到新版本中。此举导致了 UNIX 在世界范围内广泛、快速发展。可以说,UNIX 开始时走的是开放、技术而非商业的道路。1978 年贝尔将 UNIX 移植到 VAX-11 上,该版本后来寄给了加州大
4、学分校(UCB)。分校 1974 年 2 月获得UNIX证,1978 年获得 VAX-11/780 和贝尔在 VAX-11 上的 UNIX 新版本。再此基础上,分校为UNIX 引入了虚存、TCP/IP、快速文件系统、socket 等技术,发布了自己的版本(Berkeley Software Distribution):1979 年 3BSD、1980 年 4.0BSD、1981 年 4.1BSD、1983 年 4.2BSD、1986 年 4.3BSD、1993 年4.4BSD,93 年后停止开发。虽然 BSD 仍然是 UNIX,但它和 AT&T 的UNIX 在许多方面都不同,出现了。1982
5、年 AT&T 被允诺进入计算机市场,它很快推出了 UNIX版本:1982 年 System III、1983 年 System V,1984 年 System V Release 2(SVR2)、1987 年 SVR3、SVR4,其中引入了许多新技术,如:虚存(与 BSD 完全不同)、进程间通信设施、框架等;文件系统、共享库、StreamsUNIX 商业版不断推出,它们要么基于 BSD,要么基于 SVR,从而出现了两大派别。1987 年 AT&T 与SUN 合作开发SVR4,引起许多厂商的不满。1988 年 IBM、Digital、HP、Apollo 等成立开放(OSF);作为,AT&T 和S
6、UN 等公司成立UNIX 国际(UI)。的商业产品有:BSDSUN SunOS、DEC Ultrix、SGI IRIX、UCB 4.4BSD; SVR3HP UP-UX、SCO/MS SCO Xenix、SCO SCO UNIX、IBMAIX、Unisys Unisys UNIX 等;SVR4USL(AT&T 的子公司) System V、Novell UnixWare、CrayUNICOS、Dell DelIX SVR4 等;SV+BSDSUN Solaris、Apple A/UX 等。1990 Windows NT 推出,合作。UNIX 的商业化和标准化发展引入了许多新技术(如:SunOS
7、 引入的虚拟文件系统、网络文件系统,AIX 引入的日志文件系统等),也制定了许多标准(如:IEEE 的IX 标准等),促进了整个操作系统的发展。3.简化内核MACH早期的 UNIX,内核小巧、简单,“小的就是美的”。随着系统不断地添加新的功能,内核变得越来越庞大、复杂和笨拙,有必要将其减肥。80 年代中期,.大学开发 Mach 操作系统,该系统采用微内核结构,内核仅提供必要功能的最小集,并支持 UNIX 编程接口。该系统首次提出微内核的概念,对操作系统的发展产生了深远的影响。DigitaIX、NeXT NextStep、GNU Hurd、等商业系统都是基于它开发的。4.教学需要Minix在早期
8、,只要有 AT&T 的,可以很方便地拿到 UNIX 的原码,可以说UNIX 原码是公开的,因此,很多大学的操作系统课程都采用了UNIX。后来 AT&TUNIX 的巨大,原码不再公开,同时也限制大学再讲述 UNIX 理论。为了教学的需要,Andrew S. Tanenbaum 等人决定自己从头写一个与 UNIX 兼容的、完全为教学服务(演示操作系统的基本概念)的操作系统,这就是 Minix。经过多年的努力,Minix 有了很大发展,成了一个完全独立的操作系统。但 Minix 是制了它的进一步发展。的系统,而且不够完善,这限1990 年秋天,芬兰首都的大学正在开设操作系统课程,所用的是Andrew
9、 Tanenbaum 的操作系统:设计与实现,当然,讲述的是 Minix,上机用的也是 Minix。其中有一个学生:Linus Torvalds。因为在学校上机需要长时间排队等待,所以,Linus“一气之下,自己掏钱买了一台 PC 机”,并在其上安装了 Minix。Linus 在自己的 PC 机上,以 Tanenbaum 教授自行设计的微型 Unix 操作系统:Minix 为开发,开发了属于他自己的第一个程序。“这个程序包括两个进程,都是向屏幕上写字母,然后用一个定时器来切换这两个进程。”他回忆说,“一个进程写 A,另一个进程写 B,所以就在屏幕上看到了 AAAA, BBBB,如此循环重复的输
10、出结果。”Linus 说刚开始的时候他根本没有想到要编写一个操作系统内核。1991 年,他需要一个简单的终端仿真程序来存取 Usenet组的内容,于是他就在前两个草草编写的进程的基础上又写了一个程序。当然,他把那些个 A 和 B 改成了别的东西。“一个进程是从键盘上阅读输入然后发送给调制解调器,另一个进程则是从调制解调器上阅读发送来的信息然后送到屏幕上供人阅读。”然而要实现这两个新的进程,他显然还需要一些别的东西,这就是驱动程序。他必须为不同的显示器、键盘和调制解调器编写驱动程序。1991年的夏季,也就是在他了第一台 PC 之后 6 个月,Linus 觉得他还需要从网上某些文件,为此他必须读写
11、某个磁盘。“于是我又不得不写一个磁盘驱动程序,然后是一个文件系统。而一旦当你有了任务切换器、文件系统和设备驱动程序之后,你当然就拥有了一个 Unix”或者至少是它的一个内核。Linux 就以这样一种极其古怪但也极其自然的方式问世了。 Linux这个羽毛未丰的操作系统很有可能马上夭折,所以 Linus 并没有在 Minix5.组中它。他只是在技术大学的一台 FTP 服务器上发了一则消息,说用户可以Linux 的公开版本。“Linux 是笔名,但是我要是真用它来命名的话,我担心有人会认为我狂妄自大,而且不会去认真地对待它。所以我当时选了一个很糟糕的名字:Freax” ,这个字是由 free()fr
12、eak(怪胎)x的,“我知道这听起来令人”。幸好,管理这台 FTP 服务器的 Ari Lemmke 根本不喜欢 Freax 这个名字,他认为此套系统为“Linus 的 Minix ”,所以最后还是选择了Linux。到 1992 年 1 月止,全世界大约只有 100 个左右的人在使用 Linux,但正是他们为 Linux 做了关键性的洗礼。他们所提供的所有初期的上载代码和评论后来证明对 Linux 的发展为了解决 Linux 的错误而编写的许多,尤为重要的是那些网上们代码段。网上的任何人在任何地方都可以得到 Linux 的基本文件,并可通过电子邮件评论或者提供修正代码,Usenet 还专门为它开
13、辟了一个。于是,Linux 就从最开始的一个人的产品变成了一副巨大的织锦,变成了由无数志同道合的们发起的一场运动。后来,Linux 加入了 GNU 组织,它受到越来越多的人的喜爱,被全世界的 Linux者加工、完善。许多技术力量雄厚又市场的商业公司也加入了原先完全由业余者和网络所参与的这场 光了纯粹面和众多的运动,开发出了多种 Linux 的扩散版本(distribution),磨许多粗糙不平的棱角,增加了更易于用户使用的图形界开发工具,极大地拓展了 Linux 的全球用户基础。因此 Linux是ernet 上许多人共同努力的结果,是集体智慧的结晶。Linus 并不是从头开始写 Linux 的
14、。相反地,他是从重用 Minix 的代码和思想入手的,当然,最后所有的 Minix 代码都或被彻底的重写了。Linux是在 Minix 上起步的,但在其成长的过程中,又接受了 UNIX 的许多成功的。有人评价说:“Linux 是在凝聚了 Unix 过去所有的成功,并抛弃了其所有缺陷后所形成的 Unix 的全部的精华”。Linux 的特色:多任务:可同时执行多个程序。多用户:同一部机器可供多人同时使用。支持 386 protected mode: 采用内存保护方式执行各程序, 所以个别的程序失控不会造成系统当机。动态联结 (dynamic linking):程序只在需要时才装入内存。虚拟内存:每
15、个进程都可用到全部的地址空间,但须在硬盘上规划一块区域作交换区。copy-on-write pages 支持:意即多个进程(父子)开始时共享同一块内存页,但当某个进程企图向共享页写入时,系统在进程的地址空间为该页创建一个新的拷贝,以后进程各自用自己的私有页。如果一直没有对共享页的写操作,它们将一直共享该页。其好处是增加速度并减少内存的使用。符合IX 标准,并且其原码与 System V 及部分 BSD 相容。(注)所有的原码都是可免费获得的,包括所有的内核程序、驱动程序、开发工具程序、应用程序。支持多国语言。多重虚拟consoles :可使用热键作更换。支持多种常见的文件系统:minix-1、
16、 Xenix、 System V filesystems、DOSFAT、OS/2 的HPFS(read-only)等,本身支持两种 file system:EXT2 and XIAFS,且文件名长度可至 256 字。 “UMSDOS(Unix-like MSDOS)”: 可在 Dos partition支持各种标准 CD-ROM 格式,如 ISO 9660。中安装 Linux。支持 TCP/IP 协议,包含 ftp、移植性好:支持大多的硬件安全可靠,受到世界尤其net、NFS 等。计算机界的广泛关注认为,Linux操作系统的一次难得的机会。大厂商的支持:IBM、Oracle、Sybase 等都
17、在将自己的产品移植到Linux上。Linus Torvalds 说:“微软总是强调性能只要过得去就行,并且他们的体积非常大, 而 Linux 却是(并且也将一直是)强调技术问题。”选取 Linux 为分析对象。Linux 既不属于 BSD 也不属于 SVR,但它吸收了两者的许多优点。事实上, Linux 的许多技术来源于 UNIX,因此,也可以说,Linux 既属于 BSD 也属于 SVR,它又没有完全采用这两者中的任何一种。有些技术,如Streams,在 Linux 中就没有采用。二、分析内容作为一个通用的操作系统,Linux 包含很多内容,1、操作系统的定义也不能全部分析。广义上说,操作系
18、统是整个的内容,包括:内核及其上的各种系统,如图形界面、S、语言编译器(gcc 等)、编辑器、浏览器等;狭义上说,操作系统就是内核。内核之外的都是应用程序。通常说的 Linux 操作系统指的就是Linux 内核,它由 Linus 本人“拥有”,由他直接不断地开发、完善,该操作系统中真正属于 GNU 的、Free 的部分也就是内核。Linux 的内核是只分析内核。2、Linux但作为一个操作系统不能只有内核,还需要有各种工具、以及建立在内核上的的、一致的。应用程序。在 Linux 内核上开发有许许多多的应用程序,这些应用程序有的是的、开放的,有的是私有的、成 Linux 的一个。Linux 的各
19、种的。在 Linux 内核上集成不同的应用,就构Slackware 较早的一个发布。Red Hat 已经成为最受欢迎的“零售”版本。Caldera 由德国的 Linux Support Team (LST)(现在是 Caldera 的一部分了)负责。Debian 是最老的系统之一,但是由于它是由为缓慢。S.u.S.E.是一个德国系统。进行开发的, 它的更新较这些采用的内核均是 Linux,只是上面集成的应用不同而已。严格地说,它们不能直接被叫做 Linux,而应叫做“以 Linux 为包”。在内核上集成进来什么,它就能做什么。3、Linux 版本的操作系统Linux 内核的版本号是由点隔开的三
20、个数字(A.BB.CC)。其中第一个数是内核的版本,现在用的是第三版(2.);第二个号码是的主号,主号为偶数(包括 0)的版本是可以使用的稳定的版本,如 2.0.36,主号为奇数的版本是不一定稳定的测试版,如 2.1.26;最后一个号码是次号,它因每一次改动而增加,如 2.0.8,表示它是内核 2.0,是稳定的内核,它已经是第九次了。Linus 本人Linux 内核新版本的开发,这些新版本的主号都是奇数(目前是2.3.xx),一旦他觉得内核变得稳定了,他就将主号改为偶数,(目前的是2.2.xx),并将其交给另外的小组,而后开始另一个版本的开发(目前是 2.3.xx)。本分析基于Linux 2.
21、0 版。(本书基于稳定的 2.0.30 源代码)。Linux的版本随者的不同而不同,与 Linux 内核的版本号相对独立。发行中包含的应用的版本也与内核无关。例如,RedHat5.2 中包括:内核:Linux2.0.36;WWW Server:Apache 1.3.3;系统:Send_8.8.7;DNS:Bind 8.1.2; NEWS: inn 1.7.2; Xwindow:Xfree86 3.3.2; C 语言:gcc 2.7.2;相对于 FreeBSD 类操作系统,Linux 的巨大优势就在于有 Linus。 他专注于内核,代码和质量,几乎完全避开政治。他让其他人处理“用户空间”(库、编
22、译器、以及包含在任何 Linux套件里的各种工具和应用程序。)从这种“温和的核上帝”(在他以前者”模式中获益把 Linus 看作是“Linux 内是一神教)。一无所有,而且就此而言当 Linus 最终退休时(这也许在死后很长时间才会发生),Linux 内核开发者们的希望就在于能一致接受一个继任者一个新的温和的者。那将是像 Alan Cox、Stephen Tdie 这样的人,或将是名字频繁出现在 Linux-kernelinglist 的某个人(对此我知道得并不多)。Linus 开玩笑地把他的女儿称为Linus 2.0 和 3.0 (如果她们有并且精通技术,可能会建立一种世袭的寡头政体)。让过
23、 15 年后再看。三、分析方法最好是读原码,但原码多而复杂,需要有指导,所以需要先看文档。原则:看文档+读原码。就是说,查看内核源程序是深入地理解 Linux 操作系统的一个富有成效的练习。参考文献:1、Linux 有几本电子文档,如安装指南、用户手册、管理员指南、指南等,其中有一本叫 Linux 内核(Linux Kernel),以此为蓝本。可在许多站点找到,光盘上也有,还有中文翻译,可在 http/原文。2、书店出售的书中有一本电子工业/上,但翻译得很烂,建议读的Linux 实用魏永明 杨飞月编著,其中有该文档的部分翻译,可参考。3、UNIX 高级等译。系统技术(美)Uresh Vahal
24、ia 著,之 王4、网上、报上、杂志上的各种有关 Linux 的资料。四、The Linux Kernel Sour(Linux 内核源程序)下面是 Linux 内核源程序的概览:它们如何组织,你应该从哪里开始查找特定的代码等等。Where to Get The Linux Kernel Sour从哪里得到 Linux 内核源程序)所有主要的Linux(Craftworks,Debian,Slackware,RedHat 等等)中都有内核源程序。通常,安装在你系统上的 Linux 内核都是用这些源程序建立的。实际上这些源程序显得有些过时, 所以你可能希望得到的源程序。的源程序放在ftp:/ft
25、p.cs.helsinki.fi 和其它所有的镜像的web 站点上。helsinki 的 web 站点,但是其它站点,例如 MIT 和 Sunsite 也不会太。如果你无法web,还有许多 CD ROM 厂家用非常合理的费用提供世界主要 web站点的快照(snapshots)。一些厂商甚至提供预订服务,按季或月进行更新。你的本地的Linux 用户组也是一个源程序的好的来源。对于内核源程序的改动是用 patch 文件分发的。工具 patch 可以对于一组源文件做一系列的修改。例如,如果你有 2.0.29 的源程序树,而你希望转移到 2.0.30,你可以先获取 2.0.30 的 patch 文件,
26、然后把这些 patch(编辑)应用到 2.0.29 源程序树上:$ cd /usr/src/linux$ patch -p1 patch-2.0.30这样可以不用拷贝整个源程序树,特别对于慢速的串行连接。一个内核补丁(正式和非正式的)的好来源是 http。How The Kernel SourAre Arranged(内核源程序如何组织)在源程序树的最上层你会看到一些目录:archarch 子目录包括所有和体系结构相关的内核代码。它还有更深的子目录,每一种支持的体系结构,例如 i386 和 alpha。一includeinclude 子目录包括编译内核所需要的大部分 include 文件。它也
27、有更深的子目录,每一个支持的体系结构一个。include/asm 是这系结构所需要的真实的include 目录的软,例如 include/asm-i386。为了改变体系结构,你需要编辑内核的 makefile 文件,并重新运行 Linux 的内核配置程序。init这个目录包含内核的初始化代码,这是研究内核如何工作的一个非常好的起点。mm这个目录包括所有的内存管理代码,包括内核内存管理和虚拟内存管理。但和体系结构相关的内存管理代码则位于arch/*/mm/,例如 arch/i386/mm/fault.c。 drivers系统所有的设备驱动程序都在这个目录中。它们又按设备驱动程序类被划分成多个子目
28、录,例如block、pci、net 等。ipc这个目录包含内核的进程间通讯的代码,共享内存、信号灯、消息队列等。modules这只是一个用来存放建立好的模块的目录。通常为空。fs所有的文件系统的代码。它又被划分成子目录,每一个支持的文件系个,例如 vfat 和ext2。kernel主要的内核代码,如进程的创建、终止、调度,以及信号、时钟等。同样,和体系结构相关的内核代码放在 arch/*/kernel 中。net内核的网络代码,包括 TCP/IP 协议、Socket 以及相关的内容。lib这个目录放置内核的库代码,如 vsprf、串处理函数、解压缩函数等。和体系结构相关的库代码在 arch/*
29、/lib/中。scripts这个目录包含(例如awk 和 tk),用于配置内核。Where to Start Looking(从哪里开始看)看像 Linux 内核这么巨大而复杂的程序是相当的。它就像一个巨大的线球,显示不出终点。看内核的一部分代码通常会被引到查看其它几个相关的文件,你就会忘记你最初要看的是什么。下一节给你一个提示,对于一个给定的,最好看源程序树的那个地方。1、System Startup and Initialization(系统启动和初始化)在一个 el 系统上,当 loadlin.exe 或 LILO 把内核加载到内存并把控制权交给它的时候,内核开始启动。有关这一部分可看
30、arch/i386/kernel/head.S。head.S 执行一些和体系结构相关的设置工作,然后跳到 init/main.c 中的 main()例程。2、Memory Management(内存管理)这部分代码大多在 mm 中,但和体系结构相关的代码则在 arch/*/mm 中。Page fault处理代码在 mm/memory.c 中,内存和页缓存代码在 mm/filemap.c 中。Buffer cache 在mm/buffer.c 中实现,交换缓存在 mm/swap_se.c 和mm/swapfile.c 中。3、Kernel大部分相对通用的代码在 kernel,而和体系结构相关的代
31、码则在 arch/*/kernel 中。调度程序在 kernel/sched.c , fork 代码在 kernel/fork.c 。 bottom half 处理代码在 include/linux/ errupt.h。task_struct 数据结构可以在 include/linux/sched.h 中找到。4、PCIPCI 伪驱动程序在 drivers/pci/pci.c,系统范围的定义在 include/linux/pci.h。每一种体系结构都有一些特殊的 PCI BIOS 代码,Alpha AXP 的位于 arch/alpha/kernel/bios32.c。5、ros Communi
32、cation全部在 ipc 目录。所有 System V IPC 对象都包括在 ipc_perm 数据结构中,并可以在include/linux/ipc.h 中找到。System V 的消息在 ipc/msg.c 中实现,共享内存在 ipc/shm.c 中,信号灯在 ipc/sem.c,管道在 ipc/pipe.c 中实现。6、errupndling内核的中断处理代码几乎都是和微处理器(通常也和代码在 arch/i386/kernel/irq.c 它的定义在 incude/asm-i386/irq.h。7、Device Drivers(设备驱动程序)相关的。 el 中断处理Linux 内核源代码的大部分代码行在它的设备驱动程序中。Linux 所有的设备驱动程序源代码都在 drivers 子目录中,它们又被进一步分类:/block块设备驱动程序,比如 ide(ide.c)。如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看 drivers/block/genhd.c 中的 device_setup()。它不仅初始化硬盘,也初始化网络,因为当安装 nfs 文件系统的时候需要网络。块设备包括基于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2020-2021深圳沙井立才学校小学三年级数学下期末第一次模拟试题带答案
- 施工现场临电施工方案
- 冲孔模具施工方案范本
- 小学课本剧一年级《雪孩子》-剧本
- 2025年中考物理二轮复习:声光专题 能力提升练习题(含答案解析)
- 2024年广东省中考满分作文《当好自己故事的主角》2
- 第八单元 课题1金属材料教学设计-2024-2025九年级化学人教版2024下册
- 第2课 产生气体的变化(教学设计)-2023-2024学年六年级下册科学 教科版
- 合同范本政府土地使用
- 农作物赔偿合同范例
- me实验2 电位、电压的测定及电路电位图的绘制
- EGCs与肠道微环境相互作用的研究进展
- 特殊儿童随班就读申请书范本
- 三年级下册英语教材解读-教材解读|鲁科版(五四学制)(三起)
- 道路施工导改及施工方案
- 《实数》单元作业设计
- (word完整版)教师个人简历模板
- 专题11 以小见大-【帮作文】初中语文之从课文中学习写作 课件(共25张PPT)
- 互联网公司劳动合同
- 吉美版四年级综合实践活动下册全册表格简约式教案教学设计
- 2023河南对口高考计算机类基础课试题
评论
0/150
提交评论