
- •1.Средства межпроцессного взаимодействия. Сигнальные средства связи.
- •2.Средства межпроцессного взаимодействия. Канальные средства связи.
- •3. Синхронизация параллельных процессов. Критические ресурсы. Критический участок.
- •5. Синхронизация параллельных процессов. Условия Бернстайна.
- •6. Требования, предъявляемые к алгоритмам организации взаимодействия процессов.
- •7. Способы реализации взаимного исключения: запрещение прерываний
- •8. Способы реализации взаимного исключения: переменная-замок
- •9. Способы реализации взаимного исключения: строгое чередование
- •10. Способы реализации взаимного исключения: флаги готовности
- •11. Способы реализации взаимного исключения: алгоритм Петерсона и алгоритм булочной. Алгоритм Петерсона
- •Алгоритм булочной
- •12. Аппаратная реализация взаимоисключений.
- •13. Семафорные примитивы Дейкстры. Решение задачи производителя и потребителя с помощью семафоров.
- •14. Монитор Хоара как примитив синхронизации высокого уровня. Решение задачи производителя и потребителя с помощью мониторов.
- •15. Тупиковые ситуации.
- •16. Иерархия памяти. Локальность.
- •17. Понятие физического и виртуального адреса. Связывание адресов.
- •18. Статическое распределение памяти: разделы с фиксированными границами
- •19. Статическое распределение памяти: один процесс в памяти.
- •20. Динамическое распределение памяти: разделы с подвижными границами. Уплотнение памяти. Свопинг.
- •22. Страничная организация памяти.
- •23. Таблицы страниц: одноуровневые, многоуровневые, инвертированные.
- •24. Сегментно-страничная организация памяти.
- •25. Понятие виртуальной памяти. Страничный механизм трансляции.
- •26. Стратегии управления виртуальной памятью.
- •30. Дисциплины замещения страниц: выталкивание редко используемой страницы.
- •31. Модель рабочего множества. Трешинг.
10. Способы реализации взаимного исключения: флаги готовности
shared int ready[] = {0, 0}
while (true) {
ready[id] = 1;
while(ready[1-id])
critical section
ready[id] = 0;
remainder section }
Алгоритм подразумевает, что процессы должны сообщать о том, что им необходимо войти в критическую секцию. Процессы разделяют массив флагов, которые равны 0 если процессу не надо войти в критическую секцию, и 1 если надо. В прологе процесс устанавливает свой флаг готовности и в бесконечном цикле проверяет флаг готовности другого процесса. Если тот установлен, то это значит что другой процесс в критической секции, поэтому продолжается цикл проверки. В эпилоге процесс сбрасывает свой флаг готовности. Алгоритм нарушает условие ограниченного ожидания из-за неатомарности пролога. Поскольку одновременно 2 процесса могут подойти к прологу, оба выполнить установку своего флага и оба бесконечно долго ждать пока не будет сброшен флаг другого процесса. А он сброшен не будет, потому что ни один процесс не выйдет из цикла в критическую секцию и не выполнит эпилог.
11. Способы реализации взаимного исключения: алгоритм Петерсона и алгоритм булочной. Алгоритм Петерсона
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, равный идентификатору другого процесса, тем самым предлагая ему войти в критическую секцию. После этого процесс ожидает обнуление флага готовности другого процесса или установки переменной turn в свой идентификатор. Первое условие означает, что другой процесс вышел из критической секции, второе – что он только начал выполнение пролога. В обоих случаях критическая секция свободна. Условия взаимоисключения, прогресса и ограниченного ожидания выполняются.
Алгоритм булочной
do {
do {
choosing[i] = true;
number [i] = max (number[0], number[1], …, number[n-1]) + 1;
while (flag[j] and turn == j);
choosing[i] = false;
for (j = 0; j < n; j++) {
while choosing[j];
while ((number[j] != 0) && (number[j] < number[j]));
}
Critical sect.
number [i] = 0;
Remainder sect.
} while (1)
По построению, номер, присваиваемый процессу, будет гарантированно больше, чем номер любого другого процесса в системе. Прежде чем войти в критическую секцию, процесс ждет, пока завершится процесс выбора номера для всех процессов и пока в системе есть хотя бы один выбранный процесс, номер которого меньше. По окончании критической секции процесс обнуляет свой номер. Данный алгоритм также решает проблему синхронизации процессов по критическим секциям.
12. Аппаратная реализация взаимоисключений.
Наличие аппаратной поддержки взаимоисключений позволяет упростить алгоритмы и повысить их эффективность. Многие вычислительные системы имеют специальные команды процессора, которые позволяют проверить и изменить значение машинного слова или поменять местами значения двух машинных слов в памяти, выполняя эти действия как атомарные операции. Концепции таких команд могут использоваться для реализации взаимоисключений.
алгоритм TSL (Test-and-Set-Lock)
int TSL (int *target) {
int tmp = *target;
*target=1;
return tmp;
}
sharedint lock = 0;
while (true){
while (TSL(lock));
critical sect.
lock=0;
remainder section }
Команда Test-and-Set осуществляет проверку значения логической переменной с одновременной установкой ее значения в 1. Благодаря этому в прологе несколько процессов не смогут одновременно выйти из цикла по значению переменной lock = 0, а значит взаимоисключение будет обеспечено.
Swap.
void Swap (int *a, int *b){
inttmp = *a;
*a = *b;
*b = tmp;
}
shared int lock = 0;
int key = 0;
while(true) {
key = 1;
do Swap (&lock, &key);
while(key)
critical section
lock = 0;
remainder section }
На ряду с разделяемой переменной lock, вводится неразделяемая переменная key и используется команда swap для атомарного обмена значениями двух переменных. В прологе процесс устанавливает ключ в 1, и в цикле меняет местами значение ключа и замка до тех пор, пока ключ не обнулится. Ключ может стать равным 0 только в результате обмена с нулевым замком, что значит что вход в критическую секцию свободен. При этом, два процесса одновременно выйти из цикла не смогут. поскольку только один в локальной переменной ключ получит 0, установив в замок 1.