Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Ответы на экзамен по ОП для ИСТ - файл 9.doc


Ответы на экзамен по ОП для ИСТ
скачать (4632 kb.)

Доступные файлы (16):

10.doc38kb.05.06.2009 10:19скачать
4.doc39kb.05.06.2009 10:53скачать
9.doc32kb.05.06.2009 11:01скачать
File0001-1.jpg500kb.06.06.2009 21:24скачать
File0001.jpg560kb.06.06.2009 21:23скачать
File0002.jpg176kb.06.06.2009 21:06скачать
File0003.jpg430kb.06.06.2009 21:20скачать
File0004.jpg149kb.06.06.2009 21:06скачать
File0005.jpg505kb.06.06.2009 21:26скачать
File0006.jpg237kb.06.06.2009 21:06скачать
File0007.jpg485kb.06.06.2009 21:25скачать
File0008-1.jpg326kb.06.06.2009 21:13скачать
File0008.jpg639kb.06.06.2009 21:25скачать
File0009.jpg227kb.06.06.2009 21:06скачать
File0010.jpg168kb.06.06.2009 21:06скачать
File0011.jpg381kb.06.06.2009 21:13скачать

9.doc

9. Критическая секция. Методы взаимного исключения: запрещение прерываний,

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

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

Другим решением взаимного исключения является алгоритм Петерсона, он не основан на использовании специальных команд процесса для запрета прерываний, используются только общие переменные памяти и цикл для ожидания входа в критическую секцию исполняемого кода. Перед тем как приступить к критической области, поток вызывает специальную процедуру (пусть будет EnterRegion) со своим номером в качестве параметра. Она организует ожидание потока своей очереди входа в критическую секцию. После исполнения критической секции и выхода из нее, поток вызывает другую процедуру (назовем ее LeaveRegion), после чего уже другие потоки смогут войти в критическую область. Далее приведен код программы, реализующий алгоритм Петерсона.

{bool interested[2];

void EnterRegion(int threadId)

{

int other = 1 - threadId; // Идентификатор второго потока

interested[threadId] = true; // Индикатор интереса текущего потока

turn = other; // Флаг очереди исполнения

/* Цикл ожидания, мы находимся в этом цикле, если второй процесс выполняет свою

критическую секцию. Как второй процесс выйдет из критической секции, выполнится

процедура LeaveRegion(int threadId), флаг заинтересованности (interested[other])

станет равен false, и цикл закончится. */

while (turn == other && interested[other]);

}

void LeaveRegion(int threadId)

{

interested[threadId] = false;

}}

Рассмотрим два случая исполнения параллельных потоков с номерами 0 и1: 1 – потоки вызывают EnterRegion последовательно; 2 – потоки вызывают EnterRegion почти одновременно.

1. Поток с номером 0 вызывает EnterRegion, задавая этим индикатор своей "заинтересованности", устанавливая флаг очереди так, чтобы уступить очередь исполнения потоку номер 1. Поскольку последний пока еще не "заинтересован" в попадании в критическую область, выполнение сразу же возвращается из EnterRegion, и поток 0 входит в нее. Теперь EnterRegion вызывается потоком 1, для которого также выполняются описанные выше действия. Но т.к. поток 0 все еще "заинтересован" (interested[0] == true), выполнение остается в EnterRegion - поток 1 в ожидании (это выражено повторением инструкции для цикла 'while'). Как только поток 0 вызывает LeaveRegion и сбрасывает флаг своей "заинтересованности", поток 1 входит в критическую область и в конце сам вызывает LeaveRegion.

2. Потоки почти одновременно вызывают EnterRegion, устанавливая тем самым флаг своей "заинтересованности" и уступая очередь выполнения конкурирующему потоку посредством установки значения переменной turn. Поскольку последним это делает поток 1, ему уже придется ждать в цикле, в то время как поток 0 беспрепятственно входит в критическую область кода. Ожидание потока 1, как и в предыдущей случае, выражено повторением инструкции while для цикла ожидания. После того, как поток 0 выходит из критической области и сбрасывает флаг своей "заинтересованности", поток 1 продолжает свое исполнение и в конце сам сбрасывает соответствующий флаг вызовом LeaveRegion.

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

При выборе процесса, использующего данные, происходит инверсия приоритета, то есть два или несколько потоков с различными приоритетами находятся в споре, который из них должен быть обслужен процессором. Но при использовании инверсии приоритетов необходимо учесть то, что существует некоторые ограничения по его использованию. Пусть существует 2 процесса: А – с более высоким приоритетом; В – с более низким приоритетом. По правилам планирования, процесс А запускается немедленно, как только он оказывается в состоянии ожидания. В какой-то момент, когда процесс В находится в критической области, процесс А оказывается в состоянии ожидания. Процесс А попадает в состояние активного ожидания, но поскольку процессу В в это время работающего процесса А никогда не будет предоставлено процессорное время, у процесса В не будет возможности выйти из критической области, и процесс А навсегда останется в цикле. Эту ситуацию иногда называют проблемой инверсии приоритета.


Скачать файл (4632 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации