Вот сценарий. Предположим, что задача ядра выполняется в однопроцессорной системе с отключенным вытеснением. Задача приобретает спиновый замок. Сейчас он выполняет свой критический раздел. В это время, что, если временной интервал, доступный для этой задачи, истекает, и это должно запланировать?
- Есть ли у
spin_lock
механизм для предотвращения этого?
- Это можно запланировать? Если да, то что происходит с критическим разделом?
- Может ли оно быть прервано IRQ? (Предполагая, что выгрузка отключена)
- Возможен ли этот сценарий? Другими словами, может ли этот сценарий произойти?
Из кода ядра я понимаю, что spin_lock - это в основном nop
на однопроцессорном компьютере с отключенным вытеснением. Чтобы быть точным, все, что он делает, это barrier()
Я понимаю, почему это nop
(поскольку он является однопроцессорным, и никакая другая задача не могла манипулировать данными в этот момент), но я до сих пор не понимаю, как это может быть непрерывно (из-за прерываний или планирования).
Что мне здесь не хватает? Указатели на код ядра Linux, которые указывают на это, могут быть очень полезны.
Мои основные предположения:
32-битное ядро Linux