Piszę sterownik urządzenia, który, między innymi, przydziela blok pamięci z kmalloc
. Ta pamięć jest zwalniana, gdy program użytkownika zamyka plik. W jednym z moich eksperymentów program użytkownika uległ awarii bez zamykania pliku.jest pamięć przydzielona przez kmalloc() kiedykolwiek automatycznie zwolniony?
Czy coś uwolniło tę pamięć?
W innym eksperymencie przeniosłem funkcję kfree()
z funkcji close()
do funkcji module_exit()
. Gdy dwukrotnie uruchamiałem program użytkownika, ponownie zadzwoniłem pod numer kmalloc
z tym samym wskaźnikiem, co wcześniej, bez uprzedniego zwalniania go. Tak więc straciłem wskaźnik do tej pamięci i nie mogę go uwolnić.
Czy pamięć została utracona w systemie do czasu ponownego uruchomienia, czy też zostanie zwolniona po wyładowaniu sterownika?
Prawdopodobnie nastąpi ponowne uruchomienie komputera. Wyobrażam sobie, że jądro nie będzie magicznie uwalniać utraconej pamięci. Właściwym sposobem na zrobienie tego byłoby zamknięcie wyjścia programu i wolnych zasobów. W tym samym czasie deskryptory plików programu zostaną wyczyszczone. – Wug