Beim Schreiben eines Kernelmoduls für Linux können module_param
und seine Varianten eine Zeichenfolge als Modulparameter verwenden, und der Speicherplatz, der für diese Zeichenfolge benötigt wird, wird hinter den Kulissen zugewiesen, ohne dass etwas explizit ausgeführt werden muss. Meine Frage ist, wie soll man mit diesem Stück Erinnerung umgehen? Müssen Sie es explizit freigeben, wenn Sie es nicht mehr brauchen? Was sollten Sie tun, wenn Sie die Zeichenfolge innerhalb des Moduls ändern möchten?Wie behandelt man den Speicher, der beim Schreiben eines Linux-Kernel-Moduls von module_param erhalten wird?
Antwort
zugewiesener Speicher von module_param
für string (charp
Typ) Argument wird durch Rückrufe für diesen Parameter der Typ beibehalten, siehe param_set_charp
, param_get_charp
und param_free_charp
in kernel/params.c
definierten Funktionen.
Der einfachste Weg, um mit solchen param arbeiten ist es, als zu erklären Nur, Lesen und aus dem Modul nur für Zugriff lesen. In diesem Fall muss man sich nicht darum kümmern, den Zugriff zu sperren oder den Parameterwert freizugeben.
Wenn Sie schreiben wollen vom Modul zum Nur Parameter lesen, benötigen Sie:
1) Freier alter Wert des Parameters über
param_free_charp
.2) Weisen Sie dem Parameter einen neuen Wert zu. Wenn dieser Wert zugewiesen ist, müssen Sie ihn manuell in
module_exit
oder beim nächsten Schreiben in den Parameter freigeben.Diese beiden Aktionen sollten innerhalb des einzelnen kritischen Abschnitts
kernel_param_lock(THIS_MODULE)
/kernel_param_unlock(THIS_MODULE)
ausgeführt werden, damit der Wert des Leseparameters aus dem Benutzerbereich seinen Wert vollständig initialisiert findet.Wenn Sie Parameter als beschreibbaren deklarieren, dann es im Inneren des Moduls zu lesen erfordert kritischen Abschnitt
kernel_param_lock(THIS_MODULE)
/kernel_param_unlock(THIS_MODULE)
.Das Schreiben zu beschreibbaren Parametern ist nur dann erlaubt, wenn neuer Wert woanders gespeichert ist, so dass, wenn der Parameter von User-Space neu geschrieben wird, kann sein vorheriger Wert gefunden und befreit werden, wenn nötig.
Das Schreiben und Lesen eines solchen Parameters innerhalb des Moduls sollte den gleichen Anforderungen entsprechen wie in den Fällen 2 und 3 entsprechend.
- 1. Wie behandelt man min_itemsize Ausnahme beim Schreiben in Pandas HDFStore
- 2. Welche Rolle spielt der Cache beim Schreiben in den Speicher?
- 3. Wie behandelt Python Speicher?
- 4. Wie behandelt man Alpha-Transparenz von PNG direkt im Speicher?
- 5. Wie wird der Speicher einer Klasse in C++ behandelt?
- 6. Wie berechnet man den gesamten von der Datenbank belegten Speicher
- 7. Firebase-Speicher, der Netzwerkunterbrechungen bei laufendem Download behandelt
- 8. Einrichten der Konfigurationseinstellungen beim Schreiben eines Edelsteins
- 9. Wie überprüft man, ob der SOAP-Fehler korrekt behandelt wird?
- 10. Wie Qt den Speicher eines Widget-Zeigers verwaltet, der von der Funktion QItemDelegate :: createEditor() zurückgegeben wird
- 11. Wie wird ERR_INSECURE_RESPONSE behandelt?
- 12. Wie behandelt man Wertetypen beim Einbetten von IronPython in C#?
- 13. wie man Verbindungstimeouts beim Aufrufen von Servermethoden behandelt
- 14. Wie wird Speicher für np.darray in Cython behandelt?
- 15. Wie wird die Variable in Javascripts beim Funktionsaufruf behandelt?
- 16. jQuery: Wie man den Änderungstext der Spanne behandelt
- 17. Wie behandelt man den KeyError in Python?
- 18. Wie behandelt man die Steuerungsereignisse eines UIView von einem UIViewController.
- 19. wie man mule-app.properties beim Schreiben von MUnit lädt
- 20. Wie behandelt Android beim Erstellen von APK zusätzlichen/alternativen Code?
- 21. Wie behandelt man System.Data.Entity.Validation.DbEntityValidationException?
- 22. Wie wird der Zeitunterschied für Ablaufdaten behandelt?
- 23. Wie wird Spring Webservice Verbindungsfehler beim Start behandelt?
- 24. Wie behandelt man Mongoose DB Verbindungsunterbrechungen
- 25. UIManagedDocument - Wie behandelt man UIDocumentStateSavingError?
- 26. Wie Referenzen im Speicher behandelt werden
- 27. Wie wird eine Datei beim Schreiben geschlossen?
- 28. Wie erhält man den letzten Wert beim Abonnieren eines Observable?
- 29. Wie wird IOException behandelt?
- 30. Wie wird der Code-Speicher verwaltet?