Главная » Просмотр файлов » Ю. Вахалия - UNIX изнутри (2003)

Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 59

Файл №1114670 Ю. Вахалия - UNIX изнутри (2003) (Ю. Вахалия - UNIX изнутри (2003)) 59 страницаЮ. Вахалия - UNIX изнутри (2003) (1114670) страница 592019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Оии также используются в этом качестве и для пользовательских приложений. В ОС Буьтеш Ч поддерживается наиболее общая версия семафоров. Системный вызов ье)вдет создает или запрашивает массив семафоров (верхнюю границу которого можно назначить). Синтаксис вызова приведен ниже: ьеа~0 = ьеадет (~еу. соопт. т)ад); где 1еу — 32-разрядиая переменная, передаваемая вызывающим процессом. Функция ье)вдет возвращает массив сопят семафоров, ассоциированных с ключом ()~еу).

Если с ключом ие связано ии одного набора семафоров, то вызов будет возвращать ошибку до тех пор, пока не будет задан флаг 1РЕ ЕКЕАТ, создающий новый набор семафоров. Если функции передается флаг 1РЕ ЕХЕЕ то ьешдет возвращает ошибку в том случае, если набор семафоров для указаиного ключа ужо существует. Переменная ьетЫ применяется в последующих операциях пад семафорами, опа идентифицирует массив семафоров. Системный вызов ьеп)ор применяется для проведения операций иад отдельными семафорами массива. Ес синтаксис таков: ьтатоь = ьеаор ЬеаМ . зорь, пьорь); где зорь — указатель иа элемепт пьорь массива структур ьеп)Ьвб Каждая структура ьепп)в1, как это будет показано ниже, представляет одну из операций иая отдельным семафором набора.

ьтгост ьеаоот ( опь1дпео ьпогт ьеа поа; ьпогт ьеа ор; ьпогт ьеа т)рл 6.3. Буз1егп Ч 1РС 249 Добавляет зев ор к текущему значению семафора. Результатом этой операции может стать пробуждение процесса, ожидавшего увеличения переменной тем ор>О Блокировка до тех пор, пока значение семафора не станет равным нулю теа ор=о тем оркО Блокировка до момента, когда значение семафора станет равным или выше абсолютного значения зегл ор, после чего производится вычитание зев ор от значения семафора.

Если оно уже выше, чем абсолютная величина зею ор, вызывающий процесс не блокируется Таким образом, используя всего лишь один снстемный вызов зегпор, можно указать несколько различных отдельных операций над семафорами. Ядро системы гарантирует выполнение либо всех этих операций, либо ни одной из нвх. Более того, ядро отслеживает работу зегпор, не позволяя начать обработку повторного вызова над тем же массивом семафоров до тех пор, пока первый вызов не завершит работу либо не будет заблокирован.

Если вызову зегпор необходимо приостановить свое выполнение после завершения некоторых действий, то ядро системы после возобновления его работы повторит операцию сначала (отменит все изменения), гарантируя тем самым неделимость функции. Значениями аргумента зеш Пд могут быть два различных флага.

Флаг 1РС МОУУй11 указывает ядру на необходимость возврата ошибки функцией вместо приостановки ее выполнения. Если процесс, удерживающий семафор, завершит работу, не освободив его, появляется вероятность возникновения взаимоблокнровки. Тогда другой процесс, пытаюшийся воспользоваться сеиафором, может оказаться заблокированным навсегда на стадии выполнения операции РО. Для защиты от этого вызову зеглор можно передавать флаг 5гМ 0пОО. В этом случае ядро запоминает произведенные им операции и автоматически прокручивает их назад по завершении работы процесса. Семафоры необходимо удалять из системы принудительно, Для этого применяется команда 1РС йМ1О вызова зегпсИ. В противном случае ядро системы будет поддерживать семафоры, даже если они не используются ни одним из процессов.

Такой подход позволяет применять семафоры в течение длительпого времени, не зависящего от жизненного цикла процессов, Но, с другой стороны, если приложение по завершении работы не освобождает семафоры, то они продолжают занимать ресурсы системы. После выполнения процессом команды 1РС йМ10 ядра освобождает семафор в таблице ресурсов. Ядро также пробуждает все пропессы, заблокированные во время проведения операций над тем же семафором. Результатом 3десь зегп пцгл идентифицирует один из семафоров массива, а зегп ор указывает на действия, которые следует с ним произвести. Значения переменной зегп ор интерпретируются по следуюшим правилам: 250 Глава б.

Межпроцессное взаимодействие работы вешор для таких процессов является возврат статуса Ес0КМ. После удаления семафора процесс больше не имеет наступа к нему (с помощью ключа или идентификатора семафора). Детали реализации семафоров Ядро преобразует зептЫ лля получения элемента таблицы ресурсов семафоров, каждый из которых описывается следующей структурой данных: зтгцсС зещ1О Оз ( зтгцсС 1рс гегш веш регш; /* си. раздел 6.3.1 */ зтгцсС зещ« зещ базе; /* указатель на пассив сенафоров в наборе */ цзбогС зеш пзещз; /* количество сенафоров в наборе */ Стще С зещ оС1ще: /* вреия последней операции */ С1ше С зещ сттше. /* вреня последнего изиенения */ Ядро поддерживает значение и информацию о синхронизации лля кажного семафора в наборе в структуре, показанной ниже.

зСгцсС зев ( цзоогС зешча1; /* текущее значение */ р1О С зещр1О; /* идентификатор процесса, вызвавшего последнюю операцию */ цзцогС зещпспС; /* количество процессов, ощидающих увеличения значения сеиафора */ цзоогС зешзспС; /* количество процессов, ощидающих установления значения сенафора, равного нулю */ Ялро также поддерживает список отмены лля каждого процесса, производящего операции нал семафорами с флагом 5ЕМ С((ч 00.

Этот список содержит запись операций, каждую из которых можно отменить. Если процесс завершает выполнение, ядро проверяет наличие списка отмены. Если оно находит такой список, то «прокручивает> в обратном направлении все действия, совершенные ранее. Применение семафоров Технология семафоров позволяет разрабатывать сложные средства синхронизации, используемые взаимолействуютцими процессами. Первые системы (3(ч1Х не обладали поллержкой семафоров, что заставляло лля синхронизации приложений искать и применять другие атомарные операции. Например, системный вызов Ип(т возвращает ошибку, если новое соелинение уже существует. Если два процесса пытаются произвести одну и ту жв операцию (1'п(т в олин момент времени, только лля одного из них результат булет успешным. Однако применение операций файловой системы, таких как ((п(т, в целях синхронизации процессов является неулобным и громозлким.

6.3. Зувтегп Ч!РС 251 Появление семафоров смогло удовлетворить большинство требований создателей программных приложений. Основными проблемами, связанными с применением семафоров, являются условия состязательности и предупреждение взаимоисключений. Использование одиночных семафоров (вместо их массивов) может запросто привести к взаимной блокировке в том случае, если процсссу необходимо запросить несколько семафоров. Например, на рис, 6.2 процесс А, удерживаюший семафор С1, пытается получить семафор С2 в то время, как процесс 6 уже владеет семафором С2 и стремится к тому же в отношении С1.

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

Запрашивает Запрашивает Рис. 6.2. Семафоры могут стать причиной возникновения взаимобпокировок Коды обнаружения взаимоблокировок и защиты от них реализовывать внутри ядра системы непрактично. Более того, не существует общих и универсальных алгоритмов, зашишаюших от всевозможных ситуаций. Из этого можно сделать вывод, что ядро оставляет решение проблемы взаимоблокировок приложениям. Предлагая механизм наборов семафоров и неделимые операции над ними, ядро системы дает разработчику интеллектуальныс механизмы обработки семафоров. Программисты могут выбрать несколько известных методов зашиты от тупиковых ситуаций, некоторые из них будут показаны в разделе 7.10.1. Одна из основных проблем реализации семафоров в Вузсегп Ъ' связана с тем, что операции по их инициализации и размещению не являются неделимыми.

Для размешения набора семафоров пользователь вызывает зегпдес вслед за функцией зегпс11, которая инициализирует набор. Такой подход может привести к условию состязательности, которую необходимо пресекать на пользовательском уровне 113]. В завершение скажем, что необходимость принудительного удаления ресурса при помощи команды 1РС пМ10 является обшей проблемой любых механизмов 1РС. Хотя это свойство и позволяет создателю пережить созданный им ресурс, оно приводит к появлению «мусора» в системе в случае завершения работы процесса без высвобождения всех его ресурсов.

252 Глава 6. Межпроцессное взаимодействие 6.3.3. Очереди сообщений Очередь сообщений — это заголовок, указывающий на связанный список сообщений. Каждое сообщение содержит 32-разрядную переменную типа, следующую за областью данных. Процесс создает или получает очередь сообщений при помощи системного вызова п)вддет, синтаксис которого показан ниже: аздртб = азяяет (хеу, т1вд). Семантика вызова глвядет совпадает с веглдет.

Кеу — это целое число, задаваемое пользователем. Для создания новой очереди сообщений необходимо указать флаг 1РС СЯЕАТ. Задание флага 1РС ЕХСС ведет к ошибочному завершению работы вызова в том случае, если очередь с указываемым ключом уже существует. Переменная п)вдрк используется в дальнейших вызовах для доступа к очереди.

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

Тип файла
PDF-файл
Размер
8,36 Mb
Тип материала
Высшее учебное заведение

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

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