2017-02-14 13 views
0

Я пытаюсь понять, как работает синхронизация в ядре linux. Я читал, что семафоры могут использоваться для исключений, но я не могу найти пример ситуации, необходим семафор. Итак, зачем использовать семафор в однопроцессорной системе?Семафор на уни-процессоре в ядре linux

+0

'Так почему использование семафора в системе однопроцессорной' - для тех же целей, что и в система SMP. Семафоры синхронизируют ** потоки **, и даже однопроцессорная система имеет много потоков и может планировать их. – Tsyvarev

ответ

0

Я предполагаю, что вас интересует вообще блокировка, а не семафоров, противоположных мьютексам (см. Также «Разница между подсчетом и двоичными семафорами» [1]). Я не дам подробного объяснения блокировки, просто укажите несколько вещей.

  1. Это обычно имеет смысл предположить, что код, который вы могли бы написать может быть выполнена в системе с несколькими процессорами (однопроцессорный все реже в эти дни). Я предполагаю, потому что вы явно упомянули о uni-processor, что вы понимаете этот случай.

  2. Ядро Linux может быть построено так, чтобы быть полностью превентивным при запуске кода ядра [2] [3]. В этом случае потоки могут быть прерваны и возобновлены почти в любой точке, включая, например, в середине ввода ввода/вывода на устройство. Если прерывание ввода ввода-вывода прерывается, а другой доступ к тому же устройству, который переключается на вещи, вероятно, не будет работать должным образом.

[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