Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО ответы по экзамену.docx
Скачиваний:
12
Добавлен:
24.09.2019
Размер:
166.2 Кб
Скачать

27. Требования, предъявляемые к алгоритмам организации взаимодействия процессов. 1) условие взаимоисключения.

2) условие конечного ожидания – процесс, которому необходимо войти в критическую секцию должен получить возможность сделать это в конечное время.

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

While (true)

{

  • пролог

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

  • эпилог

remainder section

}

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

Эпилог – действия, которые разрешают доступ в критическую секцию для других процессов.

4) алгоритм синхронизации должен быть реализован на обычном процессоре с обычным набором команд.

28. Способы реализации взаимного исключения: запрещение прерываний.

While (true)

{

- запрет прерывания

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

- разрешить прерывание

remainder section

}

Достоинства: простота

Недостатки: 1) в критической секции процесс может находиться сколь угодно в том числе может зацикливаться, сбоить и т.д. в следствие чего эпилог так и не будет выполнен и система не сможет получить прерывание таймер для того, чтобы снять этот процесс с выполнения. 2) в критической секции процессу недоступны прерывания, что ограничивает его функциональность.

29. Способы реализации взаимного исключения: переменная-замок.

Shared int lock=0;

While (true)

{

While (lock);

Lock=1;

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

Lock=0;

Remainder section

}

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

30. Способы реализации взаимного исключения: строгое чередование.

Shared int turn=0;

While (true)

{ id – идентификатор текущего процесса (id=0, 1)

While (turn!=id)

Critical section

Turn=1-turn;

Remainder sect;

}

Процессы получают возможность входа в критическую секцию строго по очереди. В программе процесс ожидает, пока разделяемая переменная turn не станет равна его идентификатору. В эпилоге процесс устанавливает turn равным id другого процесса, позволяя тому войти в критическую секцию. В примере условия прогресса не выполняется. В случае, когда процессу, которому предоставлен вход, не нужно входить в критическую секцию, он выполняется в remainder sect, а другой процесс все это время ожидает в прологе изменения turn, кот. Может произойти только в эпилоге после вхождения 1-го процесса в критическую секцию. Т.о. процесс находящийся во входе в critical sect, препятствует проходу туда другого процесса.

31. Способы реализации взаимного исключения: флаги готовности.

Shared int ready [2]={0,0};

While (true) {

Ready[id]=1;

While (ready[1-id]);

Critical sect.

Ready[id]=0;

Remainder sect.

}

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

32. Способы реализации взаимного исключения: алгоритм Петерсона.

Shared int ready [2]={0,0};

Shared int turn=0;

While (true) {

Ready[id]=1;

Turn=1-turn;

While (ready[1-id] && turn==1-id);

Critical sect.

Ready[id]=0;

Remainder sect.

}

Разделяемые переменные, флаги готовности и переменные чередования. В прологе процесс устанавливает свой флаг готовности, после чего устанавливает turn=id другого процесса, тем самым предлагая войти в критическую секцию другому процессу. После этого процесс ожидает обнуления флага готовности другого процесса или установки переменной turn в свой идентификатор. 1-ое условие означает, что другой процесс вышел из критической секции, 2-ое – что он только начал выполнение пролога.

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