Linux内核在整个操系统中的位置
Linux的内核不是孤立的,必须把它放在整个系统中去研究,图1.1显示了Linux内核在整个操作系统的位置:
![](http://www.eefocus.com/data/09-06/4155_1243997133/1244434681.jpg)
由图1.1可以看出,Linux操作系统由四个部分组成:
1.用户进程—用户应用程序是运行在Linux操作系统最高层的一个庞大的软件集合, 当一个用户程序在操作系统之上运行时,它成为操作系统中的一个进程。
2. 系统调用接口— 在应用程序中,可通过系统调用来调用操作系统内核中特定的过程,以实现特定的服务。例如,在程序中安排一条创建进程的系统调用,则操作系统内核便会为之创建一个新进程。
系统调用本身也是由若干条指令构成的过程。但它与一般的过程不同,主要区别是:系统调用是运行在内核态(或叫系统态),而一般过程是运行在用户态。在Linux中,系统调用是内核代码的一部分。
3. Linux内核—这是本书要讨论的重点。内核是操作系统的灵魂,它负责管理磁盘上的文件、内存,负责启动并运行程序,负责从网络上接收和发送数据包等等。简言之,内核实际是抽象的资源操作到具体硬件操作细节之间的接口。
4. 硬件—这个子系统包括了Linux安装时需要的所有可能的物理设备。例如,CPU、 内存、硬盘、网络硬件等等。
上面的这种划分把整个Linux操作系统分为四个层次。把用户进程也纳入操作系统的范围内是因为用户进程的运行和操作系统密切相关,而系统调用接口可以说是操作系统内核的扩充,硬件则是操作系统内核赖以生存的物质条件。这四个层次的依赖关系表现为:上层依赖下层。
1.5.2 Linux内核的作用
从程序员的角度来讲,操作系统的内核提供了一个与计算机硬件等价的扩展或虚拟的计算平台。它抽象了许多硬件细节,程序可以以某种统一的方式进行数据处理,而程序员则可以避开许多硬件细节。从另一个角度讲,普通用户则把操作系统看成是一个资源管理者,在它的帮助下,用户可以以某种易于理解的方式组织自己的数据,完成自己的工作并和其他人共享资源。
Linux以统一的方式支持多任务,而这种方式对用户进程是透明的,每一个进程运行起来就好象只有它一个进程在计算机上运行一样,独占内存和其它的硬件资源,而实际上,内核在并发地运行几个进程,并且能够让几个进程公平合理地使用硬件资源,也能使各进程之间互不干扰安全地运行。
1.5.3 Linux内核的抽象结构
Linux内核由5个 主要的子系统组成:如图1.2
图1.2 Linux内核子系统及其之间的关系
1.进程调度(SCHED)控制着进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际是仅等待 CPU 资源的进程,如果某个进程在等待其他资源,则该进程是不可运行进程。Linux 使用了比较简单的基于优先级的进程调度算法选择新的进程。
2.内存管理(MM)允许多个进程安全地共享主内存区域 。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换程序块。
内存管理从逻辑上可以分为硬件无关的部分和硬件相关的部分。硬件无关的部分提供了进程的映射和虚拟内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。
3. 虚拟文件系统(Virtul File System VFS)隐藏了各种不同硬件的具体细节,为所有设备提供了统一的接口,VFS还支持多达数十种不同的文件系统,这也是Linux较有特色的一部分。
虚拟文件系统可分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2, fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
4.网络接口(NET)提供了对各种网络标准协议的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序两部分。网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备进行通信,每一种可能的硬件设备都有相应的设备驱动程序。
5. 进程间通信(IPC) 支持进程间各种通信机制。
从图1.2可以看出,处于中心位置的是进程调度,所有其它的子系统都依赖于它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其它子系统(内存管理,虚拟文件系统及进程间通信)以相似的理由依赖于进程调度。
各个子系统之间的依赖关系如下:
进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境下,程序要运行必须为之创建进程,而创建进程的第一件事,就是要将程序和数据装入内存。
进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥有自己的私有内存,还可存取共同的内存区域。
虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持RAMDISK 设备。
内存管理与虚拟文件系统之间的关系: 内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期地由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。
除了图1.2所显示的依赖关系以外,内核中的所有子系统还要依赖一些共同的资源,但在图中并没有显示出来。这些资源包括所有子系统都用到的过程,例如,分配和释放内存空间的过程,打印警告或错误信息的过程,还有系统的调试例程等等。