⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000008.htm

📁 本书详细地介绍了Linux下一些主要函数的功能
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;axp33a&nbsp;(无聊中...),&nbsp;信区:&nbsp;Linux&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Linux内核源代码分析3-1&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Thu&nbsp;Aug&nbsp;&nbsp;3&nbsp;11:25:10&nbsp;2000)&nbsp;WWW-POST&nbsp;<BR>&nbsp;<BR>第3章&nbsp;&nbsp;&nbsp;内核体系结构概述
&nbsp;<BR>本章从较高层次上对内核进行说明。从顺序上来说,本章首先介绍内核设计目标,接下来&nbsp;<BR>介绍内核体系结构,最后介绍内核源程序目录结构。
&nbsp;<BR>3.1&nbsp;&nbsp;&nbsp;内核设计目标
&nbsp;<BR>Linux&nbsp;的内核展现出了几个相互关联的设计目标,它们依次是:清晰性、兼容性、可移植&nbsp;<BR>性、健壮性、安全性和速度。这些目标有时是互补的,有时则是矛盾的。但是它们被尽可&nbsp;<BR>能的保持在相互一致的状态,内核设计和实现的特性通常都要回归到这些问题上来。本节&nbsp;<BR>接下来的部分将分别讨论这些设计目标,同时还将对它们之间的取舍与平衡进行简要的说&nbsp;<BR>明。
&nbsp;<BR>3.1.1&nbsp;&nbsp;&nbsp;清晰性
&nbsp;<BR>稍微简化点说,内核目标是在保证速度和健壮性的前提下尽量清晰。这和现在的大多数应&nbsp;<BR>用程序的开发有所区别,后者的目标通常是在保证清晰性和健壮性的基础上尽量提高速度&nbsp;<BR>。因而在内核内部,速度和清晰性经常是一对矛盾。
&nbsp;<BR>在某种程度上,清晰性是健壮性的必要补充:一个很容易理解的实现方法比较容易证明是&nbsp;<BR>正确的;或者即使不正确,也能比较容易的找出其问题所在。从而这两个目标很少会发生&nbsp;<BR>冲突。
&nbsp;<BR>但是清晰性和速度通常却是一对矛盾。经过仔细手工优化的算法通常都使用了编译器生成&nbsp;<BR>代码的类似技术,很少可能是最清晰的解决方案。当内核中清晰性和速度要求不一致时,&nbsp;<BR>通常都是以牺牲清晰性来保证速度的。即便如此,程序员仍然清楚地知道清晰性的重要性&nbsp;<BR>,而且他们也做了大量的工作以使用最清晰的方法保证速度。
&nbsp;<BR>3.1.2&nbsp;&nbsp;&nbsp;兼容性
&nbsp;<BR>正如第1章中所述,Linux最初的编写目的是为了实现一个完整的、与Unix兼容的操作系统&nbsp;<BR>内核。随着开发过程的展开,它也开始以符合POSIX标准为目标。就内核而言,兼容Unix&nbsp;<BR>(至少是同某一现代的Unix实现相兼容)和符合POSIX标准并没有什么区别,因此我们也&nbsp;<BR>不会在这个问题上详细追究。
&nbsp;<BR>内核提供了另外一种类型的兼容性。基于Linux&nbsp;的系统能够提供可选择的对Java.class文&nbsp;<BR>件的本地运行支持(据说Linux是第一个提供这种支持的操作系统)。尽管实际负责Java&nbsp;<BR>程序解释执行的是另外一个Java虚拟机进程,该虚拟机并没有内置到内核中。但是内核提&nbsp;<BR>供的这种机制可以使得这种支持对用户是透明的。通过内核本身提供的程度不同的支持(&nbsp;<BR>这并不代表大部分工作像Java的解决方式一样能够通过外部进程实现),对其他可执行文&nbsp;<BR>件格式的支持也能够以同样的方式插入内核中。这方面的内容将在第7章中详细介绍。
&nbsp;<BR>另外需要说明的是,GNU/Linux系统作为一个整体通过DOSEMU仿真机器提供了对DOS可执行&nbsp;<BR>程序的支持,而且也通过WINE设计提供了对Windows可执行程序的部分支持。系统还以同&nbsp;<BR>样的方式通过SAMBA提供了对Windows兼容文件和打印服务的支持。但是这些都不是同内核&nbsp;<BR>密切相关的问题,因此在本书中我们不再对它们进行讨论。
&nbsp;<BR>兼容性的另外一个方面是兼容异种文件系统,本章中稍后会有更为详细的介绍,但是大部&nbsp;<BR>分内容已经超出了本书的范围。Linux能够支持很多文件系统,例如ext2(“本地”文件&nbsp;<BR>系统)、ISO-9660(CD-ROM使用的文件系统)、MS-DOS、网络文件系统(NFS)等许多其&nbsp;<BR>他文件系统。如果你有使用其他操作系统格式的磁盘或者一个网络磁盘服务器,那么&nbsp;<BR>Linux将能够和这些不同的文件系统进行交互。
&nbsp;<BR>兼容性的另外一个问题是网络,这在当今Internet流行的时代尤为重要。作为Unix的一个&nbsp;<BR>变种,Linux自然从很早就开始提供对TCP/IP的支持。内核还支持其他许多网络协议,它&nbsp;<BR>们包括AppleTalk协议的代码,这使得Linux单元可以和Macintosh机自由通讯;Novell的&nbsp;<BR>网络协议,也就是网络报文交换(IPX),分组报文交换(SPX)和NetWare核心协议(NCP&nbsp;<BR>);IP协议的新版本IPv6以及其它一些不太出名的协议。
&nbsp;<BR>兼容性考虑的最后一个方面是硬件兼容性。似乎每个不常见的显卡、市场份额小的网卡、&nbsp;<BR>非标准的CD-ROM接口和专用磁带设备都有Linux的驱动程序(只要它不是专为特定操作系&nbsp;<BR>统设计的专用硬件)。而且只要越来越多的厂商也逐渐认识到Linux的优势,并为更容易&nbsp;<BR>地实现向Linux上移植而开放相应的源程序代码,Linux对硬件支持会越来越好。
&nbsp;<BR>这些兼容性必须通过一个重要的子目标:模块度(modularity)来实现。在可能的情况下&nbsp;<BR>,内核只定义子系统的抽象接口,这种抽象接口可以通过任何方法来实现。例如,内核对&nbsp;<BR>于新文件系统的支持将简化为对虚拟文件系统(VFS)接口的代码实现。第7章中介绍的是&nbsp;<BR>另外一个例子,内核对二进制句柄的抽象支持是实现对诸如Java之类的新可执行格式的支&nbsp;<BR>持的方法。增加新的可执行格式的支持将转变为对相应的二进制句柄接口的实现。
&nbsp;<BR>&nbsp;3.1.3&nbsp;&nbsp;&nbsp;可移植性
&nbsp;<BR>与硬件兼容性相关的设计目标是可移植性,也就是在不同硬件平台上运行Linux的能力。&nbsp;<BR>系统最初是为运行在标准IBM兼容机上的Intel&nbsp;x86&nbsp;CPU而设计的,当时根本没有考虑到可&nbsp;<BR>移植性的问题。但是从那以后情况已经发生了很大的变化。现在正式的内核移植包括向基&nbsp;<BR>于Alpha、ARM、Motorola&nbsp;68x0、MIPS、PowerPC、SPARC及SPARC-64&nbsp;CPU系统的移植。因&nbsp;<BR>而,Linux可以在Amigas、旧版或新版的Macintosh、Sun和SGI工作站及NeXT机等机器上运&nbsp;<BR>行。而且这些还只是标准内核发行版本的移植范围。从老的DEC&nbsp;VAX到3Com掌上系列个人&nbsp;<BR>数字助理(例如Palm&nbsp;III)的非正式的移植工作也在不断进行中。成功的非正式移植版本&nbsp;<BR>后来通常都会变成正式的移植版本,因此这些非正式的移植版本很多最终都会出现在主开&nbsp;<BR>发树中。
&nbsp;<BR>广泛平台支持之所以能够成功的部分原因在于内核把源程序代码清晰地划分为体系结构无&nbsp;<BR>关部分和体系结构相关部分。在本章的后续部分将对这个问题进行更深入的讨论。
&nbsp;<BR>3.1.4&nbsp;&nbsp;&nbsp;健壮性和安全性
&nbsp;<BR>Linux必须健壮、稳定。系统自身应该没有任何缺陷,它还应该可以保护进程(用户)以&nbsp;<BR>防止互相干扰,这就像把整个系统从其他系统中隔离开来加以保护一样。后一种考虑很大&nbsp;<BR>程度上是受信任的用户空间应用程序领域的问题,但是内核至少也应该提供支撑安全体系&nbsp;<BR>的原语(primitive)。健壮性和安全性比任何别的目标都要重要,包括速度。(系统崩&nbsp;<BR>溃的速度很快又有什么好处呢?)
&nbsp;<BR>保证Linux健壮性和安全性的唯一一个最重要的因素是其开放的开发过程,它可以被看作&nbsp;<BR>是一种广泛而严格的检查。内核中的每一行代码、每一个改变都会很快由世界上数不清的&nbsp;<BR>程序员检验。还有一些程序员专门负责寻找和报告潜在的缺陷—他们这样做完全是出于自&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -