2010-11-10 50 views
3

我想了解在SMP系统上删除模块的问题 有没有什么好的解释?用户并发访问

+1

你在看什么问题或模块? – warren 2010-11-10 21:01:07

回答

1

通常遇到的问题是,系统中某处引用了正在运行的模块。这可以是任何东西,从一个锁正在举行,某种回调在飞行中 - 另一个模块使用符号等,等等等等等012等等。

在内核中有大量的引用计数系统,应该用来帮助您制作肯定这绝不会发生。那些使用你的模块的东西 - 或者你的模块的一些方面 - 将会持有相关的引用计数。当这个计数非零时,内核将阻止你的表单执行“rmmod”。您可以在“lsmod”outut中看到所有已加载模块的引用计数。

学习并明智地使用它们。

这些问题并不是特定于“SMP” - 但是任何内核模块。例如,如果您的模块是字符驱动程序,并且某人打开了您的设备,那么您不希望驱动程序在某人打开文件描述符时卸载 - 或者更糟的是 - 读取过程中阻塞了一个进程()等待回应。在许多情况下 - 像这样 - 内核本身将为您提供参考。在这种情况下,打开驱动程序的进程将在驱动程序的模块上保存一个refcnt。