Спец часть (часть 2) (3 поток) (2015) (by Кибитова) (1161602), страница 10
Текст из файла (страница 10)
/*количествостульев вв комнатекомнате ожиданияожидания*/*//*количествостульев/* количествоколичество стульевстульев вв комнатекомнате ожидания/*ожидания */*/#defineCHAIRS 55#defineCHAIRS#define CHAIRSCHAIRS 55#define/*переопределениетипа СЕМАФОРСЕМАФОР */*//* переопределениепереопределение типатипа/*СЕМАФОР *//*переопределениетипаСЕМАФОР*/typedefsemaphore;typedef int semaphore;typedef intint semaphore;semaphore;typedef/* наличие посетителей,ожидающихпарикмахера/*посетителей,ожидающихпарикмахерапарикмахера*/*//* наличиеналичие посетителей,посетителей, ожидающихожидающих*//*парикмахера*/semaphorecustomers=0;semaphore customerscustomers == 0;0;semaphoresemaphorecustomers= 0;/* количествоколичествопарикмахеров,ожидающих/*парикмахеров,ожидающихпосетителейпосетителей(0(0илиили1)*/1)*//* количествоколичество парикмахеров,парикмахеров, ожидающихожидающихпосетителей/*посетителей (0(0 илиили 1)*/1)*/semaphore barbers== 0;semaphorebarbers0;semaphore barbersbarbers == 0;0;semaphore/* семафорсемафор длядоступав критическуюсекцию/*для доступадоступакритическуюсекциюсекцию-контрольконтрользаза/*семафордлявв критическуюкритическуюконтрольза/*семафордлядоступавсекциюконтрользадоступомкпеременнойwaiting*/доступомкпеременнойwaiting*/доступомк mutexпеременнойwaiting */доступомпеременнойwaiting*/semaphoreк== 1;semaphoremutex1;semaphoremutex=1;semaphoremutexожидающих= 1;/* количествоколичествопосетителей*//*ожидающихпосетителей*/*//*количествоожидающихпосетителей/*количествоожидающихпосетителей*/intwaiting=0;intwaiting=0;int waitingwaiting == 0;0;int 11 В принципе возможно расширение задачи для случая N парикмахеров, в1 В принципе возможно расширение задачи для случая N парикмахеров,1В принципевозможнорасширениедля случаяN парикмахеров,незначительнымикоррекциямипрограмм,barbersзадачи– количествосвободныхпарикмахеров.
вэтом случае, свэтомэтомслучае,случае,с сВпринципевозможнорасширениезадачидляслучаяNпарикмахеров,внезначительнымикоррекциямикоррекциямипрограмм,программ,barbersbarbers– –количествоколичествосвободныхпарикмахеров. этом случае, снезначительнымисвободныхпарикмахеров.незначительными коррекциями программ, barbers – количество свободных парикмахеров.130130130130/* БрадобрейБрадобрей */*/void Barber(void)Barber(void){while(TRUE)while(TRUE){/*/* еслиесли customerscustomers ==== 0,0, т.е.т.е. посетителейпосетителей нет,нет, тотозаблокируемсязаблокируемся додо появленияпоявления посетителяпосетителя */*/down(&customers);down(&customers);down(&mutex);down(&mutex); /*/* получаемполучаем доступдоступ кк waitingwaiting */*//*/* уменьшаемуменьшаем кол-вокол-во ожидающихожидающих клиентовклиентов */*/waitingwaiting == waitingwaiting –– 1;1;up(&barbers);up(&barbers); /*/* парикмахерпарикмахер готовготов кк работеработе */*/up(&mutex);/*освобождаемресурсwaitingup(&mutex); /* освобождаем ресурс waiting */*/CutHair();CutHair(); /*/* процесспроцесс стрижкистрижки */*/}}}}/* Посетитель/*Посетитель */*/voidvoid Customer(void)Customer(void){{down(&mutex);down(&mutex); /*/* получаемполучаем доступдоступ кк waitingwaiting */*/if(waiting<CHAIRS)/*естьместодляожиданияif(waiting < CHAIRS) /* есть место для ожидания */*/{{/* увеличиваем кол-во ожидающих клиентов *//* увеличиваем кол-во ожидающих клиентов */waiting = waiting + 1;waiting = waiting + 1;/* если парикмахер спит, это его разбудит *//* если парикмахер спит, это его разбудит */up(&customers);up(&customers);up(&mutex); /* освобождаем ресурс waiting */up(&mutex); /* освобождаем ресурс waiting *//* если парикмахер занят, переходим в состояние/* если парикмахерзанят, переходимв состояниеожидания,иначе – занимаемпарикмахера*/ожидания,иначе–занимаемпарикмахера*/down(&barbers);down(&barbers);/*занять место и перейти к стрижке *//* занять место и перейти к стрижке */GetHaircut();GetHaircut();}}elseelse{{/*нет свободного кресла для ожидания – придется уйти *//*нет свободного кресла для ожидания – придется уйти */up(&mutex);up(&mutex);}}}} Процесс-парикмахер сначала опускает семафор customers, уменьшив тем самымПроцесс-парикмахерсначала опускаетcustomers,уменьшивтем тосамымколичествоожидающих посетителейна 1.
Еслисемафорв комнатеожиданияникого нет,онколичествопосетителей1. Если клиент,в комнатеожиданиянет,Затемто он«засыпает» ожидающихв своем кресле,пока не напоявитсякоторыйего никогоразбудит.«засыпает»своемв кресле,пока непоявитсяклиент,счетчиккоторыйего разбудит.Затемпарикмахер ввходиткритическуюсекцию,уменьшаетожидающихклиентов,парикмахервходитвкритическуюсекцию,уменьшаетсчетчикожидающихклиентов,поднимает семафор barbers, сигнализируя клиенту о своей готовности его обслужить, аподнимаетсемафорbarbers, сигнализируяклиентуо своейдействийготовностиего обслужить,потом выходитиз критическойсекции. Послеописанныхон начинаетстричь апотомвыходитизкритическойсекции.Послеописанныхдействийонначинаетстричьволосы посетителю.волосыПосетительпосетителю.парикмахерской входит в критическую секцию.
Находясь в ней, онПосетителькритическуюней, онпроверяет,есть ли парикмахерскойсвободные меставходитв зале вожидания.Еслисекцию.нет, то Находясьон простов уходитпроверяет,естьлисвободныеместавзалеожидания.Еслинет,тоонпростоуходит(покидает критическую секцию, поднимая семафор mutex). Иначе он увеличивает счетчик(покидаеткритическуюподнимаясемафорmutex).он посетительувеличиваетсчетчикожидающихпроцессов исекцию,поднимаетсемафорcustomers.ЕслиИначеже этотявляетсяожидающих процессов и поднимает семафор customers. Если же этот посетитель является 131131единственным в данный момент клиентом брадобрея, то он этим действием разбудитбрадобрея. После этого посетитель выходит из критической секции и «захватывает»брадобрея (опуская семафор barbers).
Если же этот семафор опущен, то клиент будетдожидаться, когда брадобрей его поднимет, известив тем самым, что готов к работе. Вконце клиент обслуживается (GetHaircut). 132 1.2.6.5 Способы решения проблем мультипрограммного режима: виртуальная8. Виртуальнаяпамятьпамять. Модели организации оперативной памяти. Перейдём теперь к проблеме организации, использования и управленияоперативной памятью. Рассмотренные выше проблемы перемещаемости программы поОЗУ и фрагментации памяти связаны с необходимостью наличия т.н.
аппаратавиртуальной памяти, т.е. аппаратного средства процессора, которое обеспечиваетпреобразование (установление соответствия) логических адресов, используемых внутрипрограммы, в те адреса физической оперативной памяти, в которой размещаетсяпрограмма во время выполнения.Что понимается под виртуальной памятью и виртуальным адреснымпространством? НеформальновиртуальноеБуферпрограмм, адресное пространство можно определитьожидающихначалаиспользуется внутри программ (написанных,как тоОСадресное пространство,котороеобработкиПрограмманаN1языках программирования высокого уровня).
Ведь когда программист пишетнапример,программу,оперируяиными 1адресами,V1своб.теми илиV1прог. он зачастую не задумывается, к каким1Программафизическим адресам эти адреса будут привязаны.В исполняемоммодуле используетсяПроблема фрагментации:V2прог.Программа N2Программа 2своб.Viпрог. > Vjадреса, i, j,существуютт.н. программная (логическая, виртуальная) адресация.Виртуальныесвоб.V22несмотря соответствияна то, что i:«вне машины».Соответственно,стоит проблема установлениямеждуnпрограммнойадресацией и физической памятью.
И эта проблемаза счет…V jсв об. решаетсяVi прог.…аппаратавиртуальнойпамяти.1.2.6.5j 1 режима: виртуальнаяПрограммаK Способы решения проблем мультипрограммного1.2.6.5Способырешенияпроблеммультипрограммногорежима:виртуальнаяРеализациейоднойизмоделейаппаратавиртуальнойпамятиявляетсяаппаратдеградациясистемыпамятьVKсвоб.Механизм базирования адресов основан на двоякой интерпретацииKпамятьбазированияадресов.теперьпроблемеорганизации,использованияадресови управленияVLпрог.ПрограммаL программы(Рис. 55)Перейдёмполучаемыхв ходек выполненияисполнительных(Aисп.прог.).Перейдёмтеперьк интерпретироватьпроблеме вышеорганизации,использованияи программыуправленияпамятью.РассмотренныепроблемыперемещаемостипоС оперативнойоднойстороны,его можнокак абсолютныйисполнительныйадрес,оперативнойпамятью.РассмотренныевышеперемещаемостипоОЗУ физическийи фрагментациипамятисвязаныспроблемынеобходимостьюналичия программыт.н. аппаратакогдаадресв некоторомсмыслесоответствуетисполнительномуадресуфиз.прог.аппаратногоОЗУи фрагментациис средстванеобходимостьюналичият.н.виртуальнойпамяти,т.е.процессора,котороеобеспечиваетпрограммы(Aисп.= Aпамяти).
связаныНапример,требуется«прочитатьячейкусаппаратаадресомисп.виртуальнойпамяти,т.е.аппаратногосредствапроцессора,котороеобеспечиваетпреобразование(установлениесоответствия)логическихпоадресов,используемыхвнутри(абсолютнымадресом)0»,или«передатьуправлениеадресувходавобработчикРис. 48.(установлениеФрагментация памяти.преобразованиесоответствия)логическихадресов,используемыхвнутрипрограммы,втеадресафизическойоперативнойпамяти,вкоторойразмещаетсяпрерывания». С другой стороны, исполнительный адрес программы можнопрограммы,в времяте адресафизическойоперативнойв которойразмещаетсяпрограмма вовыполнения.проинтерпретироватькак указалиотносительныйадрес, памяти,т.е.возникающиеадрес,зависящийот местаПосле того, как мыосновные проблемы,при исполнениипрограммавовремявыполнения.Что программыпонимаетсяв ОЗУпод (адресвиртуальнойпамятьюи виртуальнымадреснымдислокацииотносительноточкизагрузкипрограммы).программ, рассмотрим, какие аппаратные средства применяются для разрешенияИнымиэтихЧтоимеетсяпонимаетсяпод памятьвиртуальнойпамятьюи виртуальнымадреснымпространством?Неформальновиртуальноеадресноепространствоможноопределитьсловами,оперативнаясячейкамисномерамиот0донекоторогоL–1,и,проблем.прог.пространством?Неформальноадресноепространствоможноопределитькак то садресноепространство,используетсявнутри(написанных,начинаянекоторогоадреса виртуальноеK, котороерасположенапрограмма.ТогдапрограммадресAисп.внутринапример,наязыкахпрограммированияуровня).Ведь когдапрограммистпишеткакто1.2.6.3адресноепространство,котороеиспользуетсявнутрипрограмм(написанных,программыможнотрактовать,отступвысокогоот физическойячейкисрежима:адресомK на величинуСпособырешениякакпроблеммультипрограммногорегистровыепрог.
на языкахпрограмму,оперируятемиилиинымиадресами,онзачастуюнезадумывается,ккакимвнапример,программированиявысокогоуровня).ВедькогдапрограммистпишетAисп. . Для реализациимодели базирования используется специальный регистр базы,окнафизическимадресамэтиадресабудутпривязаны.Висполняемоммодулеиспользуетсяпрограмму,оперируятемиилиинымиадресами,онзачастуюнезадумывается,ккакимкоторый в момент загрузки процесса в оперативную память операционная системат.н. Однопрограммная(логическая,Виртуальныеадресасуществуютфизическимадресамэтибудутпривязаны.исполняемоммодулеиспользуетсяизболееилиадресаменеевиртуальная)новыхрешений,дляминимизациизаписываетначальныйадресзагрузки(т.е.адресация.K).ВпредназначенноеТогдареальныйфизическийадресфиз.прог.«внемашины».Соответственно,стоитпроблемаустановлениясоответствият.н.программная(логическая,виртуальная)адресация.Виртуальныеадресасуществуютнакладныхсвязанныхк >.подпрограммам, основаномеждунаполучается,расходов,исходя из формулыAисп.с обращениями= Aисп.