译:深入Linux内核架构(第一章) 1.1——1.2

注:选择性翻译原文。

1.1内核的任务

在纯粹的技术领域来说,内核是介于硬件层和软件层间的中间层。其目的是传递应用层需求到硬件,以及以底层驱动的身份处理系统中设备和组件(间的工作)。然而,还有其他有趣的方式来查看内核。

1、从应用的角度,内核可以看作一个增强机,把计算机抽象话到一个很高的水平。例如,当内核为一个硬盘分配地址,一定要决定用哪个部分来寄存数据、写进硬盘的数据必须通过它,等等,以达到从硬盘拷贝数据内存的目的。在另一方面,应用程序只需发出命令就可以转换数据。如何做到这些与应用程序扯不上关系,其过程已经被内核给抽象化了。应用程序与硬件没有接触,只有通过内核来进行(与硬件打交道),内核处于最基础的层次上,因此,是一个增强机。

2、当几个程序在一个操作系统中并发运行,把内核看作为一个资源管理器是真确切的。在这种情况之下,内核是一个在多种进程间共享资源的实体,资源包括:CPU运行时间,磁盘空间,网络连接等等,同时保证着系统的完整性(稳定的运行)。

3、总所周知,内核也可以看作为一个巨大的库,提供着一系列系统定制的命令,系统调用就是用来向计算机发出请求。在标准C库的帮助下,在应用程序的角度,就像调用其他函数一样来调用系统调用。


1.2执行策略

1、细内核——在这里,只有那些最基本的函数可以在细内核中直接被调用。其他所有函数都被授权于那些通过清晰的宏定义接口与细内核通讯的自主进程。例如,各种文件系统,内存管理,等等。(当然,在细内核中,最底层的内存管理控制着与系统自身之间的通讯。然而,处理系统调用是在外部服务器中进行的。(相对于细内核层来说,是外面的层))理论上来说,这是一个很讲究的处理手段,因为“私人地盘”是明确的被隔离开来(平时所说的进程与进程间互相独立),同时限制了程序猿必须用干净利索地编写程序。这种方法的其他好处是可扩展性很强,以及在run time中能交换重要部件。然而,由于传统的CPU时间需要维持部件间的复杂的通讯,微内核并没有真正在实践中确立他们,虽然其现在一直是活跃的主题以及不时被调查研究。

2、巨内核——跟细内核分别相当于90后,80后(各显其特点,优势)。具内核代码包括,所有子系统:如内存管理系统,文件系统,设备驱动(被封装成单独的文件)。每一个函数都被使用在内核中的其他的部分。如果程序设计没有投入大量维护的话,这很容易导致代码的嵌套。

现在,具内核的性能仍然比细内核要强大,Linux仍然围绕这个范畴来实施。然而,一个主要的创新点已经引进了。在内核启动并运行的同时,内核模块可以被插入或者剔除,尽管其在内核的全局函数中是被占有的,因此修复了具内核中的一些不足。这是借助于支持热插拔和动态加载模块的内核空间跟用户空间的通讯方法来实现的。