Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 76
Текст из файла (страница 76)
Аргумент (асКР используется для передачи указателя на простой объект блокировки, защищающий логическое условие. Перед вызовом 5Ч ЧЧА11 или 5Ч ЧIА11 516 324 Глава 7. Синхронизация. Многопроцессорные системы процесс должен занять объект Госкр, Эти операции являются неделимыми и приводят к блокировке вызывающего процесса ядром и освобождении объекта, заданного при помощи Госкр. После возврата 5Ч ЧЧА11 или 5Ч ЧЧА11 516 объект Госкр оказывается незанятым. Заданное условие не всегда является истинным выражением в момент возобновления работы вызывающей нити, поэтому при использовании 5Ч Ч1АП или 5Ч ЧЧАП 516 необходимо производить его циклическую проверку. 7.11.2.
019йа! Ой!Х Механизмы синхронизации системы Р!я!та! 13!ЧГХ основаны на элементах Мас)т. Поддерживается два типа синхронизации: простая и комплексная [4], Простая блокировка выполняется при помощи объекта шцтех, реализованного на основе неделимой инструкции тестирования н установки конкретного типа аппаратной архитектуры. Объект перед использованием необходимо описать и проинициализировать, при этом он окажется в незанятом состоянии. Блокировка не будет удерживаться при операциях приостановки-возобновления выполнения нитей или при контекстных переключениях. Сложная блокировка представляет собой элемент высокого уровня, поддерживающий большое количество возможностей, таких как разделяемый и эксклюзивный доступ, блокировка нитей или рекурсивные объекты.
Такой элемент можно использовать для организации доступа чтения-записи ресурса. Он поддерживает две опции, з(еер (режим сна) и гесигзпге (рекурснвность). Опция сна может быть включена или отключена как на стадии инициализации объекта, так и позже при его использовании. Если она установлена, ядро будет блокировать все запросы в случае неудачного завершения попытки получения объекта. Более того, в случае необходимости блокировки нити во время удержания объекта опция сна должна быть обязательно установлена. Рекурсивность задействуется только в случае получения объекта в эксклюзивное пользование и может быть снята только той нитью, кото.
рая ранее установила ее. Поддерживаются неблокирующие варианты различных процедур, возвращающие ошибку при невозможности получения объекта блокировки. Г1редлагаются функции изменения статуса объекта из разделяемого в эксклюзивный (ирдгаг!е) и обратно (г!оттпдгаде). Операция повышения уровня освободит разделяемый объект и возвратит ошибку в том случае, если другая нить находится в режиме ожидания такого же запроса. Неблокирующий вариант операции ордгаде в этом случае возвращает ошибку, но не освобождает совместный объект блокировки. Сон и пробуждение Так как большая часть кода системы была взята из 4ВБР, в Р!рта! ГГГЧГХ оставлена поддержка вызовов з(еер() и аа!георО.
Таким образом, блокнруе- 7Д П Реализация объектов синхронизации в различных ОС 326 мые нити попадают в глобальные очереди сна чаще, чем в очереди отдельных объектов синхронизации. Для корректной работы механизма на многопроцессорных архитектурах алгоритмы блокировки необходимо подвергнуть изменениям. Основная проблема, которой следует уделить внимание, это потеря сигнала необходимости пробуждения нити.
С этой целью исходные коды функции з(ееро были переписаны заново с использованием двух операций низшего уровня, аззег~ юа1т() и тпгеад Ыосх(). Схема работы продемонстрирована на рис. 7.9. Рис. 7.9. Реализация перехода е режим сна е системе Рдрйа! 0М!Х Представьте, что нити необходимо ожидать наступления некоторого события, описанного логическим выражением и зашищенного при помощи простого объекта синхронизации.
Нить запрашивает объект, после чего проверяет условие. Если в дальнейшем необходимо приостановить выполнение нити, происходит вызов аззетт тта1т(), который перемешает ее в соответствующую очередь сна. Затем происходит освобождение объекта и вызов функции тптеа4 Ыос1() для инициализации переключения контекста. Если событие произойдет в промежутке времени между освобождением объекта и контекстным переключением, ядро удалит нить из очереди сна и переместит его в очередь планирования, Следовательно, при применении вышеописанных функций нить не пропустит момент необходимости возобновления выполнения.
7.11.3. Другие реализации систем 0й!Х Первая версия БУК4, поддерживающая многопроцессорность, была создана в ИСК 13). В ней была представлена концепция консультативных обьвклюв блокировки процессора (ас(ч)зогу ргосеззог 1оскз, АР(.), при использовании 326 Глава 7. Синхронизация. Многопроцессорные системы которой рекурсивные объекты содержат указание действий над нитями, Рекомендация (или !э!пг) подсказывает, что должна делать нить: приостановить выполнение илн перейти в ждуший цикл ожиданпя ресурса. Также можно задать обязательный или рекомендательный характер исполнения указания, Нить, обладающая объектом блокировки, может изменить указание с необходимости приостановки выполнения на ожидание в цикле и обратно.
Объекты АР( обычно используются для доступа нити к долгосрочно блокируемым ресурсам. Особенностью объектов АРЕ является их автоматическое освобождение и запрос при проведении переключения контекста. Это означает воэможность применения традиционного интерфейса сна-пробуждения беэ проведения каких-либо изменений. Более того, объекты блокировки одного и того же класса защищены от проблемы потери сигнала пробуждения, так как при переходе нити в режим сна происходит освобождение всех ранее удерживаемых объектов. Система также поддерживает нерекурсивные взаимные исключения и объекты АРЕ защиты чтения-записи. Версия Ягй4, представленная ХСК, в дальнейшем была усовершенствована консорциумом !псе! Мц!г!ргосеээог Сопэогь!цш, созданным группой компаний для разработки официальной многопроцессорной реализации системы (14(. Одним из самых важных изменений, произведенных в этой ОС, стал выэоэ функции, запрашивающей объект АР!..
Добавился новый входной аргумент— уровень приоритета прерываний. Это позволило изменять уровни 1р! прн манипуляциях с объектами блокировки. Если объект не может быть получен сразу же, цикл занятого ожидания будет иметь изначальный (более низкий) приоритет. Функция возвращает оригинальный уровень 1р1, значение которого в дальнейшем может быть передано функции освобождения объекта.
Элементами наиболее низкого уровня являются наборы неделимых арифметических и логических операций. Арифметические операции позволяют ннкрементировать н декрементировать значения счетчиков ссылок. Логические операции применяются для побитовых манипуляций с полями флагов. Операции обоих типов возвращают оригинальное значение переменной. На следующем, более высоком уровне находятся простые объекты блокировки (эр!э !оскэ), не освобождаемые автоматически при переключениях контекста. Они применяются для простейших операций, таких как добавление или удаление элементов из очереди. На самом высоком уровне находится блокировка ресурсов. Это объекты долгосрочного использования, основанные на семантике одной читающей и множества пишущих нитей, которые могут удерживаться при проведении операций блокировки нитей.
Система также поддерживает синхронные и асинхронные межпроцессорные прерывания, которые могут быть использованы для проведения таких операций, как распределение тиков тайчера и согласования хэша трансляции адресов (см. раздел 15.9). В системе 5о!апэ 2.х для увеличения производительности применяются адаптивные объекты блокировки (см, раздел 7.10.3) и турникеты (см. раздел 7.2.3).
7Л3. Упражнения 327 ОС поддерживает семафоры, объекты защиты чтения-записи и условные переменные как объекты синхронизации высокого уровня. Для обработки прерываний служат нити ядра, поэтому обработчики прерываний используют те же элементы синхронизации, что и остальная часть ядра, и могут блокировать вх по необходимости. Эта возможность подробнее описывалась в разделе 3.6.5. Реализация любой многопроцессорной системы использует одну из форм простых объектов блокировки для краткосрочной синхронизации на низком уровне. Механизм сна-пробуждения чаше всего поддерживается этими системами (иногда с небольшими изменениями), что за|цищает от необходимости замены большого количества исходного кода ОС.
Основные различия наблюдаются в выборе элементов синхронизации высшего уровня. Первые реализации для 1ВМ/370 и АТо Т ЗВ20А 111 основывались в основном на семафорах. ОС Ыгг1х [161 использует эксклюзивную блокировку объектов. Ядро системы 1)Т5, созданной АшдаЫ, основано на условиях 115~. ОС ОО/1)Х применяет для реализации последовательньск обьектов блокировки неделимые счетчики событий, предоставляюшие несколько нестандартный способ пробуждения одного процесса. 7.12.
Заключение Проблемы синхронизации в многопроцессорных архитектурах являются более сложными и сильно отличаются от проблем, возникающих при использовании одного процессора. Привлекается большое количество новых решений, таких как механизмы сна-пробуждения, условия, события, объекты защиты чтения-записи и семафоры. Все эти элементы во многом схожи.
К примеру, по возможности следует применять семафоры совместно перед условиями и наоборот. Многие из представленных решений не ограничены многопроцессорными системами и могут быть применены при синхронизации на однопроцессорных архитектурах и распределенных системах со слабой связью.
Многие многопроцессорные системы 1)1ч1Х основаны на сушествующих однопроцессорных вариантах ОС, поэтому лля них решение об использовании тех или иных элементов синхронизации сильно зависит от соглашений при переносе на новую платформу. Система Мас)1 и другие, базируюшиеся на ней, ве зависят от этих соглашений, поэтому разработчики могли выбирать элементы синхронизации на свое усмотрение. 7.13.
Упражнения 1. Многие системы поддерживают неделимую функцию, которая выполняет перестановку значения регистра в значение, хранимое в памяти. Как эта функция может быть использована для реализации нелелимой операции тестирования и установки? З2В 2. Каким образом можно реализовать неделимую операцию тестирования 3. Представьте, что соперничество при попытке обладания критическим 4. Одним из методов предупреждения возникновения конвоирования 5. Чем отличается счетчик ссылок от совместного объекта блокировки? 6. Создайте объект блокировки ресурса на основе простого объекта шп1ех 7.