单内核与微内核设计之比较
单内核就是从整体上把内核作为一个大过程来实现,同时也运行在一个单独的地址空间上,这样的内核通常以单个静态二进制文件的形式存放于磁盘中,而所有内核服务都在这样的一个大内核地址空间上运行,进程管理、内存管理等是其中的一个个模块,模块之间可以直接调用相关的函数。
微内核的功能被划分为多个独立的过程,每个过程叫做一个服务器,所有服务器都保持独立并运行在各自的地址空间上,通过消息传递处理微内核通信,因为微内核工作中会涉及内核空间和用户空间的上下文切换,消息传递需要一定的周期,通信开销 大。
Linux内核的技术特点
Linux内核被设计成单内核结构
(1)Linux内核支持动态加载内核模块
用户在需要时可以现场动态加载,使用完毕可以动态卸载,用户可以选择适合自己的功能,将不需要的部分剔除内核,这些都保证了内核的紧凑、可扩展性好。
(2)Linux支持对称多处理(SMP)机制
(3)Linux内核可以抢占 与传统的Unix变体不同,Linux内核具有允许在内核运行的任优先执行的能力
(4)Linux内核被动地提供服务
它为用户服务的唯一方式是通过系统调用来请求在内核空间执行某种任务,内核本身是一种函数和数据结构的集合,不存在运行着的内核进程为用户提供服务
(5)Linux内核采用了虚拟内存技术
(6)Linux的文件系统实现了一种抽象文件模型——虚拟文件系统
通过虚拟文件系统,内核屏蔽了各种不同文件系统的内在差别,使得用户可以通过统一的界面访问各种不同格式的文件系统
(7)Linux提供了一套很有效的延迟执行机制——下半部分、软中断、Tasklet、工作队列
(8)Linux提供具有设备类的面向对象的设备模型,热插拔事件,以及用户空间的设备文件系统
Linux内核版本
Linux内核有两种:实验版本(处于开发中的)和产品化版本(稳定的)
Linux通过一个简单的命名机制来区分稳定的和处于开发中的内核。这种机制使用三个或四个用“.”分隔的数字来代表不同的内核版本。
第一个数字是主版本号
第二个数字是从版本号
第三个数字是修订版本号
第四个可选的数字为稳定版本号
从版本号可以反映出该内核是一个稳定版本还是一个处于开发的中的版本:如果该数字是偶数,那么此内核就是稳定版;如果是奇数,那么它就是开发版
Linux的两种版本是相互关联的,实验版本最初是产品化版本的拷贝,然后产品化版本只修改错误,实验版本继续增加新功能,到实验版本测试证明稳定后拷贝成新的产品化版本,不断循环。
Linux内核的位置
整个系统由以下4个部分组成
(1)用户进程
(2)系统调用接口
(3)Linux内核
(4)硬件
Linux内核体系结构
(1)进程调度——控制着进程对CPU的访问
(2)内存管理——允许多个进程安全地共享内存区域。操作系统只讲当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上,必要时,操作系统负责在磁盘和内存之间交换程序块。
(3)虚拟文件系统——隐藏各种不同硬件的具体细节,为所有设备提供系统接口。
虚拟文件系统可分为逻辑文件系统和设备驱动程序两部分。逻辑文件系统是指Linux所支持的文件系统。如Ext2/Ext3,NTFS等;设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
(4)网络接口——提供了对各种网络标准协议的存取和各种网络硬件的支持。
网络子系统可分为网络协议和网络驱动程序两部分。
(5)进程间通信——支持进程间各种通信机制,包括共享内存、消息队列及管道等
Linux内核源代码的结构
include/子目录包含了建立内核代码时所需的大部分包含文件
init/子目录包含了内核的初始化代码,这是内核开始工作的起点
arch/子目录包含了Linux支持的所有硬件结构的内核代码
drivers/子目录包含了内核中所有的设备驱动程序,如字符设备、块设备、scsi设备
驱动程序等
fs/子目录包含了所有文件系统的代码
net/子目录包含了内核中关于网络的代码
mm/子目录包含了所有内存管理代码
ipc/子目录包含了进程间通信的代码
kernel/子目录包含了主内核代码