Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО ответы по экзамену.docx
Скачиваний:
12
Добавлен:
24.09.2019
Размер:
166.2 Кб
Скачать
  1. Производитель не может писать переполненный буфер.

  2. Потребитель не может читать из пустого буфера.

  3. Никакие 2 процесса не могут одновременно обращаться к буферу.

monitor M {

производитель

потребитель

{

m.empty.wait

m.put()

full.signal }

{

m.full.wait

m.get()

empty.signal }

state full;

state empty;

void get() {

}

void put() {

}

}

Методы монитора могут использовать в своем коде только свои аргументы и переменные, определенные внутри монитора и недоступные снаружи. Если на переменной состояния заблокировано несколько процессов, то при поступлении сигнала разблокируется только 1 процесс. Причем в зависимости от реализации это может быть первый заблокированный, последний или случайный. Переменные состояния не имеют памяти. Поэтому при поступлении сигнала на переменной, на которой нет заблокированных процессов, сигнал будет утерян.

37. Тупиковые ситуации. Тупик – ситуация, в которой находится процесс, ожидающий событие, которое никогда не произойдет. Тупики возникают в следствии:

1) ошибок программирования (отсутствие семафора).

2) занятости ресурсов, которые необходимы процессу.

Ресурсы бывают: разделяемые и выделяемые (монопольного владения). Тупики могут возникнуть и с теми и с теми, но обычно с ресурсами монопольного владения.

Условия возникновения тупиков:

  1. условие взаимоисключения – одновременно использовать ресурс может только 1 процесс.

  2. Условие ожидания ресурсов – процессы удерживают ресурсы выделенные им и могут запрашивать другие.

  3. Условие неперераспределяемости – ресурс не может быть отобран из процесса, а только освобожден самим процессом.

  4. Условие кругового ожидания – существует кольцевая цепь процессов, в которой каждый ресурс необходим одному процессу, но принадлежит другим.

Для возникновения тупика необходимо и достаточно выполнение всех 4-х условий.

38. Методы борьбы с тупиками: игнорирование тупиков. Тупики могут быть очень маловероятными, поэтому ОС может не иметь никаких причудливых правил и ограничений, накладываемых на работу процессов и пользователей, поскольку усилия, прикладываемые к их выполнению, могут быть значительно больше, чем ущерб от тупиков.

39. Методы борьбы с тупиками: предотвращение тупиков. Может производиться путем тщательного распределения ресурсов. Безопасное состояния (надежное) – такое состояние системы, при котором имеется хотя бы 1 последовательность событий, не приводящая к тупику. Система находится в надежном состоянии, если может обеспечить всем процессам их выполнение в течение конечного времени.

40. Методы борьбы с тупиками: алгоритм банкира. В системе есть n ресурсов, ОС принимает запросы от процесса только, если его потребность превышает n. процесс получает требуемые ресурсы только если гарантирует возврат устройств в течение конечного времени.

41. Методы борьбы с тупиками: нарушение условий возникновения тупиков.

а) нарушение условия взаимоисключения – любой монопольный ресурс нужно сделать разделяемым. Spooling – очередь к разд. ресурсу.

б) нарушение усл. Ожидания – двухфазный захват ресуросв: фаза 1 – запрос всех необходимых ресурсов сразу. Фаза 2 – если все ресурсы свободны, то их захват; если хотя бы 1 занят – ожидание.

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

42. Методы борьбы с тупиками: обнаружение тупиков. ОС необходимо определять наличие тупиковой ситуации для того, чтобы предпринять соответствующие действия и, возможно, избежать данной ситуации в последующем. Чаще всего используется алгоритм обнаружения колец на графах.

43. Методы борьбы с тупиками: восстановление после тупиков. Большинство систем не имеют достаточно эффективных средств, чтобы приостановить процесс, вывести его из системы, нарушить тупиковую ситуацию, а после продолжить его с того же самого места. Чае всего это требует внимания оператора. Самый простой способ – завершение всех процессов, участвующий в критическом ожидании. Чуть сложнее – временное перераспределение ресурсов.

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