深度介绍 Linux 操作系统内核的工作原理时间 :2009-07-04 20:22:37来
源 :网络 作者 :未知 点击 :577 次
本文发表于 Linux Format magazine杂志,作者从技术深度上解释了
Linux Kernel 是如何工作的。 相信对 Linux 开发者来说有不小的帮助。
牛津字典中对 "kernel" 一词的定义是: " 较软的、 通常
是一个坚果可食用的部分。 " 当然还有第
本文发表于 Linux Format magazine杂志,作者从技术深度上解释了
Linux Kernel 是如何工作的。 相信对 Linux 开发者来说有不小的帮助。
牛津字典中对 "kernel" 一词的定义是: "较软的、通常是一个坚果可食
用的部分。" 当然还有第二种定义: "某个东西核心或者最重要的部分。
"对 Linux 来说,它的 Kernel 无疑属于第二种解释。让我们来看看这
个重要的东西是如何工作的,先从一点理论说起。
广义地来说 kernel 就是一个软件, 它在硬件和运行在计算机上的应用
程序之间提供了一个层。严格点从计算机科学的角度来说, Linux 中
的 Kernel 指的是 Linus Torvalds 在 90 年代初期写的那点代码。
所有的你在 Linux 各版本中看到的其他东西 --Bash shell、KDE 窗口管
理器、 web 浏览器、 X 服务器、 Tux Racer 以及所有的其他,都不过
是运行在 Linux 上的应用而已,而不是操作系统自身的一部分。为了
给大家一个更加直观的感觉,我来举个例子,比如 RHEL5 的安装大
概要占据 2.5GB 的硬盘空间(具体多大当然视你的选择安装来定) ,
在这其中, kernel 以及它的各个模块组件,只有 47MB ,所占比例约
为 2%。
在 kernel 内部
那么 kernel 到底是如何工作的呢 ?如下面的图表。 Kernel 通过许多的
进入端口也就是我们从技术角度所说的系统调用, 来使得运行在它上
面的应用程序可用。 Kernel 使用的系统调用比如 " 读"和"写" 来提供你
硬件的抽象( abstraction)。
从程序员的视角来看, 这些看起来只是普通的功能调用, 然而实际上
系统调用在处理器的操作模式上,从用户空间到 Kernel 空间有一个
明显的切换。同时,系统调用提供了一个 "Linux 虚拟机 " ,可以被认
为是对硬件的抽象。
Kernel 提供的更明显的抽象之一是文件系统。 举例来说, 这里有一段
短的程序是用 C 写的,它打开了一个文件并将内容拷贝到标准的输
出:
#include
int main()
{
int fd, count; char buf[1000];
fd=open("mydata", O_RDONLY);
count = read(fd, buf, 1000);
write(1, buf, count);
close(fd);
}
在这里,你可以看到四个系统调用的例子:打开、读、写和关闭。不
谈这段程序语法的细节,重点是:通过这些系统调用 Linux Kernel 提
供了一个文件的 "错觉 " ,而实际上它不过是一堆数据有了个名字,这
样一来你就不必去与硬件底层的堆栈、分区、头和指针、分区等交涉
了,而是直接以例子中的方式与硬件