Przerwania. Funkcje systemowe.

Download Report

Transcript Przerwania. Funkcje systemowe.

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
MOV AL,4
INT 10h
; tryb ustawienia BIOS
; nr trybu dla 4-kolorowej grafiki 320x200 (CGA)
; 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
Dziś już nie są one używane przez nowoczesne systemy
operacyjne, takie jak Linux. Powodów po temu jest kilka:
●
●
●
●
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ń.
Przykładowa funkcja przerwania
DOS'a 21h
Funkcja 09h - wyświetl napis:
Argumenty:
➔ AH = 9
➔ DS:DX = adres łańcucha znaków
zakończonego znakiem dolara "$"
Przykładowa funkcja przerwania
DOS'a 21h
Funkcja 01h - czytaj klawisz:
Argumenty:
➔ AH = 1
Zwraca:
➔ AL = kod klawisza ASCII
Przykładowa funkcja przerwania
DOS'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 przerwania
systemowego Linuksa 80h
EAX
Opis
Argumenty
Zwraca
1
Wyjś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 przerwania
systemowego Linuksa 80h
EAX
5
Opis
Otwarcie pliku
(sys_open)
Argumenty
Zwraca
EBX = adres
nazwy pliku
ASCIIZ
ECX = bity
dostępu
EDX = 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
INT80h
; jeśli udalo się otworzyc plik
…
; w EAX znajdzie się deskryptor pliku
section .data
plik
db "nazwa.txt",0
; nazwa pliku
Przykładowa funkcja przerwania
systemowego Linuksa 80h
EAX
4
Opis
Zapis do pliku
(sys_write)
Argumenty
Zwraca
EBX = deskryptor
EAX=liczba
pliku
przeczytanych
ECX = adres
bajtów
bufora
EAX = błąd
źródłowego
EAGAIN, EBADF,
EDX = liczba
EFAULT, EINTR,
bajtów do
EINVAL, EIO,
zapisania
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 = długość tekstu
EDX, dlugosc
INT 80h
; wywołanie funkcji systemowej
...
section .data
tekst DB
"Czesc", 0ah
dlugosc EQU $ - tekst
; napis
; długość napisu
Przykładowa funkcja przerwania
systemowego Linuksa 80h
EAX
6
Opis
Zamknięcie pliku
(sys_close)
Argumenty
Zwraca
EBX= deskryptor
pliku
EAX = 0
EAX = błąd
EBADF, EINTR,
EIO
Przerwanie systemowe
Linuksa 80h
Funkcja numer 6 (zamknięcie pliku)
…
MOV
EAX, 6
MOV EBX, <deskryptor_pliku>
INT80h
...
; numer funkcji systemowej:
; EBX = deskryptor pliku
Przykładowa funkcja przerwania
systemowego Linuksa 80h
EAX
3
Opis
Czytanie z pliku
(sys_read)
Argumenty
Zwraca
EBX = deskryptor
EAX=liczba
pliku
przeczytanych
ECX = adres
bajtów
bufora
EAX = błąd
docelowego
EAGAIN, EBADF,
EDX = liczba
EFAULT, EINTR,
bajtów do
EINVAL, EIO,
przeczytania
EISDIR
Przykładowa funkcja przerwania
systemowego Linuksa 80h
EAX
19
Opis
Argumenty
Zwraca
Zmiana 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 przerwania
systemowego Linuksa 80h
EAX
Opis
20
Pobierz
identyfikator
bieżącego
procesu
(sys_getpid)
Argumenty
Zwraca
nic
EAX = PID
bieżącego
procesu
Przykładowa funkcja przerwania
systemowego Linuksa 80h
EAX
39
Opis
Utwórz katalog
(sys_mkdir)
Argumenty
Zwraca
EBX = adres
ścieżki/nazwy
ASCIIZ
ECX = prawa
dostępu / tryb
EAX = 0
EAX = błąd każdy związany
z systemem
plików lub
prawami
dostępu
Przykładowa funkcja przerwania
systemowego Linuksa 80h
EAX
40
Opis
Usuń katalog
(sys_rmdir)
Argumenty
Zwraca
EBX= adres
ścieżki/nazwy
ASCIIZ
EAX = 0
EAX = błąd
EACCES,
EBUSY,
EFAULT,
ELOOP,
ENAMETOOLO
NG, ENOENT,
ENOMEM,
ENOTDIR,
ENOTEMPTY,
EPERM,
EROFS
Przykładowa funkcja przerwania
systemowego Linuksa 80h
EAX
41
Opis
Zduplikuj
deskryptor pliku
(sys_dup)
Argumenty
Zwraca
EBX= stary
deskryptor
EAX = nowy
deskryptor
EAX = 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.