Emulace Linuse Torvaldse: vytvořte si svůj vlastní operační systém od nuly (VII)

Vítejte v dalším příspěvku o jak vytvořit náš vlastní operační systém (Předchozí články v sérii: 1, 2, 3, 4, 5 y 6). Od posledního příspěvku uběhla dlouhá doba, hlavně kvůli chybě, kterou jsem našel v tom, co dnes máme. Uvidíme jak zacházet s hodinami na x86 architekturách.

Dříve jsme IRQ aktivovali obecně, ale nastal malý problém, protože jsme je neaktivovali správně a předali jsme další data. Nakonec to napravíme Carlosorta a já a já můžeme nadále komentovat, jak pokračovat.

Hodiny jsou IRQ, konkrétně první. Pro jeho konfiguraci použijeme funkci, kterou jsme definovali dříve, k obecné instalaci IRQ, ND_IRQ_InstallHandler.

int ND_TIMER_TICKS = 0; void ND :: Timer :: Phase (int hz) {int divisor = 1193180 / hz; ND :: Porty :: OutputB (0x43,0x36); ND :: Porty :: OutputB (0x40, dělitel & 0xFF); ND :: Porty :: Výstup B (0x40, dělitel >> 8); } void ND :: Timer :: Wait (int ticks) {unsigned long eticks; eticks = ND_TIMER_TICKS + klíšťata; while (ND_TIMER_TICKS <eticks) {void ND :: Timer :: Setup () {ND :: Screen :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BLACK); ND :: Screen :: PutString ("\ nNastavovací časovač ..."); ND_IRQ_InstallHandler (0, & ND_Timer_Handler); ND :: Screen :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_GREEN); ND :: Screen :: PutString ("hotovo"); } 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 ("\ nJedna další sekunda"); MĚLI bychom udělat osvěžující obrazovku}}

Kód běží následovně: inicializační systém volá ND :: Časovač :: Nastavení, který volá ND_IRQ_InstallHandler vložit na první pozici, IRQ0, funkci zpětného volání, když dojde k události, to znamená ND_Timer_Handler což zvyšuje klíšťata. Protože jsme nastavili rychlost hodin na 18 Hz, jak uvidíme později, pokud bychom je rozdělili na 18 a dali nám celé číslo, uběhlo by druhé.

Funkce ND :: Časovač :: Fáze Pomáhá nám to upravit rychlost Časovač, toto extravagantní číslo je 1.19 MHz, což je běžná hodnota. Tuto funkci bychom měli zavolat, pokud chceme změnit rychlost Časovač, ve výchozím nastavení jde na 18,22 Hz, což je zvláštní hodnota, o které se někdo musel rozhodnout IBM a zůstalo to dodnes.

Funkce ND :: Časovač :: Počkejte je to docela jednoduché, stačí počkat se smyčkou zatímco až do klíšťata je nutné pokračovat.

Na obrázku vidíme, že pokud odkomentujeme kód uvnitř ND_Timer_Handler, dostaneme toto:

Sekundy v NextDivel

V následující kapitole uvidíme, jak číst vstup z klávesnice a udělat trochu skořápka komunikovat s naším systémem. Jako vždy, kód je k dispozici v GitHub na základě licence GNU GPL v2.


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   Noe řekl

    Velmi zajímavá řada výukových programů, osobně jsem toho o vytváření distribuce Linuxu od začátku neviděl mnoho, a ještě méně ve španělštině a tak úplných. Myslím, že se z toho můžete hodně naučit, a jakmile budu mít čas, doufám, že budu schopen tyto výukové programy dělat.
    Jediné, co žádám, je, abyste se nenechali odradit a nedokončili tutoriál, protože jsem našel mnoho dobrých tutoriálů, které nikdy nejsou hotové.
    Zdravím a děkuji :).

    1.    cestář řekl

      Není to linuxová distribuce, je to jádro 😛.

    2.    desikoder řekl

      Mýlíš se. Vytvoření linuxové distribuce neznamená nic programovat, například v linuxu od začátku neprogramujete, to, co děláte, je instalace (na základě kompilace), základní balíčky, které tvoří distribuci. To je velmi odlišné. Vytváří váš vlastní operační systém. S linuxem to nemá nic společného. To je to, co torvaldy dělali ve své době, inspirované minixem, a s tou vášnivou a populární diskusí mezi torvaldy a Andrewem. tanenbaum na monolitickém jádře vs mikrokernelu.

      Saludos!

  2.   Illukki řekl

    Děkuji che. Doposud jsem vašemu příspěvku moc nevěnoval pozornost, ale pracuji na projektu, takže se na ně podívám.
    Zdravím.

  3.   cestář řekl

    Za zmínku stojí, že lze použít i jiné jazyky, například Objective-C (++), C ++, D nebo Rust.

    1.    AdrianArroyo Street řekl

      Toto je v C ++, ne C. Je však obtížné vidět rozdíly, protože mnoho operátorů C ++ vyžaduje podporu knihovny, například operátory new a delete. Bylo by velmi zajímavé vytvořit operační systém v Rustu. Ve skutečnosti existuje kanál IRC věnovaný operačním systémům na Rustu (# rust-osdev na irc.mozilla.net). Každý, kdo kompiluje strojový kód, opravdu stojí za to, včetně Javy, pokud používáme GCJ.

      1.    cestář řekl

        Ano, Rust je opravdu velmi zajímavý jazyk pro operační systémy, protože je nejen jednodušší se naučit než C nebo C ++ (stále pokračuje v neustálých změnách, ale je to jednodušší), ale je mnohem bezpečnější.

  4.   cestář řekl

    V 70. letech bylo docela běžné programovat přímo na hardware bez OS.

  5.   Christopher řekl

    Vynikající ... teď musím jen pochopit: 3 ...

  6.   mmm řekl

    Ahoj. Moc děkuji za tyto články. Ale pokud nemám znalosti programování, nemyslím si, že bych to měl dělat, že? Chci říct, pokud ne, bylo by to «dobré, a co teď zkopíruji a vložím?» ... škoda, vždycky jsem chtěl tolik vědět, jak programovat, a nic, jsem spíš osel!

    1.    desikoder řekl

      Neobviňujte se, nejste žádný osel. Nejprve ne všichni programátoři umí psát jádro, je to velmi malý jednoduchý úkol a v praxi je větší. Například zde autor vytváří obecné ovladače pro klávesnici a obrazovku, manipuluje s polem obrazovky, což je metoda, která se dnes vůbec nepoužívá. Tty v linuxu jsou dnes velmi, velmi složité a nezávisí na tom, že architektura x86 má k dispozici pole obrazovky. Kromě toho velká část kódu v jazyce C závisí na architektuře, kdy je ideální vytvořit kód architektury v assembleru a že kód C funguje na jakémkoli procesoru. Autorovi to však nijak neubírá, protože jádro získává vlastnosti, které dnes v linuxovém jádře považujeme za normální, například, není to snadný úkol, a můžete si být jisti, že jedna osoba je naprosto neschopná to udělat. Velké projekty, jako je linux, gcc, glibc atd., Nevyrábí jedna osoba, ale existuje mnoho spolupracovníků.

      Také, pokud chcete začít programovat, máte na webu několik průvodců, i když musíte být opatrní a vybrat dobré průvodce. Začal jsem programovat v linuxu skákáním do bazénu s hlavou a bez vody (tj. S milovaným jazykem C), i když teď mám několik základních pojmů pythonu (což je také velmi dobrý jazyk). Existuje několik knih C, ve kterých se na straně 6 vzdáte bolesti hlavy, které vás dostanou, ale více než knih se tyto věci získávají ze zkušeností. Stává se to jako u síťového modelu OSI. Dokumentaci o modelu os je pro nováčka naprosto nemožné pochopit, ale pokud najdete web s dobrým vysvětlením síťových vrstev, rychle získáte koncepty řešení technických dokumentů, jako jsou RFC.

      Stručně řečeno, existují dobré webové stránky a manuály, jde o to se k tomu dostat a najít dobrý materiál.

      pozdravy

  7.   Svoboda řekl

    Dobrý den, po všech pokusech o vyřešení „chyby: nebyla nalezena záhlaví multiboot.“ a «error you need to load the kernel first», since I could not find anywhere the solution of the problem of the first article, which some like me had ... here is the solution, if it works for someone ...

    Nevím, jestli je moje teorie příčiny chyby správná, ale každopádně je otázkou, že při kompilaci souborů v 32bitovém operačním systému chybu nevygeneroval, ale protože mám 64bitový operační systém systém (Gnu / Linux Debian 7), a že při kompilaci a testování jsem dostal chybu „no multiboot header found“ a existuje pochybnost, pak je podle mého názoru chyba způsobena prostředím nebo architekturou operačního systému ve kterém kompilujeme naše soubory ... a to, co jsem udělal, je kompilace mých souborů se specifikací prostředí nebo architektury 32 bitů ..
    * sudo jako -o kernel.o -c kernel.asm -32
    * sudo gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding -m32
    * sudo gcc -m32 -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreanding
    Zvláštní je, že mám určité pochybnosti, hahaha, pak operační systém, který vytváříme krok za krokem, je pro architekturu x86, nebo se mýlim ajajaj….

    PS: někdo, kdo mi pomůže s pochybnostmi a omluví některé pravopisné chyby nebo můj špatný výraz, a já nejsem dokonalý, takže «Dokonalost má svou cenu»… A co je nejdůležitější, napodobit 32bitový operační systém, svaté řešení … .Ha ha ha

    1.    martin villalba řekl

      Génius! Opravdu jsem chtěl udělat tento tutoriál a na začátku jsem se dostal dolů s tou chybou haha

  8.   Oskar řekl

    Gratulujeme, je to vynikající příspěvek. Od této chvíle s vámi sdílím, že se vaše dobrá práce skrze mne a ostatní rozšíří;

    pozdravy