
- •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. Модель рабочего множества. Трешинг.
6. Требования, предъявляемые к алгоритмам организации взаимодействия процессов.
Условие взаимоисключения: в критической секции не может быть больше одного процесса.
Условие ограниченного ожидания: Процесс которому необходимо войти в критическую секцию должен получить возможность сделать это в конечное время.
Условие прогресса: Решение о вхождении в критическую секцию должны принимать только те процессы, которым в данный момент нужно войти в критическую секцию. Процессы, которые находятся в остальной части программы и которым не нужно входить в критическую секцию не должны препятствовать вхождению в критическую секцию другим процессам.
Алгоритм синхронизации должен быть реализован на обычном процессоре с обычным набором команд.
7. Способы реализации взаимного исключения: запрещение прерываний
В прологе процесс входит в критическую секцию, запрещает прерывания, благодаря чему пока он находится в критической секции, он не будет снят с выполнения, и управление не будет передано ни другому процессу ни обработчику прерываний. В эпилоге разрешаются прерывания и другие процессы могут войти в критическую секцию. В случае сбоя, процесса в критической секции нарушается условие ограниченного ожидания. Поскольку эпилог не будет выполнен, прерывания не будут разрешены, и процессы будут бесконечно долго ждать выполнения. Алгоритм используется только в ядре ОС при выполнении критически важных операций.
8. Способы реализации взаимного исключения: переменная-замок
shared int lock = 0
while (true) {
while (lock)
lock = 1
critical section
lock = 0
remainder section }
Процессы разделяют переменную lock. Если она равно 0, то доступ в критическую секцию открыт, если 1, то закрыт. В прологе процесс проверяет значение lock до тех пор, пока оно не станет равно 0, выполняет бесконечный цикл. После чего закрывает замок и входит в критическую секцию. В эпилоге замок открывается, позволяя другому процессу выйти из бесполезного цикла пролога. Алгоритм нарушает условие взаимоисключений из-за неатомарности пролога. Если 2 процесса одновременно подходят к прологу, то возмодна ситуация, когда сначала 1 процесс выполнит проверку переменной-замка, перейдет к следующей команде, и в этот момент управление будет переданно другому процессу. Другой тоже выполнит проверку, тоже выйдет из цикла, и в результате оба процесса окажутся в критической секции.
9. Способы реализации взаимного исключения: строгое чередование
shared int turn = 0
while (true) {
while (turn != id)
critical section
turn = 1 – turn
remainder section }
Алгоритм подразумевает поочередный вход в критическую секцию двух процессов. Разделяемая между процессами переменная turn показывает какому процессу в данный момент разрешен вход в критическую секцию. В прологе процесс проверяет равна ли переменная turn его id. Если равна, то входит в критическую секцию, иначе выполняется бесполезный бесконечный цикл проверки значения turn. В эпилоге turn устанавливается равной id другого процесса, позволяя тому выйти из бесконечного цикла пролога. Алгоритм нарушает условие прогресса, если процесс которому разрешено войти в критическую секцию работает в remainder section, не собираясь входить в critical section. При этом, процесс которому надо выполнять критическую секцию будет бесконечно выполнять пролог.