Wyjątek: Różnice pomiędzy wersjami

[wersja przejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
Paweł Ziemian BOT (dyskusja | edycje)
m WP:ZdB Sprzątanie wywołań {{cytuj stronę}}
Gbmx (dyskusja | edycje)
Poprawiona definicja i systematyka wyjątków w architekturach komputerowych (procesorach).
Linia 1:
'''Wyjątek''' ({{ang.|exception}}) - mechanizm [[przepływ sterowania|przepływu sterowania]] używany w [[mikroprocesor]]ach oraz współczesnych [[język programowania|językach programowania]] do obsługi zdarzeń wyjątkowych, a w szczególności błędów, których wystąpienie zmienia prawidłowy przebieg wykonywania programu. W momencie zajścia niespodziewanego zdarzenia generowany jest wyjątek, który musi zostać ''obsłużony'' poprzez zapamiętanie bieżącego stanu programu i przejście do [[Podprogram|procedury]] jego obsługi. W niektórych sytuacjach po obsłużeniu wyjątku można powrócić do wykonywania przerwanego kodu, korzystając z zapamiętanych informacji stanu. Przykładowo obsługa błędu braku [[Stronicowanie pamięci|strony pamięci]] polega najczęściej na pobraniu brakującej strony z [[Plik wymiany|pliku wymiany]], co umożliwia kontynuowanie pracy programu, natomiast błąd dzielenia przez zero powoduje, że wykonywanie dalszych obliczeń nie ma sensu i musi zostać definitywnie przerwane.
 
== Wyjątki w mikroprocesorachprocesorach ==
Wyjątki w procesorach są zdarzeniami, których wynikiem jest przerwanie wykonania bieżącego strumienia instrukcji i przekazanie sterowania do oprogramowania systemowego w celu programowej reakcji na zdarzenie.
Współczesne mikroprocesory posiadają dwa podobne mechanizmy przerywające wykonywanie programu, różniące się jednak pochodzeniem sygnału. Pierwszy z nich to [[Przerwanie|przerwania sprzętowe]] generowane w sposób [[Asynchroniczność|asynchroniczny]] przez zewnętrzne urządzenia, a drugi – ''wyjątki'' generowane [[Transmisja synchroniczna|synchronicznie]] przez sam procesor<ref name="interrupts_exceptions">{{cytuj stronę | url = http://www.internals.com/articles/protmode/interrupts.htm | autor = Yariv Kaplan | opublikowany = [http://www.internals.com/ internals.com] | tytuł = Interrupts and exceptions | data dostępu = 2010-10-10 | język = en}}</ref>. Klasyfikacja sprzętowych wyjątków zależy od konkretnej [[Architektura procesora|architektury procesora]]. Przykładowo, w procesorach [[Intel]]a istnieją trzy klasy wyjątków: niepowodzenia (ang. ''fault''), błędy nienaprawialne (ang. ''abort'') i pułapki (ang. ''traps'')<ref name="interrupts_exceptions" />, natomiast architektura [[PowerPC]] posiada tylko dwie: krytyczne i niekrytyczne<ref>{{cytuj stronę | url = http://www.google.pl/url?sa=t&source=web&cd=2&ved=0CB4QFjAB&url=http%3A%2F%2Fwww.ibm.com%2Fchips%2Ftechlib%2Ftechlib.nsf%2Ftechdocs%2F852569B20050FF77852569970063B427%2F%24file%2F405cr_wp.pdf&ei=BDGwTLHAAZCRswaxz63TDQ&usg=AFQjCNFNqpmDnThu7IikKEjOlD7v6Ot-UQ&sig2=fKATR8KzmRu1N-PSQH7p-A | tytuł = The PowerPC 405<sup>TM</sup> Core | opublikowany = IBM Microelectronics Division | data dostępu = 2010-10-10 | język = en | strony = 6}}</ref>.
 
Wyjątki dzielą się na synchroniczne, obsługiwane bezpośrednio po wystąpieniu, oraz asynchroniczne, których obsługa może, w zależności od bieżącego priorytetu procesora, zostać opóźniona.
 
Do wyjątków asynchronicznych należą przerwania. Wyjątki synchroniczne - to pułapki (traps) i błędy (faults, aborts, errors).
 
Przerwania mogą być generowane sprzętowo przez sterowniki urządzeń zewnętrznych oraz - w nowocześniejszych architekturach (np. ARM) - programowo przez procesor.
 
Pułapki są generowane przez jednostkę wykonawczą procesora w wyniku wykonania instrukcji, na końcu jej wykonania. Pułapki służą do trzech celów:
* wywołania przez program użytkowy usług systemu operacyjnego - instrukcja SVC (ARM), INT (x86), SYSCALL (x86) itp. (pułapka wywołania systemu była dawniej niezbyt fortunnie nazywana "przerwaniem programowym")
* sygnalizacji niepoprawnego z punktu widzenia programisty wykonania programu (np. pułapka przy nadmiarze operacji arytmetycznej)
* wspomagania debugowania programów (pułapka śledzenia).
Przy wystąpieniu pułapki wykonanie instrukcji, która ją spowodowała, zostaje normalnie zakończone.
 
Błędy mogą być generowane przez procesor lub jego otoczenie. Charakterystyczną cechą błędów jest to, że uniemożliwiają one zakończenie wykonania instrukcji, podczas której wystąpiły. Są to np:
* błąd wyrównania danych, sygnalizowany przez jednostkę wykonawczą
* błąd niezidentyfikowanej instrukcji lub niedozwolonej instrukcji
* błędy dostępu do pamięci, sygnalizowane przez jednostkę zarządzania pamięcią (stronicowania lub segmentacji).
 
== Wyjątki w językach programowania ==