330 likes | 756 Views
Przerwania. Funkcje systemowe. Przerwanie. Przerwanie to pewien sygnał skierowany do procesora. Może pochodzić ze sprzętu lub oprogramowania. Przerwanie powoduje wstrzymanie aktualnie wykonywanego programu i wykonanie przez procesor kodu procedury obsługi przerwania (ang. interrupt handler).
E N D
Przerwanie Przerwanie to pewien sygnał skierowany do procesora. Może pochodzić ze sprzętu lub oprogramowania. Przerwanie powoduje wstrzymanie aktualnie wykonywanego programu i wykonanie przez procesor kodu procedury obsługi przerwania (ang. interrupt handler).
Rodzaje przerwań Sprzętowe: Zewnętrzne – sygnał przerwania pochodzi z zewnętrznego układu obsługującego przerwania sprzętowe; przerwania te służą do komunikacji z urządzeniami zewnętrznymi, np. z klawiaturą, napędami dysków itp. Wewnętrzne, nazywane wyjątkami (ang. exceptions) – zgłaszane przez procesor dla sygnalizowania sytuacji wyjątkowych (np. dzielenie przez zero); dzielą się na trzy grupy: faults (niepowodzenie) – gdy dana instrukcja wywoła błąd, który da się naprawić i można powrócić do dalszego wykonywania traps (pułapki) – gdy nie wystąpił błąd, a jedynie wcześniej zaplanowane wykonanie przerwania (stosowane często przy debugowaniu aplikacji) aborts (nienaprawialne). Programowe – z kodu programu wywoływana jest procedura obsługi przerwania; najczęściej wykorzystywane do komunikacji z systemem operacyjnym, który w procedurze obsługi przerwania (np. w DOS 21h, Windows 2fh, Linux x86 przerwanie 80h) umieszcza kod wywołujący odpowiednie funkcje systemowe w zależności od zawartości rejestrów ustawionych przez program wywołujący.
Przerwania sprzętowe Przerwania posiadają numery – różne urządzenia skojarzone są z różnymi numerami Numery te skojarzone są z tzw. linią żądania przerwania IRQ. Linii tej przypisana jest wartość liczbowa, np.: IRQ 0 – przerwanie zegarowe IRQ 1 – przerwanie klawiatury
Procedura obsługi przerwania sprzętowego Przykład obsługi interfejsu sieciowego przy odbieraniu pakietu: Poinformowanie urządzenia o przyjęciu przerwania Skopiowanie pakietu sieciowego z bufora urządzenia do pamięci operacyjnej Przetworzenie pakietu „Przepchnięcie” przez właściwy stos protokołów Przekazanie do aplikacji docelowej
Procedura obsługi przerwania sprzętowego Przykład obsługi interfejsu sieciowego przy odbieraniu pakietu: Poinformowanie urządzenia o przyjęciu przerwania Skopiowanie pakietu sieciowego z bufora urządzenia do pamięci operacyjnej Przetworzenie pakietu „Przepchnięcie” przez właściwy stos protokołów Przekazanie do aplikacji docelowej
Co to jest Bios ? Jest przechowywany w kości pamięci ROM podstawowe procedury wejścia/wyjścia zbiór procedur napisanych w Asemblerze, sterujących wykonywaniem podstawowych funkcji komputera: obsługa dysku, karty video, portu drukarki itd.
DOS program ,który kontroluje komputer i jego zasoby od momentu jego włączenia aż do wyłączenia. poprzez funkcje DOS programy użytkowe mogą czytać pliki, zapisywać je do pamięci, kontrolować naciskanie klawiszy klawiatury, uruchamiać inne programy, ustawiać datę i czas.
Funkcje BIOS , DOS Funkcje BIOS uzupełniają DOS (system operacyjny) w zakresie kontroli nad sprzętem. Spośród wielu zastosowań funkcji BIOS jednym z nich jest użycie go w celu sterowania monitorem ekranowym. Tylko przez przywoływanie funkcji BIOS można ustawić tryb pracy monitora, mieć kontrolę nad kolorami, sposobem wyświetlania itp. np: MOV AH,0 ; tryb ustawienia BIOS MOV AL,4 ; nr trybu dla 4-kolorowej grafiki 320x200 (CGA) INT 10h ; wykonaj przerwanie BIOS ustawiające tryb video
Tablica wektorów przerwań Na samym początku pamięci ,w segmencie 0 ,znajduje się specjalna tabela skoków posiadająca 256 pozycji. 256 wektorów x 4 bajty dla jednego wektora każdy adres z tej tabeli skoków nazywamy wektorem przerwania.
Tablica wektorów przerwań Adresy programów obsługi przerwań są wpisywane do tablicy wektorów przerwań przy ładowaniu systemu operacyjnego przez BIOS i przez system operacyjny istnieje specjalna instrukcja CPU służąca do "używania" tabeli wektorów. Instrukcja → INT np. INT 21h
Przerwania BIOS-u int 10h (przerwanie karty graficznej) int 13h (obsługa dysków) int 16h (obsługa klawiatury) Int 17h (obsługa drukarki)
Przykładowa funkcja przerwania BIOS-u 16h (obsługa klawiatury) funkcja 0 - pobierz kod naciśniętego klawisza (lub czekaj na naciśnięcie): Argumenty: AH = 0 Zwraca: AH = BIOSowy kod klawisza (skankod) AL = kod klawisza ASCII
Przerwania BIOS-u przerwania BIOS-u muszą pracować w trybie rzeczywistym. Linux ich nie może używać gdyż sam pracuje w trybie chronionym (a przełączanie się jest zbyt kosztowne) przerwania BIOS-u są wolniejsze od bezpośredniej obsługi urządzeń przerwania BIOS-u zmniejszają bezpieczeństwo systemu (np: również dzięki nim w systemie operacyjnym DOS można było odczytać dowolną informację z dysku); przerwania te nie zapewniają wsparcia dla nowych typów urzadzeń. Dziś już nie są one używane przez nowoczesne systemy operacyjne, takie jak Linux. Powodów po temu jest kilka:
Przykładowa funkcja przerwaniaDOS'a 21h Funkcja 09h - wyświetl napis: Argumenty: AH = 9 DS:DX = adres łańcucha znaków zakończonego znakiem dolara "$"
Przykładowa funkcja przerwaniaDOS'a 21h Funkcja 01h - czytaj klawisz: Argumenty: AH = 1 Zwraca: AL = kod klawisza ASCII
Przykładowa funkcja przerwaniaDOS'a 21h Funkcja 4Ch - zakończenie działania bieżącego programu: Argumenty: AH = 4Ch AL = 0 → kod wyjścia (errorlevel) zwracany systemowi operacyjnemu
Przerwanie systemowe Linuksa int 80h MOV EAX, <numer_funkcji> Jeśli jakaś funkcja zakończy się błędem, w EAX zwracana jest wartość ujemna z przedziału od -4096 do -1 włącznie
Przerwanie systemowe Linuksa 80hFunkcja numer 1 (wyjście z programu) ... MOV EAX, 1 ; numer funkcji systemowej ; (sys_exit - wyjdź z programu) INT 80h ; wywołanie funkcji systemowej
Przerwanie systemowe Linuksa 80hFunkcja numer 5 (otwarcie pliku) ... MOV EAX, 5 ; numer funkcji systemowej: MOV EBX, plik ; adres nazwy pliku MOV ECX, 2 ; 2 - otwieranie do odczytu i zapisu MOV EDX, 111000000b ; 700 - zabroń innym dostępu INT 80h ; jeśli udalo się otworzyc plik … ; w EAX znajdzie się deskryptor pliku section .data plik db "nazwa.txt",0 ; nazwa pliku
Przerwanie systemowe Linuksa 80hFunkcja numer 4 (zapis do pliku) ... MOV EAX, 4 ; numer funkcji systemowej: ; sys_write - zapisz do pliku MOV EBX, 1 ; numer pliku, do którego pisze. ; 1 = standardowe wyjście = ekran MOV ECX, tekst ; ECX = adres (offset) tekstu MOV EDX, dlugosc ; EDX = długość tekstu INT 80h ; wywołanie funkcji systemowej ... section .data tekst DB "Czesc", 0ah ; napis dlugosc EQU $ - tekst ; długość napisu
Przerwanie systemowe Linuksa 80hFunkcja numer 6 (zamknięcie pliku) … MOV EAX, 6 ; numer funkcji systemowej: MOV EBX, <deskryptor_pliku> ; EBX = deskryptor pliku INT 80h ...
Wywołania systemowe Stanowią interfejs między wykonywanym programem a (posiadającym zwykle wyższe uprawnienia) jądrem systemu operacyjnego.