与内核空间功能扩展相比,在用户空间扩展安全性更强,对Linux操作系统和应用程序更加透明 。用户层扩展技术的缺点在于,将服务提升到用户层使程序运行过程中核心态和用户态之间的切换和自陷次数增加,导致系统负载增加,系统性能下降 。另外,微内核与传统的嵌入式Linux内核在结构上是完全不同的 。在嵌入式Linux中,如果采用该技术来增加系统的动态扩展性能,需要对内核结构重新设计[2] 。
(2) 可扩展内核技术
可扩展内核技术允许用户应用程序向内核植入(inject)代码以扩展其功能 。由于被植入的代码是在核心态运行,从而避免了微内核技术中的系统性能下降的问题 。被植入的代码是在核心态运行,需要有一个实时检查机制来验证代码的安全性,保证被植入代码不会导致系统的崩溃 。程步奇等人[1]使用软件故障孤立技术来实现扩展模块的故障孤立,保证系统不受到扩展模块的破坏 。Bershad等人[3]也使用软件故障孤立技术来限制被植入代码可访问的内存地址范围 。代码安全性检查无疑增加了系统的负担,问题产生的根本原因是那些被植入的扩展性代码对核心来说是不可信任的 。为了减轻系统的负担,就需要假设被植入的代码是安全的、可信任的 。
(3) 解释器技术/JOS技术
与文献[2]中提到的JOS(Java Operating System)技术相同,该技术允许开发者用Java语言编写系统模块,例如TCP/IP协议栈或文件系统 。将这些模块编译成类(class)文件,并在系统运行时由JVM(Java Virtual Machine)动态地加载 。Liao等人[4]在1996年提出,将JVM插入到微内核中,从而可以让用户编写Java程序,以扩展内核功能 。
解释器技术是以解释的方式来执行程序代码的,比较适合于交互式系统;与编译器相比,解释器/JVM在移植时相对简单;解释器通过采用中间代码表示的方法,当代码长度小于500 KB的时候,可执行的中间代码通常比编译产生的二进制代码小,这一点很适合于存储空间非常有限的嵌入式系统;最后,Java代码容易维护和编写,可移植性好,可实现代码重用 。采用解释器技术的缺点是,中间可执行代码的执行速度慢 。在嵌入式Linux系统中,内核很大一部分由应用所共享,甚至应用程序本身就是内核的一个线程,执行频率高,采用解释器技术会大大降低系统的效率 。有些Java平台采用即时(Justintime)编译技术来改进代码的执行速度[2] 。该技术是利用空间来换取时间,因此很难在硬件资源非常有限的嵌入式系统上实现 。此外,由于Java语言的类库很大,在一定程度上也阻碍了其在资源有限的嵌入式系统中的发展 。
(4) 内核加载技术/LKM技术
许多桌面操作系统,例如Linux,提供LKM(Loadable Kernel Module)来动态扩展它们的内核 。当模块(Module)安装到内核后就作为核心的一部分,不进行实时安全检测,全速运行 。在嵌入式Linux系统中,LKM的主要问题是:存储模块需要占用额外空间以及被加载模块的安全性 。模块的安全问题可以通过软件保护技术来解决[1] 。
Oikawa等人在1996年提出一种与LKM类似的动态核心模块(DKMs)技术[5] 。与LKM一样,DKMs以文件的形式存储并能在系统运行过程中动态地加载和卸载 。DKMs由一个用户层的DKM服务器来管理,并非由内核来管理 。当核心需要某模块时,由DKM服务器负责把相应的DKM加载;当核心的内存资源紧缺时,由DKM服务器负责卸载一个没有被使用的DKM 。缺点是所有的DKM是存储在本地系统上的,占用了大量宝贵的存储空间 。
与Oikawa的方法不同,Chang DaWei 等人于2003年提出了OperatingSystemPortal framework(OSP)的方法[2] 。该方法是将核心模块存储在一个资源充足的远程服务器上,并由服务器端工具OS Portal来管理所存储的模块,同时也负责处理客户端(嵌入式系统内核)发出的请求,按照请求动态的选择并连接模块,然后通过网络传到客户端 。由于模块的管理和连接都在服务器端,所以对客户端来说可以节省大量的资源空间 。OS Portal的结构如图1所示 。
推荐阅读
- 详细讲解家用Linux的实用安全
- 运用更方便 Linux操作系统三则应用技巧
- 一个Linux爱好者的2.6.11内核编译过程
- 资深Linux程序员的开发经验谈
- 用Linux的dd命令简单破解加密软盘
- 如何共享两台Linux操作系统的根目录
- Linux操作操作两种常见启动故障解决方法
- Linux内核源代码的阅读及相关工具介绍
- Linux下无线上网设置方法
- Linux系统下架设CS服务器的完美方法
