Mis vahe on BIOS-i, DOS-i ja reaalajas katkestamise vahel kokkupanekkeele perspektiivis?


Vastus 1:

See on suur küsimus, et keegi ei mõtle nende päevade peale kuigi palju. Lihtne vastus on: reaalajas katkestus on see, mida kood otseselt ei täida. See käivitati kas erandjuhina või välise seadmena, mis määras protsessoril katkestuse rea. BIOS ja OS-i katkestused on põhimõtteliselt otseteede helistamise tava, mida saate kasutada montaažis.

Kui katkestus kutsutakse esile või see käivitatakse, surutakse koodisegment, juhiskursor ja lipud register virna. Katkestusnumber tõmmatakse bussist ja uut täitmisaadressi otsib keskseade katkestuste vektortabelis. Ja koodi täitmine algab sellel aadressil. See on nagu kauge kõne.

Väliselt juhitavate katkestuste jaoks on google APIC või PIC, mis on täiustatud programmeeritav katkestuste kontroller. Algse personaalarvutiga oli kaasas mõni Intel 8259 kontrolleri versioon. Montaažikeele seisukohast töötab teie kood lihtsalt suurepäraselt ja siis vallandatakse teie teadmata (või mis tahes koodi, mille te kohe rakendasite) ootamatu katkestus. Kui katkestamine on lõpetatud, taastatakse kõik registrid, lipud ja virna tähenduslik osa ning teie kood ei tea isegi, et see juhtub, ja hoiab käsu täitmist. Välised katkestused võivad olla ka „maskeeritud”, see tähendab, kui protsessori katkestamise lipp kustutatakse CLI-juhisega, siis neid väliseid katkestusi ei toimu, kui need pole „maskeerimata katkestused” (NMI). See on mälulukkude kirjutamisel mõnikord oluline ja soovite veenduda, et ükski teine ​​kood ega niit ei katkestaks teie tegevust.

Ma nimetaksin ikkagi erandite käsitlemist, reaalajas katkestamist. Nagu ka väliselt juhitavad katkestused, on aeg ülioluline. Kuid seda nimetatakse ka TRAPiks. Tehniliselt pärineb katkestus protsessori sisemusest, olekuga, mille käivitasite tarkvara kaudu. Mõelge näiteks nulliga jagamisele või lehe veale. See juhtus mitte otseselt teie kirjutatud koodi kaudu, vaid kaudselt. Ja samamoodi tuleb kohe hakkama saada. Sel juhul VÕIB katkestada väärtuse muutmise või lipu muutmise, kuid tavaliselt eesmärgiga viga parandada, täitmise jätkamiseks või programmi teatavakstegemiseks, et täitmist ei saa jätkata ning programm võib vajada viivitamatut lõpetamist. Need erandid jõuavad tagasi juhendi juurde, mis rikke põhjustas. Neid katkestusi ei saa maskeerida.

BIOS-i või OS-i katkestusi nimetatakse ka TRAP-ideks, kuid neid nimetatakse selgesõnaliselt. Need ei ole reaalajad. Nad ei pruugi kohe tagasi tulla. Nad võivad täitmist jätkata kuni ülesande täitmiseni. Otse oma koodi paned näiteks INT 3 (Trigger Debugger) ja teie kood ei pruugi mõni minut hiljem käivituda. Bios on katkestusi selgelt Bios ja OS-i katkestused asendavad sageli Bios-katkestused nende omadega. Ja sageli (kuid vähem nii kaitstud OS-ides) seab rakendus isegi oma katkestused. Programmeerimise vaatenurgast helistate lihtsalt koodile ja loodate täielikult, et registreid saab muuta ja mõni aeg võib mööduda. Ja sageli antakse tagastamisväärtus registrites üle.

Ja erinevalt kõnest peab katkestuse lõppedes see kindlasti ise puhastama ja IRET-käsk tõmbab rakendusepaki koodisegmendi, juhise osuti ja lipud ning jätkab sellel hetkel täitmist.


Vastus 2:

Kõigil katkestustel on üks ühine joon: kuidas neid käsitletakse. Kui need juhtuvad, rikub CPU praeguse juhiste jada, salvestab selle oleku masina korstnasse ja teostab operatsioonisüsteemi kehtestatud katkestamisrutiini. Siis võib see taastada stacki staatuse ja jätkata katkestatud koodiga või katkestada programmi jne. Millisele 256 võimalikust katkestusrutiinist tuginetakse, sõltub katkestuse põhjustanud sündmusest: Reaalajas (asünkroonne) katkestus käivitatakse välise sündmuse poolt: klaviatuur vajutatud, hiir liigutatud, kell on märgitud. Riistvaraseade saadab APIC-kiibile katkestusetaotluse, mis ootab, kuni CPU on praeguse käsu lõpetanud, ja seejärel annab APIC käsu CPU-le selle oleku salvestamiseks ja vajalike toimingute tegemiseks: salvestage pressitud märk klaviatuuri puhverlahtrisse, liigutage hiirekursor ekraanile, värskendage arvutit aeg.Sünkroonne katkestus (erand) on kõige sagedamini põhjustatud programmeerijate vigadest, näiteks nulliga jagamine, mälu lugemine puuduvalt aadressilt, kehtetu käsu proovimine. Katkev rutiinne teade annab sel juhul tõrketeate. Ühendamisprogrammeerija (või kompilaator) kutsub masinkäskude INT abil esile katkestatava katkestuse (OS-i teenuse taotlus). Nende rutiinid on BIOS-is juhtmega ühendatud või installitud OS-i laadimisel. See on ainus katkestuse liik, mis puudutab monteerimisprogrammeerijaid (välja arvatud juhul, kui nad kirjutavad opsüsteemi või BIOS-i püsivara). Kõik 256 katkestust on dokumenteeritud siin: Katkesta hüppelaud


Vastus 3:

Kõigil katkestustel on üks ühine joon: kuidas neid käsitletakse. Kui need juhtuvad, rikub CPU praeguse juhiste jada, salvestab selle oleku masina korstnasse ja teostab operatsioonisüsteemi kehtestatud katkestamisrutiini. Siis võib see taastada stacki staatuse ja jätkata katkestatud koodiga või katkestada programmi jne. Millisele 256 võimalikust katkestusrutiinist tuginetakse, sõltub katkestuse põhjustanud sündmusest: Reaalajas (asünkroonne) katkestus käivitatakse välise sündmuse poolt: klaviatuur vajutatud, hiir liigutatud, kell on märgitud. Riistvaraseade saadab APIC-kiibile katkestusetaotluse, mis ootab, kuni CPU on praeguse käsu lõpetanud, ja seejärel annab APIC käsu CPU-le selle oleku salvestamiseks ja vajalike toimingute tegemiseks: salvestage pressitud märk klaviatuuri puhverlahtrisse, liigutage hiirekursor ekraanile, värskendage arvutit aeg.Sünkroonne katkestus (erand) on kõige sagedamini põhjustatud programmeerijate vigadest, näiteks nulliga jagamine, mälu lugemine puuduvalt aadressilt, kehtetu käsu proovimine. Katkev rutiinne teade annab sel juhul tõrketeate. Ühendamisprogrammeerija (või kompilaator) kutsub masinkäskude INT abil esile katkestatava katkestuse (OS-i teenuse taotlus). Nende rutiinid on BIOS-is juhtmega ühendatud või installitud OS-i laadimisel. See on ainus katkestuse liik, mis puudutab monteerimisprogrammeerijaid (välja arvatud juhul, kui nad kirjutavad opsüsteemi või BIOS-i püsivara). Kõik 256 katkestust on dokumenteeritud siin: Katkesta hüppelaud