Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОССО.doc
Скачиваний:
9
Добавлен:
20.09.2019
Размер:
937.98 Кб
Скачать

Вопрос 19. Алгоритмы планирования в интерактивных системах

Планирование в интерактивных системах     

 "Циклическое планирование".      Каждому процессу предоставляется некоторый интервал времени процессора - квант. Если к концу кванта времени процесс все еще работает, он прерывается, а управление передается другому процессу. Первоначальный процесс переносится в конец очереди. Значение кванта около 20-50 мс является оптимальным. В этом типе алгоритма есть важное допущение о том, что все процессы равнозначны.

"Приоритетное планирование".

Основная идея: каждому процессу присваивается приоритет, и управление передается готовому к работе процессу с самым высоким приоритетом. Чтобы предотвратить бесконечную работу процессов с высоки приоритетом, планировщик может уменьшит приоритет процесса с каждым тактом часов (то есть при каждом прерывании по таймеру). Если в результате приоритет текущего процесса окажется ниже, чем приоритет следующего процесса, произойдет переключение. Возможно предоставление каждому процессу максимального отрезка времени работы. Как только время кончилось, управление передается следующему по приоритету процессу.

Вопрос 20. Планирование потоков

Вопрос 21. Задача обедающих философов Постановка задачи

Иллюстрация проблемы обедающих философов

Пять безмолвных философов сидят вокруг круглого стола, перед каждым философом стоит тарелка спагетти. Вилки лежат на столе между каждой парой ближайших философов.

Каждый философ может либо есть, либо размышлять. Приём пищи не ограничен количеством оставшихся спагетти — подразумевается бесконечный запас. Тем не менее, философ может есть только тогда, когда держит две вилки — взятую справа и слева (альтернативная формулировка проблемы подразумевает миски с рисом и палочки для еды вместо тарелок со спагетти и вилок).

Каждый философ может взять ближайшую вилку (если она доступна), или положить — если он уже держит её. Взятие каждой вилки и возвращение её на стол являются раздельными действиями, которые должны выполняться одно за другим.

Суть проблемы заключается в том, чтобы разработать модель поведения (параллельный алгоритм), при котором ни один из философов не будет голодать, то есть будет вечно чередовать приём пищи и размышления.

Проблемы

Задача сформулирована таким образом, чтобы иллюстрировать проблему избежания взаимной блокировки (англ. deadlock) — состояния системы, при котором прогресс невозможен.

Например, можно посоветовать каждому философу выполнять следующий алгоритм:

  • Размышлять, пока не освободится левая вилка. Когда вилка освободится — взять её.

  • Размышлять, пока не освободится правая вилка. Когда вилка освободится — взять её.

  • Есть

  • Положить левую вилку

  • Положить правую вилку

  • Повторить алгоритм сначала

Это решение задачи некорректно: оно позволяет системе достичь состояния взаимной блокировки, когда каждый философ взял вилку слева и ждёт, когда вилка справа освободится.[4]

Проблема ресурсного голодания (англ. resource starvation) может возникать независимо от взаимной блокировки, если один из философов не может завладеть левой и правой вилкой из-за проблем синхронизации. Например, может быть предложено правило, согласно которому философы должны класть вилку обратно на стол после пятиминутного ожидания доступности другой вилки, и ждать ещё пять минут перед следующей попыткой завладеть вилками. Эта схема устраняет возможность блокировки (так как система всегда может перейти в другое состояние), но по-прежнему существует возможность «зацикливания» системы (англ. livelock), при котором состояние системы меняется, но она не совершает никакой полезной работы. Например, если все пять философов появятся в столовой одновременно и каждый возьмёт левую вилку в одно и то же время, то философы будут ждать пять минут в надежде завладеть правой вилкой, потом положат левую вилку и будут ждать ещё пять минут прежде, чем попытаться завладеть вилками снова.

Взаимное исключение (англ. mutual exclusion) является основной идеей «Проблемы обедающих философов». Эта проблема представляет собой общий, абстрактный сценарий, позволяющий объяснить проблемы этого типа. Ошибки философов наглядно демонстрируют те трудности, которые возникают в реальном программировании, когда нескольким программам требуется исключительный доступ к разделяемым ресурсам. Эти вопросы изучаются в области параллельных вычислений.

Изначальная цель Дейкстры при формулировании «проблемы обедающих философов» заключалась в демонстрации возможных проблем при работе с внешними устройствами компьютера, например, ленточными накопителями.[1] Тем не менее, область применения данной задачи простирается гораздо дальше и сложности, рассматриваемые в задаче, чаще возникают, когда несколько процессов пытаются получить доступ к набору данных, который обновляется.

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

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