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

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

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

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

Механизм может быть создан на основе простой 312 Глава 7, Синхронизация. Многопроцессорные системы блокировки и условных переменных (2]. Однако перел тем как перейти к рассмотрению деталей реализации этого механизма, обсудим вкратце его семантику. Синхронизация чтения-записи может разрешать либо изменение ресурса (запись) одной нитью, либо его чтение несколькими нитями. Основными опе. рациями над объектом являются (осх5пагег)(), (осйЕхсЫ)че(), цп(осх5пагег((), цп(осхЕхсйз)че(). Кроме этого, объекты можно попытаться сделать эксклюзивно используемыми или разделяемыми при помощи команл тгуЕосй5пагег((), ггуЕосхЕхс(цз)чеО, возвращающих значеггие ЕАЕ5Е вместо блокировки нити.

Дополнительно необходима поддержка преобразования обьекта из «эксклюзивного» в «совместный» и обратно при помощи команд црягаде() и боигпйгаг(е(), Операция (осх5пагег(() должна пригзодить к блокировке, если существует объект эксклюзивной синхронизации, в то время как (осхЕхс(Ыче() блокирует в случае любого занятия ресурса (как в эксклюзивном, так и в режиме совместного доступа). 7.8.1. Задачи, стоящие перед разработчиками Что должна сделать нить после освобождения ресурса? В традиционных системах 13М)Х произойдет пробуждение всех нитей, ожидающих этот объект. Такой подход является абсолютно неэффективным.

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

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

Если объект необходимо читать большому количеству нитей, ресурс будет постоянно блокирован на чтение; следовательно, в этом случаг 7.8. Синхронизация чтения-записи 31 Э пишущая нить нс сможет получить доступ к нему. Для защиты от возникновения подобной ситуации запрос (осй5()апет(() должен осуществлять блокировку при существовании ожидатоших записи ни~ей даже в том случае, если ресурс зашишен только для чтения. Такое решение при определенных условиях может позволить чередовать доступ между несколькими пишушими нитями и большими множествами нитей, осуществляющих только чтение ресурса.

Функция ирдтат)е() должна быть заьцишена от взаимоблокировки. Такая ситуация может возникнуть, если в реализации механизма не предусмотрены определенные правила при изменении статуса запросов от ожидаюших пишущих нитей. Если две нити пытаются изменить статус объекта синхронизации, то каждая из ннх окажется заблокированной, так как другая нить удерживает совместно используемый объект.

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

?.8.2. Реализация синхронизации чтения-записи Пример реализации механизмов синхронизации чтения-записи показан в лис- тинге 7.9. Листинг 7.9. Реализация синхронизации чтения-записи 51гыст гн1осх ( 1пв пдст)уе; !* количество активных читателей, либо -1, если существует активная нить, кодифицирующая ресурс *! зп1 пРепбтпдйеабв; зпт пРепбтпйыг11ея. 5рзп1оск т Б1; сопб11зоп сапйеаб, сопбттз оп сапнгт1е: ): тотб 1осх5пагео(я1гыст гн1 оси *г) ( ьртп 1осх1вг->51); г->пРепбзпдйеаов+', )т 1г->пйепбтпдяйгзсея > 0) нат'ь ($г->сапйеаб, Ьг->в1): !" защита от устаревания пишущих нитей *! продолхтеннеит 314 Глава 7.

Синхронизация. Многопроцессорные системы Листинг 7.д (лродолитение) иН11е (г- ПАСС(че < О) !* если кто-то удерживает зксклюзивно объект синхронизации *т' иа15 (аг->сапйеаб. аг->51); г->ПАСС1че++; г->ПРепбтпдйеабв--: 5ртп цп10ск Яг->51).' чо10 цп1оск5Нагеб(5'ьгцсс гы1осх *г) ( 5р1П 10сх($Г->51) ') Асс(че--: тт (г->ПАСС(че — О) ( /* нет других читающих нитей */ 5ртп цп10ск(аг->51); Оо ваала)(аг- сапйг(се); ) е15е 5р10 цп10ск(аг->51); ) чо(О 1оскЕхс1051че(5Сгцст гы1оск *г) ( вртп 10ск(аг->51); г->ПРепб1пдип 'сев++; ипт1е (г->ПАсстче) ыа1'ъ Яг->сапигтсе, аг->51); г->препб(пдйгтвев--; г->ПАсътче = -1; 5р1п цп10ск(аг->51); чо10 цп)оскЕхс1ц51че(всгцсс гы)оск *г) Ьоо1еап С иакейеабегв: 5ртп 10ск(аг->51); г->ПАСС!че = О: ыакейеабегв - (г->пРепб1пдйеай != О): вр1п цп10ск(аг->51); ~г (иакейеабегв) бо Ьгоабсавс (Ег->сапйеаб): /* пробуждение всех нитей, ожидающих возножности чтения ресурса *) е15е 00 51дпа1 (аг->сапйг(се); /* пробуждение одной нити, осуществляющей запись данных *у чо10 Ооипдгабе(втгцсс ги)оск *г) Ьоо1еап ъ ыахейеабегв: 5ртп )оск(аг->51); г->ПАСС)че = 1; иакейеаоегв= (г->препб(пдйеабз != О); 7.9.

Счетчики ссылок 315 5ртп Оп1оск(вг->51); тт' (нвиейеабегв) бо Ьговбсввв Ыг->сапйеаб); /* пробуидение всех нитей, оиидвющих возноиности чтения ресурса */ чотб ОР9гвбе(втгцст ги)осК *г) ( 5ртп 1осК(вг->51); тб (г->ПАс(1че =- 1) ( /* нет нитей. оиидвющих ресурс на чтение *! г->ПАсстче = -1; ) е15е ( г->ПРепб1П9нг1тев++; г->ПАст1че--: l* освобождение совнестного обьектв синхронизации */ ипт1е (г->ПАс51че) нв15 йг->свпиг(ье.

вг->51); г->препбтп9нг15ев--: г->пдсттче = -1; 5ртп Оп1осК(вг->51); 7.9. Счетчики ссылок Объект блокировки в состоянии зашитить данные, находящиеся внутри ресурса. Но существует немало ситуаций, при которых необходима защита ресурса самого по себе. Многие объекты ядра запрашиваются и освобождаются динамически.

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

Ядро системы может гарантировать правильность указателя при помощи ртетчика ссылок на каждый объект. Для етого ядро устанавливает значение счетчика равным единице при первом запросе объекта (создавая при этом указатель). Счетчик инкрементируется при создании каждого нового указателя на об.ьект. В таком случае при получении указателя на объект нить получает на него ссылку. В дальнейшем нить может освободить ссылку, которая ей уже не нужна, при этом ядро системы произведет декремент счетчика ссылок обьекта. Если значение счетчика станет равным нулю, это будет означать, что ни одна нить не обладает ссылкой на объект; тогда ядро осуществит освобождение объекта.

316 Глава 7. Синхронизация. Многопроцессорные системы Механизм счетчиков ссылок применяется при управлении файловой системой. Система поддерживает счетчик для объектов чпо6е, в которых хранит информацию об используемых файлах (см. раздел 8.7). Если пользователь открывает файл, ядро возвращает дескриптор этого файла, содержащий ссылку на чпог(е.

Пользователь передает этот дескриптор системным вызовам тез1 или итп1е, предоставляя возможность быстрого доступа ядра к файлу без проведения преобразований имен файлов. Если пользователь закрывает файл, ссылка освобождается. Если один и тот же файл открывают сразу несколько пользователей, то они получают ссылки на один и тот же объект чпог!е. После того как последний пользователь закроет файл, ядро освобождает объект тпот)е. Пример показывает, что механизм счетчиков ссылок больше подходит для однопроцессорных систем, так как он слишком прост для применения в многопроцессорных архитектурах, в которых может возникнуть ситуация, при которой одна из нитей пытается освободить объект, в то время как другая нить, выполняющаяся на другом СРП, продолжает пользоваться им.

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

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

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

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