В. Столлингс - Операционные системы (1114679), страница 57
Текст из файла (страница 57)
"Емкость" этого буфера определяется глобальной переменной сврвс1ЬУ. Почтовый ящик твургос(осе изначально заполнен пустыми сообщениями в количестве, равном емкости буфера Количество сообп(внии в этом почтовом ящике уменьшается при каждом поступлении новых данных и увеличивается при их использовании. Такой подход достаточно гибкий — он может работать с любым количеством производителей и потребителей; главное, чтобы они имели доступ к обоим почтовым ящикам. Боле е того, система производителеи и потребителей может быть распределенной, ког а вс да все производители и почтовый ящик п.аургооисе находятся на одной машине, а по —.„сб по.~сбители и почтовый ящик гааусопЯ1ппе — на другой.
ЗАДАЧА читАтедейупцсАуелей, ':,,;., ',', -, При аз або Р 'Р тке синхронизации и параллельных вычислений зачастую полезно сааза щуюся у вас задачу с уже известными и получить возможность провеприменнмость в ь вашего решения к известной задаче, В литературе довольно час- Р ..мотрение таких эталонных" задач, представляющих собой притре~ается ассмо 4$ кающих перед разработчиком проблем. С одной из них — задачей ~ часто возникаю йзволнтеля /по би л тре ителя — мы уже встречались; в этом разделе мы рассмотрим одну класс1 О - ассичсскую задачу — читателей/писателей. аольз пределить ее мо ожно следующим образом.
Имеются данные, совместно ис- Р д роцессов. Данные могут находиться в файле, в блоке основУемые я ом и памяти или аже в г цессОРа. Имеется несколько ПРОЦ е только читают эт ~ , „и данные ~читатели1, и несколько дРУгих которь|е то -5. 'и ' Параллельные вычисления: взанмоисключения... 299 записывают данные (писатели). При этом должны удовлетворяться , условия. дюбое число читателей могут одновременно читать файл. Записывать инФормацию в файл в определенный момент времени только один писатель.
Когда писатель записывает данные в файл, ни один читатель не мо "'", читать. '"$ Перед тем как приступить к работе, разделим эту задачу на,"5"-"." ~чу взаимоисключений и задачу производителя/потребителя. В задаЧе.:-':: ' *,й/писателей читатели не записывают данные, а писатели нх не чит общей является ситуация, когда каждый процесс может как читать,:"", ать данные (и которая включает рассматриваемую задачу как час ). В таком случае мы можем объявить любую часть процесса, котор~и~: .тся к данным, критическим разделом и использовать простейшее реше ове взаимоисключений. Причина, по которой мы рассматриваем чай более общей задачи, заключается в том, что общее решение знащ" едляет работу, в то время как для частного случая имеется гораздо :тивное решение. Представим себе библиотечный каталог, в котором ут искать нужную им литературу, а один или несколько работников- " и могут этот каталог обновлять. При общем решении читатели будут, ы входить в каталог по одному, что, конечно, приведет к неоправд жкам и очередям.
Кроме того, работники библиотеки прн внесении' ( не должны мешать друг другу, а также не должны допускать чит ' ' ' ным в момент их изменения, чтобы предотвратить получение чита таверной информации. Можно ли рассматривать задачу производителя~потребителя как ча задачи читателей/писателей с единственным писателем 1производитель) инным читателем (потребитель)? Оказывается, нет. Производитель — ж.. атель. Он должен считывать значение указателя очереди, чтобы опред дует вносить очередную порцию информации„и выяснять, не заполнен лИ логично и потребитель является не просто читателем, так как он изме ие указателя очереди, указывая, что элемент удален из буфера.
Теперь мы рассмотрим два решения поставленной задачи. а 1иоритетное чтение В листинге 5.19 приведено решение задачи с использованием сема нанта, в котором имеются один читатель и один писатель (решеннЕ' изменений, если имеется много читателей и писателей). Процесс, нь прост. Для обеспечения взаимного исключения используется, .к'. Когда один писатель записывает данные, ни другие писатели, ни могут получить к ним доступ. Процесс читателя также использует ж для обеспечения взаимоисключений. Однако чтобы обеспечить возм,. :овременной работы многих читателей, состояние семафора проверяет 'атель, входящий в критический раздел, в котором нет других чита в критическом разделе уже находится хоть один читатель, то другой ~ступает к работе, не ожидая семафора изет.
Для отслеживания к „и~ этелей в критическом разделе используется глобальная переменная ,,-;1 .ссг~, а для гарантии корректного ее обновления — семафор х. Л„стинг 5.19. Решение задачи читателеИписателей с использованием семафоров (приоритетное чтение) газ: .*ось па; геасег () ;511е (~гие) ка11. (х); геассоцй~++; 1й (геабсоппг.==1) ка3 г. (Изей~); э1дпа1 «х); ЕГАБЛ) 1Т ( ); ка1~ ('х); гиабсо~~пС--; (геас(сосо~=.-=б) з1опа1 (~~зек.); эьопа1(х); чс1с и".Тсег () ( к!к11е (багие) ~а1с(~век~); ХЕ1ТК(Л)ХТ ( )," э~опз1 (~зек.) '~с1б л~а1;- () геа,)сс:;.пс = б; ~ .- гЬ~я и «Гез 1ех' ьгх1ег) ПРиоРитетная запись предыдущем решении приоритетной операцией являлось чтение данных. Вели с свин читатель получил доступ к данным, то возможна ситуация, когда пиатель в течение долгого времени не получит возможности внести изменения— пока хот хотя бы один из читателей будет находиться в критическом разделе.
В листинге 5.2О показано решение, обеспечивающее выполнение следуюц( "о с один условия: ни один читатель не сможет обратиться к данным, если хотя бы ., нме, писатель объявил о своем намерении произвести запись. Для этого к щнмся в программе семафорам и переменным процесса писателя добавле~л~дующие: Часть. 2.. а 5. Параллельные вычисления: взаимоисключения...
с п~а1п ( ) геа~~соип~ .= жг1'ессип" =- 0; па Ьец1п(геабег, иг1пег); х еассоыпг-~ хг1( ессппс нрпсгех1ру3~я1р гяе~Г. = 1 ~ кяеп =. 1 ~ б геаЛег() В системе имеютсн только читатели В снгтеме нмеются только писатели В снстеме имеются как читатели, так в писатели„первьгм выполня- ется чтение В системе имеются как читатели, так н писатели; первой выполняет- ся запись ъп',,~ геабег(1п( '"еяяаяе гп~яд; ")~~1е(аггее) Часть 2. семафор гяехп, запрещающий вход читателей, если хотя бы один "4 об ьявпл о намерении произвести запись; переменная иг1гесоипг, обеспечивающая корректность установки гяегл семафор у, гарантирующий корректность изменения переменной жг1песо -„тинг 5.20. Решение задачи читателей!писателей с использованием семафоров (приоритетная запись) ма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г.(у); ьг11ессппг.- г 1Х (жгтгессипг.==0) яьппа1(гяетп); я1спа1(у); В процессе читателя требуется один дополнительный семафор. На основании семафора гяе~п нельзя создавать длинную очередь, иначе сквозь нее не смо-прорваться" писатели.
Для осуществления ограничения, когда семафор приостанавливает только один процесс чтения, служит семафор, блокиую~цнй остальных читателей. В табл. 5.5 приведены возможные ситуации в „энной системе. ч'аблипа 5.5. Состояния очередей процессов в программе нз листинга 5.20 ° Устанавливается няев е Очередей нет Устанавливаются ъяеГ1 н х яегй ° Очередь писателей на няег, ° няеп устанавливается читателем ° ваяет устанавливается писателем ° Все писатели становятся в очередь на чяеп ° Один читатель становится в очередь на гяеп ° Остальные читатели становятся в очередь на ' ня ею устанавливается писателем ° гяев устанавливается писателем Все писатели становятся в очередь ня няеп ° Один читатель становится в очередь на гяе~п ° Остальные читатели становятся в очередь на я В листинге 5.21 приведено еще одно решение задачи с приоритетной записью* Реализованное с использованием системы передачи сообщений.
В этом слу"ае имеется управляющий процесс с правом доступа к совместно используемым данным. Прочие процессы запрашивают право доступа к данным, посылая сообщение управляющему процессу. Запрашивающий процесс получает право доступа посредством ответного сообщения "ОК'*, а после завершения работы сообщает оба, этом специальным сообщением 11п я).ед. у управляющего процесса имеются тр" почтовых ящика, по одному для каждого типа получаемых им сообщений. )аист~ ~~ни~ о 21.
Решение задачи читателей/писателей с использованием системы передачи сообщений аа 5. Параллельные вычисления: нзаимоисключенин... почевые термины Монитор Неблокирующие операции Параллельные вычисления Параллельные процессы Передача сообщений Пережидание зан Семафор Сильный семафор .„.. Слабый семафор Сопрограммы ~арный семафор жирующие операции ~имоблокировка имоисключение юдание 1нтрольные вопросы 1.1. Перечислите основные проблемы, связанные с концепцией паралл вычислений. 1.2. Каковы три различных контекста, в которых проявляются парал вычисления? 1.3.