24517

Способы реализации взаимных исключений путем запрещения прерываний, использования блокирующих переменных, системных вызовов

Доклад

Информатика, кибернетика и программирование

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

Русский

2013-08-09

103.83 KB

6 чел.

Вопрос 22. Способы реализации взаимных исключений путем запрещения прерываний, использования блокирующих переменных, системных вызовов.

§4.4.2.Запрещение прерываний.

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

§4.4.3.Блокирующие переменные.

Для синхронизации потоков одного процесса программист может использовать глобальные блокирующие переменные, к которым все потоки процесса имеют прямой доступ.

С каждым разделяемым ресурсом связывается двоичная переменная, которая принимает значение 1, если ресурс свободен (то есть ни один процесс не находится в данный момент в критической секции, связанной с данным процессом), и значение 0, если ресурс занят. На рис. 4.9 показан фрагмент алгоритма потока, использующего для реализации взаимного исключения доступа к разделяемому ресурсу D блокирующую переменную F(D). Перед входом в критическую секцию поток проверяет, свободен ли ресурс D. Если он занят, то проверка циклически повторяется, если свободен, то значение переменной F(D) устанавливается в 0, и поток входит в критическую секцию. После того, как поток выполнит все действия с разделяемым ресурсом D, значение переменной F(D) снова устанавливается равным 1.

Рис. 4.9. Реализация критической секции с использованием

блокирующих переменных

Если все потоки написаны с использованием вышеописанных соглашений, то взаимное исключение гарантируется. При этом они могут быть прерваны ОС в любой момент и в любом месте. Однако, одно ограничение на прерывания все же имеется – операция проверки и установки блокирующей переменной должна быть неделимой. Для этой цели необходимо использовать соответствующие команды проверки-установки (в процессоре Pentium это BTC, BTR, BTS) или специальные системные примитивы атомарных операций.

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

Данный способ реализации взаимного исключения имеет существенный недостаток: пока ресурс занят, поток, ожидающий его освобождения, будет непрерывно опрашивать блокирующую переменную, бесполезно тратя процессорное время, которое может быть использовано для выполнения какого-нибудь другого потока.

Для устранения этого недостатка в ОС Windows для работы с критическими секциями используются специальные системные вызовы: EnterCriticalSection() и LeaveCriticalSection().

При входе в критическую секцию (рис. 4.10) поток выполняет системный вызов EnterCriticalSection(), в рамках которого вначале выполняется проверка блокирующей переменной необходимого ресурса. Если ресурс занят, то циклический опрос далее не выполняется, а поток переводится в состояние ожидания освобождения ресурса D. Поток, который в это время использует ресурс D, после выхода из критической секции должен вызвать системную функцию LeaveCriticalSection(), в результате чего ресурс освобождается. ОС просматривает очередь ожидающих этот ресурс потоков и переводит поток, ожидающий событие D, в состояние «готовность».

Рис. 4.10. Реализация критической секции с использованием

системных функций


 

А также другие работы, которые могут Вас заинтересовать

58428. Персидская держава «царя царей» 47 KB
  Вавилонский царь Хаммурапи некогда владея не только Южным Междуречьем но и Северным Ассирией 17921750 г. Древнее предание рассказывает: Могущественный вавилонский царь Навуходоносор выбрал себе в жены красавицуцаревну из горной страны Мидии. Огорчен был царь. Твоему горю можно помочь отвечал ей царь.
58429. Решение уравнений производства. Закон установления цен на продукты и услуги 72.5 KB
  Произведённое количество счётного товара (А) пока определенно только наугад; но и его следует определить так, чтобы предприниматели не имели ни прибыли, ни убытков. Но для этого, естественно, необходимо, чтобы себестоимость счетного товара была равна его продажной цене.
58430. Учись быть верным другом. Избрание Апостолов 118 KB
  Развивать эстетический вкус творческие способности детей. Приветствие С любовью и с радостью встречайте детей. Молитва Пригласите детей помолиться за свои огорчения и радости поблагодарить Бога за все и попросите благословения на этот урок. Всех детей поблагодарите за участие за старание вместе с ними ещё раз полюбуйтесь совместной работой подведите к выводу что одному было бы сложно выполнить такую работу а команде это под силу.
58431. Декларація прав дитини. Основний Закон держави. Обовязки батьків та дітей 54.5 KB
  Мета. Формувати в учнів уявлення про Декларацію прав дитини, Основний Закон нашої держави. Зясувати обовязки батьків і дітей. Виховувати шанобливе ставлення до батьків.
58432. Национальная экономика 45 KB
  Основные цели национальной экономики Макроэкономика изучает: процессы использования разнообразных ресурсов которыми располагает общество для удовлетворения потребностей людей. Предметом макроэкономики являются закономерности развития и функционирования национальной экономики...
58433. Учись быть благодарным. Десять прокаженных 158 KB
  Показать им что в нашей жизни есть множество поводов благодарить Бога.Молитва Предложите детям совершить молитву и попросить у Бога благословения на этот урок.Мотивация Ребята когда мы говорим Спасибо А что хорошее сделал вам Бог За что же мы должны благодарить Бога За пищу за одежду за здоровье. Бога в небесах.
58434. ПРОБЛЕМЫ ПРАВОВОГО РЕГУЛИРОВАНИЯ ОТНОШЕНИЙ УЧАСТИЯ В ДОГОВОРЕ ДОЛЕВОГО СТРОИТЕЛЬСТВА ЖИЛЫХ ПОМЕЩЕНИЙ 353.5 KB
  Появление и дальнейшее развитие договора участия в долевом строительстве в российском законодательстве имеют огромное значение для решения жилищной проблемы, поскольку надежное правовое регулирование отношений долевого строительства - гарантия успешного развития данных отношений
58435. Чудесная любовь Иисуса. Пасха 156 KB
  Побудить детей своими поступками не огорчать Иисуса но быть всегда послушными исполнительными дружелюбными. И спросил правитель Иисуса: Ты Царь Иудейский Иисус отвечал: Ты говоришь. В чем же он заключался Бог Отец послал Сына Иисуса на землю сказать людям чтобы они перестали делать злые дела поверили в Бога и исполняли Его заповеди.
58436. Религия 47.5 KB
  Религия как форма мировоззрения; Структура и функции религии; Виды религий; Веротерпимость и свобода совести. Другие определения религии: одна из форм общественного сознания; совокупность духовных представлений основывающихся на вере в сверхъестественные силы и существа богов...