Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Большинство операционных систем потенциально страдают от взаимоблокировок, которые даже не обнаруживаются, не говоря уже об автоматическом выходе из тупика. Суммарное количество процессов в системе определяется количеством записей в таблице процесса. Таким образом, ячейки таблицы процесса являются ограниченным ресурсом. Если системный вызов fork получает отказ, потому что таблица целиком заполнена, разумно будет, что программа, вызывающая fork, подождет какое-то время и повторит попытку. Теперь предположим, что система UNIX имеет 100 ячеек процессов. Работают 10 программ, каждой необходимо создать 12 (под)процессов. После образования каждым процессом девяти процессов 10 исходных и 90 новых процессов заполнят таблицу целиком. Теперь каждый из десяти исходных процессов попадает в бесконечный цикл, состоящий из попыток разветвления и отказов, то есть возникает взаимоблокировка. Таким образом, если вероятность взаимоблокировки очень мала, как в данном примере, то ею легче пренебречь, т.к. код исключения может оень усложнить ОС и привести к большим ошибкам. Этот алгоритм используется как в UNIX, так и в Windows. Поэтому (и не только) на серверах часто устанавливают автоматическую перезагрузку (раз в сутки, как правило ночью), если возникнет взаимоблокировка, то после перезагрузки ее не будет.
Дата публикования: 2015-01-26; Прочитано: 623 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!