Долго думал, добавить "свои 5 копеек" или где! Излагаю "мыслю".
В том случае, когда железо работает нормально, отсутствуют hard-причины зависания РС. Если железо нестабильно (самая страшная ситуация - нельзя локализовать причину), то причин - миллион!
А вот soft-причины зависания РС, в конечном счете, сводятся к одной - нет ответа на прерывание! Протокольные нестыковки рассматривать не будем, поскольку они суть свидетельство некомпетентности разработчика.
Что же есть прерывание? При выполнении любой программы, особенно входящей в состав ОС, рано или поздно наступает момент, когда она прерывает свою работу в ожидании ответа от внешнего объекта взаимодействия (не имеет значения, программа это или железо) на отправленный запрос. Именно в такой ситуации мы видим на дисплее текст: "Эта программа не отвечает..." Нет ответа - программа висит или повторяет запрос (как с водой при чистке зубьев).
Как ни странно, все запросы, в конечном опять же счете, сводятся к ответу на простой вопрос: "Ты, гад, сделал то, что я просила (требовала), или ты получил, что просил (в инете - свой пакет)? Пошто молчить, мерзавец?"
Для предотвращения подобных зависаний в ожидании ответа вводят ограничения на время ожидания (ошибки тайм-аута) или количества повторений запроса. И вот если программист что-либо не предусмотрел в подобной ситуации или предусмотрел что-либо не то (раньше это хорошо было видно при работе с дискетами - досовские программы не хотели принудительно прекращать работу без дискеты в дисководе), ведущая программа зависает.
Безусловно, когда много или даже очень много программ, входящих в ОС, ожидают ответа на свой запрос, операционка может зависнуть. Если в такой ситуации в Windows можно запустить диспетчера задач и позакрывать "висящие" приложения и процессы, то ОСь оживёт, иначе только RESET.
Я это хорошо знаю потому, что еще в 1980 г. венгерский дисплейный комплекс не присылал моей программе подтверждение о завершении одной единственной команды "Записать по конкретному адресу". Все остальное он, мерзавец, выполнял без ошибок! Я долго бился с жестянщиками "смертным боем", доказывая про неверблюда. Редчайший случай в программистской практике тех времен - доказал, что не верблюд! Сильно они меня с тех пор "зауважали", потому что долго ползали на карачках, обвешивая этот ДК неонками для отлова электрического сигнала с ответом на запрос о завершении операции.
PS. На сладкое напомню первую заповедь программиста, справедливость которой контора Билли подтверждает одним своим существованием: "До конца отлаженная программа никому не нужна!"