Ugledanje na Linusa Torvaldsa: stvorite svoj vlastiti operativni sistem od nule (VII)

Dobrodošli u još jedan post o kako stvoriti vlastiti operativni sistem (Prethodni članci iz serije: 1, 2, 3, 4, 5 y 6). Prošlo je mnogo vremena od posljednjeg posta, uglavnom zbog greške koju sam pronašao u onome što danas imamo. Vidjet ćemo kako se rukuje satom na x86 arhitekturama.

Prije smo IRQ-ove aktivirali na generički način, ali postojao je mali problem jer ih nismo pravilno aktivirali i proslijedili smo dodatne podatke. Napokon smo to popravili carlosorta i ja i ja možemo nastaviti komentirati kako nastaviti.

Pa, sat je IRQ, konkretno prvi. Da bismo je konfigurirali, koristit ćemo funkciju koju smo definirali gore za generičku instalaciju IRQ-ova, ND_IRQ_InstallHandler.

int ND_TIMER_TICKS = 0; void ND :: Tajmer :: Faza (int hz) {int djelitelj = 1193180 / hz; ND :: Priključci :: IzlazB (0x43,0x36); ND :: Priključci :: IzlazB (0x40, djelitelj & 0xFF); ND :: Priključci :: IzlazB (0x40, djelitelj >> 8); } void ND :: Timer :: Wait (int ticks) {nepotpisani dugi eticks; eticks = ND_TIMER_TICKS + tikovi; while (ND_TIMER_TICKS <eticks) {void ND :: Timer :: Setup () {ND :: Screen :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BLACK); ND :: Screen :: PutString ("\ nPostavni tajmer ..."); ND_IRQ_InstallHandler (0, & ND_Timer_Handler); ND :: Zaslon :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_GREEN); ND :: Zaslon :: PutString ("gotovo"); } 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 ("\ nJoš jedna sekunda"); TREBALO BI OSVJEŽITI EKRAN}}

Kôd se izvodi na sljedeći način: sistemski pozivi za inicijalizaciju ND :: Tajmer :: Postavljanje, koji poziva ND_IRQ_InstallHandler ubaciti na prvo mjesto, IRQ0, funkciju povratnog poziva kada se dogodi događaj, tj ND_Timer_Handler to povećava krpelja. Kako smo postavili brzinu takta na 18 Hz, kao što ćemo kasnije vidjeti, da smo je podijelili sa 18 i dali nam cijeli broj, prošla bi sekunda.

Funkcija ND :: Tajmer :: Faza Pomaže nam u podešavanju brzine tajmer, taj ekstravagantni broj je 1.19 MHz što je uobičajena vrijednost. Pa, trebali bismo pozvati ovu funkciju ako želimo promijeniti brzinu tajmer, po defaultu ide na 18,22 Hz, neobičnu vrijednost za koju je netko morao odlučiti IBM i ostao je do danas.

Funkcija ND :: Tajmer :: Čekaj prilično je jednostavno, samo pričekajte s petljom dok do krpelja potrebno za nastavak.

Na slici možemo vidjeti da ako nekomentiramo kod unutar ND_Timer_Handler, dobit ćemo ovo:

Sekunde u NextDivelu

U sljedećem poglavlju vidjet ćemo kako čitati unos s tipkovnice i napraviti malo školjka za interakciju s našim sistemom. Kao i uvijek, kod je dostupan u GitHub prema licenci GNU GPL v2.


Sadržaj članka pridržava se naših principa urednička etika. Da biste prijavili grešku, kliknite ovdje.

14 komentara, ostavi svoj

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Noa rekao je

    Vrlo zanimljiva serija vodiča, osobno nisam vidio puno o stvaranju Linux distribucije od nule, a još manje na španskom i tako cjelovitom. Mislim da iz ovoga možete puno naučiti i čim budem imao vremena nadam se da ću moći izvoditi ove vodiče.
    Sve što tražim je da se ne obeshrabrite i ne završite s uputstvom, jer sam pronašao mnogo dobrih vodiča koji nikada nisu gotovi.
    Pozdrav i hvala :).

    1.    roader rekao je

      To nije linux distribucija, to je kernel 😛.

    2.    desikoder rekao je

      Nisi u pravu. Stvaranje linux distribucije ne podrazumijeva programiranje bilo čega, na primjer, u linuxu od nule ne programirate, već instalirate (na osnovu kompajliranja) osnovne pakete koji čine distro. Ovo je vrlo različito. Stvara vaš vlastiti operativni sistem. To nema nikakve veze s linuxom. To je ono što su torvaldi radili u njegovo doba inspirisani minixom, i uz onu burnu i popularnu raspravu između torvalda i andrewa. tanenbaum na monolitnom zrnu nasuprot mikrozrnu.

      Hvala vam!

  2.   illukki rekao je

    Hvala che. Do sada nisam obraćao puno pažnje na vaš post, ali ja sam u projektu pa ću ih pogledati.
    Pozdrav.

  3.   roader rekao je

    Vrijedi spomenuti da se mogu koristiti i drugi jezici, poput Objective-C (++), C ++, D ili Rust.

    1.    AdrianArroyoStreet rekao je

      Ovo je u C ++, a ne u C. Međutim, teško je uočiti razlike jer mnogi C ++ operatori zahtijevaju podlogu biblioteke, poput operatora new i delete. Bilo bi vrlo zanimljivo napraviti operativni sistem u Rustu. Zapravo postoji IRC kanal posvećen operativnim sistemima na Rustu (# rust-osdev na irc.mozilla.net). Svatko tko kompajlira u mašinski kod zaista vrijedi, uključujući Java ako koristimo GCJ.

      1.    roader rekao je

        Da, zaista, Rust je vrlo zanimljiv jezik za operativne sisteme, jer ne samo da ga je lakše naučiti od C ili C ++ (i dalje se nastavlja s neprestanim promjenama, već je i lakši), već je i mnogo sigurniji.

  4.   roader rekao je

    U 70-ima je bilo uobičajeno programirati direktno na hardveru, bez OS-a.

  5.   Christopher rekao je

    Izvrsno ... sada samo moram razumjeti: 3 ...

  6.   mmm rekao je

    Zdravo. Puno vam hvala na ovim člancima. Ali, ako nemam znanja o programiranju, mislim da to ne bih smio raditi, zar ne? Mislim, ako ne, bilo bi "dobro, a šta sad kopiram i nalijepim?" ... šteta, uvijek sam želio znati toliko programirati i ništa, više sam magarac!

    1.    desikoder rekao je

      Ne krivite sebe, vi niste magarac. Za početak, ne znaju svi programeri kako napisati jezgru, to je vrlo jednostavan zadatak, a u praksi je veći. Na primjer, ovdje autor stvara generičke upravljačke programe za tipkovnicu i zaslon, manipulirajući nizom zaslona, ​​što je metoda koja se danas uopće ne koristi. Tty u Linuxu danas su vrlo, vrlo složeni i ne ovise o x86 arhitekturi koja ima na raspolaganju zaslon. Uz to, velik dio koda u C-u ovisi o arhitekturi, kada je idealno napraviti arhitektonski kôd u asembleru i da C kôd radi u bilo kojem procesoru. Međutim, ne ometam autora, jer kernel dobiva karakteristike koje danas smatramo normalnim u linux jezgri, na primjer, to nije lak zadatak, i budite sigurni da jedna osoba apsolutno nije u stanju to učiniti. Za neke velike projekte poput linuxa, gcc, glibc itd. Ne radi jedna osoba, ali postoji mnogo suradnika.

      Također, ako želite započeti s programiranjem, na internetu imate poprilično vodiča, iako morate biti oprezni i odabrati dobre vodiče. Počeo sam da programiram u linuxu skačući u bazen glavom i bez vode (to jest, s voljenim jezikom C), iako sada imam neke osnovne pojmove o pythonu (koji je takođe vrlo dobar jezik). Postoje neke C knjige u kojima na 6. stranici odustanete od glavobolje, ali više od knjiga te stvari steknete iskustvom. To se događa kao kod OSI mrežnog modela. Dokumentaciju o osi modelu apsolutno je nemoguće razumjeti za novopridošlog, ali ako pronađete web mjesto s dobrim objašnjenjem mrežnih slojeva, brzo ćete dobiti koncepte za rješavanje tehničkih dokumenata poput RFC-a.

      Ukratko, postoje dobre web stranice i priručnici, stvar je pristupiti tome i pronaći dobar materijal.

      Saludos

  7.   Free_DOM rekao je

    Pozdrav, nakon svih pokušaja rješavanja "greške: nije pronađeno zaglavlje višestrukog pokretanja." i «greška prvo trebaš učitati kernel», jer nigdje nisam mogao pronaći rješenje problema iz prvog članka, koje su imali neki poput mene ... evo rješenja, ako nekome uspije ...

    Ne znam je li moja teorija uzroka greške ispravna, ali svejedno, pitanje je da prilikom kompajliranja datoteka u 32-bitnom operativnom sistemu nije generirao grešku, ali s obzirom da imam 64-bitni operativni sustav sistem (Gnu / Linux Debian 7), te da sam prilikom sastavljanja i testiranja bacio grešku "nije pronađeno zaglavlje više pokretanja", a postoji sumnja, onda je po mom mišljenju greška zbog okruženja ili arhitekture operativnog sistema u kojem kompajliramo svoje datoteke ... i ono što sam učinio je kompajliranje mojih datoteka, navodeći 32-bitno okruženje ili arhitekturu ..
    * sudo kao -o kernel.o -c kernel.asm -32
    * sudo gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -samostojeći -m32
    * sudo gcc -m32 -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -samostalni
    Čudna stvar je da sumnjam hahaha, tada je operativni sistem koji kreiramo korak po korak za x86 arhitekturu ili se varam ajajaj….

    PS: neko da mi pomogne sa sumnjom i izvini neke pravopisne greške ili moj loš izraz, a ja nisam savršen, pa zato «Savršenstvo ima svoju cijenu» ... I što je najvažnije, oponašajte 32-bitni operativni sistem, sveto rješenje … .Hahaha

    1.    Martin Villalba rekao je

      Genije! Stvarno sam želio napraviti ovaj tutorial i na početku sam sišao s tom greškom haha

  8.   Oscar rekao je

    Čestitam, to je izvrstan doprinos. Od sada dijelim s vama da će se vaš dobar rad kroz mene i druge produžiti;

    Saludos