o que __exit faz no descarregamento do módulo do kernel no linux? [fechadas]

0
static void __exit  hello_exit(void)
{
    printk(KERN_ALERT "Goodbye\n");
}

module_exit(hello_exit);

The __exit modifier marks the code as being for module unload only (by causing the compiler to place it in a special ELF section). If your module is built directly into the kernel, or if your kernel is configured to disallow the unloading of modules, functions marked __exit are simply discarded. For this reason, a function marked __exit can be called only at module unload or system shutdown time; any other use is an error.

Eu não entendo o que é __exit , Por favor, explique o cenário para que eu possa ter uma imagem clara.

    
por Usr1 24.02.2015 / 10:18

1 resposta

1

Quando um programa aplicativo é carregado e executado, ele pode adquirir recursos (por exemplo, memória de solicitação, arquivos abertos). Quando o programa termina, o kernel pode desalocar esses recursos (se o programa não tiver sido limpo após ele mesmo) porque o aplicativo é executado no modo de usuário enquanto o kernel é executado no modo de supervisor.

Um módulo carregável do kernel pode ser carregado e descarregado de maneira semelhante a um programa aplicativo. Mas o kernel não pode (ou não) supervisionar o módulo do kernel, já que o módulo é parte do kernel e também é executado no modo privilegiado como parte do kernel.

Portanto, antes que um módulo do kernel seja descarregado, ele deve desalocar todo e qualquer recurso que tenha adquirido, bem como desativar qualquer hardware que possa ter sido ativado. A rotina de saída é a última chance que o módulo tem para executar essas operações, ou pode deixar o sistema em um estado instável.

    
por 24.02.2015 / 10:56