Linux操作系统的内核模块全面解析

http://tech.ddvip.com   2007年03月08日    社区交流

本文详细介绍Linux操作系统的内核模块全面解析

  一、模块简介

  Windows NT是一种微内核的结构,其内核的功能块被划分成独立的模块,在这些功能块之间有严格的通信机制;而Linux则不同,它是一种monolithic(单一大块)结构,也就是说,整个内核是一个单独的、非常大的程序。在这种结构中,部件的添加和删除都相当麻烦,需要重新编译内核。为了解决这个问题,不知道从哪个版本的内核开始,Linux引入了一种称为module(模块)的技术,可以把某些功能代码作为模块动态装载到内核中使用。

  模块是一种目标对象文件,需要在内核空间执行,可以把它看作是一组已经编译好而且已经链接成可执行文件的程序。在需要的时候,内核就会实用某种方法调用这些程序来执行特定的操作,实现特定的功能。内核在内核符号表中维护了一个模块的链表,每个符号表对应一个模块,在把模块加载进内核时正确地对其进行解释,并将模块作为内核的一部分来执行;加载进内核中的模块具有所有的内核权限。模块可以在系统启动时加载到系统中,也可以在系统运行的任何时刻加载;在不需要时,可以将模块动态卸载。这样就不用每次修改系统的配置时都要重新编译内核了。

  二、模块的优缺点

  内核模块的这种动态装载特性具有以下的优点:

  1、可以把内核映像文件保持在最小。在编译内核时可以选择把一部分内容当成模块进行编译,这样在最终生成的内核映像文件中就可以不包含这部分内容,从而生成最小的内核映像文件。

  2、灵活性好。如果需要实用新的模块,不必重新编译内核,只要把新的模块编译后装载进系统中就可以了。如果对内核源程序进行了修改,也不需要重新编译整个内核,只需要修改对应的部分就可以了。

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

责编:豆豆技术应用

正在加载评论...