Sto scrivendo un driver di periferica che, tra le altre cose, alloca un blocco di memoria con kmalloc
. Questa memoria viene liberata quando il programma utente chiude il file. In uno dei miei esperimenti, il programma utente si è arrestato in modo anomalo senza chiudere il file.la memoria allocata da kmalloc() viene liberata automaticamente?
Qualcosa avrebbe liberato questa memoria?
In un altro esperimento, ho spostato il kfree()
dalla funzione close()
alla funzione module_exit()
. Quando ho eseguito il programma utente due volte consecutive, ho chiamato di nuovo kmalloc
con lo stesso puntatore di prima, senza prima liberarlo. Così, ho perso un puntatore a quella memoria, e non posso liberarlo.
Questa memoria è stata persa nel sistema fino al riavvio o verrà liberata quando scarico il driver?
Probabilmente ci vorrà un riavvio. Immagino che il kernel non possa liberare magicamente la memoria perduta. Il modo giusto per farlo sarebbe quello di collegare l'uscita dal programma e liberare risorse allora. Questo è lo stesso tempo in cui i descrittori di file di un programma vengono ripuliti. – Wug