10.1.2为什么要使用模块?

按需动态装入模块是非常吸引人的,因为这样可以保证内核达到最小并且使得内核非常灵活, 例如,当你可能偶尔使用 VFAT文件系统,你只要安装(mount) VFATVFAT文件系统就成为一个可装入模块,kerneld通过自动装入VFAT文件系统建立你的Linux内核,当你卸下(unmount )VFAT部分时,系统检测到你不再需要的FAT系统模块,该模块自动地从内核中被移走。按需动态装入模块还意味着,你会有更多的内存给用户程序。如前所述,内核所使用的内存是永远不会被换出的,因此,如果你有100kb不使用的驱动程序被编译进内核,那就意味着你在浪费RAM。任何事情都是要付出代价的,内核模块的这种优势是以性能和内存的轻微损失为代价的。

  一旦一个Linux内核模块被装入,那么它就任何标准的内核代码一样成为内核的一部分,它和任何内核代码一样具有相同的权限和职责。像所有的内核代码或驱动程序一样,Linux内核模块也能使内核崩溃。

10.1.3 Linux 内核模块的优缺点

利用内核模块的动态装载性具有如下优点:

 

·将内核映象的尺寸保持在最小,并具有最大的灵活性;

·便于检验新的内核代码,而不需重新编译内核并重新引导。

 

但是,内核模块的引入也带来了如下问题:

·对系统性能和内存利用有负面影响;

·装入的内核模块和其他内核部分一样,具有相同的访问权限,因此,差的内核模            块会导致系统崩溃;

·为了使内核模块访问所有内核资源,内核必须维护符号表,并在装入和卸载模块时    修改这些符号表;

·有些模块要求利用其他模块的功能,因此,内核要维护模块之间的依赖性。

·内核必须能够在卸载模块时通知模块,并且要释放分配给模块的内存和中断等资             源;

·内核版本和模块版本的不兼容,也可能导致系统崩溃,因此,严格的版本检查是必需的。

尽管内核模块的引入同时也带来不少问题,但是模块机制确实是扩充内核功能一种行之有效的方法,也是在内核级进行编程的有效途径。