кэшу файловой системы, заблокированному в данный момент,
центральный процессор может решить не ждать, а переключиться на
другой поток. Вопрос принятия решения о том, ждать или
переключиться на другой поток, в однопроцессорной ОС не возникает,
так как опрос в цикле ни имеет смысла при отсутствии другого
центрального процессора, способного освободить мьютекс. Если поток
пытается получить мьютекс и ему это не удается, он всегда
блокируется, чтобы дать возможность владельцу мьютекса работать и
освободить мьютекс.
Если допустить, что оба варианта (опрос в цикле и переключение
потоков) выполнимы, возникает следующая ситуация. Циклический
опрос напрямую расходует процессорное время. Периодическая
проверка состояния мьютекса не является продуктивной работой.
Переключение процессов, однако, также расходует циклы
процессора, так как для этого требуется сохранить текущее состояние
потока, получить мьютекс списка свободных процессов, выбрать из
этого списка поток, загрузить его состояние и передать ему
управление. Более того, кэш центрального процессора будет
содержать не те блоки, поэтому после переключения потоков
возможно много промахов кэша. Также вероятны ошибки TLB.
Наконец, потребуется переключение обратно на исходный поток,
результатом которого снова будут промахи кэша. Циклы процессора,
потраченные на эти два переключения контекста, плюс промахи кэша
представляют собой существенные накладные расходы.
Одно из решений этой проблемы заключается в том, чтобы всегда
использовать циклический опрос. Вторым подходом является
использование только переключений. Третий вариант состоит в том,
чтобы каждый раз принимать отдельное решение. В момент принятия
решения не известно, что лучше – переключаться или ждать, но в лю-
бой системе можно отследить активность процессов и затем
проанализировать ее в автономном режиме. При этом можно сказать,
какое решение было бы лучшим в том или ином случае и сколько
процессорного времени было потрачено. Таким образом,
ретроспективный алгоритм становится эталоном, относительно
которого может измеряться эффективность реальных алгоритмов.
Другим способом разрешения указанной проблемы является
использование модели, в которой поток, не заполучивший мьютекс,
какое-то время опрашивает состояние мьютекса в цикле. Если
Управление процессами и ресурсами в автономных
многопроцессорных вычислительных машинах