- 论坛徽章:
- 7
|
本帖最后由 smalloc 于 2012-05-19 09:09 编辑
LS这回答的怎么感觉不对嘴呢?put_module和get_module通常只由用户的某个动作触发,而不是由硬件自身随机事件触发。
加载一个模块相当在内核空间增加了一些数据,一些代码(中断上下文的,和进程上下文的),顺便还有与硬件相关的一些资源,(改变了外设硬件自身的状态,和与CPU的对应关系)。
当在一个处理器上执行某个unload,这个执行是在进程上下文中触发的,具有较低优先级。所以只能被动等待已经启动的高优先级的任务完成,当然还可能通过主动改变外设硬件使得高优先级的任务从触发的源头不再存在,通常就是要求device转入down状态。
这只是比较明显的。
不明显的却是比较难知道另一个处理器正在执行的任务或访问的数据不属于这个module,更隐秘的是可能执行着其他任务是否与这个module相关(数据相关或事件逻辑相关)。
从中可以看出 安全的加载比较容易,安全的撤离却比较麻烦。 个人觉得原因在于我们可以新增加分散的锁来处理多个并发和同步的要求,但却只能用更详细的层次和高昂关联来记录一切动态,而这样做往往性价比过高。正所谓人在江湖,身不由己。 |
|