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. Реализация критической секции с использованием

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


 

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

2426. Підйомно-транспортні машини 1.05 MB
  До підйомно-транспортних машин відносяться машини і механізми призначенням яких є підйом і переміщення вантажів на порівняно невеликі відстані, на відміну від так званого дальнього транспорту - залізничного, автомобільного, водного і повітряного,який служить для переміщення вантажів на великі відстані.
2427. Динамічні пружні навантаження при підйомі вантажу 223.91 KB
  У разі підйому вантажу з ваги всі зазори в механізмі і канатах вибрані, а пружна система відповідно деформувалася тобто всі пружні елементи механізму вже піддані дії ваги вантажу і всі маси пружної системи починають рух одночасно.
2428. Економіка і організація виробництва 165.38 KB
  Методологія вивчення дисципліни Економіка і організація виробництва. Основні фонди підприємств авіаційної промисловості і їх використання. Оборотні кошти і матеріально-технічне забезпечення підприємств в умовах ринкової економіки. Собівартість продукції підприємств. Основи ціноутворення. Комерційний розрахунок і фінанси підприємств. Виробничі процеси і принципи їх раціональної організації. Сутність і функції процесу управління виробництвом.
2429. Лексичні одиниці в програмуванні 121 KB
  Лексичний устрій тексту програм. Напередвизначені позначення. Класифікація напередвизначених типів. Алфавіт будь-якої мови програмування є підмножиною символів (літер), представлених у спеціальній таблиці ASCII.
2430. Аналіз табличних даних 157 KB
  Корпоративна система призначається як правило для оперативного управління. Тому для менеджерів-аналітиків, яким необхідно шукати оптимальні рішення, дуже актуальним є застосування підручних програмних засобів. Одним з таких засобів є табличний процесор Excel, що входить у загальнодоступний пакет Microsoft Office.
2431. Способи вираження кількісного складу розчинів 40.22 KB
  Розчинами є плазма крові, слина, шлунковий сік, сеча та інші рідини людського організму. З утворенням розчинів пов’язані процеси засвоєння їжі та виведення із організму продуктів життєдіяльності. У формі розчинів у організм вводиться багато лікарських препаратів. Тому лікареві необхідні знання про величини, що характеризують кількісний склад розчинів.
2432. Сучасні класифікаці психічних розладів. Невротичні розлади 34.5 KB
  МКХ-10 vs DSM-IV. Невротичні розлади: зміст поняття та історія вчення. Теорії етіології та патогенезу. Невротична симпоматика. Класифікація невротичних розладів.
2433. История средних веков. Возникновение мира: мифы и реальность 30.5 KB
  Вспомним статью о возникновении мира и миф о его творении. При всем их различии, у них есть нечто общее. Что? Они оба основаны на предпосылке: Мир имеет начало. Сама идея поиска начала вселенной во времени – далеко не очевидна. Идея творения мира из ничего – христианская идея, и зарождается она где-то в I в. н.э.
2434. Приготування розчинів із заданим кількісним складом 28.2 KB
  Розчини з молекулярним та іонним характером дисперсності розчиненої речовини – справжні розчини – найважливіша складова частина біологічних рідин. Водні розчини електролітів та низькомолекулярних речовин забезпечують постійний осмотичний тиск, активну реакцію середовища.