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

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


 

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

84187. Опухоли синовиальной ткани. Опухоли мезотелиальной ткани. Опухоли периферических нервов 24.61 KB
  Опухоли мезотелиальной ткани. Опухоли периферических нервов. Опухоли симпатических ганглиев.
84188. ОПУХОЛИ (ОБЩЕЕ УЧЕНИЕ) 24.92 KB
  Хондрома зрелая доброкачественная опухоль. Микроскопически опухоль имеет строение зрелого гиалинового хряща. Остеома зрелая доброкачественная костная опухоль. Макроскопически опухоль пестрого вида от белосерой до коричневокрасной окраски рыхлой консистенции несмотря на наличие очагового обызвествления.
84189. РАК ВАЖНЕЙШИХ ЛОКАЛИЗАЦИЙ 28.8 KB
  Высокая заболеваемость раком желудка по мнению многих авторов обусловлена употреблением в пишу продуктов содержащих нитраты. Чаще всего рак в желудке возникает в пилорическом отделе затем на малой кривизне в кардиалъном отделе на большой кривизне реже на передней и задней стенке очень редко в области дна. Чаще всего рак желудка имеет язвенную форму с бугристыми приподнятыми или плоскими краями иногда в сочетании с инфильтрирующим ростом язвенноинфильтративный рак на втором месте стоит диффузный рак форма инфильтрата с...
84190. ОПУХОЛИ КРОВЕТВОРНОЙ СИСТЕМЫ, ИЛИ ГЕМОБЛАСТОЗЫ 26.56 KB
  Лимфомы. Принципы классификации лимфом: неходжкинские лимфомы; лимфомы Ходжкина. Лимфомы и лейкемии относят к полиэтиологическим заболеваниям.
84191. РЕВМАТИЧЕСКИЕ БОЛЕЗНИ. РЕВМАТИЗМ. ПОРОКИ СЕРДЦА 28.8 KB
  ПОРОКИ СЕРДЦА Определение Этиология и патогенез Морфогенез Эндокардит Миокардит Перикардит Патаритрит Пороки сердца Системные заболевания соединительной ткани принято называть в настоящее время ревматическими болезнями. Ревматизм болезнь Сокольского Вуйо инфекционноаллергическое заболевание с преимущественным поражением сердца и сосудов волнообразным течением периодами обострения атаки и ремиссии. Важное значение придается антителам перекрестно реагирующим с антигенами стрептококка и антигенами тканей сердца а также клеточным...
84192. ПАТОЛОГИЯ КЛЕТОК КРОВИ И КОСТНОГО МОЗГА. АНЕМИИ 23.96 KB
  АНЕМИИ Анемии Паталогическая анатомия Гемолитические анемии Болезни системы крови разнообразны. Наибольшее развитие имеют анемии гемобластозы тромбоцитопении и тромбоцитопатии. Анемии или малокровие группа заболеваний и состояний характеризующихся уменьшением общего количества гемоглобина. В зависимости от этиологии и патогенеза различают анемии: постгеморрагические; вследствие нарушения кровообразования; вследствие повышенного кроворазрушения гемолитические.
84193. ПАТОЛОГИЯ КЛЕТОК КРОВИ И КОСТНОГО МОЗГА. ЛЕЙКОЗЫ. ЛИМФОГРАНУЛЕМАТОЗ 24.71 KB
  костном мозге бластных клеток. Острый плазмобластный лейкоз возникает из клетокпредшественников Влимфоцитов способных к продукции иммуноглобулинов. При остром эритромиелозе ди Гульелымо в костном мозге происходит разрастание эритробластов и других ядросодержащих клеток эритропоэза миелобластов монобластов и недифференцированных бластов.
84194. БОЛЕЗНИ ОРГАНОВ ПИЩЕВАРЕНИЯ. ГАСТРИТ 24.07 KB
  ГАСТРИТ Острый гастрит Хронический гастрит Болезни органов пищеварения отличаются большим разнообразием. Гастрит воспалительное заболевание слизистой оболочки желудка. Различают острый и хронический гастриты. Воспаление слизистой оболочки может охватывать весь желудок диффузный гастрит или определенные его отделы очаговый гастрит.
84195. БОЛЕЗНИ ОРГАНОВ ПИЩЕВАРЕНИЯ. ЯЗВЕННАЯ БОЛЕЗНЬ 23.74 KB
  ЯЗВЕННАЯ БОЛЕЗНЬ Определение Патологическая анатомия Острая язва желудка Хроническая язва желудка Язвенная болезнь хроническое циклически текущее заболевание основным клиническим и морфологическим выражением которого являются рецидивирующие язвы желудка или двенадцатиперстной кишки. В ходе формирования она проходит стадии эрозии и острой язвы. Но в случаях развития язвенной болезни некоторые эрозии не заживают; некрозу подвергаются не только слизистая но и более глубокие слои стенки желудка развиваются острые пептические язвы. По мере...