Awaria (przetwarzanie) — Crash (computing)

Panika jądra wyświetlana na komputerze iMac . Jest to najczęstsza forma awarii systemu operacyjnego w systemach uniksopodobnych.

W informatyce , w wypadku lub awarii systemu , pojawia się, gdy program komputerowy taki jak aplikacji lub systemu operacyjnego nie działa prawidłowo i wyjścia . W niektórych systemach operacyjnych lub pojedynczych aplikacjach usługa raportowania awarii zgłosi awarię i wszelkie związane z nią szczegóły (lub da użytkownikowi taką możliwość), zwykle deweloperom aplikacji. Jeśli program jest krytyczną częścią systemu operacyjnego, cały system może ulec awarii lub zawiesić się, często powodując panikę jądra lub krytyczny błąd systemu .

Większość awarii jest wynikiem błędu oprogramowania . Typowe przyczyny to dostęp do nieprawidłowych adresów pamięci , niepoprawne wartości adresów w liczniku programu , przepełnienie buforu , nadpisanie części kodu programu, którego dotyczy problem z powodu wcześniejszego błędu, wykonanie nieprawidłowych instrukcji maszynowych ( nieprawidłowy kod operacyjny ) lub wyzwolenie nieobsłużonego wyjątku . Pierwotny błąd oprogramowania, który zapoczątkował ten łańcuch zdarzeń, jest zwykle uważany za przyczynę awarii, która jest wykrywana w procesie debugowania . Oryginalny błąd może być daleko od kodu, który faktycznie wywołał awarię.

We wczesnych komputerach osobistych próba zapisania danych pod adresami sprzętowymi poza pamięcią główną systemu mogła spowodować uszkodzenie sprzętu. Niektóre awarie można wykorzystać i umożliwiają złośliwemu programowi lub hakerowi wykonanie dowolnego kodu umożliwiającego replikację wirusów lub pozyskiwanie danych, które normalnie byłyby niedostępne.

Awarie aplikacji

Wyświetlacz na lotnisku we Frankfurcie, na którym działa program w systemie Windows XP , który uległ awarii z powodu naruszenia dostępu do odczytu pamięci

Aplikacja zazwyczaj zawiesza gdy wykonuje operację, która nie jest dozwolony przez system operacyjny. System operacyjny następnie wyzwala wyjątek lub sygnał w aplikacji. Aplikacje uniksowe tradycyjnie reagowały na ten sygnał zrzucaniem rdzenia . Większość aplikacji Windows i Unix GUI reaguje, wyświetlając okno dialogowe (takie jak pokazane po prawej) z opcją dołączenia debugera, jeśli jest zainstalowany. Niektóre aplikacje próbują naprawić błąd i kontynuować działanie zamiast kończyć działanie .

Aplikacja może również zawierać kod powodujący awarię po wykryciu poważnego błędu.

Typowe błędy powodujące awarie aplikacji to:

  • próba odczytu lub zapisu pamięci, która nie jest przydzielona do odczytu lub zapisu przez tę aplikację (np. błąd segmentacji , ogólny błąd ochrony specyficznej dla x86 )
  • próba wykonania uprzywilejowanych lub nieprawidłowych instrukcji
  • próba wykonania operacji I/O na urządzeniach sprzętowych , do których nie ma uprawnień dostępu
  • przekazywanie nieprawidłowych argumentów do wywołań systemowych
  • próba uzyskania dostępu do innych zasobów systemowych, do których aplikacja nie ma uprawnień dostępu
  • próba wykonania instrukcji maszynowych ze złymi argumentami (w zależności od architektury procesora): dzielenie przez zero , operacje na nienormalnej liczbie lub wartości NaN (nie liczba), dostęp do pamięci do niewyrównanych adresów itp.

Awaria na pulpicie

Mówi się, że „awaria na pulpicie” ma miejsce, gdy program (zwykle gra wideo ) nieoczekiwanie się kończy, nagle przenosząc użytkownika z powrotem na pulpit . Zwykle termin ten jest stosowany tylko do awarii, w których nie jest wyświetlany żaden błąd, dlatego w wyniku awarii użytkownik widzi tylko pulpit. Wiele razy nie ma widocznej akcji, która powoduje awarię pulpitu. Podczas normalnego funkcjonowania program może się zawiesić na krótszy czas, a następnie zamknąć się samoczynnie. Również podczas normalnej pracy program może stać się czarnym ekranem i wielokrotnie odtwarzać ostatnie kilka sekund dźwięku (w zależności od rozmiaru bufora danych ), który był odtwarzany przed awarią na pulpicie. Innym razem może się wydawać, że został wywołany przez określoną czynność, na przykład wczytanie obszaru.

Błędy Crash to Desktop są uważane za szczególnie problematyczne dla użytkowników. Ponieważ często nie wyświetlają żadnego komunikatu o błędzie, znalezienie źródła problemu może być bardzo trudne, zwłaszcza jeśli czasy ich wystąpienia i działania mające miejsce tuż przed awarią nie wydają się mieć żadnego wzorca ani wspólnej podstawy. Jednym ze sposobów na znalezienie źródła problemu w grach jest uruchomienie ich w trybie okienkowym. System Windows Vista ma funkcję, która może pomóc w śledzeniu przyczyny problemu CTD, gdy występuje on w dowolnym programie. Windows XP również zawierał podobną funkcję.

Niektóre programy komputerowe, takie jak StepMania i BBC Bamzooki , również zawieszają się na pulpicie, jeśli działają w trybie pełnoekranowym, ale wyświetlają błąd w osobnym oknie, gdy użytkownik wraca na pulpit.

Awarie serwera internetowego

Oprogramowanie obsługujące serwer sieciowy za witryną może ulec awarii, czyniąc ją całkowicie niedostępną lub wyświetlając tylko komunikat o błędzie zamiast normalnej treści.

Na przykład: jeśli witryna używa bazy danych SQL (takiej jak MySQL ) dla skryptu (takiej jak PHP ) i serwer bazy danych SQL ulegnie awarii, PHP wyświetli błąd połączenia.

Awaria systemu operacyjnego

Blue Screen of Death , jak wyświetlane w systemie Windows XP, Vista i 7
Panika jądra w systemie OS X Mountain Lion

Awaria systemu operacyjnego często występuje, gdy wystąpi wyjątek sprzętowy , którego nie można obsłużyć . Awarie systemu operacyjnego mogą również wystąpić, gdy wewnętrzna logika sprawdzania poprawności w systemie operacyjnym wykryje, że system operacyjny utracił swoją wewnętrzną spójność.

Nowoczesne wielozadaniowe systemy operacyjne, takie jak Linux i macOS , zwykle pozostają nienaruszone w przypadku awarii aplikacji.

Niektóre systemy operacyjne, np. z/OS , mają funkcje zapewniające niezawodność, dostępność i serwisowalność (RAS), a system operacyjny może odzyskać sprawność po awarii krytycznego komponentu, czy to z powodu awarii sprzętu, np. błędu ECC, którego nie można naprawić, czy też awarii oprogramowania , np. odwołanie do nieprzypisanej strony.

Wpływ awarii na bezpieczeństwo i prywatność

W zależności od aplikacji awaria może zawierać poufne i prywatne informacje użytkownika. Co więcej, wiele błędów oprogramowania, które powodują awarie, można również wykorzystać do wykonania dowolnego kodu i innych rodzajów eskalacji uprawnień . Na przykład przepełnienie bufora stosu może nadpisać adres powrotu podprogramu nieprawidłową wartością, co spowoduje np. błąd segmentacji , gdy podprogram powróci. Jeśli jednak exploit nadpisze adres powrotu prawidłową wartością, kod z tego adresu zostanie wykonany.

Reprodukcja awarii

Gdy awarie są zbierane w terenie za pomocą narzędzia do zgłaszania awarii , następnym krokiem dla programistów jest umożliwienie ich lokalnego odtworzenia. W tym celu istnieje kilka technik: STAR wykorzystuje wykonanie symboliczne, MuCrash mutuje kod testowy aplikacji, która uległa awarii, a EvoCrash przeprowadza wyszukiwanie ewolucyjne.

Zobacz też

Uwagi

Bibliografia

Zewnętrzne linki