Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ОС.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
194 Кб
Скачать
☆

Синхронизация в Windows

Концепция взаимоисключения является одной из ключевых при разработке Windows. Идея: в каждый момент времени к конкретному ресурсу может обращаться один и только один поток.

Взаимоисключение предназначено для разделения обращения к ресурсам, если это может привести к непредсказуемым последствиям.

Разделы кода, обращающиеся к ресурсам, которые не являются разделяемыми, называются критической секцией. В критической секции может выполняться только один поток (доступ других потоков при выполнении одного запрещен).

В Windows поддержка механизмов, с помощью которых можно предотвратить одновременное изменение двумя потоками одной и той же структуры, возлагается на ядро. Ядро предоставляет специальные примитивы синхронизации (взаимоисключения), которые используются исполнительной системой и другими участниками вычислительного процесса при доступе к глобальным данным. Таким образом, критическими секциями ядра ОС являются те, которые модифицируют глобальные структуры данных ядра, например, базы данных диспетчера ядра или очередь DPC. Ввиду того. что осуществляется многопоточность, гарантия должна быть 100%, что взаимные исключения доступа потоков к этим структурам исключена.

Считается, что наибольшая проблема в момент обработки прерываний. При обработке информации из глобальных структур данных может возникнуть прерывание, которое, в свою очередь, тоже изменит эту структуру, т.е. сложность возрастает лавинообразно.

Чтобы исключить эту ситуацию, один из механизмов, реализованный в ОС Windows – увеличение приоритета того или иного потока до максимального, чтобы невозможно было его прервать. Недостаток этой структуры: работает только в однопроцессорных системах. В противном случае на другом процессоре возможна своя система приоритетов.

Спин-блокировки

Для многопроцессорных систем применяется механизм взаимоисключения, который называется spin-lock.

Спин-блокировка – блокирующий примитив, сопоставленный с какой-то структурой данных (слайд 62).