Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpora_1-10_bez_vosmogo1.docx
Скачиваний:
3
Добавлен:
16.04.2019
Размер:
108.79 Кб
Скачать

41) Критичний ресурс. Критична секція. Використання спільної змінної.

Пусть переменная Status, которая определена в области памяти доступной нескольким процессам, задает состояние критической секции (занята, свободна). Вход в критическую секцию процесса возможен только в том случае, если она свободна.

Недостатки метода:

- операторы while (Status == Busy) проверки состояния критической секции и Status= Busy установки этого состояния должны выполняться как один оператор.

- Не определен порядок выполнения процессов, в реальных задачах часто необходимо зафиксировать этот порядок.

- Если квант времени выделен процессу, который не может выполняться сейчас, процессор выполняет цикл ожидания вместо переключения на другой процесс.

Первый недостаток устраняется, выключением прерываний на время проверки и установки значения. Современные процессоры также имеют в списке команд такие, которые позволяют проверять и изменять значение переменной одной командой.

Общая переменная

int Status = Free ;

// Процесс 1

while (Status == Busy);

Status = Busy;

// Критическая секция

Status = Free;

// Процесс 1

while (Status == Busy);

Status = Busy;

// Критическая секция

Status = Free;


42) Критичний ресурс. Критична секція. Почергове виконання критичної секції.

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

Недостаток метода:

Если процесс 1 выполняется на более быстром процессоре, то он не сможет два раза подряд выполнить свою критическую секцию. По-прежнему процессор простаивает до завершения кванта времени, если КС не может бать выполнена.

Общая переменная

int number = 1;

// Процесс 1

while (1){

while (number == 2);

// Критическая секция

number = 2;

// Продолжение процесса

}

// Процесс 2

while (1){

while (number == 1);

// Критическая секция

number = 1;

// Продолжение процесса

}


43) Критичний ресурс. Критична секція. Алгоритм Деккера.

Используем 3 общих переменных для процессов c[0] – истина, если выполняется КС первого процесса; c[1] – истина, если выполняется КС второго процесса; переменная OtherProcessNumber задает номер неактивного процесса. Начальная инициализация переменных:

bool c[2] = {false, false};

int OtherProcessNumber = 0;

// Код для процесса 1 с критическим участком кода

// Установка переменных для первого процесса

int i=0; j = 1 – i;

c[i] = true; OtherProcessNumber = j;

// Ждем пока критическую секцию выполняет второй процесс

while (c[j] && OtherProcessNumber == j);

// Критическа секция

c[i] = false;

Для второго процесса переменная i = 1. Для решения проблемы простоя процессора в случае необходимости ожидания завершения выполнения КС другим процессом используется блокирование, выполнение которого не может быть продолжено. Блокирование процесса выполняет ОС. В этом случае квант времени процессора передается готовому процессу. В следующих разделах предполагается, что процессы, которые не могут выполняться, блокируются.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]