Предотвращение тупиков

1. Mutual Exclusion (делается в первую очередь там, где можно).

Можно построить над ресурсом абстракцию, не требующую эксклюзивного доступа.

− Не всегда возможно.

− Требует доп. затрат ресурсов.

2. Hold&Wait. Идеи:

  1. Заставить все процессы запрашивать все необходимые им ресурсы до начала выполнения. − Неэффективное использование ресурсов.
  2. При возникновении потребности в ресурсе освобождаются все уже имеющиеся и запрашиваем их обратно вместе с доп. ресурсом. − Неэффективно. − Не всегда реализуемо.
  3. Предоставить прикладному программисту неблокирующие функции запроса ресурсов — единственное работающее решение.

3. No Preemption (практически не реализуемо) — можно разрешить ОС передавать ресурсы от одного процесса другому:

  1. Заморозить процесс, владеющий ресурсом.
  2. Передать ресурс другому процессу.
  3. После освобождения ресурса вернуть его исходному владельцу и продолжить выполнение.

− Чтобы передать ресурс, он должен быть в стабильном состоянии.

− Ресурс может быть зависимым.

Применимо только в очень частных случаях внутри конкретного проекта.

4. Circular Wait. Идеи:

  1. Позволить процессам в каждый момент времени владеть только одним ресурсом.
  2. Ввести нумерацию ресурсов. Обязать процессы запрашивать ресурсы строго в порядке возрастания их номеров. − Неэффективно.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: