Estoy escribiendo un controlador de dispositivo que, entre otras cosas, asigna un bloque de memoria con kmalloc
. Esta memoria se libera cuando el programa de usuario cierra el archivo. En uno de mis experimentos, el programa de usuario se bloqueó sin cerrar el archivo.¿la memoria asignada por kmalloc() se libera automáticamente?
¿Habría algo liberado esta memoria?
En otro experimento, moví el kfree()
de la función close()
a la función module_exit()
. Cuando ejecuté el programa de usuario dos veces consecutivas, llamé al kmalloc
nuevamente con el mismo puntero que antes, sin liberarlo primero. Por lo tanto, perdí un puntero a esa memoria y no puedo liberarla.
¿Esta memoria se pierde en el sistema hasta que reinicie o se liberará cuando descargue el controlador?
Probablemente llevará un reinicio. Me imagino que el kernel no va a liberar mágicamente la memoria perdida. La forma correcta de hacer esto sería conectar la salida del programa y liberar recursos. Esto es al mismo tiempo que se limpian los descriptores de archivos de un programa. – Wug