Модули Ядра Linux: Когда использовать try_module_get / module_put

Я читал LKMPG (См. Раздел 4.1.4. Нерегистрация Устройства) и мне не было ясно, когда использовать try_module_get / module_put функции. Некоторые примеры LKMPG используют их, некоторые не делают.

Добавить к беспорядку, try_module_get появляется 282 раза в 193 файлах в 2.6.24 источниках, все же в Драйверах устройств Linux (LDD3) и Необходимые Драйверы устройств Linux, они появляются в даже единственном примере кода.

Я думал, возможно, что они были связаны со старым register_chrdev интерфейс (замененный в 2,6 интерфейсом cdev), но они только появляются вместе в тех же файлах 8 раз:

find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .

Таким образом, когда уместно использовать эти функции, и они связываются с использованием конкретного интерфейса или стечения обстоятельств?

Править

Я загрузил sched.c пример из LKMPG и попробовал следующий эксперимент:

anon@anon:~/kernel-source/lkmpg/2.6.24$ tail /proc/sched -f &
Timer called 5041 times so far
[1] 14594

anon@anon:~$ lsmod | grep sched
sched                   2868  1 

anon@anon:~$ sudo rmmod sched
ERROR: Module sched is in use

Это приводит меня полагать, что ядро теперь делает свой собственный учет, и получение / помещает, может быть устаревшим. Кто-либо может проверить это?

17
задан Robert S. Barnes 17 November 2009 в 10:28
поделиться