osdev.labedz.org

Menadżer przerwań i wyjątków

Wszystkie przerwania i wyjątki są wywoływane zgodnie z ich opisami w tablicy deskryptorów przerwań. Każdy deskryptor używanego przerwania ma podany adres procedury, która ma być wywołana w razie jego wystąpienia. Procedury te zawarte są w pliku assemblera wrapper.asm i mają one za zadanie przygotowanie argumentów na stosie, a następnie wywołanie procedur obsługi przerwań i wyjątków napisanych w języku wyższego poziomu.

Wszystkie wyjątki generowane przez procesor są obsługiwane przez jedną, ogólną procedurę. Jedynym rozróżnieniem jest ustawienie argumentu kodu błędu dla wyjątków 0x8, 0x0A, 0x0B, 0x0C, 0x0D, oraz 0x0E, a dla pozostałych wpisanie w tym miejscu wartości zerowej. Procedura obsługi wyjątków exception_handler ma za zadanie wypisanie adresu instrukcji która spowodowała wyjątek, jej kodu błędu, następnie poinformowanie czy błąd nastąpił na poziomie jądra czy aplikacji i podanie identyfikatora aktualnie wykonywanego procesu. Po wypisaniu informacji o wystąpieniu wyjątku system jest zatrzymywany

Procedura obsługi przerwania zegarowego ma za zadanie uruchomienie uruchomienie procedury obsługi zegara systemowego timer_handler oraz procedury szeregującej procesy scheduler.

Procedura obsługi przerwania pochodzącego od klawiatury key_handler ma za zadanie pobranie z portu klawiatury aktualnego jej stanu i wypisanie kodu naciśniętego klawisza na ekranie.