Ukulinganisa iLinus Torvalds: Yenza eyakho inkqubo yokusebenza ukusuka ekuqaleni (VI)

Ewe, emva kobuzali obuncinci siyaqhubeka nothotho lwezifundo zethu. Ukuba sibuyela kwikhowudi yangaphambili kufuneka sibe ne-ISR yokwahlula ngo-zero. Ngoku kufuneka sigcwalise ezinye ii-ISRs esasizithumele (ezokuqala ezingama-32). Ewe ngoku siza kuqhubeka nokuphazamiseka kwenkqubo, siza kwenza i-IRQ eyaziwa ngokuba yi Ukuphazamisa iZicelo. Ezi IRQs ziveliswa zizixhobo zehardware ezinjengebhodi yezitshixo, iimpuku, iiprinta, njl. Ekuqaleni ii-IRQs ezisi-8 zokuqala zenzelwa imephu ngokuzenzekelayo kwizikhundla ze-IDT 8 ukuya ku-15. Njengokuba sisebenzise ezingama-32 zokuqala ngaphandle ngoku kufuneka sizibuyise. Siza kubeka i-IRQ ukusuka kuma-32 kuye kuma-45. Ngoku kufuneka siqale sibuyisele i-IRQs:

void ND::IRQ::Remap(int pic1, int pic2)
{
#define PIC1 0x20
#define PIC2 0xA0
#define ICW1 0x11
#define ICW4 0x01
/* send ICW1 */
ND::Ports::OutputB(PIC1, ICW1);
ND::Ports::OutputB(PIC2, ICW1);
/* send ICW2 */
ND::Ports::OutputB(PIC1 + 1, pic1); /* remap */
ND::Ports::OutputB(PIC2 + 1, pic2); /* pics */
/* send ICW3 */
ND::Ports::OutputB(PIC1 + 1, 4); /* IRQ2 -> connection to slave */
ND::Ports::OutputB(PIC2 + 1, 2);
/* send ICW4 */
ND::Ports::OutputB(PIC1 + 1, ICW4);
ND::Ports::OutputB(PIC2 + 1, ICW4);
/* disable all IRQs */
ND::Ports::OutputB(PIC1 + 1, 0xFF);
}

Ngoku senza umsebenzi wokufaka ii-IRQs:

void ND::IRQ::Install()
{
ND::Screen::SetColor(ND_SIDE_FOREGROUND,ND_COLOR_BLACK);
ND::Screen::PutString("\nInstalling IRQ...");
ND::IRQ::Remap(0x20,0x28);
ND::IDT::SetGate(32,(unsigned)ND::IRQ::IRQ1,0x08,0x8E);
ND::IDT::SetGate(33,(unsigned)ND::IRQ::IRQ2,0x08,0x8E);
ND::IDT::SetGate(34,(unsigned)ND::IRQ::IRQ3,0x08,0x8E);
ND::IDT::SetGate(35,(unsigned)ND::IRQ::IRQ4,0x08,0x8E);
ND::IDT::SetGate(36,(unsigned)ND::IRQ::IRQ5,0x08,0x8E);
ND::IDT::SetGate(37,(unsigned)ND::IRQ::IRQ6,0x08,0x8E);
ND::IDT::SetGate(38,(unsigned)ND::IRQ::IRQ7,0x08,0x8E);
ND::IDT::SetGate(39,(unsigned)ND::IRQ::IRQ8,0x08,0x8E);
ND::IDT::SetGate(40,(unsigned)ND::IRQ::IRQ9,0x08,0x8E);
ND::IDT::SetGate(41,(unsigned)ND::IRQ::IRQ10,0x08,0x8E);
ND::IDT::SetGate(42,(unsigned)ND::IRQ::IRQ11,0x08,0x8E);
ND::IDT::SetGate(43,(unsigned)ND::IRQ::IRQ12,0x08,0x8E);
ND::IDT::SetGate(44,(unsigned)ND::IRQ::IRQ13,0x08,0x8E);
ND::IDT::SetGate(45,(unsigned)ND::IRQ::IRQ14,0x08,0x8E);
ND::IDT::SetGate(46,(unsigned)ND::IRQ::IRQ15,0x08,0x8E);
ND::IDT::SetGate(47,(unsigned)ND::IRQ::IRQ16,0x08,0x8E);
ND::Screen::SetColor(ND_SIDE_FOREGROUND,ND_COLOR_GREEN);
ND::Screen::PutString("done");
asm volatile("sti");
}

Isivakalisi se-asm Sti senza ii-IRQs zisebenze. Ewe ngoku sihamba nento efana ne-ISR. Imisebenzi ye-IRQ esisiseko:

void ND::IRQ::IRQ1()
{
asm volatile(
"cli \n"
"pushl 0\n"
"pushl 32\n"
"jmp ND_IRQ_Common"
);
}

Icandelo eliqhelekileyo (elifanayo ne-ISR):

extern "C"
void ND_IRQ_Common()
{
asm volatile(
"pusha \n"
"push %ds\n"
"push %es\n"
"push %fs\n"
"push %gs\n"
"movw $0x10, %ax \n"
"movw %ax, %ds \n"
"movw %ax, %es \n"
"movw %ax, %fs \n"
"movw %ax, %gs \n"
"movl %esp, %eax \n"
"push %eax \n"
"movl $ND_IRQ_Handler, %eax \n"
"call *%eax \n"
"popl %eax \n"
"popl %ds \n"
"popl %es \n"
"popl %fs \n"
"popl %gs \n"
"popa \n"
"addl 8, %esp \n"
"iret \n"
);
}

Kwaye isiphatho esisiseko:

extern "C"
void ND_IRQ_Handler(struct regs* r)
{
void (*handler)(struct regs *r);
if(r->int_no >= 40)
{
ND::Ports::OutputB(0xA0,0x20);
}
ND::Ports::OutputB(0x20,0x20);
}

Ngale nto kufanele ukuba sele sine-IRQ esebenzayo nokuba ayenzi kwanto. Kwisahluko esilandelayo siza kubona ukuba sifumana njani idatha kwezi IRQ ezifana newotshi okanye ikhibhodi.

OkulandelayoDivel-IRQ


Kwaye oku kuyaphela iposti yanamhlanje. Njengoko ubona ngoku ndibhala kancinci rhoqo ngenxa yeminye imiba. Nangona kunjalo ndiza kuqhubeka de ndibenenkqubo yokusebenza epheleleyo


Shiya uluvo lwakho

Idilesi yakho ye email aziyi kupapashwa. ezidingekayo ziphawulwe *

*

*

  1. Uxanduva lwedatha: UMiguel Ángel Gatón
  2. Injongo yedatha: Ulawulo lwe-SPAM, ulawulo lwezimvo.
  3. Umthetho: Imvume yakho
  4. Unxibelelwano lwedatha: Idatha ayizukuhanjiswa kubantu besithathu ngaphandle koxanduva lomthetho.
  5. Ukugcinwa kweenkcukacha
  6. Amalungelo: Ngalo naliphi na ixesha unganciphisa, uphinde uphinde ucime ulwazi lwakho.

  1.   zekiso_cz sitsho

    Enkosi kakhulu Adrian, kwakamsinya nje ukuba ndinexesha (ngoku ndixakekile, phakathi kwezinye izinto ndisebenzisa nenkqubo yokusebenza) ndiza kuqala ukuvavanya inyathelo lokufundisa ngenyathelo.

  2.   ilitye elinqabileyo elibomvu sitsho

    Ndiyabulela kakhulu ngesincoko.

  3.   sasuke sitsho

    Umbuzo omnye ndenza iprojekthi esekwe kwezi lwimi zenkqubo
    * HTML5
    * Css3
    * Java
    Umbuzo wam kukuba ndingathanda ukuba le projekthi iphunyezwe, ukuze abasebenzisi bayisebenzise kwiinkqubo ezinje nge-linux kunye neewindows, ungandixelela ukuba ndiyenza njani loo nto

    1.    AdrianArroyoStreet sitsho

      Ayinanto yakwenza noku kodwa ndiyakuphendula. Ndicinga ukuba iya kuba yi-HTML5, CSS3, kunye neJavaScript hayi iJava, kuba i-HTML5 kunye neJava ziqala kakubi. Nge-HTML5 unokwenza iiwebhusayithi njengangaphambili ezifumaneka kwi-intanethi. Ukuba ufuna ukuyenza ibe yeyasekhaya, ungayipakisha njenge-Firefox OS kunye ne-Chrome OS. Ukuba into oyifunayo kukuba kwinkqubo nganye yokusebenza kukho ukuphunyezwa kuthathelwe ingqalelo i-XUL Runner sisixhobo sokwenza i-XUL (kwaye ke i-HTML5 ngaphakathi kwento) kunye nenjini ye-Gecko.

    2.    Soid perez sitsho

      Isakhelo seJava okanye ipaneli lukhetho olulungileyo endilwenzileyo ndenza ii -apps ezisebenzayo kwiwindows ndisebenzisa iklasi yesakhelo seJava njengesikhangeli sewebhu kodwa endaweni yokuyisebenzisa kulo naliphi na iphepha ndiyinika indlela ethe ngqo kwikhowudi kwaye nge php ndenza izivakalisi zeJava ngokusebenzisa ijar ejonga intsimbi. Nangona ndingacebisa ukusebenzisa i-HTML5, CSS3 kunye neJavaScript okoko uAdrian Java esithi Fatal nge-Html5 kwaye indizisele iintloko ezininzi

  4.   ulwakhiwo sitsho

    Isifundo sendlela yokwenza ulwimi lwakho lwenkqubo siya kuba sihle

  5.   UIvan sitsho

    Lulunge kakhulu olu luhlu lwamanqaku ngendlela yokwakha inkqubo yokusebenza, ufunda izinto ezininzi. Ndijonge phambili ekungeneni okulandelayo, sele ndifuna ukuba nebhodi yezitshixo kwi-OS. Kudala ndizixakekisa ngekhowudi ye-git, kwaye khange ndikwazi ukuyenza isebenze ngezibuko le-0x60 kunye ne-0x64. Nangona bendicinga ukuba kwikhibhodi kukho ukuphazamiseka okunike isitshixo esicinezelweyo.

    1.    AdrianArroyoStreet sitsho

      Ungalifumana igalelo lekhibhodi ngaphandle kokuphazanyiswa, kodwa kuya kufuneka ufunde nge-ND :: Izibuko :: InputB kwizibuko 0x60. Nangona kunjalo eyona ndlela ilungileyo yokwenza oku kukuphazamiseka kwe-IRQ. Ngoku ndizama ukuyenza kwaye kuthatha ixesha elincinci ukuqhubeka ngenxa yalonto.

      1.    imvucube sitsho

        Molo Adrian, bendikhangela ikhowudi kwaye ndiyachukumiseka yinto eyenzayo kunye nendlela endincede ngayo ukuba ndiqonde izinto ezincinci.

        Ndinemibuzo embalwa encinci malunga nokuba isebenza njani kwaye umthombo ngowuphi endiwufumene kwi-GIT yakho:

        Kwinxalenye ye-IRQ, wakhankanya ukuba izikhundla ukusuka ku-1 kuye ku-0 ze-IDT zazisetyenziselwa ukungafani kwaye ukusuka kuma-32 (32x0) ukuya kuma-20 (45x0D) kwii-IRQs, kodwa ii-IRQs ziyi-2 xa zizonke, ukulungiswa kwakhona ukusuka ku-16x0 ukuya ku-20x0?

        Kwisahlulo se-IRQ, qaphela ukuba iiseti zazithunyelwe kwicandelo le-IDT; Xa uwahlulahlula, qaphela ukuba ayisasebenzi ngaphandle kokwahlulwa ngo-2, ke kuyimfuneko ukongeza i-IDT Flush () kulungelelwaniso ngalunye olwenziweyo. Kutheni le nto IDT itshintsha xa useta ixesha kunye nokwahlula phakathi kwe-0 kuyeka ukusebenza?

        3.- bendizama ukukhangela ikhowudi ngoshicilelo oluthile ukuba luthathe njengophawu lwento eyenzayo (ukuze ungalungisi inyathelo ngenyathelo) kwaye ndiye ndaqonda ukuba akukho IRQ iyasebenza, kufuneka ndibhalise enye into ukuphazamiseka kwe-IRQ kwenziwe?

        1.    imvucube sitsho

          Ndilibele ukukhankanya ukuba ndizifumene ezi makhonkco zinolwazi:
          http://arstechnica.com/civis/viewtopic.php?f=20&t=899001
          http://www.superfrink.net/athenaeum/OS-FAQ/os-faq-pics.html
          http://orga2.exp.dc.uba.ar/data/downloads/clasespracticas/interrupciones2_clase_17.pdf
          http://www.intel-assembler.it/PORTALE/4/231468_8259A_PIC.pdf

          Ngokucacileyo ekusingatheni i-IRQs, kuya kufuneka ukuba uthathele ingqalelo ukuba loluphi uhlobo lwesiphatho esisetyenziswayo ukuba, iPIC, APIC, IOAPIC. . njl njl. Ngaba ikhona indlela yokwenza ukuphatha okunamandla kwe-IRQ okanye ngaba ufuna ukuzama ithamsanqa?

  6.   imvucube sitsho

    Molo emva kwemini uAdrian.

    Ndabona ukuba ndineengxaki nge-IRQs kwaye yiyo loo nto ikhowudi ingenakuqhubela phambili, ndithathe ikopi yeprojekthi kwaye ndaqala ukuyicazulula; Ndongeze umsebenzi kwi-screen print ukuprinta iirekhodi zerejista ye-reg reg, ngexesha lokuphazamisa; Ndifumene izinto ezininzi, phakathi kwazo ukuba irejista iyasebenza kwaye andikasifumani isizathu; tshintsha iTimer ukuphazamiseka kwebhodi yezitshixo ukuvavanya kwaye wenze oko kufanelekileyo kodwa andifumani ngxaki, ungandinceda uqhubeke nale post ilungileyo? 😀

    Ndishiya ikhonkco (ineenguqulelo ezithile kuba ndisebenzisa iMageia kwaye ndisebenzisa iGrub2, ndisebenzisa iVirtualBox ukuyivavanya)
    https://www.mediafire.com/?93psrgaoozatse8

    Ukulinda impendulo yakho ngenyameko kwaye ukuba unemibuzo okanye ufuna into, ndingathanda ukukunceda

    1.    imvucube sitsho

      Ndilibele ukukhankanya ukuba ndikhangela i-KernelPanic kuba ii-ISRs azisebenzi kwaye ndinengxaki efanayo phezulu kwesitaki ixabiso liyangena kwaye andazi nokuba ngumqokeleli wam okanye kukho ingxaki, mna Sebenzisa i-GCC 4.8.2 kunye neMageia 4

    2.    AdrianArroyoStreet sitsho

      Ndiyathanda kakhulu ukuba undincede kwiprojekthi. Ndibambekile kwiTimer kwaye andiqondi ukuba kutheni ingasebenzi. Ndenze iimvavanyo zokuguqula izinto ezininzi kwaye azisebenzi. Okwangoku andikwazi ukuhlela ikhowudi (ndikwiholide) kodwa ndiza kuyijonga ngokukhawuleza kangangoko ndinako. Ndikunika ikhonkco elinolwazi malunga nale ngxaki kubonakala ngathi yinto eqhelekileyo: http://wiki.osdev.org/I_Cant_Get_Interrupts_Working

      Ngokubhekisele kokungafaniyo, ndicinga ukuba ndiyakhumbula ukuba kuya kufuneka wenze umnxeba "kwi-sti" kwi-ASM ukuze uyenze isebenze nangona kucacile ukuba kukho into engalunganga kwindawo ethile.

      1.    imvucube sitsho

        Enkosi ngempendulo yakho kwaye ewe, ewe. Ukuphazamiseka bekungaphumeleli kodwa bekuyingxaki ukufaka iikhowudi kwisitaki kunye nengxaki yokuphosa, ndiza kujonga ikhonkco kwaye ndiza kwenza iimvavanyo. Ukuba ndiyayisombulula ndiza kukwazisa kwaye ukuba akunjalo ndiza kukwazisa ngenkqubela phambili. Iiholide ezimnandi 🙂

      2.    imvucube sitsho

        Akuyi kubakho ndlela yokubona ikhowudi edityanisiweyo? Ngaba kukho into engaqhelekanga eyenzekayo kwaye andiyifumani? Jonga esi sikrini (ndibeka ikhonkco ekugqibeleni), yinto engaqhelekanga okoko ekusebenzeni kwe-IRQ 2 (ikhibhodi ) ingena eStack ixabiso 0 kunye 0x20 (32, ilingane ukuyivavanya) emva koko ipushal (iirejista ezingama-32 ze-GPR) ezilandelwa ziirejista zesahlulo kunye nomphezulu wesitaki emva koko ubize i-IRQ Handler. Ndiqale ukubona isitaki ngasinye kwaye ngokucacileyo silungelelanisiwe kodwa ukuba ungabona imveliso ye-VM ungabona ukuba ibeka into enye, andiyifumani, ndiyazi nje ukuba iyi-0x10 kunye nolwakhiwo uphuma kulungelelwano. Olu lulwakhiwo lweerekhodi.

        ubume besakhiwo {
        uint32_t gs, fs, es, ds; / * tyhala ii-secs zokugqibela * /
        uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; / * Ukutyhalwa ngu 'pushal' * /
        Uint32_t int_no, khowudi / * Ikhowudi yempazamo * /
        Uint32_t eip, cs, eflags, useresp, ss; / Igcinwe kwikhefu * /
        };

        Iyandikhathaza into yokuba ibeka enye into phezulu kwaye andifumani apho ibekwe khona ukuba ngokucacileyo yonke into ibekiwe njengoko kufanelekile. Ngaba unayo nayiphi na ingcamango enokuba yintoni?

        http://www.subeimagenes.com/img/sin-titulo-1036729.jpg

  7.   imvucube sitsho

    Fumana ikhibhodi iphazamise ukusebenza kodwa hayi isibali-xesha siphazamise; impazamo yayikwindlela eyayiqulunqwe ngayo, ndasebenzisa i-objdump ukubona into yokugqibela kwaye kwavela ukuba wonke umsebenzi ongenisiweyo nokuba usebenzisa "asm volatile" wawukhatshwa yi-pushl ebp, mov ebp, esp. Emva koko yongeza i-popl ebp kuyo ukubuyisela isitaki sokuqala kwaye iya kugqitha iimpikiswano ngaphandle kokusilela. Apha ndincamathisela ikhowudi yabo bafuna ukuyijonga kwaye ukuba ungafumanisa ukuba kutheni kungekho siphazamiso ngenxa yeXesha, ndingathanda ukuyazi kwaye ndinamathisele ikhonkco apho bathetha khona ngokwenza izinto ezininzi http://www.jamesmolloy.co.uk/tutorial_html/9.-Multitasking.html
    Divel elandelayo
    https://www.mediafire.com/?kmo83dxyzc7c3cz

    1.    AdrianArroyoStreet sitsho

      Ndiyifumene. Yayiyibug kwenye indawo eyachaphazela ukwenziwa kweXesha lePIC, ngakumbi kwi-IRQ remap kukho imigca emibini ekufuneka ndiyiguqule. Enkosi kwinto yokuba ndibone ikhowudi kwiwebhusayithi ngelo xesha inento eyahlukileyo kwaye ucofe! Utshintsho lwalusecaleni kwemigca:
      ND :: amazibuko :: IziphumoB (PIC1 + 1, 0xFF);
      ND :: amazibuko :: IziphumoB (PIC2 + 1, 0xFF);

      Kwafuneka utshintshe ixabiso le-0xFF (ndingathi ibonisa ukukhubazeka) ukuya ku-0x00 (ndingathi ibonisa ukuba yenziwe) nangona ndingaqinisekanga ngenene, kodwa iyasebenza. Ndihlaziye ikhowudi kwi-GitHub. Enkosi kakhulu, kakhulu ngokundinceda ngeprojekthi endiyishiyileyo kancinci ngenxa yale ngxaki. H

      1.    imvucube sitsho

        Wamkelekile, ndiya kujonga kuhlaziyo olulandelayo ngesihloko kwaye ungathembela kum ngayo nantoni na 🙂 (Y)

      2.    imvucube sitsho

        Guqula inkqubo yokubamba umtya wekhibhodi; kuba iyafunda xa isitshixo sikhutshwa kwaye inyusa i-0 kwi-buffer, enika iingxaki kufundo kwaye ekugqibeleni u - '\ n' uyitshintshele kwi »ukuze ushicilelo oluchanekileyo lusebenze

  8.   Soid perez sitsho

    Molo, ndiyifundile yonke iposti yakho, nangona ukwenziwa kwayo ingekho ngaphezulu kweposti ezi-2, ilunge kakhulu, gcina yonke into, kodwa kuya kufuneka ndifunde i-c ++ kunye ne-posix ukuze uyiqonde kuba ndiyazi ngo "c" .

    1.    AdrianArroyoStreet sitsho

      Ukuqala ngeWindows kwi-Windows kuyafana ngengqondo yokuba le yindlela yokuqalisa inkqubo nge-x86 processor kwaye inkqubo yokusebenza eyakhelwe kuyo ayinampembelelo incinci. Ngokwenyani asizibhangisi thina, ikukuqalisa i-GRUB kuthi. I-GRUB, eyilelwe ukuqala i-Linux, inokuvula iWindows kwaye kule meko i-NextDivel.

      1.    Umhlaba sitsho

        kulungile enkosi oko kuthetha ukuba into endifuna ukuyenza inokwenzeka ukuba sele ndifunda i-c ++ kwaye ndenze ii -apps ezithile kwaye ndafaka inkqubo yakho kwi-pendrive kwaye ndiyifunda ngokweenkcukacha sisithuba esihle kakhulu