260 likes | 345 Views
Learn about interrupts and exceptions in computing systems, including types, handling mechanisms, and examples of their usage. Understand the differences between hard interrupts and exceptions. Explore the role of BIOS routines in interrupt handling.
E N D
Megszakítások • Megszakítás – a számítási rendszernek küldött jelzés, mely valamilyen esemény felléptéről értesíti. • Egy megszakítás felléptekor a rendszer: • megszakítja az aktív program futását • végrehajtja az eseményt kezelő handlert • folytatja a megszakított programot.
Megszakításokés kivételek • hard megszakítás – aszinkron – egy külső esemény váltja ki: billentyűzet, órajel, ki/bemeneti művelet befejezése, stb. • kivétel – szinkron – egy belső esemény váltja ki: • trap – a program a megszakítást kiváltó utasítás utáni utasítással folytatódik – trap, rendszerhívások, stb. • fault – a program a megszakítást kiváltó utasítással folytatódik, vagy abortál – page fault, 0-val való osztás, stb. • abort – a program hibajelzéssel befejeződik – hard hibák, stb.
Intel processzorok • 256 lehetséges megszakítás és kivétel • 0-1F a processzornak fenntartott • 20-0FF felhasználó által használható • az operációs rendszer definiálja a kivételek nagy részét • a szabadon maradt megszakításokat a felhasználó definiálhatja
Megszakítások kezelése (1) • minden fellépő eseménynek egy eljárás felel meg, amely feldolgozza az adott eseményt • a megszakítás rutinok far címe: • védett üzemmódban a IDT deszkriptortáblában • normál üzemmódban a megszakításvektorban (0000 címtől) • az operációs rendszer különböző verzióiban a rutinok címe változik
Megszakítások kezelése (2) • egy megszakítás rutin feladatai: • a program állapotának kimentése • újabb megszakítások letiltása • a megszakítás kiszolgálása • új megszakítások engedélyezése • a megszakított program folytatása • rendszerhívások esetén nem szükséges minden regiszter tartalmának a visszaállítása (paraméterek visszaadása) • kivételek esetén gyakran nem folytatódik a megszakított program
DOS megszakítások • Microsoft nem tartja be az Intel előírásokat • a processzornak fenntartottmegszakításokat más célokra használja • védett üzemmódban ugyanaz a megszakítás egész más funkciót lát el, mint normál üzemmódban
Hard megszakítások és kivételek • mikroprocesszor által kiváltott: • INT 00h – 0-val való osztás • INT 01h – trace – minden utasítás után, ha TF=1 • INT 04h – aritmetikai túlcsordulás • memória • INT 02h – paritáshiba (RAM) – nem maszkolható • óra • INT 08h – 18,2-szer másodpercenként • más felszerelések • INT 09h – billentyűzet, minden billentyű lenyomásakor illetve elengedéskor, a billentyű kódja kerül a pufferbe • INT 05h – print screen
BIOS rutinok • egyszerű eljárások • INT 11h – konfiguráció lekérdezése • INT 12h – memóriaméret lekérdezése • INT 14h – soros vonalak kezelése • INT 1Bh – <Ctrl><Break> billentyű kezelése • komplex BIOS funkciók • egy megszakítás valamilyen hard eszközt kezel • több funkció, az AH regiszter választja ki • paraméterek a regiszterekben
BIOS rutinok – INT 10h • INT 10h – képernyő kezelése • AH=00h – megjelenítési mód beállítása • AL – mód • AH=02h – kurzor pozíciójának beállítása • DH – sor; DL – oszlop; BH – lap száma • AH=03h – kurzor pozíciójának lekérdezése • BH – lap száma • AH=05h – aktív lap kiválasztása • AL – lap száma • AH=08h – kurzor pozíciójában levő karakter lekérdezése • BH – lap száma, AH – kar. kódja, AL - attribútuma • AH=09h – karakter írása attribútum információkkal • BH – lap sorszáma, háttérszín, CX – ismétlések, AL – kar kód, BL – attribútum, előtér szín
BIOS rutinok – INT 13h • INT 13h – lemezegységek kezelése • bemenő paraméterek • AL – átviendő szektorok száma • ES:BX – a memóriaterület címe • CL – kezdő szektor száma, sáv számának felső két bitje • CH – sáv számának alsó nyolc bitje • DL – lemezegység kódja • DH – fej száma • kimenő paraméterek • AH – hibakód • CF – hiba esetén 1 • állítja a 0000:441h címen levő hibakódot
BIOS rutinok – INT 13h • fontosabb funkciók: • AH=02h – szektorok olvasása • AH=03h – szektorok írása • AH=04h – szektorok ellenőrzése • AH=05h – sáv formázása • AH=08h – meghajtó paramétereinek lekérdezése • AH=15h – lemezmeghajtó típusának lekérdezése
Más BIOS rutinok • INT 16h – billentyűzet kezelése • INT 19h – rendszer újraindítása • INT 1Ah – időzítő egység kezelése • INT 17h – párhuzamos illesztők kezelése
BIOS adatszerkezetek címei • adatszerkezetek címei • INT 1Dh – video paraméterek táblázatának címe • INT 1Eh – floppy egységek paraméterei táblázatának címe • INT 41h – első merevlemez paramétertábla címe • INT 43h – EGA, VGA grafikuskarakter tábla címe • INT 46h – második merevlemez paramétertábla címe • a BIOS rutinok adatok tárolására felhasználják a 0000:0400 – 0000:04FF memóriaterületet is
DOS rutinok • logikai szintű periféria kezelés • a különböző DOS megszakítások helyett a 21h megszakítás funkcióit használjuk
INT 21h – karakteres ki/bemenet • AH=01h – karakter olvasása megjelenítéssel • AL – beolvasott karakter • AH=02h – kiírás a képernyőre • DL – kiírandó karakter • AH=05h – kiírás a nyomtatóra • DL – kiírandó karakter • AH=06h – közvetlen konzol ki-bemenet • AH=07h – közvetlen konzol olvasás (echo nélkül) • AH=08h – billentyűzet olvasás echo nélkül • AH=09h – karakterlánc kiírása • DS:DX – karakterlánc címe, utolsó karakter „$” • AH=0Ah – karakterlánc olvasása • DS:DX – input puffer címe, első byte – max. hossz, 2. byte – tenylegesen beolvasott byte-ok száma, Enter-ig olvas
INT 21h – memória kezelés • AH=48h – memória blokk lefoglalása • AH=49h – memória blokk felszabadítása • AH=4Ah – memória blokk méretének változtatása
INT 21h – folyamatok vezérlése • AH=4Bh – program betöltése, indítása • AH=4Ch – program befejezése kilépési kóddal (exit code) • AL – kilépési kód • AH=31h – rezidens befejezés • AL – kilépési kód, • DX a program mérete paragrafusokban • AH=4Dh – előző program kilépési kódjának lekérdezése • AL – folyamat kilépési kódja, • AH – folyamat befejezésének oka
INT 21h – lemezkezelés • AH=19h – aktuális meghajtó lekérdezése • AL – 00h-A; 01h-B; stb. • AH=1Ah – DTA (Data Transfer Area) címének beállítása • AH=1Bh – aktív lemezegység paramétereinek lekérdezése
INT 21h – directorykezelés • AH=39h – alkatalógus létrehozása • DS:DX – alkatalógus nevének címe 00h-val lezárva • CF – 1, hiba; AX – hibakód • AH=3Ah – alkatalógus törlése • AH=3Bh –váltása (change dir.) • AH=4Fh – aktív katalógus lekérdezése • DL – lemezegység száma • DS:SI – 64 byte-os puffer címe, ahol megkapjuk az aktív katalógus nevét
INT 21h –állománykezelés (1) • AH=3Ch – állomány létrehozása file-számmal • AH=3Dh – állomány megnyitása file-számmal • AL – megnyitási mód, DS:DX – 00h-val lezárt string címe (file neve) • CF=1 – hiba, AX – fileszám vagy hibakód • AH=3Eh – állomány bezárása file-számmal • BX – fileszám • CF=1 – hiba, AX – hibakód • AH=3Fh – állomány olvasása file-számmal • AH=40h – állomány írása file-számmal
INT 21h –állománykezelés (2) • AH=41h – állomány törlése file névvel • DS:DX – 00h-val lezárt string címe (file neve) • AH=4Eh – első file keresése • AH=4Fh – következő file keresése • AH=56h –file átnevezése, mozgatása • DS:DX – 00h-val lezárt string címe (file régi neve) • ES:DI – 00h-val lezárt string címe (file új neve)
INT 21h – más funkciók • AH=30h – DOS verziószámának lekérdezése • AH=2Ah – rendszerdátum lekérdezése • AH=2Bh – rendszerdátum beállítása • AH=2Ch – rendszeridő lekérdezése • AH=2Dh – rendszeridő beállítása • AH=35h – megszakításvektor lekérdezése • AL – megszakítás száma • ES:BX – megszakítás far címe • AH=25h – megszakításvektor beállítása • AL – megszakítás száma • DS:DX – új eljárás far címe
Megszakítás eltérítése (1) • egy megszakítást eltérítő rezidens program szerkezete: start: JMP initresz indul: initresz: rezidens rész adatzóna rezidens rész kód inicializáló rész kód és adatok
Megszakítás eltérítése (2) • Az inicializáló részt úgy hajtjuk végre,mint egy megszokott programot • Feladatai: • ellenőrzi, hogy a rezidens rész nincs-e már a memóriában • beolvassa és elmenti a megszakítás eredeti kezdőcímét • módosítja a megszakításvektort (beírja a megszakítást kezelő új eljárás kezdőcímét) • inicializálja a rezidens rész adatzónáját, ha szükséges • befejezi működését rezidens kilépéssel (DX regiszterben a rezidens eljárás hossza, a program elejétől az inicializáló részig paragrafusokban megadva)
Megszakítás eltérítése (3) • ha a megszakítás eltérítése csak egy adott programban szükséges, nem installáljuk rezidensként az adott eljárást • a megszakítást kezelő eljárás a program szerves része • a program befejezése előtt visszaállítjuk az eredeti megszakítás címét