Ukulingisa iLinus Torvalds: Dala uhlelo lwakho lokusebenza kusuka ekuqaleni (VI)

Yebo, ngemuva kobakaki abancane siyaqhubeka nochungechunge lwezifundo zethu. Uma sibuyela kukhodi edlule kufanele sibe ne-ISR yokwehlukanisa ngo-zero. Manje kufanele sigcwalise amanye ama-ISR esasiwathumele (ama-32 okuqala). Hhayi-ke manje sizoqhubeka nokuphazamiseka kohlelo, sizokwenza i-IRQ eyaziwa nangokuthi Ukuphazamisa Izicelo. Lawa ma-IRQ akhiqizwa ngamadivayisi wehadiwe njengamakhibhodi, amagundane, amaphrinta, njll. Ekuqaleni ama-IRQ ayisishiyagalombili ahlelwe ngokuzenzakalela ezikhundleni ze-IDT 8 kuya ku-8. Njengoba sisebenzise ama-15 okuqala kokungafani manje kufanele siwavuselele. Sizobeka i-IRQ kusuka ku-32 kuye ku-32. Ngalokhu kufanele siqale sibuyise ama-IRQ:

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);
}

Manje sakha umsebenzi ukufaka ama-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");
}

Isigwebo se-asm sti senza ama-IRQ asebenze. Well manje sihamba nokuthile okufana ne-ISR. Imisebenzi ye-IRQ eyisisekelo:

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

Ingxenye ejwayelekile (efanayo 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"
);
}

Nesiphathi esiyisisekelo:

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);
}

Ngalokhu kufanele ukuthi i-IRQ isebenze vele noma ngabe bengenzi lutho. Esahlukweni esilandelayo sizobona ukuthi singayithola kanjani idatha kusuka kula ma-IRQ afana newashi noma ikhibhodi.

OlandelayoDivel-IRQ


Futhi ngalokhu kuphela okuthunyelwe kwanamuhla. Njengoba ubona manje ngibhala kancane njalo ngenxa yezinye izingqinamba. Noma kunjalo ngizoqhubeka ngize ngibe nohlelo oluphelele lokusebenza


Shiya umbono wakho

Ikheli lakho le ngeke ishicilelwe. Ezidingekayo ibhalwe nge *

*

*

  1. Ubhekele imininingwane: Miguel Ángel Gatón
  2. Inhloso yedatha: Lawula Ugaxekile, ukuphathwa kwamazwana.
  3. Ukusemthethweni: Imvume yakho
  4. Ukuxhumana kwemininingwane: Imininingwane ngeke idluliselwe kubantu besithathu ngaphandle kwesibopho esisemthethweni.
  5. Isitoreji sedatha: Idatabase ebanjwe yi-Occentus Networks (EU)
  6. Amalungelo: Nganoma yisiphi isikhathi ungakhawulela, uthole futhi ususe imininingwane yakho.

  1.   mthokozisi kusho

    Ngiyabonga kakhulu u-Adrian, lapho nje ngithola isikhathi (manje sengimatasa impela, phakathi kokunye futhi ngohlelo lokusebenza) ngizoqala ukuhlola igxathu lokufundisa ngesinyathelo.

  2.   Ruby kusho

    Ngiyabonga kakhulu ngethayi.

  3.   sasuke kusho

    Umbuzo owodwa ngenza iphrojekthi ngokususelwa kulezi zilimi ezihlelayo
    * Html5
    * Css3
    * IJava
    Umbuzo wami ukuthi ngithanda ukuthi le phrojekthi isebenze, ukuze abasebenzisi bayisebenzise ezinhlelweni ezisebenza njenge-linux namawindi, ungangitshela ukuthi ngikwenza kanjani lokho

    1.    AdrianArroyoStreet kusho

      Akuhlangene ngalokhu kepha ngiyakuphendula noma kunjalo. Ngicabanga ukuthi kuzoba yi-HTML5, CSS3, neJavaScript hhayi iJava, njengoba i-HTML5 neJava zizwana zibulalane. Nge-HTML5 ungakha amawebhusayithi njengangaphambili atholakala nge-inthanethi. Uma ufuna ukukwenza kube okwasendaweni ungakupakisha njengohlelo lokusebenza lweFirefox OS ne-Chrome OS. Uma okufunayo ukuthi ohlelweni ngalunye olusebenzayo kukhona okwenziwayo okubhekwayo ku-XUL Runner okuyithuluzi lokwenza i-XUL (ngakho-ke i-HTML5 ngaphakathi kwento) nenjini yeGecko.

    2.    Soid perez kusho

      Uhlaka lweJava noma iphaneli inketho enhle kakhulu ngidale ezinye izinhlelo zokusebenza ezisebenzisekayo ewindini ngisebenzisa amakilasi wohlaka lweJava njengesiphequluli sewebhu kepha esikhundleni sokuyisebenzisela noma iliphi ikhasi ngilinika indlela eqondile kwikhodi futhi nge-php ngenza imisho yeJava ngokusebenzisa i- .jar enakekela insimbi. Yize ngincoma ukusebenzisa i-HTML5, CSS3 neJavaScript ngoba njengoba kusho u-Adrian Java, kuthatha iFatal nge-Html5 futhi kungilethele amakhanda amaningi

  4.   emadolobheni kusho

    Isifundo sokwenza ulimi lwakho lohlelo kungaba kuhle

  5.   U-Ivan kusho

    Kuhle kakhulu lolu chungechunge lwama-athikili wokuthi ungakha kanjani uhlelo lokusebenza, ufunda izinto eziningi. Ngibheke phambili ukungena okulandelayo, sengivele ngifuna ukuba nekhibhodi ku-OS. Kade ngizixaka ngekhodi ye-git, futhi angikwazanga ukuyenza isebenze nge-port 0x60 ne-0x64. Noma ngicabanga ukuthi kukhibhodi kube nokuphazamiseka okunikeze ukhiye ocindezelwe.

    1.    AdrianArroyoStreet kusho

      Ungathola okokufaka kwekhibhodi ngaphandle kokuphazamiseka, kepha kufanele ufunde nge-ND :: Ports :: InputB ethekwini 0x60. Kodwa-ke indlela ekahle yokwenza lokhu ingukuphazamiseka kwe-IRQ. Njengamanje ngiyazama ukukwenza futhi kuthatha isikhashana ukuqhubeka ngenxa yalokho.

      1.    i-carlosorta kusho

        Sawubona Adrian, bengilokhu ngibheka le khodi futhi ngihlabeka umxhwele ngokwenzayo nokuthi kungisize kanjani ukuqonda ezinye izinto.

        Nginemibuzo embalwa emincane yokuthi isebenza kanjani nomthombo yilowo engiwuthole ku-GIT yakho:

        1.- Engxenyeni yama-IRQs, ushilo ukuthi izikhundla ezisuka ku-0 kuye ku-32 ze-IDT zisetshenziselwe okwehlukile futhi zisuka ku-32 (0x20) kuya ku-45 (0x2D) kuma-IRQ, kepha ama-IRQ ayi-16 esewonke, ukulungisa kabusha bekungeke kusuka ku-0x20 kuye ku-0x30?

        2. - Engxenyeni ye-IRQ, qaphela ukuthi amasethi athunyelwe esigabeni se-IDT; Uma ubahlukanisa, qaphela ukuthi akusakhiqizanga ngaphandle kokuhlukaniswa ngo-0, ngakho-ke kuyadingeka ukwengeza i-IDT Flush () yokuguqulwa ngakunye okwenziwayo. Kungani i-IDT iguquka lapho isetha i-Timer kanye nokwahlukanisa phakathi kuka-0 kuyeka ukusebenza?

        3. - Bengizama ukulandelela ikhodi ngokunyathelisa okuthile ukuze ngiyithathe njengesibonakaliso salokho ekwenzayo (ukuze kungalungiswa iphutha ngesinyathelo) futhi ngabona ukuthi ayikho i-IRQ esebenzayo, ingabe kufanele ngibhalise enye into ekuphazamisweni kwe-IRQ okwenziwe?

        1.    i-carlosorta kusho

          Ngikhohliwe ukusho ukuthi ngithole lezi zixhumanisi ezinolwazi:
          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

          Ngokusobala ukuphatha ama-IRQ, kuyadingeka ukuthi ubheke ukuthi yiluphi uhlobo lwesiphatho olusetshenziswayo uma, i-PIC, i-APIC, i-IOAPIC. . .njl. Ingabe ikhona indlela yokwenza amandla okuphatha we-IRQ noma udinga ukuzama inhlanhla?

  6.   i-carlosorta kusho

    Sawubona Adrian.

    Ngabona ukuthi nginezinkinga ngama-IRQ futhi yingakho ikhodi yayingakwazi ukuthuthuka, ngathatha ikhophi yephrojekthi futhi ngaqala ukuyicubungula; Ngingeze umsebenzi ekuphrintweni kwesikrini ukuphrinta amarekhodi e-reg we-reg reg, ngesikhathi sokwenza ukuphazamiseka; Ngithole izinto eziningana, phakathi kwazo ukuthi i-registry iyasebenza futhi angisatholi ukuthi kungani; shintsha i-Timer interrupt ukuze ikhibhodi iphazamise ukuhlola nokwenza lokho okufanele kodwa angiyitholi inkinga, ungangisiza uqhubeke nalokhu okuthunyelwe okuhle? 😀

    Ngishiya isixhumanisi (sinokulungiswa okuthile ngoba ngisebenzisa iMageia futhi ngisebenzisa iGrub2, ngisebenzisa iVirtualBox ukuyivivinya)
    https://www.mediafire.com/?93psrgaoozatse8

    Ilinde impendulo yakho yokulalela futhi uma unemibuzo noma udinga okuthile engingathanda ukukusiza

    1.    i-carlosorta kusho

      Ngikhohliwe ukusho ukuthi ngiphinde ngabheka iKernelPanic ngoba ama-ISR awasebenzanga futhi nginenkinga efanayo phezulu kwesitaki inani liyahlungwa futhi angazi noma yisihlanganisi sami noma kunenkinga, mina sebenzisa i-GCC 4.8.2 neMageia 4

    2.    AdrianArroyoStreet kusho

      Ngithanda kakhulu ukuthi ungisize kuphrojekthi. Ngibambeke ngempela kwi-Timer futhi angiqondi ukuthi kungani ingasebenzi. Ngenze izivivinyo ngiguqula izinto ezimbalwa futhi akuphumelelanga. Njengamanje angikwazi ukuhlela ikhodi (ngiseholidini kude) kepha ngizoyibheka ngokushesha ngangokunokwenzeka. Ngikunikeza isixhumanisi esinolwazi ngale nkinga esibonakala siyinto ejwayelekile: http://wiki.osdev.org/I_Cant_Get_Interrupts_Working

      Mayelana nokuhlukile, ngicabanga ukuthi ngiyakhumbula ukuthi kufanele ushayele ucingo ku- "sti" ku-ASM ukuze ubenze basebenze yize kusobala ukuthi kukhona okungahambi kahle kwenye indawo.

      1.    i-carlosorta kusho

        Siyabonga ngempendulo yakho futhi yebo, impela. Iziphazamiso bezihluleka kepha bekuyinkinga ukufaka amakhodi esitaki nenkinga yokusakaza, ngizohlola isixhumanisi futhi ngizobe ngenza izivivinyo. Uma ngiyixazulula ngizokwazisa futhi uma kungenjalo ngizokwazisa ngenqubekela phambili. Amaholide amahle 🙂

      2.    i-carlosorta kusho

        Ngeke ibe khona indlela yokubona ikhodi ehlanganisiwe? Ingabe kukhona okuxakayo okwenzekayo futhi angikutholi ini? Bheka lesi sikrini (ngibeka isixhumanisi ekugcineni), kuyinto exakayo kusukela ekusebenzeni kwe-IRQ 2 (ikhibhodi ) ingena ku-Stack inani 0 no-0x20 (32, ngakho-ke lilingane ukuze livivinye) bese i-pushal (ama-registry angama-32-bit GPR) ilandelwa amarejista ehlukaniswa bese phezulu kwesitaki bese ibiza i-IRQ Handler. Ngiqale ukubona isitaki ngasinye futhi ngokusobala sihlelekile kepha uma ubona umphumela we-VM ungabona ukuthi ubeka into eyodwa, angitholi lapho, ngiyazi nje ukuthi iyi-0x10 nesakhiwo kuphuma ekuhlelweni. Lesi yisakhiwo serekhodi.

        i-struct reg {
        uint32_t gs, fs, es, ds; / * ucindezele amasekhondi ekugcineni * /
        uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; / * icindezelwe 'pushal' * /
        uint32_t int_no, ikhodi yephutha; / * Ikhodi yephutha * /
        uint32_t eip, cs, eflags, useresp, ss; / * Kumiswe ngekhefu * /
        };

        Inginikeza ikani ebeka into eyodwa ngaphezulu phezulu futhi angikwazi ukuthola lapho kubekiwe khona uma kusobala ukuthi yonke into ibekiwe njengoba kufanele. Ngabe unawo umbono wokuthi kungaba yini?

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

  7.   i-carlosorta kusho

    Thola ikhibhodi iphazamise ukusebenza kepha hhayi ukuphazamiseka kwesibali sikhathi; iphutha lalisendleleni eyahlanganiswa ngayo, ngasebenzisa i-objdump ukubona into yokugcina kwavela ukuthi wonke umsebenzi owawungenwa ngisho usebenzisa i- "asm volatile" nawo wawuhambisana ne-pushl ebp, mov ebp, esp. Ngemuva kwalokho vele ungeze i-popl ebp kuyo ukuze ubuyisele isitaki sokuqala futhi kuzodlula izimpikiswano nakanjani. Lapha nginamathisela ikhodi yalabo abafuna ukuyihlola futhi uma ungathola ukuthi kungani ukuphazamiseka kungakhiwanga yisibali sikhathi, ngingathanda ukukwazi futhi nginamathisela isixhumanisi lapho bekhuluma ngokwenza imisebenzi eminingi http://www.jamesmolloy.co.uk/tutorial_html/9.-Multitasking.html
    I-Divel elandelayo
    https://www.mediafire.com/?kmo83dxyzc7c3cz

    1.    AdrianArroyoStreet kusho

      Ngiyitholile. Kwakuyimbungulu kwenye indawo okwakuthinta ukusebenza kwe-Timer PIC, ikakhulukazi ku-IRQ remap kwakukhona imigqa emibili okufanele ngiyishintshe. Ngenxa yokuthi ngikwazi ukubona ikhodi kuwebhusayithi ngaleso sikhathi eyayinokuthile okuhlukile bese uqhafaza! Ushintsho beluhambisana nolayini:
      ND :: Amachweba :: OkukhiphayoB (PIC1 + 1, 0xFF);
      ND :: Amachweba :: OkukhiphayoB (PIC2 + 1, 0xFF);

      Bekufanele ushintshe inani le-0xFF (bengingathi likhombisa ukukhubazeka) libe ngu-0x00 (bengizothi likhombisa ukuthi kunikwe amandla) yize ngingaqiniseki ngempela, kodwa kuyasebenza. Ngivuselele ikhodi ku-GitHub. Ngiyabonga kakhulu, kakhulu ngokungisiza ngephrojekthi ebengiyishiye kancane ngenxa yale nkinga. H

      1.    i-carlosorta kusho

        Wamukelekile, ngizolindela isibuyekezo esilandelayo sesihloko futhi ungathembela kimi nganoma yini 🙂 (Y)

      2.    i-carlosorta kusho

        Shintsha inqubo yokuthwebula intambo yekhibhodi; ngoba iyafunda lapho ukhiye ukhishwa futhi ifaka u-0 kubhafa, lokho kunika izinkinga ekufundeni futhi ekugcineni i - '\ n' iyishintshele ku »ukuze ukuphrinta okulungile kusebenze

  8.   Soid perez kusho

    Sawubona, ngikufunde konke okuthunyelwe, yize ngokwenzayo kungadluli kokuthunyelwe okungu-2, kuhle kakhulu impela, gcina konke, kepha kuzodingeka ngifunde i-c ++ ne-posix ukukuqonda ngoba ngiyazi ngo "c" (Ngijabule ngalolo limi lohlelo) kepha yize i-c ++ ingu-O O angikaze ngisebenze kuwo, ngifundele okokufundisa ku-google bese ngibuyisa lokhu okuthakazelisa kakhulu nombuzo, ingabe ukuqala kwewindi kufana ne-linux?

    1.    AdrianArroyoStreet kusho

      Ukubhutha ku-Windows kuyafana ngomqondo wokuthi le yindlela yokuqalisa isistimu eneprosesa ye-x86 futhi uhlelo olusebenzayo olwakhiwe kuyo lunomthelela omncane. Empeleni asizibhuthisi ngokwethu, ibhula i-GRUB ngathi. I-GRUB, eyenzelwe ukuvula i-Linux, ingakwazi ukuvula iWindows futhi kulokhu i-NextDivel.

      1.    inhlabathi kusho

        kulungile ngiyabonga lokho kusho ukuthi engifuna ukukwenza kungenzeka ukuthi sengivele ngifunda i-c ++ futhi ngidale ezinye izinhlelo zokusebenza futhi ngafaka isistimu yakho ku-pendrive futhi ngiyifunda ngokuningiliziwe okuthunyelwe okuhle kakhulu