1.4 Linux内核(Kernel)版本简介

Linux继承了UNIX版本定制的规则,将Linux版本分为内核版本和发行版本两种类型。其中,内核版本是指Linux系统内核自身的版本号;发行版本是指由不同的公司或组织将Linux内核与应用程序、文档组织在一起构成的一个发行套装。通常,各个公司或组织会使用CD-ROM发布它们的Linux发行套装。

内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。一个内核不是一套完整的操作系统,还需要配置shell和相关实用工具,才能构成一套完整的操作系统。一套基于Linux内核的完整操作系统才被称为Linux操作系统。

Linux内核的开发和规范一直是由Linus Torvalds领导下的开发小组控制的。开发小组每隔一段时间就会公布新的内核版本或者修订版本,表1-1列出了开发小组从1991年开始到现在所发布的Linux内核各主要版本。内核具有实验版本和产品化版本两种不同的版本号。

表1-1 Linux内核的发展历史

Linux内核版本号由3个数字组成。其中,第1个数字代表目前发布的内核主版本号;第2个数字可以是偶数或奇数(偶数表示稳定版本,奇数表示开发中的版本),属于次版本号;第3个数字表示错误修补的次数,即修订版本号。从Linux内核的发展历史可以看出,随着计算机硬件的发展,Linux内核的功能也在不断发展,以支持这些新硬件特性,同时,内核的代码量也在不断增加。内核是Linux操作系统的基础,在操作系统中完成最基本的任务。当前的Linux内核主要功能包括以下几个方面。

1.4.1 进程调度

进程调度(SCHED)负责控制进程对CPU的访问。当需要选择下一个进程运行时,由进程调度子系统根据某种算法选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程还在等待其他资源,则该进程不会被选择。Linux操作系统使用了比较简单的基于优先级的进程调度算法选择新的进程。

1.4.2 内存管理

内存管理(Memory Management,MM)子系统用来管理多个进程对内存的使用。Linux支持虚拟内存,即在计算机中运行的程序,其程序代码、数据、堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。

内存管理从逻辑上可以分为硬件无关部分和硬件相关部分。其中,硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关部分为内存管理硬件部分提供了虚拟接口。

1.4.3 虚拟文件系统

虚拟文件系统(Virtual File System,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口。虚拟文件系统提供了数十种不同的文件系统,并且又分为逻辑文件系统和设备驱动程序。其中,逻辑文件系统是指Linux所支持的文件系统,如ext3、FAT等;设备驱动程序是指为每一种硬件控制器所编写的设备驱动程序模块。

1.4.4 网络接口

网络接口(Network Interface)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络设备驱动程序两部分。其中,网络协议部分负责实现每一种可能的网络传输协议;网络设备驱动程序负责与硬件设备进行通信,每一种可能的硬件设备都有相应的设备驱动程序。

1.4.5 进程通信

进程通信(InterProcess Communication,IPC)提供了进程之间的各种通信机制。所有其他的子系统都依赖于中心位置的进程调度,因为每个子系统都需要挂起或恢复进程。

一般情况下,当一个进程等待硬件操作完成时被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口就需要挂起发送进程,直到硬件成功地完成消息的发送;当消息被成功发送出去以后,网络接口返回给进程一个代码,表示操作成功或失败。