К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

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

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

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

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

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

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

 

 


Предыдущая        В начало страницы       Следующая
5