Введение

Когда компьютерная программа перестает функционировать должным образом и завершается самопроизвольно

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

Сбой на рабочем столе

"Вылет на рабочий стол" происходит, когда программа (чаще всего видеоигра) неожиданно завершает работу, мгновенно возвращая пользователя на рабочий стол. Обычно этот термин используется только для случаев, когда не отображается сообщение об ошибке, и единственное, что видит пользователь после вылета – это рабочий стол. Зачастую нет очевидной причины для вылета на рабочий стол. В процессе нормальной работы программа может на короткое время зависать, а затем закрываться самостоятельно. Также в процессе нормальной работы программа может показывать черный экран и циклически воспроизводить последние несколько секунд звука (в зависимости от размера аудио-буфера), который звучал непосредственно перед вылетом. Иногда вылет кажется спровоцированным определенным действием, например, загрузкой локации. Ошибки, приводящие к вылету на рабочий стол, считаются особенно неприятными для пользователей. Поскольку они часто не сопровождаются сообщениями об ошибках, бывает очень сложно определить источник проблемы, особенно если время возникновения вылета и действия, предшествующие ему, не имеют видимой закономерности или общей причины. Один из способов выявить причину вылетов в играх – запускать их в оконном режиме. В Windows Vista есть функция, которая помогает определить причину вылета (CTD) в любой программе. Аналогичная функция была и в Windows XP. Некоторые компьютерные программы, такие как StepMania и Bamzooki от BBC, также вылетают на рабочий стол в полноэкранном режиме, но отображают сообщение об ошибке в отдельном окне после возвращения на рабочий стол.

Сбой веб-сервера

Программное обеспечение, работающее на веб-сервере, обслуживающем веб-сайт, может аварийно завершить работу, делая его полностью недоступным или отображая только сообщение об ошибке вместо обычного содержимого. Например, если сайт использует базу данных SQL (например, MySQL) для скрипта (например, PHP), и сервер этой базы данных SQL выходит из строя, то PHP отобразит сообщение об ошибке подключения.

Сбой операционной системы

Сбой операционной системы обычно происходит, когда возникает аппаратное исключение, которое не может быть обработано. Сбои операционной системы также могут возникать, когда встроенная логика самопроверки в операционной системе обнаруживает потерю внутренней согласованности. Современные многозадачные операционные системы, такие как Linux и macOS, как правило, остаются работоспособными при сбое прикладной программы. Некоторые операционные системы, например, z/OS, обладают средствами обеспечения надежности, доступности и ремонтопригодности (RAS), и ОС может восстановиться после сбоя критически важного компонента, вызванного как аппаратной неисправностью, например, необратимой ошибкой ECC, так и программным сбоем, например, обращением к невыделенной странице памяти.

Необычная концовка

Аномальное завершение или ABEND — это ненормальное прекращение работы программного обеспечения или сбой программы. Ошибки или сбои в сетевой операционной системе Novell NetWare обычно называются ABEND. Сообщества администраторов NetWare возникли в сети Интернет, например, abend.org. Это использование восходит к макросу ABEND в операционных системах IBM OS/360 и z/OS. Обычно пишется с большой буквы, но может встречаться и в виде "abend". Некоторые распространенные коды ABEND — это System ABEND 0C7 (исключение данных) и System ABEND 0CB (деление на ноль). ABEND может быть "мягким" (допускающим автоматическое восстановление) или "жестким" (приводящим к завершению операции). В шутку утверждается, что термин произошел от немецкого слова "abend", означающего "вечер".

Последствия аварий для безопасности и конфиденциальности

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