Līnusa Torvalda atdarināšana: izveidojiet savu operētājsistēmu no jauna (VII)

Laipni lūdzam citā ziņojumā par kā izveidot savu operētājsistēmu (Iepriekšējie raksti sērijā: 1, 2, 3, 4, 5 y 6). Kopš pēdējās ziņas ir pagājis ilgs laiks, galvenokārt pateicoties kļūdai, kuru atradu tajā, kas mums ir šodien. Mēs redzēsim kā rīkoties ar pulksteni uz x86 arhitektūrām.

Iepriekš mēs bija aktivizējuši IRQ vispārīgā veidā, taču radās neliela problēma, jo mēs tos neaktivizējām pareizi un mēs nodevām papildu datus. Mēs beidzot to salabojam Carlosorta un es un es varam turpināt komentēt, kā turpināt.

Nu, pulkstenis ir IRQ, konkrēti pirmais. Lai to konfigurētu, mēs izmantosim iepriekš definēto funkciju, lai vispārīgi instalētu IRQ, ND_IRQ_InstallHandler.

int ND_TIMER_TICKS = 0; void ND :: Taimeris :: Fāze (int hz) {int dalītājs = 1193180 / hz; ND :: Porti :: OutputB (0x43,0x36); ND :: Porti :: OutputB (0x40, dalītājs un 0xFF); ND :: Porti :: OutputB (0x40, dalītājs >> 8); } void ND :: Taimeris :: Pagaidiet (int ērces) {neparakstīti garie eticks; eticks = ND_TIMER_TICKS + ērces; while (ND_TIMER_TICKS <eticks) {void ND :: Taimeris :: Iestatīšana () {ND :: Ekrāns :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BLACK); ND :: Ekrāns :: PutString ("\ nIestatīšanas taimeris ..."); ND_IRQ_InstallHandler (0, & ND_Timer_Handler); ND :: Ekrāns :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_GREEN); ND :: Ekrāns :: PutString ("pabeigts"); } extern "C" anulēt ND_Timer_Handler (struktūras regs * r) {ND_TIMER_TICKS ++; ja (ND_TIMER_TICKS% 18 == 0) {// ND :: Ekrāns :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BROWN); // ND :: Ekrāns :: PutString ("\ nVēl viena sekunde"); BŪTU JĀDARA atsvaidzinošs ekrāns}}

Kods darbojas šādi: inicializācijas sistēma izsauc ND :: Taimeris :: Iestatīšana, kas zvana ND_IRQ_InstallHandler lai notikuma iestāšanās brīdī pirmajā vietā ievietotu atzvanīšanas funkciju IRQ0, tas ir ND_Timer_Handler kas palielina ērces. Tā kā pulksteņa ātrumu esam iestatījuši uz 18 Hz, kā redzēsim vēlāk, dalot to ar 18 un iedodot veselu skaitli, būtu pagājusi sekunde.

Funkcija ZD :: Taimeris :: Fāze Tas mums palīdz pielāgot ātrumu taimeris, šis ekstravagantais skaitlis ir 1.19 MHz, kas ir kopēja vērtība. Ja mēs vēlamies mainīt ātrumu, šī funkcija ir jāizsauc taimeris, pēc noklusējuma tā ir 18,22 Hz, savdabīga vērtība, par kuru kādam noteikti ir jāizlemj IBM un tas ir palicis līdz šai dienai.

Funkcija ND :: Taimeris :: Pagaidiet tas ir diezgan vienkārši, vienkārši pagaidiet ar cilpu kamēr līdz ērces nepieciešams turpināt.

Attēlā mēs varam redzēt, ka, atceļot ND_Timer_Handler iekšpusē esošo kodu, mēs to iegūstam:

Sekundes NextDivel

Nākamajā nodaļā mēs redzēsim, kā lasīt tastatūras ievadi un nedaudz izveidot apvalks mijiedarboties ar mūsu sistēmu. Kā vienmēr kods ir pieejams GitHub saskaņā ar licenci GNU GPL v2.


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Noah teica

    Ļoti interesantas apmācību sērijas, personīgi es nebiju redzējis daudz par Linux izplatīšanas izveidi no jauna, un vēl mazāk spāņu valodā un tik pilnīgu. Es domāju, ka no tā jūs varat daudz mācīties, un tiklīdz man būs laiks, es ceru, ka varēšu veikt šīs apmācības.
    Es tikai lūdzu, lai jūs neuztraucaties un nepabeidziet apmācību, jo esmu atradis daudzas labas apmācības, kuras nekad nav pabeigtas.
    Sveiciens un paldies :).

    1.    ceļinieks teica

      Tas nav linux sadalījums, tas ir kodols 😛.

    2.    desikoders teica

      Jums nav taisnība. Linux distro izveide nenozīmē neko programmēt, piemēram, linux no nulles jūs neprogrammējat, tas, ko jūs darāt, ir instalēt (pamatojoties uz kompilēšanu), pamata paketes, kas veido distro. Tas ir ļoti atšķirīgi. Tas ir jūsu pašu operētājsistēmas izveide. Tam nav nekāda sakara ar Linux. Tas ir tas, ko torvalds savā laikā izdarīja, iedvesmojoties no miniksa, un ar to karsto un populāro diskusiju starp torvaldu un andrew s. tanenbaums uz monolītā kodola salīdzinājumā ar mikrokodolu.

      Saludos!

  2.   illukki teica

    Paldies che. Līdz šim es neesmu pievērsis lielu uzmanību jūsu ziņai, bet es esmu projektā, tāpēc es tos apskatīšu.
    Sveicieni.

  3.   ceļinieks teica

    Ir vērts pieminēt, ka var izmantot citas valodas, piemēram, Objective-C (++), C ++, D vai Rust.

    1.    AdrianArroyoStreet teica

      Tas ir C ++, nevis C. Tomēr ir grūti saskatīt atšķirības, jo daudziem C ++ operatoriem nepieciešama bibliotēkas aizmugure, piemēram, jaunajiem un dzēšamajiem operatoriem. Būtu ļoti interesanti izveidot operētājsistēmu Rust. Rustā faktiski ir IRC kanāls, kas paredzēts operētājsistēmām (# rust-osdev at irc.mozilla.net). Ikviens, kurš apkopo mašīnkodu, ir tā vērts, ieskaitot Java, ja izmantojam GCJ.

      1.    ceļinieks teica

        Jā, patiešām, Rust ir ļoti interesanta valoda operētājsistēmām, jo ​​ne tikai to ir vieglāk iemācīties nekā C vai C ++ (tas joprojām turpinās ar nepārtrauktām izmaiņām, bet tas ir vieglāk), bet tas ir daudz drošāks.

  4.   ceļinieks teica

    70. gados bija diezgan izplatīta programma tieši aparatūrā, bez OS.

  5.   Christopher teica

    Izcili ... tagad man vienkārši jāsaprot: 3 ...

  6.   mmm teica

    Sveiki. Liels paldies par šiem rakstiem. Bet, ja man nav programmēšanas zināšanu, es nedomāju, ka man tas būtu jādara, vai ne? Es domāju, ja nē, tas būtu «labs, un ko tagad es kopēju un ielīmēju?» ... cik žēl, es vienmēr gribēju zināt, kā programmēt tik daudz un neko, es drīzāk esmu ēzelis!

    1.    desikoders teica

      Nevainojiet sevi, jūs neesat ēzelis. Sākumā ne visi programmētāji zina, kā rakstīt kodolu, tas ir ļoti maz vienkāršs uzdevums, un praksē tas ir lielāks. Piemēram, šeit autors izveido vispārīgus draiverus tastatūrai un ekrānam, manipulējot ar ekrāna masīvu, kas mūsdienās vispār netiek izmantota. Tty Linux šodien ir ļoti, ļoti sarežģīti, un nav atkarīgi no x86 arhitektūras, kuras rīcībā ir ekrāna masīvs. Turklāt liela daļa C koda ir atkarīga no arhitektūras, kad ideāls ir padarīt arhitektūras kodu montāžā un C kodu darbam ar jebkuru procesoru. Tomēr es nemazinu autoru, jo kodols iegūst īpašības, kuras mēs šodien, piemēram, uzskatām par normālām linux kodolā, tas nav viegls uzdevums, un jūs varat būt pārliecināts, ka viens cilvēks to absolūti nespēj izdarīt. Lielus projektus, piemēram, linux, gcc, glibc utt., Neveic viena persona, taču ir daudz līdzstrādnieku.

      Turklāt, ja vēlaties sākt programmēšanu, tīmeklī ir diezgan daudz rokasgrāmatu, lai gan jums jābūt uzmanīgam un jāizvēlas labie ceļveži. Es sāku programmēt Linux, lecot baseinā ar galvu un bez ūdens (tas ir, ar mīļoto C valodu), lai gan tagad man ir daži pamatjēdzieni par pitonu (kas arī ir ļoti laba valoda). Ir dažas C grāmatas, no kurām 6. lappusē atsakāties tik daudz, cik saņemat galvassāpes, taču vairāk nekā grāmatas šīs lietas iegūst pieredze. Tas notiek tāpat kā ar OSI tīkla modeli. Dokumentāciju par osi modeli jaunpienācējam ir absolūti neiespējami saprast, taču, ja atrodat vietni ar labu tīkla slāņu skaidrojumu, jūs ātri iegūstat koncepcijas, lai risinātu tehniskos dokumentus, piemēram, RFC.

      Īsāk sakot, tur ir labas tīmekļa vietnes un rokasgrāmatas, tas ir jautājums, kā ķerties pie tā un atrast labu materiālu.

      Sveicieni

  7.   Brīvība teica

    Labdien, pēc tik smaga mēģinājuma atrisināt kļūdu: vairāku sāknējumu galvene nav atrasta. un «kļūda jums vispirms ir jāielādē kodols», jo es nekur nevarēju atrast pirmā raksta problēmas risinājumu, kas bija dažiem līdzīgiem man ... šeit ir risinājums, ja tas kādam darbojas ...

    Es nezinu, vai mana teorija par kļūdas cēloni ir pareiza, bet vienalga jautājums ir tāds, ka, apkopojot failus 32 bitu operētājsistēmā, tas neradīja kļūdu, bet tā kā man ir 64 bitu operētājsistēma (Gnu / Linux Debian 7), un ka, sastādot un testējot, es uzmetu kļūdu "nav atrasts vairāku sāknēšanas galvenes", un ir šaubas, tad, manuprāt, kļūda ir saistīta ar tās operētājsistēmas vidi vai arhitektūru, kurā mēs faili ... un labi, ko es izdarīju, ir kompilēt savus failus, norādot vidi vai 32 bitu arhitektūru ..
    * sudo kā -o kodols.o -c kodols.asm -32
    * sudo gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -freestanding -m32
    * sudo gcc -m32 -o START.ELF kodols.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding
    Dīvaini ir tas, ka man ir dažas šaubas, hahaha, tad operētājsistēma, kuru mēs soli pa solim veidojam, ir paredzēta x86 arhitektūrai, vai es kļūdos ajajaj ...

    PS: Kāds man palīdz šaubu gadījumā un attaisno dažas pareizrakstības kļūdas vai manu slikto izteicienu, un es neesmu ideāls, tāpēc "Pilnībai ir sava cena" ... Un pats galvenais, atdarināt 32 bitu operētājsistēmu, svēts risinājums .... Hahaha

    1.    Martins Villalba teica

      Ģēnijs ! Es ļoti vēlējos veikt šo apmācību, un es sākumā nokāpu ar šo kļūdu haha

  8.   oscar teica

    Apsveicu, tas ir lielisks ieguldījums. Turpmāk es dalos ar jums, ka jūsu labais darbs caur mani un citiem tiks pagarināts;

    Sveicieni