Posnemanje Linusa Torvaldsa: ustvarite svoj operacijski sistem iz nič (VII)

Dobrodošli v drugi objavi o kako ustvariti svoj operacijski sistem (Prejšnji članki v seriji: 1, 2, 3, 4, 5 y 6). Od zadnjega prispevka je minilo že dolgo časa, predvsem zaradi napake, ki sem jo našel v tem, kar imamo danes. Bomo videli kako ravnati z uro na arhitekturah x86.

Prej smo IRQ aktivirali na splošen način, vendar je prišlo do majhne težave, saj jih nismo pravilno aktivirali in smo posredovali dodatne podatke. Končno popravimo karlosorta in jaz in jaz lahko še naprej komentiram, kako nadaljevati.

No, ura je IRQ, natančneje prva. Za njegovo konfiguracijo bomo uporabili funkcijo, ki smo jo definirali zgoraj, za splošno namestitev IRQ-jev, ND_IRQ_InstallHandler.

int ND_TIMER_TICKS = 0; void ND :: Timer :: Phase (int hz) {int delitelj = 1193180 / hz; ND :: Ports :: OutputB (0x43,0x36); ND :: Ports :: OutputB (0x40, delitelj & 0xFF); ND :: Ports :: OutputB (0x40, delitelj >> 8); } void ND :: Timer :: Počakaj (int tiki) {nepodpisani dolgi etiki; eticks = ND_TIMER_TICKS + kljukice; while (ND_TIMER_TICKS <eticks) {void ND :: Timer :: Setup () {ND :: Screen :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BLACK); ND :: Screen :: PutString ("\ nNastavitveni časovnik ..."); ND_IRQ_InstallHandler (0, & ND_Timer_Handler); ND :: Zaslon :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_GREEN); ND :: Zaslon :: PutString ("končano"); } extern "C" void ND_Timer_Handler (struct regs * r) {ND_TIMER_TICKS ++; if (ND_TIMER_TICKS% 18 == 0) {// ND :: Screen :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BROWN); // ND :: Zaslon :: PutString ("\ nŠe več sekunde"); NAMENITI SMO OSVEŽITEV ZASLONA}}

Koda se izvaja na naslednji način: sistemski klici za inicializacijo ND :: Časovnik :: Nastavitev, ki kliče ND_IRQ_InstallHandler da vstavite na prvo mesto IRQ0, funkcijo povratnega klica, ko pride do dogodka, tj ND_Timer_Handler ki povečuje klopi. Kot smo nastavili hitrost ure na 18 Hz, kot bomo videli kasneje, če bi jo razdelili na 18 in nam dali celo število, bi minila sekunda.

Funkcija ND :: Časovnik :: Faza Pomaga nam prilagoditi hitrost timer, to ekstravagantno število je 1.19 MHz, kar je običajna vrednost. No, to funkcijo je treba poklicati, če želimo spremeniti hitrost timer, privzeto znaša 18,22 Hz, posebna vrednost, za katero se je nekdo moral odločiti IBM in je ostal do danes.

Funkcija ND :: Časovnik :: Počakaj je precej preprosto, samo počakajte z zanko medtem do klopi potrebno za nadaljevanje.

Na sliki lahko vidimo, da če komentiramo kodo znotraj ND_Timer_Handler, dobimo to:

Sekunde v NextDivel

V naslednjem poglavju bomo videli, kako prebrati vnos s tipkovnice in narediti malo shell za interakcijo z našim sistemom. Kot vedno, koda je na voljo v GitHub pod licenco GNU GPL v2.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   Noah je dejal

    Zelo zanimiva serija vadnic, osebno nisem videl veliko o ustvarjanju distribucije Linuxa iz nič, še manj pa v španščini in tako popolno. Mislim, da se lahko iz tega veliko naučite in takoj, ko bom imel čas, upam, da bom lahko naredil te vaje.
    Vse, kar vas prosim, je, da se ne odvrnete in dokončate vadnice, saj sem našel veliko dobrih vadnic, ki se nikoli ne končajo.
    Lep pozdrav in hvala :).

    1.    cestnik je dejal

      To ni distribucija linux, je jedro 😛.

    2.    desikoder je dejal

      Motiš se. Ustvarjanje distribucijskega sistema linux ne pomeni ničesar programirati, na primer v Linuxu od začetka ne programirate, temveč namestite (na podlagi prevajanja) osnovne pakete, ki tvorijo distro. To je zelo različno. Ustvarja svoj operacijski sistem. Z Linuxom nima nič skupnega. To je tisto, kar so v svojem času naredili torvaldi, navdihnjeni z minixom, in s tisto vročo in priljubljeno razpravo med torvaldi in andrew s. tanenbaum na monolitnem jedru vs mikrojedru.

      Saludos!

  2.   ilukki je dejal

    Hvala che. Do zdaj nisem posvečal veliko pozornosti vaši objavi, vendar sem v projektu, zato si jih bom ogledal.
    Lep pozdrav.

  3.   cestnik je dejal

    Omeniti velja, da se lahko uporabljajo tudi drugi jeziki, na primer Objective-C (++), C ++, D ali Rust.

    1.    AdrianArroyoStreet je dejal

      Ta je v jeziku C ++ in ne C. Vendar je težko videti razlike, saj številni operaterji C ++ zahtevajo podporo knjižnice, na primer operaterja new in delete. Zelo zanimivo bi bilo narediti operacijski sistem v Rustu. Dejansko obstaja kanal IRC, namenjen operacijskim sistemom na Rustu (# rust-osdev na irc.mozilla.net). Kdor prevaja v strojno kodo, se res splača, vključno z Javo, če uporabljamo GCJ.

      1.    cestnik je dejal

        Da, res je Rust zelo zanimiv jezik za operacijske sisteme, saj se ne samo lažje učiti kot C ali C ++ (še vedno se nadaljuje z nenehnimi spremembami, ampak je lažje), ampak je tudi veliko bolj varen.

  4.   cestnik je dejal

    V 70-ih je bilo povsem običajno programirati neposredno na strojni opremi, brez OS.

  5.   Christopher je dejal

    Odlično ... zdaj moram samo razumeti: 3 ...

  6.   mmm je dejal

    Živjo. Najlepša hvala za te članke. Ampak, če nimam znanja programiranja, mislim, da tega ne bi smel početi, kajne? Mislim, če ne, bi bilo to "dobro, in kaj zdaj kopiram in prilepim?" ... škoda, vedno sem si tako želel vedeti, kako programirati in nič, sem bolj osel!

    1.    desikoder je dejal

      Ne krivite se, niste osel. Za začetek vsi programerji ne znajo napisati jedra, to je zelo malo preprosta naloga, v praksi pa je večje. Tu na primer avtor ustvari splošne gonilnike za tipkovnico in zaslon, pri čemer manipulira z zaslonskim poljem, kar je metoda, ki se danes sploh ne uporablja. Tty v Linuxu so danes zelo zelo zapleteni in niso odvisni od arhitekture x86, ki ima na voljo matriko zaslona. Poleg tega je velik del kode C odvisen od arhitekture, kdaj je idealno narediti arhitekturno kodo v asemblerju in da koda C deluje na katerem koli procesorju. Vendar avtorja ne motim, ker da jedro dobi značilnosti, ki jih danes v jedru linux smatramo za običajne, na primer to ni lahka naloga in bodite prepričani, da en sam človek popolnoma ne zmore . Za nekatere velike projekte, kot so linux, gcc, glibc itd., Ne izdela ena oseba, vendar je veliko sodelavcev.

      Če želite začeti programirati, imate na spletu kar nekaj vodnikov, čeprav morate biti previdni in izbrati dobra vodiča. Programirati sem začel v Linuxu, ko sem skakal v bazen z glavo in brez vode (torej z ljubljenim jezikom C), čeprav imam zdaj nekaj osnovnih pojmov python (ki je tudi zelo dober jezik). Obstaja nekaj knjig C, v katerih se na 6. strani odrečete toliko glavobolu, ki pa ga več kot knjige pridobite iz izkušenj. To se zgodi tako kot pri omrežnem modelu OSI. Dokumentacije o modelu osi je za novinca povsem nemogoče razumeti, če pa najdete spletno mesto z dobro razlago mrežnih slojev, hitro dobite koncepte za obravnavo tehničnih dokumentov, kot so RFC.

      Skratka, obstajajo dobra spletna mesta in priročniki, treba se je lotiti in poiskati dober material.

      pozdrav

  7.   Prosti_DOM je dejal

    Pozdravljeni, po vseh poskusih reševanja "napake: glave z več zagoni ni mogoče najti." in «napaka, da moraš najprej naložiti jedro«, saj nikjer nisem našel rešitve problema prvega članka, ki so ga imeli nekateri kot jaz ... tukaj je rešitev, če komu uspe ...

    Ne vem, ali je moja teorija vzroka napake pravilna, vseeno pa je vprašanje, da pri sestavljanju datotek v 32-bitnem operacijskem sistemu napaka ni ustvarila, ker pa imam 64-bitno operacijo sistem (Gnu / Linux Debian 7), in da sem pri sestavljanju in preizkušanju dobil napako "ni mogoče najti glave z več zagoni" in obstaja dvom, potem je po mojem mnenju napaka posledica okolja ali arhitekture operacijskega sistema v katerem zbiramo svoje datoteke ... in kar sem naredil, je to, da zberem svoje datoteke z navedbo 32-bitnega okolja ali arhitekture ..
    * sudo kot -o kernel.o -c kernel.asm -32
    * sudo gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -samostojno -m32
    * sudo gcc -m32 -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -prostostoječi
    Nenavadno je, da nekaj dvomim hahaha, potem je operacijski sistem, ki ga ustvarjamo korak za korakom, za arhitekturo x86 ali pa se motim ajajaj….

    PS: Nekdo, ki mi bo pomagal pri dvomu in opravičil nekaj črkovalnih napak ali mojega slabega izraza, pa tudi jaz nisem popoln, zato «Popolnost ima svojo ceno» .... In kar je najpomembneje, posnemajte 32-bitni operacijski sistem, sveta rešitev ... Hahaha

    1.    martin villalba je dejal

      Genij! Zelo sem si želel narediti to vadnico in na začetku sem prišel do te napake haha

  8.   Oscar je dejal

    Čestitamo, to je odličen prispevek. Od zdaj naprej delim z vami, da se bo vaše dobro delo prek mene in drugih razširilo;

    pozdrav