<<
>>

Получение ресурса

Для некоторых видов ресурсов, таких как записи в базе данных, управление использованием ресурсов зависит от самих пользовательских процессов, а не от системы. Один из способов, позволяющих ввести пользовательское управление ресурсами, заключается в присоединении семафора к каждому из ресурсов.

Все эти семафоры получают исходное значение, равное 1.

С таким же успехом могут использоваться и мьютексы. Перечисленные ранее три этапа затем воплощаются в применение к семафору вызова down для получения ресурса, использование ресурса и, в завершение, применение вызова up при высвобождении ресурса. Эти этапы показаны в листинге 6.1, а.

Листинг 6.1. Использование семафоров для защиты: а — одного ресурса; б — двух ресурсов

typedef int semaphore; typedef int semaphore;

semaphore resource_1; semaphore resource_1;

semaphore resource_2;

void process_A(void) { down(&resource_1); down(&resource_2); use_both_resources( ); up(&resource_2); up(&resource_1);

}

б

Иногда процессы нуждаются в двух и более ресурсах.

Их можно получать последовательно, как показано в листинге 6.1, б. Если требуется больше двух ресурсов, их запрашивают непосредственно один за другим.

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

Теперь рассмотрим ситуацию с двумя процессами — А и В — и двумя ресурсами. В листинге 6.2 показаны два сценария: а — оба процесса запрашивают ресурсы в одном и том же порядке; б — запрашивают ресурсы в разном порядке.

Разница может показаться несущественной, но это не так.

Листинг 6.2. Код: а — не вызывающий взаимоблокировки; б — в котором кроется потенциальная возможность взаимоблокировки typedef int semaphore;

semaphore resource_1; semaphore resource_1;

semaphore resource_2; semaphore resource_2;

б

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

В листинге 6.2, б показана другая ситуация. Может случиться, что один из процессов получит оба ресурса и надежно заблокирует другой процесс до тех пор, пока не сделает свою работу. Но может случиться и так, что процесс A получит ресурс 1, а процесс B получит ресурс 2. Каждый из них теперь будет заблокирован при попытке получения второго ресурса. Ни один из процессов не возобновит свою работу. Плохо то, что возникнет ситуация взаимоблокировки.

Здесь мы видим, что происходит из-за небольшой разницы в стиле программирования: в зависимости от того, какой из ресурсов будет получен первым, программа либо работает, либо дает трудноопределимый сбой. Поскольку взаимоблокировки могут возникать столь просто, для борьбы с ними были проведены обширные исследования. В этой главе подробно рассматриваются взаимоблокировки и средства борьбы с ними.

6.2.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Получение ресурса:

  1. 6.3. Право на поиск и получение документированной информации из государственных информационных ресурсов
  2. 4.3.1. Информационные правоотношения, возникающие при осуществлении поиска, получения и потребления информации, информационных ресурсов, информационных продуктов, информационных услуг
  3. Статья 198. Приобретение, получение, хранение или сбыт имущества, полученного преступным путем
  4. Право собственности ребенка на полученные им доходы, на имущество, полученное им в дар или в порядке наследования
  5. СТРАДАТЬ - ЭТО ПЛОХО! БЛАГА, ПОЛУЧЕННЫЕ ЧЕРЕЗ СТРАДАНИЯ, ОБМАНЧИВЫ. РЕАЛЬНЫ ТОЛЬКО БЛАГА, ПОЛУЧЕННЫЕ ЧЕРЕЗ УДОВОЛЬСТВИЕ.
  6. 4. Ресурсы (resources)
  7. 2. Законодательство относительно добычи топливных ресурсов
  8. § 3. Земля и другие природные ресурсы
  9. Оптимизм и физические ресурсы
  10. 8.2. Государственная политика в области формирования и использования информационных ресурсов
  11. 2. Собственность на землю и другие природные ресурсы