Главная » Просмотр файлов » Гордеев А.В. Операционные системы (2-е изд., 2004)

Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 60

Файл №1186250 Гордеев А.В. Операционные системы (2-е изд., 2004) (Гордеев А.В. Операционные системы (2-е изд., 2004)) 60 страницаГордеев А.В. Операционные системы (2-е изд., 2004) (1186250) страница 602020-08-27СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 60)

Тогда семафор S становится равным нулю.Пусть далее процесс ПР1 пытается выполнить операцию P(S). Процесс ПР1 в этомслучае блокируется на семафоре S, так как S=0, причем значение S не изменится. Послевыполнения своей критической секции процесс ПР2 выполнит операцию V(S), приэтом значение семафора S станет равным единице, а процесс ПР1 переведется в оче­редь готовности. Если через некоторое время процесс ПР1 продолжит свое испол­нение, он успешно выполнит примитив P(S) и войдет в свою критическую секцию." однопроцессорной вычислительной системе неделимость операций Р и V можнообеспечить с помощью простого запрета прерываний. Сам же семафор S можноРеализовать в виде записи с двумя полями (листинг 7.9.). В одном поле будет хра­ниться целое значение S, во втором — указатель на список процессов, заблокиро­ванных на семафоре S.•Листинг 7.9.

Реализация операций Р и V для однопроцессорной системыtype Semaphore = recordсчетчик:integer;указатель :pointer;продолжение •&228Глава 7 . Организация параллельных взаимодействующих вычислениеЛистинг 7.9 (продолжение)end;var S : Semaphore:procedure P ( var S : Semaphore):begin ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;Б.счетчик:= Б.счетчик-З.:if S.счетчик < 0 thenWAIT(S): { вставить обратившийся процесс в список no S.указатель и передатьна процессор готовый к выполнению процесс }РАЗРЕШИТЬ_ПРЕРЫВАНИЯend:procedure V ( var S : Semaphore);begin ЗАПРЕТИТЬ ПРЕРЫВАНИЯ:5.счетчик:= Б.счетчик+1;if S.счетчик <= 0 thenRELEASE ( S ) ;{ деблокировать первый процесс из списка no S.указатель }РАЗРЕШИТЬ_ПРЕРЫВАНИЯend;procedure InitSem (var S : Semaphore);beginS.C4eT4HK:=l:5.указатель:=пП;end;Реализация семафоров в мультипроцессорных системах сложнее, чем в однопро­цессорных. Одновременный доступ к семафору S двух процессов, выполняющих­ся на однопроцессорной вычислительной системе, предотвращается запретом пре­рываний.

Однако этот механизм не подходит для мультипроцессорных систем, таккак он не препятствует двум или более процессам одновременно обращаться к од­ному семафору. В силу того что такой доступ должен реализовываться через кри­тическую секцию, необходимо дополнительное аппаратное взаимное исключениедоступа для различных процессоров. Одним из решений является использованиеуже знакомых нам неделимых команд проверки и установки (TS). Двухкомпонентный семафор в этом случае расширяется включением третьего компонента — ло­гического признака взаимоискл (листинг 7.10).Л и с т и н г 7 . 1 0 . Реализация о п е р а ц и й Р и V для мультипроцессорной с и с т е м ыt y p e Semaphore = recordсчетчик : i n t e g e r :указатель : p o i n t e r :взаимоискл : boolean;end:var S : Semaphore;procedure InitSem (var S : Semaphore);beginWith S dobeginсчетчик:=1;указатель:=nil;взаимоискл:=true;end;end:пг-тва синхронизации и связи взаимодействующих процессов229procedure Р ( var S : Semaphore);у а Г разрешено : boolean;beginЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;repeat ТБСразрешено.

Б.взаимоискл) until разрешено;5 счетчике.счетчик-1;if S счетчик < 0 then WAIT(S): { вставить обратившийся процесс в список по S.указательи передать на процессор готовый к выполнению процесс }S взаимоискл:Чгие;РАЗРЕШИТЬ_ПРЕРЫВАНИЯend:procedure V ( var S : Semaphore );var разрешено : boolean;beginЗАПРЕТИТЬ_ПРЕРЫВАНИЯ:repeat ТЗфазрешено.З.взаимоискл) u n t i l разрешено:S.счетчик:=S.C4eT4MK+l:if S.счетчик <= 0 then RELEASE(S);{ деблокировать первый процесс из спискапо S.указатель }5.взаимоискл:Чгие:t, ,РАЗРЕШИТЬ_ЛРЕРЫВАНИЯ:end;Обратите внимание, что в данном тексте команда проверки и установки — TS(pa3решенсБ.взаимоискл) — работает не с целочисленными, а с булевыми значениями.Практически это ничего не меняет, ибо текст программы и ее машинная (двоич­ная) реализация — это разные вещи.МьютексыОдним из вариантов реализации семафорных механизмов для организации вза­имного исключения является так называемый мъютекс (mutex). Термин «mutex»произошел от словосочетания «mutual exclusion semaphore», что дословно перево­дится с английского как «семафор взаимного исключения».

Мьютексы реализова­ны во многих операционных системах, их основное назначение — организация вза­имного исключения для задач (потоков выполнения) одного или несколькихпроцессов. Мьютексы — это простейшие двоичные семафоры, которые могут на­ходиться в одном из двух состояний — отмеченном и неотмеченном (открыт и за­крыт соответственно).

Когда какая-либо задача, принадлежащая любому процес­су, становится владельцем объекта мыотекс, последний переводится в неотмеченноеостояние. Если задача освобождает мыотекс, его состояние становится отмечен­ным.рганизация последовательного (а не параллельного) доступа к ресурсам с по­льзованием мьютексов становится несложной, поскольку в каждый конкрет1момент только одна задача может владеть этим объектом.

Для того чтобыТекс стал доступен задачам (потокам выполнения), принадлежащим разнымЦессам, при создании ему необходимо присвоить имя, впоследствии переда1е«по наследству» задачам, которые должны его использовать для взаимоКот В И Я ' ^ля э т о г о вводятся специальные системные вызовы (CreateMutex), вPbix указываются начальное значение мьютекса, его имя и, возможно, атри-230Глава 7. Организация параллельных взаимодействующих вычисляниг.буты защиты. Если начальное значение мыотекса равно true, считается, что зада­ча, создающая этот объект, сразу будет им владеть. Можно указать в качественачального значение false — в этом случае мыотекс не будет принадлежать ниодной из задач, и только специальным обращением к нему удастся изменить егосостояние.Для работы с мьютексом имеется несколько функций.

Помимо уже упомянутойфункции создания такого объекта (CreateMutex), есть функции открытия (OpenMutex), ожидания событий (WaitForSingleObject и WaitForMultipleObjects) и, наконец, ос­вобождения этого объекта (ReleaseMutex).Конкретные обращения к этим функциям и перечни передаваемых и получае­мых параметров имеются в документации на соответствующую операционнуюсистему.Использование семафоров при проектированиивзаимодействующих вычислительных процессовСемафорные примитивы чрезвычайно широко используются при проектиро­вании разнообразных вычислительных процессов. При этом некоторые задачиявляются настолько «типичными», что их детальное рассмотрение уже сталоклассическим в соответствующих учебных пособиях.

Не будем делать исклю­чений и мы.Задача «поставщик-потребитель»Решение задачи «поставщик-потребитель» является характерным примером ис­пользования семафорных операций. Содержательная постановка этой задачи ужебыла нами описана в начале этой главы. Разделяемыми переменными здесь явля­ются счетчики свободных и занятых буферов, которые должны быть защищены состороны обоих процессов, то есть действия по посылке и получению сообщениидолжны быть синхронизированы.Использование семафоров для решения данной задачи иллюстрирует листинг 7.11Листинг 7 .

1 1 . Решение задачи «поставщик-потребитель»var 5_свободно.5_заполнено.5_взаимоискл : semaphore;beginInitSem(S_CBo6oflHO.N):InitSem(S_3anojiHeHo,0):InitSem(S_B3aHM0ncKji,l):parbeginПОСТАВЩИК: while true dobegin{ подготовить сообщение }Р(Б_свободно);Р(5_взаимоискл):{ послать сообщение }\/(5_заполнено):У(5_взаимоискл);endandпства синхронизации и связи взаимодействующих процессов231ПОТРЕБИТЕЛЬ: while true dobegi nР(5_заполнено);Р(5_взаимоискл);{ получить сообщение }V(S_CBo6oflHO):\КБ_взаимоискл):{ обработать сообщение }endparendend.Здесь переменные 5_свободно, Б_заполнено являются числовыми семафорами,S взаимоискл — двоичный семафор. Переменная Б_свободно имеет начальное зна­чение, равное N, где N — количество буферов, с помощью которых процессы со­трудничают.

Предполагается, что в начальный момент количество свободных бу­феров равно N; соответственно, количество занятых равно нулю. Двоичный семафорS взаимоискл гарантирует, что в каждый момент только один процесс сможет рабо­тать с критическим ресурсом, выполняя свою критическую секцию. СемафорыБ_свободно и Б_заполнено используются как счетчики свободных и заполненныхбуферов.Действительно, перед посылкой сообщения поставщик уменьшает значение S_CBOбодно на единицу в результате выполнения операции Р(Б_свободно), а после по­сылки сообщения увеличивает значение Б_заполнено на единицу в результате вы­полнения операции \/(Б_заполнено). Аналогично, перед получением сообщенияпотребитель уменьшает значение 5_заполнено в результате выполнения операцииР(Б_заполнено), а после получения сообщения увеличивает значение Б_свободно врезультате выполнения операции V(S_CBO6OAHO).

Семафоры Б_заполнено, Б_свободномогут также использоваться для блокировки соответствующих процессов. Еслипул буферов оказывается пустым, и к нему первым обратится процесс «потреби­тель», он заблокируется на семафоре 5_заполнено в результате выполнения опе­рации Р(5_заполнено).

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6551
Авторов
на СтудИзбе
299
Средний доход
с одного платного файла
Обучение Подробнее