- •Вопрос 1. Что такое ос
- •Вопрос 2. Краткая история эволюции вычислительных систем
- •Вопрос 3. Аппаратное обеспечение компьютера
- •Вопрос 4. Основные понятия, концепции ос
- •Вопрос 5. Архитектурные особенности ос
- •Вопрос 6. Классификация ос
- •Вопрос 7. Системные вызовы
- •Вопрос 8. Процессы
- •Вопрос 9. Потоки
- •Потоки в posix
- •Вопрос 10. Операции над процессами и связанные с ними понятия
- •Набор операций
- •Вопрос 11. Взаимное исключение с активным ожиданием
- •Вопрос 12. Семафоры. Решение проблемы producer-consumer с помощью семафоров
- •Вопрос 13. Мьютексы. Решение проблемы producer-consumer с помощью мьютексов
- •Вопрос 14. Мониторы Мониторы
- •Вопрос 15. Сообщения. Решение проблемы producer-consumer с помощью сообщений
- •Вопрос 16. Барьеры
- •Вопрос 17. Планирование процессов. Категории и задачи планирования
- •18. Алгоритмы планирования в пакетных системах Вытесняющее и невытесняющее планирование
- •Алгоритмы планирования
- •Вопрос 19. Алгоритмы планирования в интерактивных системах
- •Вопрос 20. Планирование потоков
- •Вопрос 21. Задача обедающих философов Постановка задачи
- •Проблемы
- •Решение задачи Официант
- •Иерархия ресурсов
- •Решение на основе монитора
- •Вопрос 22. Задача читателей-писателей
- •Вопрос 23. Понятие взаимоблокировки. Выгружаемый и невыгружаемый ресурс
- •Вопрос 24. Условия возникновения взаимоблокировки. Граф распределения ресурсов
- •2 Моделирование взаимоблокировок
- •Вопрос 25. Поиск взаимоблокировки при использовании одного ресурса каждого типа
- •Вопрос 26. Поиск взаимоблокировки при использовании нескольких ресурсов каждого типа
- •Вопрос 27. Алгоритмы восстановления работоспособности системы после обнаружения взаимоблокировки
- •Вопрос 28. Модель траектории ресурсов при уклонении от взаимоблокировок
- •Вопрос 29. Безопасное и небезопасное состояние при уклонении от взаимоблокировок
- •Вопрос 30. Алгоритм банкира для одного типа ресурса
- •Вопрос 31. Алгоритм банкира для нескольких типов ресурсов
- •Вопрос 32. Алгоритмы предотвращения взаимоблокировки
Вопрос 19. Алгоритмы планирования в интерактивных системах
Планирование в интерактивных системах
"Циклическое планирование". Каждому процессу предоставляется некоторый интервал времени процессора - квант. Если к концу кванта времени процесс все еще работает, он прерывается, а управление передается другому процессу. Первоначальный процесс переносится в конец очереди. Значение кванта около 20-50 мс является оптимальным. В этом типе алгоритма есть важное допущение о том, что все процессы равнозначны.
"Приоритетное планирование".
Основная идея: каждому процессу присваивается приоритет, и управление передается готовому к работе процессу с самым высоким приоритетом. Чтобы предотвратить бесконечную работу процессов с высоки приоритетом, планировщик может уменьшит приоритет процесса с каждым тактом часов (то есть при каждом прерывании по таймеру). Если в результате приоритет текущего процесса окажется ниже, чем приоритет следующего процесса, произойдет переключение. Возможно предоставление каждому процессу максимального отрезка времени работы. Как только время кончилось, управление передается следующему по приоритету процессу.
Вопрос 20. Планирование потоков
Вопрос 21. Задача обедающих философов Постановка задачи
Иллюстрация проблемы обедающих философов
Пять безмолвных философов сидят вокруг круглого стола, перед каждым философом стоит тарелка спагетти. Вилки лежат на столе между каждой парой ближайших философов.
Каждый философ может либо есть, либо размышлять. Приём пищи не ограничен количеством оставшихся спагетти — подразумевается бесконечный запас. Тем не менее, философ может есть только тогда, когда держит две вилки — взятую справа и слева (альтернативная формулировка проблемы подразумевает миски с рисом и палочки для еды вместо тарелок со спагетти и вилок).
Каждый философ может взять ближайшую вилку (если она доступна), или положить — если он уже держит её. Взятие каждой вилки и возвращение её на стол являются раздельными действиями, которые должны выполняться одно за другим.
Суть проблемы заключается в том, чтобы разработать модель поведения (параллельный алгоритм), при котором ни один из философов не будет голодать, то есть будет вечно чередовать приём пищи и размышления.
Проблемы
Задача сформулирована таким образом, чтобы иллюстрировать проблему избежания взаимной блокировки (англ. deadlock) — состояния системы, при котором прогресс невозможен.
Например, можно посоветовать каждому философу выполнять следующий алгоритм:
Размышлять, пока не освободится левая вилка. Когда вилка освободится — взять её.
Размышлять, пока не освободится правая вилка. Когда вилка освободится — взять её.
Есть
Положить левую вилку
Положить правую вилку
Повторить алгоритм сначала
Это решение задачи некорректно: оно позволяет системе достичь состояния взаимной блокировки, когда каждый философ взял вилку слева и ждёт, когда вилка справа освободится.[4]
Проблема ресурсного голодания (англ. resource starvation) может возникать независимо от взаимной блокировки, если один из философов не может завладеть левой и правой вилкой из-за проблем синхронизации. Например, может быть предложено правило, согласно которому философы должны класть вилку обратно на стол после пятиминутного ожидания доступности другой вилки, и ждать ещё пять минут перед следующей попыткой завладеть вилками. Эта схема устраняет возможность блокировки (так как система всегда может перейти в другое состояние), но по-прежнему существует возможность «зацикливания» системы (англ. livelock), при котором состояние системы меняется, но она не совершает никакой полезной работы. Например, если все пять философов появятся в столовой одновременно и каждый возьмёт левую вилку в одно и то же время, то философы будут ждать пять минут в надежде завладеть правой вилкой, потом положат левую вилку и будут ждать ещё пять минут прежде, чем попытаться завладеть вилками снова.
Взаимное исключение (англ. mutual exclusion) является основной идеей «Проблемы обедающих философов». Эта проблема представляет собой общий, абстрактный сценарий, позволяющий объяснить проблемы этого типа. Ошибки философов наглядно демонстрируют те трудности, которые возникают в реальном программировании, когда нескольким программам требуется исключительный доступ к разделяемым ресурсам. Эти вопросы изучаются в области параллельных вычислений.
Изначальная цель Дейкстры при формулировании «проблемы обедающих философов» заключалась в демонстрации возможных проблем при работе с внешними устройствами компьютера, например, ленточными накопителями.[1] Тем не менее, область применения данной задачи простирается гораздо дальше и сложности, рассматриваемые в задаче, чаще возникают, когда несколько процессов пытаются получить доступ к набору данных, который обновляется.
Системы, которые должны иметь дело с большим количеством параллельных процессов (например, ядра операционных систем), используют тысячи блокировок и точек синхронизации. Это требует строгого соблюдения методик и протоколов, если необходимо избегать взаимных блокировок, голодания и повреждения данных.