在线试读

get_product_contenthtml

pan>章简介和概述

作系统不仅是信息技术中吸引人的一部分,而且还是公众争论的主题?。在此发展过程中,Linux发挥了举足轻重的作用。然而仅仅10年前,学术用操作系统和商用操作系统还是有着严格区分的:前者相对简单而日可茶得源代码.对后者而言,虽然不同的操作系统能各不相同,但其源代码一直都是受到良好保护的秘密。现在,任何人都可以从因特网下载Linux(或任何其他自由操作系统)的源代行研究。

Linux现在已经安装到了数百万台电脑上,无论是家庭用户还是专业人员,都可以在Linux上执行各种任务。无论是手表中的微型嵌入式系统,还是大规模并行大型机,Linux都可以在无数领域大展身手。而这使得Linux的源代码有趣。一个合理可靠、基础牢固的概念(UNIX操作系统)结合了强大的创新以及学术操作系统所缺乏的解决问题的强烈倾向,这是为什么Linux具备如此强大吸引力的原因。

本书描述了内核的主能,解释了其内部的结构,并研究了其实现。由于所讨论主题的复杂,我假定读者已经对操作系统和C语言系统程序设计有的基础(当然,对Linux系统的熟悉是不言而喻的)。我会简要介绍与常见操作系统问题相关的几个基础概念,但本书主要的内容则集中于Linux内核的实现。市场上有许多讲述操作系统基础概念的教材,对某一特定主题不熟悉的读者,可以找一本看看。例如,Tanenbaum写的两本的入门书籍([TW06][Tan07])。

本书要求读者有牢固的C语言程序设计基础。因为内核使用了C语言的许多技巧,尤其是GNUC编译器的许多专门特。附录C讨论了C语言的一些精微之处,即使的程序员可能也未必熟悉这些。由于Linux必然与系统硬件(是CPU)有直接的交互,因此了解一点计算机结构的基础知识是很有用的。该主题也有很多入门书籍可用,在参考文献章节中列出了一些相关书籍。在深入讲解CPU的知识时(大多数情况下,我都以IA-32AMD64体系结构为例,因为Linux在这些体系结构上很常用),我会解释相关硬件的细节。在讨论不常见的机制时,我会解释机制背后的一般概念,但对于某个特定的特如何在用户空间中使用,则需要读者查询书中指明的手册页。

本章将概述内核所涉及的各种领域,并在后续章节中对相应的子系行长篇阐述之前,先行说明其基本关系。

由于内核的演变比较快速,读者很自然会问本书内容涵盖了哪一个内核版本。我选择了2.6.24

本的内核,该版本发布于08pan>月末。内核开发的动态意味着,在阅读本书时,本的内核应该已经发布,所以某些细节很自然会有所改变,这是不可避免的。如果不是这样,那Linux将会成为一个死气沉沉、毫无乐趣的系统,读者也很可能不会选择本书了。尽管一些细节将会发生变化,但书中描述的概念在本质上是不变的。对于2.6.24版本来说,这一点正确。因为与更早的版本比较,该版本有一些根本的改动。很自然,也无法隔一夜折腾一些此类来。

1.pan>内核的任务

在纯技术层面上,内核是硬件与软件之间的一个中间层。其作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组行寻址。尽管如此,仍然可以从其他一些有趣的视角对内行研究。

口从应用程序的视角来看,内核可以被认为是一台的计算机,将计算机抽象到一个高层次上。例如,在内核寻址硬盘时,它必须确定使用哪个路径来从磁盘向内存数据,数据的位置,经由哪个路径向磁盘发送哪一条命令,等等。另一方面,应用程序只需发出传输数据的命令。实际的工作如何完成与应用程序是不相干的,因为内核抽象了相关的细节。应用程序与硬件本身没有联系?,只与内核有联系,内核是应用程序所知道的层次结构中的底层,因此内核是一台的计算机。

口当若干程序在同一系统中并发运行时,也可以将内核视为资源管理程序。在这种情况下,内核负责将可用共享资源括CPU时间、磁盘空间、网络连接等)分配到各个系程,同时还需要保证系统的完整。

口另一种研究内核的视角是将内核视为库,其提供了一组面向系统的命令。通常,系统调用用于向计算机发送请求。借助于C标准库,系统调用对于应用程序像是普通函数一样,其调用方式与其他函数相同。

1.2实现策略

当前,在操作系统实现方面,有以下两种主要的范型。

pan>)微内核:这种范型中,只有基本能直接由中央内核(即微内核)实现。所有其他能都委托给一些独程,这程通过明确定义的通信接口与中心内核通信。例如,独程可能负责实现各种文件系统、内存管理等。(当然,与系统本身的通信需要用到基本的内存管能,这是由微内核实现的。但系统调用层次上的处理则由外部的服务程实现。)理论上,这是一种很的方法,因为系统的各个部分彼此都很清楚地划分开来,同时也迫使程序员使用“清洁的”程序设计技术。这种方法的其他好括:动态可扩展和在运行时切换重要组件。但由于在各个组件之间支持复杂通信需要额外的CPU时间,所以尽管微内核在各种研究领域早已经成为活跃主题,但在实用方展甚微。