На первый взгляд мой вопрос может выглядеть немного тривиальным. Пожалуйста, несите меня и читайте полностью.
Я определил цикл занятости в моем модуле ядра Linux. В связи с этим другие процессы (например, sshd) не получают процессорное время для длинных промежутков времени (например, 20 секунд). Это понятно, так как у моей машины только один процессор и цикл занятости не дают возможности запланировать другие процессы.
Просто для эксперимента я добавил расписание() после каждой итерации в цикле занятости. Несмотря на это, это будет заставлять процессор занят, он должен позволить другим процессам работать, поскольку я звоню по расписанию(). Но, похоже, это не происходит. Мои процессы пользовательского уровня по-прежнему висят в течение длинных промежутков времени (20 секунд).
В этом случае поток ядра получил хорошее значение -5, а потоки уровня пользователя получили хорошее значение 0. Даже с низким приоритетом потока пользовательского уровня я думаю, что 20 секунд слишком длинны, чтобы не получить процессор.
Может кто-нибудь объяснить, почему это может произойти?
Примечание. Я знаю, как полностью удалить цикл занятости. Но я хочу понять поведение ядра здесь. Версия ядра - 2.6.18, а упреждение ядра отключено.