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

Дисциплина, предотвращающая дедлок, просто должна гарантировать, что ни одно из четырех условий, необходимых для дедлока, не может возникнуть. Условие взаимного исключения подавляется путем разрешения неограниченного разделения ресурсов. Хотя это очень удобно для таких ресурсов, как повторно входимые программы или драйверы дисков, обеспечивающие доступ к разным наборам данных, это совершенно неприменимо к совместно используемым переменным в критических интервалах.

Условие ожидания можно подавить, предварительно выделяя ресурсы. Процесс должен потребовать все ресурсы заранее, и он не сможет начать исполнение до тех пор, пока они ему не будут выделены. Следовательно, общее число ресурсов, необходимое параллельным процессам, не может превышать возможностей системы. Хотя предварительное выделение используется часто, оно влечет за собой существенные издержки, вызванные неэффективностью использования ресурсов. Каждый процесс должен ждать до тех пор, пока не получит всех необходимых ресурсов, даже если один из них используется только в конце исполнения. Процесс может не использовать все выделенные ему ресурсы, если среди них есть такие, которые требуются только в исключительных обстоятельствах. В результате другие процессы, которым необходимы эти ресурсы, вынуждены ждать. Еще одним недостатком является тот факт, что трудно сформулировать запросы на ресурсы в тех случаях, когда требуемые процессу ресурсы становятся известны только после начала исполнения.

Условие отсутствия перераспределения можно исключить, позволяя операционной системе отнимать у процесса ресурсы. Это выполнимо, если можно запомнить состояние процесса для его последующего восстановления. Перераспределение процессора сравнительно легко реализовать. Для легко перераспределяемых ресурсов “ценой” перераспределения в основном является необходимое для этого время. Для перераспределения ресурсов можно использовать две различные дисциплины. Одна из них требует, чтобы работа, запросившая дополнительный ресурс, предварительно отказалась от любого количества этого ресурса, которое она уже имеет. На самом деле полностью это не исключает условие отсутствия перераспределения. Чтобы понять это, достаточно предположить, что р1 и р2 в предыдущем примере являются независимыми ресурсами. Другая дисциплина-общее исключение - отнимает у работы, заблокированной при запросе дополнительного ресурса, все ресурсы.

Условие кругового ожидания можно исключить, предотвращая образование цепи. Это обеспечивается иерархическим выделением ресурсов. Все ресурсы образуют некоторую иерархию. Процесс, затребовавший ресурс на одном уровне, может затем потребовать ресурсы только на более высоком уровне. Он может освободить ресурсы на данном уровне только после освобождения всех ресурсов на всех более высоких уровнях. После того как процесс получил, а потом освободил ресурсы данного уровня, он может снова запросить ресурсы на том же самом уровне. Предварительное выделение ресурсов можно считать специальным случаем иерархического выделения, имеющего единственный уровень. Иерархическое выделение несколько дороже, но оно может снизить потери, связанные с полным предварительным выделением. Однако этот метод не дает никакого выигрыша, если порядок, в котором процессам необходимы ресурсы, отличается от порядка уровней в иерархии. Например, если графопостроитель нужен в начале выполнения, а магнитофон - только в конце, а последний по уровню ниже, чем графопостроитель, то магнитофон придется выделить достаточно рано. и он долгое время не будет использоваться.

Далее...

   Обложка   Учебник   Экзамен   Глоссарий   Информация 
Hosted by uCoz