Assemblyben hányszor gyorsabb közvetlen videómemóriába való írással megtölteni a képernyőt egy színnel grafikus,320x200-as 256 színes módban, mint BIOS int 0x10-es videómegszakitással eljátszani ugyanezt?
A videómemória kezdőcíme alfanumerikus videomódban (80x25 text mode) 0xB8000.
Ettől a címtől számolva minden páratlan című offszettbe kell írni a kiírandó karakter értékét, minden páros című offszetbe kell a karakter attribútumát (karakter háttér-, illetve foreground színe).
Igazából arra lennék kíváncsi, hogy ha ezt a metódust alkalmazom, akkor hányszor gyorsabb a dolog, mint amikor ah-ban 0x0e teletype BIOS function numbert adom meg, al-ben a kiírandó karaktert, majd int 0x10 videointerruptal (ami persze egyes regiszterek lementését, valamint az utasítás tényleges végrehajtását, majd a registerek restore-olását takarja) megjelenítem a karaktert , vagy graphics mode-ban a pixelt a képernyőn.Természetesen fontos tudni, hogy az APA (All Points Addressable/grafikus mode), illetve az A/N (AlfaNumerikus/szöveges videomode) videomemóriájának címe máshol kezdődik (A/N: 0xB8000 , APA: 0xA0000).
#3, azt én tudom, mert én is írtam ilyen kis progikat... DOS alatt !! Egy mai op.rendszeren ez csak valami DOS kompatibilis módban oldható meg, az meg kicsit sem lesz gyorsabb mint a rendszerhívások.
#4, Az egész leírásban végig virtuális címek szerepelnek, nem fizikai címek. Ez a lényege a processzor védett módjának, hogy a felhasználói programok nem tudnak fizikai címeket használni. A DOS valós módban működtette a processzort, ezért ott programok a valós fizikai címeket látták közvetlenül. A mai komolyabb op.rendszerek egyike sem használja valós módban a procit.
Ha oprendszer alatt írsz, persze hogy nem tudsz fizikai címet használni, mert a rendszer automatikusan állítgatja a szegmensregisztereket minden egyes program lefutásakor, hogy a felhasználónak ne kelljen vele külön bajlódnia.De ha te magad írsz oprendszert, ahogy én mostanában csinálom, akkor muszáj te magad közbelépned, mert a BIOS-nak (mert nem tudsz semmilyen környezetre támaszkodni pl.:OS) nincs memory management-je, ezért te magad állíthatod a szegmenseket sőt, itt már tényleg fizikai címeket használhatsz adatmozgató (MOV), illetve vezérlésátadó utasításokkal (JMP, CALL, RET, IRET), ha saját memory management-re vágysz akkor ne DOS vagy egyéb OS alá írj programot, hanem irjál egy bootloadert, amivel gyakorlatilag áthágsz mindent és te diktálsz, mert nincs OS.
Ha érdekel, akkor röviden leírhatom, mert nem túl nehéz, sőt ajánlhatok egyéb irodalmat is, ha még nem csináltál ilyet.
Ja hogy kernel space-ben futó folyamatról van szó? Azt nem írtad.
De ha annyira jó vagy, akkor tudod, hogy a rendszerhívás és a visszatérés mennyi időbe tellik. (Doksik akár pontosan megadják gépi ciklusban vagy órajelciklusban.) Na kb. annyival lesz gyorsabb, ha egy szó írásáról beszélünk.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!