Kako programirati svoje zelo lastne operacijske sisteme (OS)

Razkritje: Vaša podpora pomaga pri vzdrževanju spletnega mesta! Za nekatere storitve, ki jih priporočamo na tej strani, zaslužimo naročnino.


V resnici ni nobenih razvojnih področij zahtevnejših od razvoja operacijskega sistema (OS). To je “velik vrhunec programiranja.”

Malo programerjev kdaj poskuša zgraditi operacijski sistem, mnogi od njih pa nikoli ne ustvarijo delujočega sistema.

Če pa se vseeno potrete do cilja in ustvarite funkcionalen operacijski sistem, se boste pridružili elitni skupini vrhunskih programerjev.

Kaj je operacijski sistem?

Najzgodnejši računalniki niso imeli operacijskih sistemov.

Vsak program, ki se je izvajal na teh zgodnjih sistemih, je moral vsebovati vso kodo, ki je potrebna za zagon računalnika, komunikacijo s povezano strojno opremo in za izvajanje računa, ki ga je program dejansko želel izvesti. Takšno stanje je pomenilo, da so celo preprosti programi zapleteni.

Ker so se računalniški sistemi razširili in postali bolj zapleteni in močni, je bilo vedno bolj nepraktično pisati programe, ki delujejo kot operacijski sistem in uporabna aplikacija.

Kot odgovor so posamezni lastniki računalnikov mainframe začeli razvijati sistemsko programsko opremo, ki je olajšala pisanje in zagon programov in rojeni operacijski sistemi.

Operacijski sistem (OS) je programska oprema, ki upravlja računalniško strojno opremo in sistemske vire ter ponuja orodja, ki jih aplikacije potrebujejo za delovanje. Rojstvo operacijskih sistemov je pomenilo, da programov ni več treba pisati, da bi nadzirali celoten obseg delovanja računalnika.

Namesto tega bi lahko napisali računalniške aplikacije, ki jih bo upravljal operacijski sistem, medtem ko je operacijski sistem skrbel za računalniške vire in povezano periferno opremo, kot so tiskalniki in bralniki papirnih kartic.

Kratka zgodovina operacijskih sistemov

Prvi operacijski sistem je General Motors ustvaril leta 1956 za pogon enega samega računalnika IBM mainframe. Drugi lastniki IBM-ovega mainframe-ja so sledili temu in ustvarili svoje operacijske sisteme.

Kot si lahko predstavljate, starejši operacijski sistemi divje variirali od enega računalnika do drugega, in čeprav so olajšali pisanje programov, niso dovolili uporabe programov v več kot enem mainframeu brez popolnega prepisa.

V šestdesetih letih je IBM prvi proizvajalec računalnikov prevzel nalogo razvoja operacijskega sistema in začel distribuirati operacijske sisteme s svojimi računalniki.

Vendar IBM v tem času ni bil edini proizvajalec, ki je ustvarjal operacijske sisteme. Podjetje Control Data Corporation, Corporation Computer Science, Burroughs Corporation, GE, Digital Equipment Corporation in Xerox so vse izdane operacijske sisteme mainframe izdali tudi v šestdesetih letih prejšnjega stoletja..

V poznih šestdesetih letih prejšnjega stoletja je bila razvita prva različica operacijskega sistema Unix. Napisan na C in v najzgodnejših letih prosto dostopen, Unix je bil zlahka prenesen v nove sisteme in hitro dosegel široko sprejemljivost.

Številni sodobni operacijski sistemi, vključno z Apple OS X in vsemi okusi Linuxa, segajo v Unix.

Microsoft Windows je bil razvit kot odgovor na zahtevo IBM-a, da operacijski sistem zažene svoj obseg osebnih računalnikov.

Prvi OS, ki ga je zgradil Microsoft, se ni imenoval Windows, imenoval se je MS-DOS in je bil izdelan leta 1981 z nakupom 86-DOS operacijskega sistema od Seattle Computer Products in ga prilagodil tako, da je izpolnil IBM-ove zahteve.

Ime Windows je bilo prvič uporabljeno leta 1985, ko je bil ustvarjen grafični uporabniški vmesnik in seznanjen z MS-DOS.

Apple OS X, Microsoft Windows in različne oblike Linuxa (vključno s sistemom Android) zdaj zagovarjajo veliko večino sodobnega trga operacijskih sistemov.

Deli operacijskega sistema

Operacijski sistemi so sestavljeni iz dveh glavnih delov:

  • Jedro;
  • Sistemski programi.

The jedro je srce operacijskega sistema. To je prvi program, ki se naloži ob zagonu računalnika, upravlja z računalniškimi viri in obravnava zahteve sistemskih programov in aplikacij.

Sistemski programi teči na vrhu jedra. Ne uporabljajo se za koristno delo, ampak so programi, ki so potrebni za povezovanje jedra z uporabniškimi aplikacijami in obrobnimi napravami. Gonilniki naprav, datotečni sistemi, omrežni programi in sistemski pripomočki, kot so defragmeterji diskov, so vsi primeri sistemskih programov.

Aplikacijski programi niso del operacijskega sistema in so programi, ki se uporabljajo za opravljanje koristnih del. Aplikacije za obdelavo besedila, brskalniki in predvajalnik medijev so pogoste vrste aplikacijskih programov. Jedro upravlja in omogoča aplikacijske programe in uporablja sistemske programe za dostop do računalniških perifernih naprav in strojne opreme.

Kaj morate vedeti

Seznam stvari, ki jih morate vedeti, preden se boste lotili razvoja operacijskega sistema, je zelo dolg. Tri najpomembnejše stvari, ki jih morate obvladati pred skokom v razvoj OS, so:

  • Osnovno znanje iz računalništva;
  • Teorija računalniškega programiranja in najboljše prakse;
  • Programske jezike na nizki in visoki ravni.

Naučite se računalništva

Razvoj OS ni všeč spletnemu razvoju. To ni nekaj, v kar lahko skočite in se naučite. Preden začnete z drugimi temami, morate razviti trden temelj računalništva.

Tukaj je nekaj virov za začetek:

Coursera: Računalništvo 101 je tečaj, ki bi ga morali najprej izvesti, če ste popolnoma novi na področju računalniškega programiranja in računalništva.

Če imate pod pasom malo znanja in izkušenj, preskočite ta tečaj v prid možnosti Udacity edX. Če pa ste na tem področju povsem novi, je ta tečaj pri uvajanju tematike računalništva in programiranja brez izkušenj..

Udacity: uvod v računalništvo je pristop k spletnemu razvoju poučevanja računalništva. Čeprav ni neposredno uporabno za možnost gradnje operacijskega sistema, je to dober tečaj, ki ponuja koristne informacije in nudi dober pregled osnov računalniškega programiranja.

edX: Uvod v računalništvo je najbolj popoln in poglobljen tečaj računalništva na tem seznamu. Ta brezplačni samostojni tečaj je zasnovala univerza Harvard in zrcali vsebino, predstavljeno na tečaju, z istim imenom, ki ga ponuja kampus univerze Harvard.

V tem daljnosežnem tečaju boste spoznali algoritme, strukture podatkov, upravljanje virov, programsko inženirstvo in si ogledali programske jezike, kot so C, PHP in JavaScript.

Naučite se računalniškega programiranja

Naslednji korak je, da se s svojim dobrim razumevanjem informatike pod pasom in nekaj omejenih izkušenj s programskimi jeziki naučite, kako se spoprijeti z obsežnim programerskim projektom.

Udacity: Proces razvoja programske opreme je odličen tečaj, ki bi ga morali opraviti vsi, če se še nikoli niso lotili obsežnega in zahtevnega programskega projekta. V tem predmetu se boste naučili orodij in tehnik dela in upravljanja, kot je Git, in kako vzpostaviti integrirano razvojno okolje.

Naučite se jezikov za programiranje

Za razvoj operacijskega sistema morate obvladati vsaj dva programska jezika:

  • Jezik montaže na nizki ravni;
  • Programski jezik na visoki ravni.

Jeziki montaže se uporabljajo za komunikacijo neposredno s CPU. Vsaka vrsta CPU-ja govori strojni jezik in za vsak tip CPU-ja obstaja samo en ustrezen montažni jezik. Najpogostejša računalniška arhitektura je x86, prvotno jo je razvil Intel, zdaj pa jo uporablja širok spekter proizvajalcev računalniških čipov, vključno z AMD, VIA in številnimi drugimi. V tem priročniku vas bomo usmerili v smer učenja jezika x86 montaže.

Programski jeziki na visoki ravni delujejo z več računalniškimi arhitekturami. C je programski jezik, ki se najpogosteje uporablja in priporoča za pisanje operacijskih sistemov. Zaradi tega bomo priporočili učenje in uporabo C za razvoj OS. Lahko pa se uporabljajo tudi drugi jeziki, kot sta C ++ in Python.

x86 Jezik montaže

The x86 Vodnik za montažo je odličen kraj za začetek učenja montažnega jezika. Ta kratek dokument ponuja kratek pregled jezika montaže x86 in bo postavil osnovo za naprednejše vire, na katere boste začeli uporabljati naslednji.

Programiranje od tal avtorja Jonathana Bartletta, je ena izmed ključnih knjig krajine montažnega jezika. Ta knjiga uporablja montažni jezik kot osnovo za učenje računalništva in programiranja. Ta vir je na voljo tudi v internetnem arhivu.

Umetnost zbiranja jezika avtor Randy Hyde je še eno ikonično besedilo v svetu montažne jezikovne izobrazbe. Prvotno napisano posebej za Hydeove tečaje programiranja na Cal Poly in UC Riverside, je besedilo izšlo kot HTML e-knjigo sredi devetdesetih let in je prepoznano kot določeno delo na terenu. Besedilo gosti tudi Yale FLINT Group v obliki datotek PDF.

Če želite s pomočjo tradicionalnega učbenika spoznati jezik montaže x86, sta dve najpogosteje uporabljeni in zelo priporočljivi besedili:

  • Jezik montaže korak za korakom: programiranje z Linuxom avtorja Jeffa Duntemanna;
  • Sodobno jezikovno programiranje skupščine X86 Daniela Kusswurma.

C

Obstaja veliko programskih jezikov na visoki ravni, ki bi se jih lahko naučili, in veliko različnih virov, s katerimi bi se jih lahko naučili. Naše priporočilo in priporočilo, ki ga najpogosteje upošteva razvojna skupnost OS, je učenje C in našli smo več odličnih virov, ki vas bodo spremenili v kompetentnega programerja C.

S tem dokončajte hiter pregled programskega jezika C C Tutorial. Ta vir vas ne bo spremenil v strokovnjaka, vendar vam bo omogočil dobro osnovno razumevanje jezika in vas pripravil, da se lotite zahtevnejših tem in virov.

Naučite se C na težko pot je brezplačna HTML e-knjiga, ki vključuje številne vaje. To besedilo vas popelje vse do programskega jezika C in če se boste lotili dela, si vzeli čas in dokončali vse vaje, boste že na poti, da postanete kompetentni programer C do takrat, ko boste izpolnite to vadnico.

Če je tradicionalni učbenik nekaj, skozi kar boste bolj verjetno delovali, sta ti dve besedili najbolj priljubljeni za obvladovanje programskega jezika C.

  • Programski jezik C, Kernighan in Ritchie;
  • C Programiranje Vodič za absolutne začetnike Perry in Miller.

Vadnice za razvoj OS

Ko boste dobro spoznali temeljne koncepte računalništva in programiranja ter obvladali jezik sestavljanja in C, je naslednji korak dokončati eno ali dve vadnici za razvoj OS, ki skozi celoten postopek razvoja preprostega operacijskega sistema stopijo iz nič. Našli smo tri odlične vire, ki delajo prav to.

Linux iz nič vas bo vodil skozi postopek izdelave popolnega operacijskega sistema Linux. V celoti ta vadnica ne bo izdelala popolnega operacijskega sistema, ampak vam bo zagotovila trdno osnovo kode, na kateri boste zgradili popoln operacijski sistem. Ukvarjajte se z naprednimi vadnicami, kot so Beyond Linux od Scratch, Automated Linux iz Scratch-a, Cross Linux iz Scratch-a ali Hardened Linux iz Scratch-a, če želite svoj osnovni OS sestaviti v uporaben del programske opreme.

Knjižica o razvoju OS avtorja Erika Helina in Adama Renberga je bil razvit v okviru naprednega tečaja računalništva, ki so ga avtorji zaključili, medtem ko so bili študenti na Kraljevem inštitutu za tehnologijo v Stockholmu. Ta tečaj vodi skozi celoten postopek razvoja operacijskega sistema x86, začenši z nastavitvijo programskega okolja, ki je vrhunec v programiranju za večopravilnost in posegom po temah, kot sta upravljanje sistemskega pomnilnika in razvoj datotečnih sistemov..

Serija za razvoj operacijskega sistema od Broken Thorn Entertainment je serija 25 vadnic, ki vas vodijo skozi postopek ustvarjanja OS od začetka navzgor. Začetniki bodite pozorni: ta serija predvideva, da že poznate svoj IDE in ste kompetenten programer jezika C in montaže.

Obstaja veliko besedil, ki bi jih lahko uporabili pri učenju o disciplini razvoja OS. Tri najpogosteje priporočljive so:

  • Sodobni operacijski sistemi Tanenbaum in Bos;
  • Zasnovo operacijskega sistema UNIX Mauricea Bacha;
  • Koncepti operacijskega sistema Silberschatz, Galvin in Gagne.

Razvojne skupnosti OS

Ko se podate na pot razvijalca OS, je na nekaterih mestih mogoče najti druge razvijalce OS, ki se jih boste naučili in jim pomagali:

  • OSDev.org je wiki z veliko informacijami o razvoju OS in forum, na katerem se lahko srečate in dobite povratne informacije od drugih podobno mislečih programerjev.
  • Razvojni kanal OS na redditu je odlična skupnost, v kateri se lahko naučite o razvoju OS in uživate v trenutku levičnosti, ko naloga razvoja OS postane nekoliko naporna.
  • Računalništvo, programerji in StackOverflow iz StackExchange so mesta, na katera lahko postavite tehnična vprašanja drugim programerjem, ko naletite na težavo, za katero se zdi, da je ne vidite sami..

Povzetek

Učenje razvoja OS je ena najbolj zahtevnih programskih nalog, ki se jih lahko lotite. Vendar pa vas bo uspeh v izgradnji delujočega OS označil za kompetentnega programerja in tistega, ki dobro razume, kako procesorji, strojna oprema in računalniški programi sodelujejo pri ustvarjanju tistega, kar preostali svet samoumevno šteje kot delujoč računalnik.

Naslednji koraki – Iščete spletnega gostitelja? Oglejte si naš vodič o spletnem gostovanju & naši priporočeni gostitelji.

Oglejte si tudi naša druga navodila o programskih jezikih.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me