260 likes | 341 Views
MegszakÃtások és kivételek. 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
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