Спец часть (часть 2) (3 поток) (2015) (by Кибитова) (1161602), страница 9
Текст из файла (страница 9)
в данныймоментон единственныйклиентв хранилище).Еслида,тогото пожелают.он опускаетсемафорdb,темсамым,препятствуяписателямвойтивсистему,еслионисемафор db,db, темтем самым,самым, препятствуяпрепятствуя писателямписателям войтивойти ввсистему,систему,еслиеслионионитоготогопожелают.пожелают.семафорЕслижесемафорdbужебылопущен,тотоэтоозначает,чтов данныймоментв хранилищеЕслижесемафорdbужебылопущен,этоозначает,чтовданныймоментвхранилищеЕсли же семафорdb ужебыл опущен,то это означает,что в данныймоментв хранилищеприсутствуетписатель,ииэтотпервыйчитательзаблокируетсянанаэтойоперации,ожидаяприсутствуетписатель,этотпервыйчитательзаблокируетсяэтойоперации,ожидаяприсутствуетписатель,иэтотпервыйчитательзаблокируетсянаэтойоперации,ожидаявыходаписателяизиз системы.(Заметим,чтоэтаэтаблокировкапроисходитвнутривыходаписателясистемы.(Заметим,чтоблокировкапроисходитвнутривыхода писателяизпоэтомусистемы.(Заметим,что этаблокировкапроисходитвнутрикритическойсекции,остальныечитателибудутблокироватьсяна наопусканиикритическойсекции,поэтомуостальныечитателибудутблокироватьсяопусканиикритическойсекции,поэтомублокироватьсяопусканиисемафораmutex.)Послеэтого остальныепроисходитчитателивыход избудуткритическойсекциина(подымаемсемафораmutex.)Послеэтогопроисходитвыходизкритическойсекции(подымаемсемафора mutex),mutex.) чтениеПосле информацииэтого происходитвыход из Затемкритическойсекции обратные(подымаемсемафориз хранилища.производятсясемафорmutex),чтениеинформацииизхранилища.Затемпроизводятсяобратныесемафор поmutex),чтениеинформациииз хранилища.Затем производятсяобратныедействиявыходуиз хранилища,которыетакже происходятвнутри критическойдействия попо выходувыходу изиз хранилища, которыекоторые такжетакже происходятпроисходят внутри критическойкритическойдействиясекции.Итак, навыходе мыхранилища,уменьшаем число читателейв хранилище,внутрии если некоторыйсекции.Итак,навыходемыуменьшаемчислочитателейвхранилище,иеслинекоторыйсекции.
Итак,на выходемы уменьшаемчитателейв хранилище,и если семафоранекоторыйчитательявляетсяпоследнимклиентом в числобиблиотеке,то происходитподнятиечитательявляетсяпоследнимклиентомвбиблиотеке,топроисходитподнятиесемафорачитательявляетсято моглипроисходитподнятие семафораdb,разрешаяработупоследнимписателямклиентом(которые вк библиотеке,этому моментубыть заблокированынаdb, разрешаяразрешаяработуписателям(которыеэтому моментумоментумоглиданныебыть заблокированызаблокированынаdb,работу(которыекк этомумоглибытьвходе).В концециклаписателямработы читательобрабатываетполученныеиз хранилища,навходе).Вконцециклаработычитательобрабатываетполученныеданныеизхранилища,входе).В концецикла работы читатель обрабатывает полученные данные из хранилища,послечегоцикл повторяется.
после чегочего циклцикл повторяется.повторяется.после129129129Писатель в начале каждого цикла своей работы подготавливает данные длясохранения,затемвойти в циклахранилище,db. Еслиданныев хранилищеПисательсвоейработы семафорподготавливаетданныедляПисательвв пытаетсяначалеподготавливаетданныедляПисательначале каждогокаждогоцикласвоей опускаяработыподготавливаетдлякто-тоесть,тоонбудетожидать,покапоследнийклиент(независимооттого,читательсохранения,опускаясемафорdb.Есливхранилищесохранения,затемпытаетсявойтивхранилище,Есливхранилищесохранения, затем пытается войти в хранилище, опуская семафор db. Если в хранилищеэтоилиписатель)не покинетПослеклиентэтого(независимоон производиткорректировкукто-тоесть,(независимооттого,читателькто-тоесть,тоожидать,пока(независимоот того,того,читателькто-тоесть,то онон будетбудетожидать,хранилище.пока последнийпоследнийклиентотчитательданныхвхранилищеипокидаетего,поднимаясемафорdb.этоилиписатель)этого онон производитпроизводиткорректировкуэтопроизводит корректировкукорректировкуэто илиили писатель)писатель) нене покинетпокинет хранилище.хранилище.
ПослеПосле этогоЗаметим,чтовданномрешенииеслихотябыодинчитательнаходитсявнутриданныхвсемафорdb.данныхвхранилищеипокидаетего,поднимаяданных в хранилище и покидает его, поднимая семафор db.системы,толюбойследующийчитательбеспрепятственновнеепопадет,аписательЗаметим,чтовданномрешенииеслихотябыодинчитательнаходитсявнутриЗаметим,читатель находитсянаходится внутривнутрижеЗаметим, что в данном решении если хотя бы один читательбудетожидать,когдавсе посетителихранилище,т.е.реализованастратегиясистемы,беспрепятственнонеепопадет,писательжесистемы,тоследующийчитательпопадет,писательжесистемы,то любойлюбойследующийчитатель покинутбеспрепятственновв неепопадет,ааа писательжебудетожидать,покинутхранилище,т.е.реализованастратегияприоритетностичитателяпередписателем.Чтобыэтогоизбежать,можнобудетожидать,когдавсепосетителиреализованастратегиябудет ожидать, когда все посетителиреализована стратегияприоритетностиизбежать,можномодифицироватьчтобы вЧтобыслучае,этогоесли имеетсяхотя можнобыодинприоритетностичитателяпередписателем.Чтобыэтогоизбежать,можноприоритетности алгоритмчитателя такимпередобразом,избежать,модифицироватьчтобы в случае,имеетсяхотябыодиножидающийпроцесс-писатель,новыепроцессы-читателиполучалидоступак ресурсу,модифицироватьалгоритмобразом,случае,нееслиеслиимеетсяхотя быбыодинмодифицироватьалгоритм такимтакимобразом,имеетсяхотяодиножидающийпроцесс-писатель,новыепроцессы-читателине получалиполучалидоступаресурсу,аожидающийожидали, когдапроцесс-писательданные.
Однако,обратнаясторонаданногоожидающийдоступаресурсу,процесс-писатель,новые обновитдоступакккресурсу,ожидали,данные. Однако,обратнаясторонаданногоаарешениякогдапроцесс-писательобновитОднако, обратнаяобратнаясторона данногоданногов том,чтооно несколько снижаетпроцессов-читателей,т.к.аожидали,ожидали,когдапроцесс-писательобновит производительностьсторонарешениявпроизводительностьпроцессов-читателей,т.к.решениявтом,чтоононесколькоснижаетпроцессов-читателей,т.к.решениявтом,чтоононесколькоснижаетпроцессов-читателей,т.к.вынуждает их ждать в тот момент, когда ресурс не занят в эксклюзивном режиме.вынуждаетресурсдоступане занятквразделяемомуэксклюзивномрежиме.вынуждаетихждатьждатьтотмомент, когдакогдаэксклюзивномрежиме.вынуждаетихввтотмомент,эксклюзивномресурсурежиме.процессов,ДаннаязадачаиллюстрируетмодельДаннаяразделяемому ресурсуресурсупроцессов,Даннаязадачаиллюстрирует модель доступа к разделяемомуДаннаязадачаиллюстрируетресурсу процессов,процессов,имеющихразныеприоритеты.имеющихразныеприоритеты.имеющихразныеприоритеты.имеющихЗадача о «спящем парикмахере».
Рассмотрим парикмахерскую, в которой Задача«спящем парикмахере».парикмахере».парикмахерскую,ввв которойЗадачаРассмотримпарикмахерскую,которойЗадача«спящемпарикмахерскую,которойработаетодин оопарикмахер,имеется одно креслодля стрижкии несколькокресел вработаетодинпарикмахер,имеетсядлястрижкиинесколькокреселработаетодинпарикмахер,имеетсяоднокреслонесколькокреселработаетстрижкикресел ввнетвприемной для посетителей, ожидающих своей очереди.Если ив несколькопарикмахерскойприемнойдляпосетителей,ожидающихсвоейочереди.Есливпарикмахерскойнетприемнойнетприемнойдля парикмахерпосетителей, засыпаетожидающихЕсли в парикмахерскойпарикмахерскойнетпосетителей,прямо на очереди.своем рабочемместе. Появившийсяпосетителей,долженпарикмахерзасыпаетпрямо начегорабочемместе.посетителей,своемместе.Появившийсяпосетителей,парикмахерзасыпаетпряморабочемприступаетместе. ПоявившийсяПоявившийсяпосетительего разбудить,в результатепарикмахерк работе.
Еслипосетительдолженегоразбудить,вприступаеткпосетительдолженегоразбудить,врезультатечегопарикмахерприступаеткработе.Еслипосетительприступаеткработе.работе.ЕслиЕслив процессе стрижки появляются новые посетители, они должнылибо подождатьсвоейвпроцессестрижкипоявляютсяновыепосетители,онидолжнылибоподождатьсвоейпроцесселиболибоподождатьсвоейввочереди,процессестрижкипоявляютсяновыепосетители,онидолжнылибоподождатьсвоейпокинуть парикмахерскую, если в приемной нет свободного кресла дляочереди, либолибопокинутьпарикмахерскую,неточереди,парикмахерскую,еслис вотказами).приемной Задачасвободногокресладляочереди,нет свободногосвободногокресладляожидания(т.е.покинутьэто стратегияобслуживаниясостоит вкреслатом, длячтобыожидания(т.е.этостратегияобслуживанияЗадачасостоитвтом,чтобыожидания(т.е.этостратегияобслуживаниясотказами).состоитвтом,чтобыожиданияЗадача состоит в том, чтобыкорректно запрограммировать поведение парикмахера и посетителей.корректнозапрограммироватьзапрограммировать поведениеповедение парикмахерапарикмахера ии посетителей.корректнопосетителей.корректноДанная задача являетсяиллюстрацией моделиклиент-сервер с ограничением наДаннаязадачаявляетсяиллюстрациейклиент-серверссс ограничениемДаннаязадачаявляетсяиллюстрациеймоделиклиент-серверограничениемнаограничением нанадлину Даннаяочереди клиентов.длинуочередиклиентов.длину очередиочередидлинуклиентов.Рассмотрим реализацию данной модели.
Понадобится 3 семафора: customers — Рассмотрим реализациюреализацию даннойданной модели.модели. ПонадобитсяПонадобится 33 семафора:customers—Рассмотримсемафора:customers—Рассмотримсемафора:customers—подсчитываетколичествопосетителей,ожидающихвочереди,barbers—статусподсчитываетколичествопосетителей,ожидающихвочереди,barbers—статус1подсчитываетколичествопосетителей,ожидающихвочереди,barbers—статусподсчитываетколичествопосетителей,ожидающихвочереди,barbers—статус1 и mutex — используется для синхронизации доступапарикмахера(0 -- занят,занят, 11 --свободен)свободен)парикмахера(0(0mutex —— используетсяиспользуетсядлясинхронизациидоступа11 ипарикмахера(0занят,свободен)mutexдлядоступапарикмахера-- занят,11 -- свободен)ии mutex—используетсядлясинхронизациидоступакк разделяемойпеременнойwaiting.Переменнаяwaiting,каккаксинхронизацииисемафорсемафорcustomers,customers,разделяемойпеременнойwaiting.Переменнаяwaiting,икразделяемойпеременнойwaiting.Переменнаяwaiting,какисемафорcustomers,ксодержитразделяемойпеременнойwaiting.Переменнаяwaiting,Этакакпеременнаяи семафорcustomers, вколичествопосетителей,ожидающихочереди.используетсясодержит количествоколичествопосетителей,ожидающихв вочереди.очереди.Этапеременнаяиспользуетсяввсодержитпосетителей,ожидающихвЭтапеременнаяиспользуетсясодержитколичествопосетителей,ожидающихвочереди.Этапеременнаяиспользуетсявпрограммедля того,того, чтобычтобы иметьиметьвозможностьвозможностьпроверить,проверить,имеетсяимеетсялисвободноекреслопрограммедлялисвободноекреслопрограммедлятого,чтобыиметьвозможностьпроверить,имеетсялисвободноекреслопрограммедля того,иметьвозможностьпроцесс,проверить,имеетсялисвободное Заметим,креслодляожидания,причтобыэтом нене заблокироватьзаблокироватьесликреслакресланеокажется.для ожидания,ожидания, иии приприэтомпроцесс, еслинеокажется.Заметим,дляэтомне заблокироватьзаблокировать процесс,есликресланеокажется.Заметим,дляожидания,иприэтомнепроцесс,есликресланеокажется.Заметим,чтокакпредыдущем примере,примере, этаэтапеременнаяпеременнаяявляетсяявляетсяразделяемымразделяемымресурсом,что каккак ии ввв предыдущемпредыдущемресурсом,и ичтопримере, этаэта переменнаячтокак киинейв предыдущемпримере,переменная являетсяявляется разделяемымразделяемым ресурсом,ресурсом, иидоступохраняетсясемафоромmutex.доступккнейнейохраняетсяохраняется семафоромсемафором mutex.mutex.доступдоступк ней охраняетсясемафором mutex.