Зависание

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Зависание (компьютерное явление)»)
Перейти к навигации Перейти к поиску

Зависа́ние — состояние компьютерной системы, в котором одна или несколько программ или вся операционная система перестают реагировать на действия пользователя[1], или начинают без остановки выполнять одну и ту же (не обязательно полезную или содержательную) операцию, не реагируя на сообщения от других программ[2][3]. В этот момент изображение, выводимое программой на монитор (если оно есть) может застыть, в отличие от ошибки исполнения, при которой на экран выдаётся сообщение.

Зависание стоит отличать от подвисания, когда компьютер перестаёт отвечать на запросы в течение определённого времени, а затем возобновляет работу без каких-либо действий со стороны пользователя. Перезагружать компьютер при подвисании не требуется[1].

Многозадачность

[править | править код]

В многозадачной операционной системе возможно зависание отдельного процесса или потока, — например, в результате блокировки ресурса или попадания в бесконечный цикл. В кооперативной многозадачной системе зависание любого потока, не отдавшего управление, приведёт к зависанию всей системы, поскольку зависший поток не позволит другим потокам выполняться.

Напротив, в системах с вытесняющей многозадачностью, таких как Windows 2000 и её преемники, а также Linux и UNIX (macOS от Apple Inc. в частности), зависание одного потока не обязательно приведет к зависанию всей системы, поскольку операционная система вытеснит его, когда истечёт его временной интервал, позволяя запустить другой поток. Если поток действительно зависает, планировщик может переключиться на другую группу взаимозависимых задач, чтобы все процессы не зависли[4]. Однако застрявший поток всё равно будет потреблять ресурсы: по крайней мере, запись в расписании, и если он запущен (например, застрял в бесконечном цикле), он будет потреблять процессорные циклы и мощность, когда он запланирован, замедляя работу системы, хотя и не приводя к зависанию всей системы. Перемещение по окну поверх зависшей программы во время зависания может привести к перерисовке следа окна[5].

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

Классификация и виды зависаний

[править | править код]

По масштабности:

  • Зависания компьютера/операционной системы в целом[1]
  • Зависания отдельной прикладной программы (приложения)[1]

По повторяемости:

  • Стабильные — можно выявить и воссоздать условия, при которых происходит зависание.
  • Произвольные[1] — неоднократные зависания, для которых выявить зависимость от внешних факторов или действия пользователей (пользовательских программ) не удаётся.
  • Разовые — любое случайное зависание, которое более не повторяется.

Причины зависания

[править | править код]

Программные

[править | править код]
  • неверное завершение циклов[6]
  • взаимная блокировка процессов в многозадачных ОС[7][2]
  • неправильное использование памяти программами (пробуксовка)
  • чрезмерное использование ресурсов компьютера (например нехватка свободного места на накопителях или недостаток оперативной памяти)[8]
  • ошибки в драйверах или иных составных частях ОС[2]

Аппаратные

[править | править код]
  • Нарушение температурного режима[2] (например перегрев).
  • Механические повреждения: разрывы проводов, трещины, вздутые конденсаторы и т. п.
  • Химические повреждения.
  • Неправильное напряжение питания, подаваемое на компьютер или его элементы[2][9]
  • Дефекты поверхности в жёстких дисках[2].
  • Дефекты модулей оперативной памяти.
  • Ошибки при передачи данных по кабелям (в частности от накопителей) из-за электрических/электромагнитных помех или плохих контактов.

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

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

Современные операционные системы предоставляют механизм для завершения зависших процессов, например, с помощью команды kill в Unix, taskkill в Windows или с помощью графических средств, таких как кнопка «Завершить задачу» диспетчера задач в Windows (выберите конкретный процесс в списке и нажмите «Завершить задачу»). Windows добавляет текст «(Не отвечает)» к заголовку окна. Начиная с Windows Vista, прозрачный белый слой будет покрывать содержимое окна при попытке взаимодействия с пользователем, чтобы было ясно, что программа не реагирует (при этом программа не обязательно зависла, возможно идут длительные вычисления или ожидается ответ от баз данных/сетевых ресурсов и прочее)[10].

В старых системах, таких как те, которые работают под управлением MS-DOS, ранних версий Windows или классической Mac OS, часто требовалась полная перезагрузка в случае зависания.

Во многих случаях зависание программы приводит к потере всех несохранённых данных в программе[3], хотя некоторые программы пытаются предотвратить это путём механизма автосохранения документов[11].

На встраиваемых устройствах, где взаимодействие с человеком ограничено, сторожевой таймер может перезагрузить компьютер в случае зависания.

Продолжить работу программы можно только выгрузив её из памяти и запустив на исполнение снова. В большинстве современных операционных систем предусмотрена возможность прерывания исполнения программ, например — команда kill и различные интерфейсы к ней в системах GNU/Linux, или диспетчер задач, либо консольная команда taskkill в Microsoft Windows. В случае полного зависания ОС, когда она не реагирует на ввод клавиатуры или мыши, работу можно продолжить только после полной перезагрузки операционной системы, либо использования Magic SysRq в Linux (REISUB).

Устранение стабильных зависаний связано с выявлением их причин — обновление драйверов и зависающей программы, чистка компьютера от пыли, замена термопасты, блока питания, удаление вирусов и так далее[1][2].

Примечания

[править | править код]
  1. 1 2 3 4 5 6 Устранение неполадок, при которых Windows 8.1, Windows 8 или Windows 7 зависают или перестают работать. support.microsoft.com. Дата обращения: 24 августа 2022. Архивировано 24 августа 2022 года.
  2. 1 2 3 4 5 6 7 Clay Shields. Why do computers crash? (англ.). Scientific American (31 мая 2004). Дата обращения: 24 августа 2022. Архивировано 1 мая 2018 года.
  3. 1 2 bobology.com (10 марта 2015). What is a Computer Crash?. Архивировано 28 апреля 2017. Дата обращения: 24 августа 2022.
  4. D'Souza David. US6052707A Preemptive multi-tasking with cooperative groups of tasks (англ.). — 1996. — 21 June. Архивировано 24 августа 2022 года.
  5. Nostalgia: Dragging the Windows XP error dialog. old.marcofolio.net. Дата обращения: 24 августа 2022. Архивировано 19 января 2022 года.
  6. Calvin Hsia. Here’s an infinite loop that will hang your machine (англ.) (15 ноября 2006). Дата обращения: 24 августа 2022. Архивировано 14 апреля 2018 года.
  7. Квиттнер П. Задачи, программы, вычисления, результаты.. — М.: Мир, 1980. — С. 334—337. — 422 с.
  8. Michael R. Groh. Access 2010 PL. Biblia. — Helion, 2013-11-14. — 1306 с. — ISBN 978-83-246-7104-5. Архивировано 25 апреля 2016 года.
  9. Krzysztof Daszkiewicz, Michael Schmelzle, Thomas Rau. System w zawieszeniu (пол.). pcworld.pl (1 октября 2005). Дата обращения: 24 августа 2022. Архивировано 24 августа 2022 года.
  10. Troubleshoot Windows 8.1, Windows 8 or Windows 7 hangs or freezes. support.microsoft.com. Дата обращения: 24 августа 2022. Архивировано 24 августа 2022 года.
  11. Что такое автосохранение? support.microsoft.com. Дата обращения: 24 августа 2022. Архивировано 24 августа 2022 года.

Литература

[править | править код]