Ich versuche zu verstehen, wie die Synchronisation im Linux-Kernel funktioniert. Ich habe gelesen, dass Semaphore für Ausnahmen verwendet werden können, aber ich kann kein Beispiel für eine Situation finden, Semaphore wird benötigt. Warum also ein Semaphor im Uni-Prozessor-System?Semaphor auf Uni-Prozessor in Linux Kernel
Antwort
Ich gehe davon aus, dass Sie eher an Locking interessiert sind, als an Semaphoren, die Mutexe entgegengesetzt sind (siehe auch "Unterschied zwischen Zählen und binären Semaphoren" [1]). Ich werde keine detaillierte Erklärung der Sperrung geben, nur auf ein paar Dinge hinweisen.
Es ist sinnvoll in der Regel macht, dass Code zu annehmen, dass Sie auf einem Multi-Prozessor-System ausgeführt werden können schreiben könnte (Uni-Prozessor ist heutzutage immer seltener). Ich nehme an, weil du Uni-Prozessor explizit erwähnt hast, dass du diesen Fall verstehst.
Der Linux-Kernel kann vollständig preemptive sein gebaut werden, während Kernel-Code ausgeführt wird [2] [3]. In diesem Fall können Threads unterbrochen und an fast jedem Punkt wieder aufgenommen werden, einschließlich zum Beispiel beim Schreiben von E/A in ein Gerät. Wenn ein Thread, der E/A schreibt, unterbrochen wird und ein anderer, der auf dasselbe Gerät zugreift, wird wahrscheinlich nicht wie beabsichtigt arbeiten.
[1] Differnce between Counting and Binary Semaphores
[2] https://kernelnewbies.org/FAQ/Preemption
[3] https://rt.wiki.kernel.org/index.php/CONFIG_PREEMPT_RT_Patch
- 1. Bezieht sich die Linux-Kernel-Referenz auf Kernel-Objekte?
- 2. Linux-Kernel config.h
- 3. Linux Kernel-Codierungsstil
- 4. Linux-Kernel-Modul
- 5. Linux redhat kernel-headers
- 6. Linux-Kernel-Entwicklung
- 7. Embedded Linux Kernel und Desktop Linux Kernel-Unterschied
- 8. "Current" in Linux-Kernel-Code
- 9. Debugging Linux Kernel Panic
- 10. Linux-Kernel-Funktion set_user_nice
- 11. Linux-Kernel-Modul Kompilierung
- 12. Linux-Kernel exportierte Symbole
- 13. Upstart verursacht Kernel-Panik auf Embedded Linux
- 14. Linux Kernel Scheduling
- 15. Linux Kernel-Konfigurationsoptionen anzeigen
- 16. Linux Kernel Betriebssystem Register
- 17. Understanding_process_vm Linux Kernel?
- 18. Linux Kernel Preemption Levels
- 19. Linux Kernel mutex_lock_interruptible
- 20. glib und linux kernel
- 21. Konfiguration Linux Kernel
- 22. Linux Kernel list.h
- 23. Linux-Kernel-Entwicklung
- 24. Stumped auf Semaphor-Algorithmus
- 25. Implementierung korrekter Inter-Modul-Synchronisation im Linux-Kernel
- 26. Linux Systemaufrufe und Kernel-Modus
- 27. Zeitmessung im Linux Kernel 2.6
- 28. Linux-Kernel-Modul Programmierung: Makefile
- 29. Linux Kernel Fehler kompilieren xt_CONNMARK.h
- 30. Debugging Windows Kernel von Linux
'Warum also mit einem Semaphore in Uni-Prozessor-System' - Für die gleichen Zwecke wie in ein SMP-System. Semaphore synchronisieren ** Threads **, und sogar Uni-Prozessor-System hat viele Threads und kann sie planen. – Tsyvarev