“从一个业内人士的视角来欣赏和理解Linux内核的设计和实现之美。”
内核空间:内核独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限,这种系统态和被保护起来的内存空间,统为内核空间。当内核运行时,系统以内核态进入内核空间执行。
用户空间:应用程序在用户空间执行,它们只能看到允许它们使用的部分系统资源,并且只使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划给别人的内在范围,还有其他一此使用限制。当执行一个普通用户程序时,系统将以用户态进入用户空间执行。
应用程序与内核通信:当一个应用程序执行一条系统调用,我们说内核正在代其执行。如果进一步解释,在这种情况下,应用程序被称为通过系统调用在内核空间运行,而内核被称为运行于进程上下文中,这种交互关系----应用程序通过系统调用界面陷入内核----是应用程序完成其工作的基本行为方式。
每个处理器在任何指定时间点上的活动必然为下列三者之一
1.运行于用户空间,执行用户进程。
2.运行于内核空间,处于进程上下文,代表某个特定的进程执行。
3.运行于内术空间,处于中断上下文,与任何进程无关,处理某个特定的中断。
单内核与微内核设计之比较:
单内核:所谓单内核就是把它从整体上作为一个单独的大过程来实现,同时也运行在一个 单独的地址空间上。这样的内核通常以单个静态二进制文件的形式存放于磁盘中。所有内核服务都在这样的一个大内核地址空间上运行。内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间:内核可以直接调用函数。这种模式的支持者认为单模块具有简单和性能高的特点。大多数的UNIX系统都是这种设计。
微内核:微内核的功能被划分为多个独立的过程,每个过程叫做一个服务器。理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间。
Linux是一个单内核,但它也汲取了微内核的精华:其引以为豪的是模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。Linux还避其微内核设计上性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无须消息传递。
Linux内核版本: 稳定版&开发版
稳定版(次版本号为偶数):具有工业级的强度,可以广泛地应用和部署。修正了一些BUG或 是加入了一些新的设备驱动程序。
开发版(次版本号为奇数):内核中许多东西变化得都很快,而且由于开发者不断试验新的解 决方案,内核常常发生剧烈的变化。