Crash (informatyka)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
Automat telefoniczny, w którym doszło do crashu po wystąpieniu błędu krytycznego i pojawił się BSOD

Crash (crash systemu) – sytuacja, w której program (aplikacja, system operacyjny) przestaje działać prawidłowo. Przeważnie po wystąpieniu tego typu błędu działanie programu zostanie zakończone. Rozważany program może sprawiać wrażenie zawieszonego, zanim zostanie odnotowany crash (i wszelkie potencjalne szczegóły z nim powiązane.) Jeśli program stanowi krytyczną część systemu operacyjnego, cały komputer może ulec crash'owi, przez co często następuje krytyczny błąd systemu, lub błąd jądra. W niektórych przypadkach może nastąpić destabilizacja sieci.

Wiele crashów jest rezultatem nieprawidłowego wykonania pojedynczej lub kilku instrukcji maszynowych. Typowa przyczyną jest sytuacja, w której licznik programu jest ustawiony na błędny adres lub przepełnienie bufora nadpisuje część kodu programu z powodu wcześniejszego błędu. W każdym z tych przypadków, CPU próbuje uzyskać dostęp do danych lub pamięci RAM. Ponieważ można wybrać wszystkie wartości danych, ale nie zawsze prawidłowych, często dochodzi do wywołania wyjątku niedozwolonej instrukcji.

Istnieje szansa na to, że takie dane lub wartości losowe mogą być prawidłowymi (chociaż nieplanowanymi) instrukcjami. Pierwotny Problem Programu uważany jest za przyczynę awarii systemu, ale rzeczywista usterka może być, na przykład, niedozwoloną instrukcją. Proces debugowania takich awarii łączy rzeczywiste przyczyny katastrofy z kodem, który uruchomił całą sekwencję zdarzeń. Przeważnie nie jest to oczywiste; oryginalny błąd jest zazwyczaj całkowicie poprawnym kodem, „podanym” procesorowi.

W starszych komputerach osobistych, można było doprowadzić do uszkodzenia sprzętu poprzez próby zapisu danych do adresów sprzętowych poza główną pamięcią systemu[1].

Crash w aplikacjach[edytuj]

Komputer na frankfurckim lotnisku, gdzie doszło do crashu programu działającego w Windows XP (z powodu naruszenia ochrony pamięci)

Do crashu aplikacji dochodzi przeważnie w momencie, gdy wykonuje ona operację niedozwoloną w danym systemie operacyjnym. Wówczas system wywołuje wyjątek w tej aplikacji. Unixowe aplikacje zazwyczaj odpowiadają poprzez wykonywanie zrzutu rdzenia. Większość aplikacji posiadających graficzny interfejs w systemach Windows oraz Unix odpowiada poprzez wyświetlanie okna dialogowego (zob. grafika po prawej) z możliwością dołączenia debuggera jeżeli jest zainstalowany. Takie zachowanie programu określa się mianem „crashowania”. Niektóre programy próbują powrócić do pracy po wystąpieniu błędu, zamiast robić crash.

Typowe błędy, w wyniku których dochodzi do crashu programów, to próby:

  • odczytu/zapisu pamięci, która nie jest przydzielona w tym celu przez aplikację (naruszenie ochrony pamięci) lub przez specyfikację architektury x86 (ogólny błąd ochrony)
  • wykonania nieprawidłowych lub uprzywilejowanych instrukcji
  • wykonania operacji wejścia/wyjścia na urządzeniach sprzętu do których użytkownik nie ma dostępu
  • przesyłania nieprawidłowych argumentów do wywołań systemowych
  • uzyskania dostępu do innych zasobów systemowych, do których program nie ma dostępu (ang. bus error - błąd szyny)
  • wykonania instrukcji maszynowych zawierających nieprawidłowe argumenty (zależne od architektury): dzielenie przez zero, operacje na liczbach zdenormalizowanych lub wartościach NaN itp.
  • odwołania się do nieustawionych wskaźników w programach napisanych w C++.

Przypisy

  1. Crash Computing | www.infopackets.com, www.infopackets.com [dostęp 2017-11-17] (ang.).