首页 百科知识 模块的卸载

模块的卸载

时间:2022-10-10 百科知识 版权反馈
【摘要】:模块可以通过使用rmmod命令来删除,但是请求加载模块将被kerneld在其使用记数为0时自动从系统中删除。vfat和msdos模块的引用记数都为1,表示各有一个已安装文件系统。如果模块被标记成AUTOCLEAN则内核知道此模块可以自动卸载。VISITED标志表示此模块正被一个或多个文件系统部分使用;只要有其他部分使用此模块则这个标志被置位。其他依赖于它的模块将修改它们各自的引用域来表示它们间的依赖关系不复存在。

5.3.2 模块的卸载

模块可以通过使用rmmod命令来删除,但是请求加载模块将被kerneld在其使用记数为0时自动从系统中删除。kerneld在其每次idle定时器到期时都执行一个系统调用以将系统中所有不再使用的请求加载模块从系统中删除。这个定时器的值在启动kerneld时设置。这样如果安装一个iso9660CDROM并且iso9660文件系统是一个可加载模块,则在卸载CDROM后的很短时间内此iso9660模块将从内核中删除。

如果内核中的其他部分还在使用某个模块,则此模块不能被卸载。例如,如果系统中安装了多个VFAT文件系统则不能卸载VFAT模块。执行lsmod将看到每个模块的引用记数。如:

img203

此记数表示依赖此模块的内核实体个数。在上例中VFAT和msdos模块都依赖于fat模块,所以fat模块的引用记数为2。vfat和msdos模块的引用记数都为1,表示各有一个已安装文件系统。

如果安装另一个VFAT文件系统则vfat模块的引用记数将为2。模块的引用记数被保存在其映像的第一个长字中。这个字同时还包含AUTOCLEAN和VISITED标志。请求加载模块使用这两个标志域。

如果模块被标记成AUTOCLEAN则内核知道此模块可以自动卸载。VISITED标志表示此模块正被一个或多个文件系统部分使用;只要有其他部分使用此模块则这个标志被置位。每次系统被kerneld要求将没有使用的请求模块删除时,内核将在所有模块中扫描可能的候选者。但是一般只查看那些被标志成AUTOCLEAN并处于RUNNING状态的模块。如果某模块的VISITED标记被清除则它将被删除出去。

如果某模块可以卸载,则可以调用其清除程序来释放掉分配给它的内核资源。它所对应的module结构将被标记成DELETED并从内核模块链表中断开。其他依赖于它的模块将修改它们各自的引用域来表示它们间的依赖关系不复存在。此模块的内核内存都将被回收。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈