Что мешает ОС восстановиться после «синего экрана смерти»?

Если программа нарушает свой путь инструкций и/или данные памяти, ОС останавливает ее с некоторым сообщением из-за того, что программа работает в «виртуальной машине», например, в пространстве ОС, и не может определить свою следующую инструкцию.

Операционная система также является программой, разделяющей ресурсы компьютера, как и любая другая программа, и может останавливаться аналогичным образом, но иногда она достаточно работоспособна, чтобы отображать некоторую отладочную информацию и синий экран. Итак, как программист, я думаю, если я могу это сделать - выдать отладочную информацию и сделать экран синим, почему я не смогу попытаться полностью восстановить ОС вместо того, чтобы требовать холодную перезагрузку? В конце концов, это ОС - она ​​должна быть прочной основой (не говоря о Windows, конечно) всего программного обеспечения, если бы космический шаттл работал под управлением Windows, что произойдет - он не восстановится? :)

Итак: это только то, что MS не позаботилась о том, чтобы попытаться восстановить все до такой степени, что перезагрузка не требуется, или это какая-то другая, более глубокая проблема, из-за которой такие компании, как MS, не могут это сделать?


person selion    schedule 27.05.2011    source источник
comment
Я думаю, что это плохо замаскированная тирада против Microsoft. Голосование за закрытие.   -  person Greg Hewgill    schedule 27.05.2011
comment
Я привожу MS в качестве примера, это также единственная ОС, которую я использую   -  person selion    schedule 27.05.2011
comment
любая операционная система может дать сбой. В линуксе это паника ядра. В OSX вы получаете что-то вроде синего экрана.   -  person hvgotcodes    schedule 27.05.2011
comment
... но как давно вы не видели BSOD? И когда вы в последний раз видели BSOD, вызванный чем-то не глючным видеодрайвером? Если это избиение Microsoft, то оно на несколько лет отстало от времени. :)   -  person sarnold    schedule 27.05.2011


Ответы (2)


Вы не можете восстановить ОС по тем же причинам, по которым не может восстановить программу пользовательского пространства — когда обнаруживаются определенные типы ошибок, это означает, что ваша программа находится в неопределенном состоянии и, следовательно, не может восстановиться. Даже если проблема в каком-то смысле не фатальна (т. е. не приводит к немедленному завершению программы), продолжать работу небезопасно, поскольку что-то повреждено или может быть повреждено.

Например, будь то программа пользовательского пространства или ядро ​​ОС, скажем, переполнение буфера или неверный указатель приводят к повреждению стека. Как программа должна восстановиться после этого? Куда она вернется, если стек взорвется, когда функция, выполняющаяся в данный момент, завершится? Обратный адрес, скорее всего, утерян. Что теперь?

И это не только Microsoft. Вы когда-нибудь слышали о «панике ядра» в Unix?

person QuantumMechanic    schedule 27.05.2011
comment
Да, я слышал о панике ядра, думаю, вы правы. На самом деле ОС теперь может перезапуститься с самого начала, как я думаю, и MS иногда так делает. По крайней мере, сэкономив время, наклонитесь и перезапустите его вручную. Спасибо за это. - person selion; 27.05.2011

В этом нет ничего особенного для Microsoft; В Linux есть механизм паники ядра, в OS X есть < механизм href="http://en.wikipedia.org/wiki/File%3aMacOSX_kernel_panic.png" rel="nofollow">паники ядра. Я ожидаю, что каждое ядро ​​операционной системы, не являющееся игрушечным, имеет какой-то механизм паники при обнаружении внутреннего повреждения. Порча может быть вызвана неисправным оборудованием, неисправным программным обеспечением, гамма-лучами, попадающими на платы памяти в самый раз, кто знает.

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

Запись на видеокарту — хороший способ информировать пользователя о событиях (в любом случае, ко многим системам подключены мониторы), а запись на видеокарту вряд ли приведет к повреждению данных на диске: для IOMMU потребуется довольно много ошибок. или таблицы страниц будут настолько повреждены, что вместо этого будут ссылаться на файлы на диске, и большинство операционных систем откажутся записывать на блочные устройства после паники ядра, чтобы попытаться защитить пользовательские данные любой ценой.

Подумайте, что вы могли бы сделать, чтобы вернуть систему в рабочее состояние? Вам нужно будет удалить все приложения, которые могут быть связаны с поврежденными структурами данных ядра. Вам потребуется перезапустить приложения в правильном порядке, чтобы восстановить системные службы. И перезагрузка — очень простой способ надежно сделать обе эти вещи.

person sarnold    schedule 27.05.2011