przerwania. funkcje systemowe
DESCRIPTION
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). - PowerPoint PPT PresentationTRANSCRIPT
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).
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 BIOSMOV 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
Przykładowa funkcja przerwaniasystemowego Linuksa 80h
EAX Opis Argumenty Zwraca
1Wyjście z programu (sys_exit)
EBX= kod wyjścia
(errorlevel)
nie wraca do programu
wywołującego
Przerwanie systemowe Linuksa 80h
Funkcja numer 1 (wyjście z programu)
...
MOV EAX, 1 ; numer funkcji systemowej
; (sys_exit - wyjdź z programu)
INT 80h ; wywołanie funkcji systemowej
Przykładowa funkcja przerwaniasystemowego Linuksa 80h
EAX Opis Argumenty Zwraca
5 Otwarcie pliku (sys_open)
EBX = adres nazwy pliku
ASCIIZECX = bity
dostępuEDX = prawa dostępu / tryb
EAX=deskryptor pliku
EAX = błąd EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE,
ENAMETOOLONG, ENFILE, ENOENT,
ENODEV, ENODIR,
ENOMEM, ENOSPC, ENXIO, EROFS, ETXTBSY
Przerwanie systemowe Linuksa 80h
Funkcja 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 .dataplik db "nazwa.txt",0 ; nazwa pliku
Przykładowa funkcja przerwaniasystemowego Linuksa 80h
EAX Opis Argumenty Zwraca
4 Zapis do pliku (sys_write)
EBX = deskryptor pliku
ECX = adres bufora
źródłowegoEDX = liczba
bajtów do zapisania
EAX=liczba przeczytanych
bajtówEAX = błąd
EAGAIN, EBADF, EFAULT, EINTR,
EINVAL, EIO, ENOSPC, EPIPE
Przerwanie systemowe Linuksa 80h
Funkcja 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 .datatekst DB "Czesc", 0ah ; napisdlugosc EQU $ - tekst ; długość napisu
Przykładowa funkcja przerwaniasystemowego Linuksa 80h
EAX Opis Argumenty Zwraca
6 Zamknięcie pliku (sys_close)
EBX= deskryptor pliku
EAX = 0EAX = błąd
EBADF, EINTR, EIO
Przerwanie systemowe Linuksa 80h
Funkcja numer 6 (zamknięcie pliku)
…
MOV EAX, 6 ; numer funkcji systemowej:
MOV EBX, <deskryptor_pliku> ; EBX = deskryptor pliku
INT 80h
...
Przykładowa funkcja przerwaniasystemowego Linuksa 80h
EAX Opis Argumenty Zwraca
3 Czytanie z pliku (sys_read)
EBX = deskryptor pliku
ECX = adres bufora
docelowegoEDX = liczba
bajtów do przeczytania
EAX=liczba przeczytanych
bajtówEAX = błąd
EAGAIN, EBADF, EFAULT, EINTR,
EINVAL, EIO, EISDIR
Przykładowa funkcja przerwaniasystemowego Linuksa 80h
EAX Opis Argumenty Zwraca
19Zmiana bieżącej pozycji w pliku (sys_lseek)
EBX = deskryptor pliku
ECX = liczba bajtów, o którą
chcemy się przesunąć
EDX = odkąd zaczynamy ruch
EAX = nowa pozycja
względem początku pliku
EAX = błąd EBADF, EINVAL,
EISPIPE
Przykładowa funkcja przerwaniasystemowego Linuksa 80h
EAX Opis Argumenty Zwraca
20Pobierz
identyfikator bieżącego procesu
(sys_getpid)
nicEAX = PID bieżącego procesu
Przykładowa funkcja przerwaniasystemowego Linuksa 80h
EAX Opis Argumenty Zwraca
39 Utwórz katalog (sys_mkdir)
EBX = adres ścieżki/nazwy
ASCIIZECX = prawa dostępu / tryb
EAX = 0EAX = błąd -
każdy związany z systemem plików lub prawami dostępu
Przykładowa funkcja przerwaniasystemowego Linuksa 80h
EAX Opis Argumenty Zwraca
40 Usuń katalog (sys_rmdir)
EBX= adres ścieżki/nazwy
ASCIIZ
EAX = 0EAX = błąd EACCES, EBUSY, EFAULT, ELOOP,
ENAMETOOLONG, ENOENT,
ENOMEM, ENOTDIR,
ENOTEMPTY, EPERM, EROFS
Przykładowa funkcja przerwaniasystemowego Linuksa 80h
EAX Opis Argumenty Zwraca
41Zduplikuj
deskryptor pliku (sys_dup)
EBX= stary deskryptor
EAX = nowy deskryptorEAX = błąd
EBADF, EMFILE
(,EINVAL)
Wywołania systemowe
Stanowią interfejs między wykonywanym programem a (posiadającym zwykle wyższe uprawnienia) jądrem systemu operacyjnego.