Oponašanje Linusa Torvaldsa: stvorite vlastiti operativni sustav od nule (VII)

Dobrodošli u još jedan post o kako stvoriti vlastiti operativni sustav (Prethodni članci iz serije: 1, 2, 3, 4, 5 y 6). Prošlo je puno vremena od zadnjeg posta, uglavnom zbog greške koju sam pronašao u današnjoj igri. Vidjet ćemo kako postupati sa 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 to popravimo karlosorta i ja i ja možemo nastaviti komentirati kako nastaviti.

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

int ND_TIMER_TICKS = 0; void ND :: Timer :: Phase (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 + krpelji; while (ND_TIMER_TICKS <eticks) {void ND :: Timer :: Setup () {ND :: Screen :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BLACK); ND :: Screen :: PutString ("\ nPostavni mjerač ..."); 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 :: Screen :: PutString ("\ nJoš jedna sekunda"); TREBAMO OSVJEŽITI ZASLON}}

Kôd se izvodi na sljedeći način: sistem inicijalizacije poziva ND :: Tajmer :: Postavljanje, koji poziva ND_IRQ_InstallHandler za umetanje na prvom mjestu, IRQ0, funkcije povratnog poziva kada se dogodi događaj, tj ND_Timer_Handler to povećava krpelji. Kako smo postavili brzinu takta na 18 Hz, kao što ćemo kasnije vidjeti, da smo je podijelili s 18 i dali nam cijeli broj, prošla bi sekunda.

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

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

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

Sekunde u NextDivelu

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


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Noa dijo

    Vrlo zanimljiva serija tutorijala, osobno ih nisam vidio puno o stvaranju Linux distribucije od nule, a još manje na španjolskom i tako cjelovitom. Mislim da iz toga 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 tutorial, jer sam pronašao mnogo dobrih tutorijala koji nikada nisu gotovi.
    Pozdrav i hvala :).

    1.    cestar dijo

      To nije linux distribucija, to je kernel 😛.

    2.    desikoder dijo

      Ti si u krivu. Stvaranje linux distribucije ne podrazumijeva programiranje ničega, na primjer, u linuxu od nule ne programirate, ono što radite je instaliranje (na temelju sastavljanja) osnovnih paketa koji čine distro. Ovo je vrlo različito. Stvara vaš vlastiti operativni sustav. To nema nikakve veze s linuxom. To je ono što su torvaldi radili u svoje vrijeme nadahnuti minixom, i uz onu burnu i popularnu raspravu između Torvalda i Andrewa. tanenbaum na monolitnom zrnu nasuprot mikro zrnu.

      Saludos!

  2.   illukki dijo

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

  3.   cestar dijo

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

    1.    AdrianArroyoStreet dijo

      Ovaj je na jeziku C ++, a ne C. Međutim, teško je uočiti razlike jer mnogi operateri C ++ zahtijevaju sigurnosnu podlogu knjižnice, poput operatora new i delete. Bilo bi vrlo zanimljivo napraviti operativni sustav u Rustu. Zapravo postoji IRC kanal posvećen operativnim sustavima na Rustu (# rust-osdev na irc.mozilla.net). Svatko tko kompajlira u strojni kod zaista se isplati, uključujući Java ako koristimo GCJ.

      1.    cestar dijo

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

  4.   cestar dijo

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

  5.   Christopher dijo

    Izvrsno ... sad samo moram shvatiti: 3 ...

  6.   mmm dijo

    Bok. Puno vam hvala na ovim člancima. Ali, ako nemam znanja o programiranju, što je bolje ne raditi to? Kažem, ako ne, bilo bi to „dobro, a što sad kopiram i zalijepim?“ ... šteta, uvijek sam toliko želio znati programirati i ništa, više sam magarac!

    1.    desikoder dijo

      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 pokretač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 na bilo kojem procesoru. Međutim, ne omalovažavam 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 programirati u linuxu skačući u bazen glavom i bez vode (odnosno s voljenim jezikom C), iako sada imam neke osnovne pojmove pythona (koji je također 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 dolaska do njih i pronalaska dobrog materijala.

      pozdravi

  7.   Sloboda dijo

    Pozdrav, nakon što sam se toliko trudio riješiti "pogrešku: nije pronađeno zaglavlje s više pokreta". i «pogreš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 pogreške točna, ali svejedno, pitanje je da prilikom sastavljanja datoteka u 32-bitnom operativnom sustavu nije generirao pogrešku, ali budući da imam 64-bitni operativni sustav sustav (Gnu / Linux Debian 7), te da sam prilikom sastavljanja i testiranja dobio pogrešku "nije pronađeno zaglavlje više pokretanja", i postoji sumnja, onda je po mom mišljenju pogreška zbog okruženja ili arhitekture operativnog sustava u kojem kompajliramo datoteke ... i ono što sam učinio je kompajliranje 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 -samostojeći
    Čudno je to što ja sumnjam hahaha, tada je operativni sustav koji kreiramo korak po korak za x86 arhitekturu ili se varam ajajaj ....

    PS: netko tko će mi pomoći sa sumnjom i opravdati neke pravopisne pogreške ili moj loš izraz, a ja nisam savršen, tako da «Savršenstvo ima svoju cijenu» ... I što je najvažnije, oponašajte 32-bitni operativni sustav, sveto rješenje … .Hahaha

    1.    martin villalba dijo

      Genije! Stvarno sam želio napraviti ovaj tutorial i na početku sam krenuo s tom pogreškom haha

  8.   Oscar dijo

    Svaka čast, to je izvrstan doprinos. Od sada dijelim s vama da će se vaše dobro djelo kroz mene i druge produžiti;

    pozdravi