2017-02-14 2 views
0

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

+0

'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

Antwort

0

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.

  1. 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.

  2. 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