linux的内核是一个整体式内核(monolithic kernel
;与之对应的是微内核,microker-nel),即所有的内核功能链接在一起,在同一个地址空间执行。但完全这样做会带来很多不方便和浪费。如果新添加一个硬件,就需要重新编译内核;如果去掉一个硬件,那么这个硬件已经编译进内核的驱动程序就是浪费。linux操作系统提供了一种机制即内核或者从内核卸载。
整个linux是一个整体式的内核结构,整个内核是一个单独且非常大额程序。他由五个子系统组成,每个子系统都提供了内部接口的函数和变量。这些函数和变量可供内核所有的子系统调用。内核的另外一种形式是微内核结构,此时内核的功能块被划分成独立的模块,各部分之间通过严格的通信机制进行联系,给内核增加一个新成分的配置过程非常费时。整个内核并不需要同时装入内存。应该确认,为保证系统能够正常运行,一些特定的内核必须总是驻留在内存中,例如,进程调度代码就必须常驻内存。但是内核其他部分,例如大部分的设备驱动就应该仅在内核需要时才加载,而其他情况下则无需占用内存。因此linux系统提供一种全新的模块机制,可以根据用户的需要在不需要对内核进行重新编译的情况下,模块能在内核中被动态加载或卸载。
模块时内核的一部分且都是设别驱动程序,但它们并没有被编译到内核中,而是被分别编译并链接成一组目标文件。这些文件能被载入正在运行的内核,或从正在运行的内核中卸载。必要时内核能请求内核守护进程kerneld对模块进行加载或卸载。