В. Столлингс - Операционные системы (1114679), страница 53
Текст из файла (страница 53)
5.3 Листинг 5.13. Неполное решение задачи о парикмахерской Гйах сарас1»у =- 20; зола = 4; ЬагЬег сйа1г = Зт соогб = 3; сиз» геабу = О, 1еа те Ь сЬа1г = О, гесе1р» = 0; ~етт,агбст". аегар)-.о ге аетоап)тоге аетттапбоге эетрарпсге йуп1апео --= О, раутттеп» =- О, ка» (трах сарас1 т.у) еп"ег аЬор(); т'а1» ( аобу а); эг» оп аойа()т иа("'Ьаггет сЬа1г.) пр ггор ао'а() ° а1()т1а1 (еоГа) т (и ЬагЬег спа(г (); а.тяпа1 (с»т» геабу), 'а1»(т1пуаБео)," ЬагЬег с)а1г (); агттпа1(1еаъе Ь сйа1г); т"'а т ' ( ) э ' цт1а1 ( раутттеп Ь); ~" а ' .
( ге се1р» ); ех г з тор ( ) тЯтта1 (трах сарас1»у) т жа1»(сиз» геас(у)т ттаг»(соогт)), сп» Ьауг(); етдпа1(соогй), э1япа1(11п1БЬес(); тта1»(1еа те Ь сЬа1г); э1дпа1(ЬагЬег сЬа1г); 1то1б сааЬ1ег() ( х)т1 1е (»г»те ) ( мат» (раутттеп» ) ~~.т» (соогс(); ассар» рау()' а1япа1 (соогя; э Опа1(гесе1рг); ра гпа от 1 тт ( ~ раз) . - *, спБ»оптег, ~ ЬагЬег, ЬагЬег, сазЬ, ег) более серьезная ошибка происходит при б етяп'1(Р'У '"') и " 'Г( АР») Э может Ри к в,блок,вке всех клиентов и кассира их операциями ~а ' ».
б. П . Парнллвльные вычисления. "взаимоисклн,чения... Операция ехдпа1 Операция абрахе фор Клиеят, покидающий парикм ' '' екуюр сигнализирует об этом дающему входа Клиент ожидает возможности войти в парикмахерскую Оараеьеу Клиент, встающий е дивана, лизярует об этом ожидающе можноети сесть па дяиав Клиент ожидает возможности сесть на диван Парикмахер сигнализирует,. кресло свободно ег спагг Клиент ожидает пустое кресло Клиент сигнализирует парик ру, что он уже сел в кресло: р-,, Парикмахер ожидает, пока кли- ент сядет в кресло Парикмахер сигнализирует ту, что стрижка окончена Клиент ожидает окончания стрижки Гпах сарас1гу БОЕа = Р); ЬагЬег ОЬа1г ги' ех1 спвг геае(у Раут.~епг ЕьгЕБЬес((50) БегпаРЬОге БеюарЬОге вегаарЬО е ветарЬОге Бешар)'Оге Клиент сигнализирует пар о том, что он встал е кресла Парикмахер ожидает, пока кли- ент покинет кресло 3 р СООге( 1, пшгех2 О 1еаъе Ь спа1г О, гесеЕРЕ (0); = Зр — 1р О, — О; Клиент сигнализирует кассиру, том, что он оплатил стрижку Кассир сигнализирует о том, оплата принята Кассир ожидает оплаты услуг клиентом Бегпар)1 О г е Клиент ожидает кассовый чек чО1 спвгоп~ег () Сигнал об освобождении пари ' махера *р' Ожидание освобождения парикмахера для стрижки или для выполнения обязанностей кассира иа1г (сивп геапу) у ьра1г(пыгех2); Оее)пепе1(Ь севе); БЕдпа1(пигех2); ма1О(ОООге()р спг Ьа1г(); Б1дпа1(ОООгс(); Бьдпа1(Егп1БЬее((Ь ООБГ))р ьраЕГ(1еапе Ь спа1г); Будпа1(ЬагЬег сЬаЕг); иаье(раучпепг); иа1г(ОООгб.); ассерг Рау(); БЕЯпа1(сООгД); БЕдпа1(гесе1РГ); Часть 2.
;ица 5.3. Назначение семафоров в листинге 5.13 Процесс кассира можно устранить, внеся функцию оплаты в проце ~ахера. Каждый парикмахер будет последовательно стричь и п у. Однако при наличии одного кассового аппарата необходимо огра уп к функции ассерг рау () одним парикмахером в каждый момент Этого можно добиться, рассматривая функцию как критический ра :в ее соответствующим семафором. Полное решение задачи о парикмахерской Несмотря на приложенные усилия (см. листинг 5.13), у нас остал нные сложности. Решение одной из проблем содержится в оставшей 'аздела, а решение остальных останется читателю в качестве уп задачу 5 19).
В листинге 5.13 отражена проблема, которая может привести к не ' " Работе с клиентами. Предположим, что в настоящий момент в пар, кРеслах сидят три клиента. Они, скорее всего, заблокированы в : (ЕЕг(БЬее() и в соответствии с организацией очереди будут деблок м поРядке, в котором они садились в кресла. Но что если один нз 'Ров очень быстро работает (или один из клиентов лысый)? Пол ия. когда одного клиента будут вытаскивать из кресла и заставлять езакончениую прическу, в то время как другого, полностью постри .'нта будут держать в кресле силой. Эта проблема решается добавлением новых семафоров, как показано е 5.14. Мы присваиваем каждому пользователю номер (как если ,е в парикмахерскую каждый клиент получал номерок).
Семафор ~еепечивает защиту доступа к глобальной переменной ООппс, гарантируя уникальность номера каждого клиента. Семафор ЕЕОЕБЬе~ превратился в массив из семафоров. Когда клиент садится в кресло, он выполняет инструкцию „:,, (ЕЕп(БЬеО(сов'гг) ), ожидая свой собственный семафор. По окончании ижки парикмахер выполняет инструкцию Б1дпа1(Е1пЕБЬеЭ(Ь спБГ) ), от„ая из кресла того клиента, которого он стриг. Нам остается рассмотреть, каким образом парикмахер узнает номер клиен„Клиент помещает свой номер в очередь епе)пепе1 непосредственно перед тем, ак сообщить парикмахеру о готовности при помощи семафора спвг геену.
Ко,, а парикмахер готов стричь клиента, бе~пепе1(Ь сивг) удаляет номер клиениз очереди и помещает его в локальную переменную парикмахера Ь спвГ. дистинг 5.14. Полное решение задачи о парикмахерской пь спвппг иа1Г (п~ах сарас1ЙУ) р еппег БЬОР(); иаьг (пи'гех1); С ППГ': +р СПБГПГ = ССЫПЬ р Будга1 (пшпех1); иаЕГ (БОЕа); Б1е Огр БОЕа ( ); ~аье (ЬагЬег сЬБЕг); ЯеГ пр Егоп~ БОЕа(); Будпа1 (БОЕа7р БЕЕ 1г ЬагЬег ОЬа г() 'рай (и цбех2); епЧпепе1 (спввгг); Б(дпа1(спб геасу); Бтдпа1 (пиГех2); ~а Е (ЕЕОЕБЬее((спвепг) 1еа е ЬагЬег с)1а1г! ); Б1дпа1 (1еа:е рау (); 11'а (РаутпепГ) "'а1'-(гесе1рг)р БЬОР() р Б-'дга1 (пах сарасубу); Параллельные вычисления: взаимоисключения...
ва5. П з 5. МОНИТОРЫ ГэгЬед г (епэГотех', ... )50 раэ) ...,Спа~оэ.ег, ЬагЬег,ЬагЬег,ЬегЬег,сеэЬ(ег); Семафоры обеспечивают достаточно мощный н гибкий инструмент' . стзлення взаимных исключений и координации процессов. Однако," ." ~ели в листинге 5.8, создать корректно работающую программу с ис' ' .м семаФоров не всегда легко. Сложность заключается в том, что о ' ' ) т и э) дпа1 могут быть разбросаны по всей программе, и не всегда:"'' зу отследить их воздействие на контролируемые ими семафоры. 'е Монитор представляет собой конструкцию языка программирования.
'з ~ обеспечивает функциональность, эквивалентную функциональности ь но легче управляется. Впервые формальное определение концепции.' "" 1 было дано в [НОАК741. Мониторы реализованы во множестве яз .ммирования, включая такие, как Сопсиггеп$ Раеса1, Разса1-Р1из, йп1а-3 и дача. Мониторы также реализуются как программные биб' > позволяет использовать мониторы, блокирующие любые объекты.
В"" ~, например, для связанного списка можно заблокировать все связа ~ одной блокировкой, либо иметь отдельные блокировки для каждого, озможно — - и для каждого элемента списка. "э " Рассмотрение мониторов мы начнем с версии Хоара (Ноаге), ониторы с сигналами Монитор представляет собой программный модуль, состоящий из. зирующей последовательности, одной или нескольких процедур и ло шых.
Основными характеристиками монитора являются такие. .. Локальные переменные монитора доступны только его процедура)е ние процедуры доступа к локальным данным монитора не имеют. !. Процесс входит в монитор путем вызова одной из его процедур. 1. В мониторе в определенный момент времени может выполнятьсЖ;-', один процесс; любой другой процесс, вызвавший монитор, будет новлен в ожидании доступности монитора. Первые две характеристики сразу заставляют нас вспомнить о объектно-ориентированном программировании.
Фактически зентированные операционные системы или языки программирования мо ~лнзовать монитор как объект со специальными характеристиками. Соблюдение условия выполнения только одного процесса в опре мент времени позволяет монитору обеспечить взаимоисключения. Да .. тора доступны в этот момент только одному процессу, следовательно ть совместно используемые структуры данных можно, просто пом нитор. Если данные в мониторе представляют некий ресурс, то монн, чивает взаимоисключение при обращении к ресурсу.
Для широкого применения в параллельных вычислениях м лжны включать инструменты синхронизации. Предположим, на. о процесс использует монитор и, находясь в мониторе, должен быть приоста ц элен до выполнения некоторого условия. При этом нам требуется некий ннэм, который не только приостанавливает процесс, но и освобождает „втор, позволяя войти в него другому процессу. Позже, когда условие .эжется выполненным, а монитор доступным, приостановленный процесс ожет продолжить свою работу с того места, где он был приостановлен.