Основные задачи параллельного программирования. Конспект лекций. Степанов Б.М. - 7 стр.

UptoLike

Составители: 

7
Рассмотренные примеры показывают трудности, с которыми приходится сталкивать-
ся при работе с конкурирующими процессами (решение задачи взаимного исключения). Эту
задачу можно решить с использованием большого числа вспомогательных переменных. Ис-
пользование вспомогательных переменных приводит к достаточно запутаным и мало на-
глядным решениям.
Чтобы при работе с разделяемыми переменными не возникало ошибок, необходимо
предотвратить одновременный доступ к этим переменным. Это запрещение одновременного
доступа называется взаимным исключением конкурирующих процессов. Задача взаимного
исключенияглавная задача параллельного программирования.
Лекция 2. Формулировка задачи взаимного исключения
Критический интервал (секция, участок) – это последовательность операторов задан-
ного процесса, выполняющих действия с разделяемыми переменными.
Правильное выполнение конкурирующих процессов будет происходить в том случае,
когда критические интервалы взаимно исключаются (то есть одновременно не выполняют-
ся).
Если процесс выполняет операторы своего критического интервала, то будем считать,
что он находится в критическом интервале.
Взаимное исключение критических интервалов должно выполняться согласно сле-
дующим правилам:
1) в каждый момент времени только один процесс может находиться внутри своего
критического интервала;
2) ни один процесс не должен оставаться неограниченно долго внутри своего крити-
ческого интервала;
3) никакой процесс, находящийся вне своего критического интервала, не должен
препятствовать другому процессу войти в его критический интервал.
Средства взаимного исключения
Для решения задачи взаимного исключения применяются следующие способы:
1) Блокировка памяти запрещает одновременный доступ к одной и той же ячейке
памяти двум различным устройствам. Это средство относится к аппаратным решениям.
Здесь чередование обращений не учитывается. Если для выполнения критического интервала
требуется более одной команды, то этого средства оказывается недостаточно.
2) Использование вспомогательных переменных для контроля нахождения процессов
в их критических интервалах.
3) Использование специальных команд Проверить и установить” – Test & Set (Tset –
в микропроцессоре Z80, XСHG в процессорах 80х86).
Рассмотрим использование вспомогательных переменных.
А) Использование одной вспомогательной переменной.
В этом варианте решения задачи взаимного исключения переменная используется для
задания очередности выполнения процессами критических интервалов.
Допустим, что рассматривается два процесса. Вспомогательная переменная может
быть булевского типа. Если её значение “true”, то процесс1 находится в критическом интер-
вале, если ее значение ‘‘false’’, то процесс2- в критическом интервале. Алгоритм решения
приведен ниже.
Var
b: boolean;
Begin
      Рассмотренные примеры показывают трудности, с которыми приходится сталкивать-
ся при работе с конкурирующими процессами (решение задачи взаимного исключения). Эту
задачу можно решить с использованием большого числа вспомогательных переменных. Ис-
пользование вспомогательных переменных приводит к достаточно запутаным и мало на-
глядным решениям.
      Чтобы при работе с разделяемыми переменными не возникало ошибок, необходимо
предотвратить одновременный доступ к этим переменным. Это запрещение одновременного
доступа называется взаимным исключением конкурирующих процессов. Задача взаимного
исключения – главная задача параллельного программирования.

                  Лекция 2. Формулировка задачи взаимного исключения

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

                             Средства взаимного исключения

       Для решения задачи взаимного исключения применяются следующие способы:
       1) Блокировка памяти запрещает одновременный доступ к одной и той же ячейке
памяти двум различным устройствам. Это средство относится к аппаратным решениям.
Здесь чередование обращений не учитывается. Если для выполнения критического интервала
требуется более одной команды, то этого средства оказывается недостаточно.
       2) Использование вспомогательных переменных для контроля нахождения процессов
в их критических интервалах.
       3) Использование специальных команд “Проверить и установить” – Test & Set (Tset –
в микропроцессоре Z80, XСHG в процессорах 80х86).

       Рассмотрим использование вспомогательных переменных.
       А) Использование одной вспомогательной переменной.
       В этом варианте решения задачи взаимного исключения переменная используется для
задания очередности выполнения процессами критических интервалов.
       Допустим, что рассматривается два процесса. Вспомогательная переменная может
быть булевского типа. Если её значение “true”, то процесс1 находится в критическом интер-
вале, если ее значение ‘‘false’’, то процесс2- в критическом интервале. Алгоритм решения
приведен ниже.

Var
        b: boolean;
Begin

                                           7