Ku dayashada Linus Torvalds: Ka abuur xoq (VI) nidaamkaaga qalliinka u gaarka ah

Hagaag, qaanso yar kadib waxaan kusii wadaynaa taxanaheena casharrada. Haddii aan ku noqonno koodhkii hore, waa inaan haysannaa ISR ee qaybta eber. Hadda waa inaan buuxinaa inta hartay ISRs ee aan fariin u dirnay (32-kii ugu horreeyay). Hagaag hada waxaan sii wadaynaa joojinta barnaamijyada, waxaan sameyn doonnaa IRQs sidoo kale loo yaqaan Kala Goynta Codsiyada. IRQ-yadaani waxaa soo saara aaladaha qalabka sida teebabka, jiirka, madbacadaha, iwm. Markii hore 8-da IRQ ee uguhoreysa waxaa si otomaatig ah loogu sawiraa boosaska IDT 8 ilaa 15. Maadaama aan u isticmaalnay 32-dii ugu horreeyay marka laga reebo hadda waa inaan iska dhaafnaa. Waxaan ka dhigi doonaa IRQ 32 ilaa 45. Tan darteed waa inaan marka hore ka baxnaa 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);
}

Hadda waxaan abuureynaa shaqeyn si aan u rakibno 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");
}

Xukunka asm sti waxaan dhaqaajineynaa IRQs. Hagaag hada waxaan la aadeynaa wax la mid ah ISR. Hawlaha IRQ aasaasiga ah:

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

Qeyb guud (oo lamid ah 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"
);
}

Iyo maamulaha aasaasiga ah:

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

Iyada oo tan la adeegsanayo waa inaan horeyba u hawlgalnaa IRQ xitaa haddii aysan weli waxba qaban. Cutubka xiga waxaan ku arki doonaa sida looga helo xogta IRQ-yadaas sida saacadda ama kumbuyuutarka.

NextDivel-IRQ


Taasina waxay ku egtahay qoraalka maanta. Sida aad hada u aragto waxaan qori ka yar si joogto ah arimo kale awgood. Xitaa sidaas waan sii wadi doonaa illaa aan ka helayo nidaam hawlgal oo dhammaystiran


Ka tag faalladaada

cinwaanka email aan la daabacin doonaa. Beeraha loo baahan yahay waxaa lagu calaamadeeyay la *

*

*

  1. Masuul ka ah xogta: Miguel Ángel Gatón
  2. Ujeedada xogta: Xakamaynta SPAM, maaraynta faallooyinka.
  3. Sharci: Oggolaanshahaaga
  4. Isgaarsiinta xogta: Xogta looma gudbin doono dhinacyada saddexaad marka laga reebo waajibaadka sharciga ah.
  5. Kaydinta xogta: Macluumaadka ay martigelisay Shabakadaha Occentus (EU)
  6. Xuquuqda: Waqti kasta oo aad xadidi karto, soo ceshan karto oo tirtiri karto macluumaadkaaga.

  1.   xayoo_cz dijo

    Aad baad u mahadsan tahay Adrian, sida ugu dhakhsaha badan ee aan waqti u helo (hada mashquul ayaan ahay, iyo waxyaabo kale oo aan sidoo kale la socdo a systemka hawlgalka) Waxaan bilaabi doonaa inaan tijaabiyo casharka talaabo talaabo.

  2.   Ruby dijo

    Aad baad ugu mahadsantahay cute.

  3.   sasuke dijo

    Hal su'aal ayaan qabanayaa mashruuc ku saleysan luuqadahan barnaamijyada
    * Html5
    * Css3
    * Java
    Su'aashaydu waxay tahay waxaan jeclaan lahaa in mashruucani noqdo mid la fulin karo, markaa dadka isticmaala waxay u adeegsadaan nidaamyada hawlgalka sida Linux iyo windows, ma ii sheegi kartaa sida aan taas ku sameeyo

    1.    AdrianArroyoStreet dijo

      Waxba kuma lahan tan laakiin waan kaaga jawaabayaa si kasta. Waxaan u maleynayaa inay noqon doonto HTML5, CSS3, iyo JavaScript oo aan aheyn Java, maadaama HTML5 iyo Java ay si wada jir ah isku raacsan yihiin. HTML5 waxaad ku abuuri kartaa degello internet sidii hore oo kale oo laga helo internetka. Haddii aad rabto inaad ka dhigto mid maxalli ah, waxaad u xirxiran kartaa sidii Firefox OS iyo barnaamijka Chrome OS. Haddii waxa aad rabto ay tahay in nidaam kasta oo hawlgal ah uu jiro fulin lagu eegi karo XUL Runner oo ah aalad lagu fuliyo XUL (sidaa darteedna HTML5 gudaha qaybta) mashiinka Gecko.

    2.    Maraqa soid dijo

      Qaabka Java ama gudiga waa ikhtiyaar aad ufiican waxaan ku abuuray qaar ka mid ah barnaamijyada la fulin karo daaqada anigoo isticmaalaya fasalada java frameka oo ah biraawsarka webka laakiin halkii aad u isticmaali laheyd bog kasta waxaan siinayaa dariiqa tooska ah ee koodhka iyo php waxaan ku fuliyaa jumlada java ah .jar oo daryeela birta. In kastoo aan kugula talin lahaa inaad isticmaasho HTML5, CSS3 iyo JavaScript maadama sida Adrian Java u sheegay ay Fatal ku qaadaneyso Html5 waxayna ii keentay madax xanuun badan

  4.   lurbaan dijo

    Cashar ku saabsan sida loo sameeyo luqaddaada barnaamijka ayaa fiicnaan lahayd

  5.   Ivan dijo

    Aad ayey ufiican tahay taxanahan maqaalada ah ee ku saabsan sida loo dhiso nidaamka qalliinka, waxyaabo badan ayaad baraneysaa Waxaan sugaya gelitaanka soosocda, horeyba waxaan rabaa inaan kumbuyuutar ku haysto OS-ga. Waxaan ku mashquulsanaa koodhka git, mana aanan awoodin inaan u helo inaan kula shaqeeyo dekedda 0x60 iyo 0x64. In kasta oo aan u maleynayay in kumbuyuutarka uu jiray hakad ku siiyay furaha la riixay.

    1.    AdrianArroyoStreet dijo

      Xaqiiqdii waad heli kartaa soo galinta kumbuyuutarka adigoon kala go 'lahayn, laakiin waa inaad ku akhridaa ND :: Ports :: InputB ee dekedda 0x60. Si kastaba ha noqotee habka ugu fiican ee tan lagu sameyn karo waa iyada oo IRQ ay hakad gasho. Hadda waxaan isku dayayaa inaan sameeyo waxna way igu qaadanaysaa in aan sii wado taas awgeed.

      1.    Carlosorta dijo

        Hambalyo Adrian, waan hubinayay koodhka waanan la dhacsanahay waxa uu qabanayo iyo sida wanaagsan ee ay iiga caawisay in aan fahmo waxyaabaha qaarkood.

        Waxaan hayaa su'aalo yar oo yar oo ku saabsan sida ay u shaqeyso ishana waa tan aan ka helay GIT-kaaga:

        1.- Qeybta IRQs, waxaad xustay in jagooyinka laga bilaabo 0 ilaa 32 ee IDT loo adeegsaday ka reebitaan iyo laga bilaabo 32 (0x20) ilaa 45 (0x2D) IRQs, laakiin IRQs waa 16 wadar ahaan , inta dhiman ma noqon doonto 0x20 ilaa 0x30?

        2. - Qaybta IRQ, ogow in setgates-ka loo diray qaybta IDT; Markii aad kala saarto, u fiirso in aysan mar dambe soo saareynin marka laga reebo kala qeybinta 0, marka waa lagama maarmaan in lagu daro IDT Flush () wax ka beddel kasta oo la sameeyo. Muxuu IDT-gu isbeddelayaa marka la dejinayo Saacadda iyo kala qaybsanaanta 0 u shaqeyso?

        3.- Waxaan iskudayey inaan la raaco koodhka daabacaadda qaar si aan ugu muujiyo waxa ay fulinayso (si aanan u khaldin tallaabo tallaabo) waxaanan gartay in IRQ uusan soconayn, ma inaan wax kale iska diiwaangeliyaa Hakadka IRQ ayaa soo saaray?

        1.    Carlosorta dijo

          Waxaan ilaaway inaan sheego inaan ka helay xiriiriyeyaashaan macluumaad:
          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

          Sida muuqata, maaraynta IRQs, waxaa lagama maarmaan ah in lagu xisaabtamo nooca maareynta loo isticmaalo haddii, PIC, APIC, IOAPIC. . .iyo. Ma jirtaa wado lagu sameeyo firfircoonaanta maareynta IRQ mise waxaad u baahan tahay inaad isku daydo nasiib?

  6.   Carlosorta dijo

    Galab wanaagsan Adrian.

    Waxaan arkay inaan dhibaato ku qabo IRQs waana sababta koodhku u hormarin kari waayey, waxaan qaatay nuqul ka mid ah mashruuca waxaanan bilaabay inaan falanqeeyo; Waxaan ku daray hawl shaashadda daabacaaddeeda si aan u daabaco diiwaanka reg ee qaabdhismeedka reg, xilligan la joogo hakadka; Waxaan ka helay dhawr waxyaalood, kuwaas oo ay ka mid tahay in diiwaangelintu soconayso welina maan helin sababta; beddel Jadwalka saacadda ee carqaladeynta kumbuyuutarka si loo tijaabiyo oo loo sameeyo waxa ay tahay inay dhacdo laakiin ma heli karo dhibaatada, ma i caawin kartaa oo ma ku sii wadi kartaa qoraalkan wanaagsan? 😀

    Waan ka tagayaa iskuxiraha (waxoogaa habeyn ah ayuu leeyahay maxaa yeelay waxaan isticmaalaa Mageia waxaanan isticmaalaa Grub2, waxaan u adeegsanayaa VirtualBox si aan u tijaabiyo)
    https://www.mediafire.com/?93psrgaoozatse8

    Waxaan sugayaa jawaabtaada foojignaanta ah iyo haddii aad wax su'aalo ah qabtid ama aad u baahato wax aan jeclaan lahaa inaan ku caawiyo 🙂

    1.    Carlosorta dijo

      Waxaan ilaaway inaan xuso inaan sidoo kale hubiyay KernelPanic maxaa yeelay ISRs ma aysan shaqeynin isla dhibaatadaasna waxaan ku qabaa xagga sare ee xarigga qiime ayaa la sifeynayaa mana garanayo haddii ay tahay isku duubnahayga ama ay dhibaato jirto, waxaan isticmaalaa GCC 4.8.2 Mageia 4

    2.    AdrianArroyoStreet dijo

      Runtii waan jeclahay inaad igu caawiso mashruuca. Runtii waxaan ku dhegay saacadda mana fahmin sababta aysan u shaqeynaynin. Waxaan sameeyay tijaabooyin wax ka beddelid waxoogaa yar ah mana aysan dhicin. Xilligan ma saxi karo koodh (fasax ayaan ku maqanahay) laakiin si fiican ayaan u eegi doonaa sida ugu dhakhsaha badan ee aan awoodo. Waxaan ku siinayaa xiriiriye macluumaad ku saabsan dhibaatadan oo u muuqata inay tahay wax caadi ah: http://wiki.osdev.org/I_Cant_Get_Interrupts_Working

      Marka laga reebo waxyaabaha ka reeban, waxaan u maleynayaa inaan xasuusto inaad u yeerto "sti" ASM si aad u dhaqaajiso inkasta oo ay cadahay in meel ay wax ka qaldan yihiin.

      1.    Carlosorta dijo

        Waad ku mahadsantahay jawaabtaada iyo haa, runtii. Hakadyada ayaa xumaaday laakiin waxay ahayd dhibaato gelinta lambarrada xirmooyinka iyo dhibaato tuuritaan, waan hubin doonaa iskuxirka waxaanan sameyn doonaa tijaabooyin. Haddii aan xalliyo waan kula soo socodsiin doonaa haddii kalese waxaan kula socodsiin doonaa horumarka. Ciid wanaagsan 🙂

      2.    Carlosorta dijo

        Ma jiri doonto waddo lagu arko koodhka la soo ururiyey? Miyay wax yaab leh dhacaan oo aanan heli karin waxaas? Fiiri shaashadan (waxaan ku dhejinayaa iskuxiraha dhamaadka), waa wax la yaab leh maadaama hawsha IRQ 2 (kiiboodhka) ay gasho Ku dhaji qiimaha 0 iyo 0x20 (32, markaa ku habboon in la tijaabiyo) ka dibna pushal (diiwaanka 32-bit GPR) oo ay ku xigto diiwaangelinta qaybinta ka dibna dusha sare ee xargaha ka dibna wac IRQ Handler. Waxaan bilaabay inaan arko xidhmooyin kasta sida muuqatana waa la hayaa laakiin hadaad arki karto wax soo saarka VM waxaad arki kartaa inay ku dhegan tahay hal cunsur oo kale, ma heli karo meesha, kaliya waan ogahay inay tahay 0x10 qaabdhismeedkuna amar la'aan. Tani waa qaab dhismeedka diiwaanka.

        qaab dhismeed
        uint32_t gs, fs, es, ds; / * riixay sekenkii ugu dambeeyay * /
        uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; / * waxaa riixay 'pushal' * /
        uint32_t int_no, err_code; / * Koodh khalad ah * /
        uint32_t eip, cs, eflags, useresp, ss; / * Iskuday nasasho * /
        };

        Waxay igu dhibaysaa inay dhigayso hal cunsur oo dusha sare ah mana heli karo halka ay ku duuban tahay haddii sida muuqata wax walba loo qaabeeyo sidii la rabay. Ma haysaa wax fikrad ah waxa ay noqon karto?

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

  7.   Carlosorta dijo

    Hel kiiboodhka inuu carqaladeeyo si uu ushaqeeyo laakiin saacad joojiyaha ha joojin; khaladku wuxuu ku jiray sida loo soo uruuriyay, waxaan u adeegsaday objdump si aan u arko shayga ugu dambeeya waxaana ii soo baxday in hawl kasta oo la galay xitaa iyadoo la isticmaalayo "asm volatile" ay sidoo kale la socoto riix ebp, mov ebp, esp Kadib kaliya ku dar ebp ebp si aad u soo celiso xariiqa bilowga ah waxayna u gudbin doontaa doodaha si guuldaro ah. Halkan waxaan ku soo lifaaqayaa koodhka kuwa doonaya inay hubiyaan iyo haddii aad ogaan karto sababta hakadka uusan u abuurin Waqtiga waxaan jeclaan lahaa inaan ogaado waxaana ku xirayaa xiriiriye meesha ay ka hadlayaan wax badan. http://www.jamesmolloy.co.uk/tutorial_html/9.-Multitasking.html
    Xiga Divel
    https://www.mediafire.com/?kmo83dxyzc7c3cz

    1.    AdrianArroyoStreet dijo

      Waan helay Waxay ahayd cilad ku jirta goob kale oo saameysay firfircoonaanta Timer PIC, gaar ahaan qaybta IRQ ee loo yaqaan 'IRQ remap' waxaa jiray laba sadar oo ay ahayd inaan wax ka beddelo Waad ku mahadsan tahay xaqiiqda ah inaan ku arki karo koodh degel websaydh kaas oo xilligaas lahaa wax ka duwan oo guji! Isbeddelku wuxuu ku socday khadadka:
      ND :: Dekedaha :: Wax soo SaarkaB (PIC1 + 1, 0xFF);
      ND :: Dekedaha :: Wax soo SaarkaB (PIC2 + 1, 0xFF);

      Waxay ahayd inaad ka bedesho qiimaha 0xFF (waxaan dhihi lahaa waxay tilmaamaysaa naafo) ilaa 0x00 (waxaan dhihi lahaa waxay muujineysaa karti) inkasta oo runtii aanan hubin, laakiin way shaqeysaa. Waxaan cusbooneysiiyay koodhka GitHub. Aad iyo aad baad ugu mahadsan tihiin inaad iga caawiseen mashruucii aan in yar kaga tagey dhibaatadan. H

      1.    Carlosorta dijo

        Waad soo dhawaatay, waxaan sugi doonaa cusbooneysiinta xigta ee mowduuca waadna igu kalsoonaan kartaa wax uun anything (Y)

      2.    Carlosorta dijo

        Beddel jadwalka qabashada xargaha; maxaa yeelay waa wax akhrin marka furaha la sii daayo oo waxay ku xirneysaa 0 keydka, taasi waxay dhibaato siinaysaa aqrinta aakhirkiina '\ n' ayaa loogu beddelaa »sidaas darteed daabacaadda saxda ahi way shaqaysaa

  8.   Maraqa soid dijo

    Waad salaaman tahay, waan aqriyay qoraalkaaga oo dhan, inkasta oo ficil ahaan aysan ka badneyn 2 dhambaal, runti waa wax aad u wanaagsan, badbaadi wax walba, laakiin runtii waxaan u baahanahay inaan barto c ++ iyo posix si aan u fahmo maxaa yeelay waan ka ogahay "c" (Waan ku faraxsanahay luuqadaas barnaamij) laakiin In kasta oo c ++ uu yahay c OO aanan weligey runtii ka shaqeyn, haddana akhristow casharro ka mid ah google ka dibna aan ku soo celiyo tan xiisaha badan iyo su’aasha ah, bilowga daaqadda ma la mid tahay Linux?

    1.    AdrianArroyoStreet dijo

      Booting-ka Windows-ku wuxuu la mid yahay macnaha in kani yahay habka lagu kiciyo nidaam wata processor-ka x86 oo nidaamka qalliinka lagu dul dhisay saamayntiisa yar tahay. Xaqiiqdii iskuma fureyno nafteena, waxay noo bilaabaneysaa GRUB. GRUB, oo loogu talagalay in lagu kiciyo Linux, ayaa kicin kara Windows iyo kiiskan NextDivel.

      1.    soodh dijo

        ok mahadsanid taasi waxay ka dhigan tahay in waxa aan doonayo inaan sameeyo ay suurta gal tahay aniga durba waxaan baranayaa c ++ oo waxaan abuuray barnaamijyo qaarkood waxaanan ku rakibay nidaamkaaga pendrive waanan ku baranayaa si faahfaahsan waa post aad u wanaagsan