Paras vastaus
Se riippuu siitä, mitä tarkoitat käyttöjärjestelmällä. Kirjoitin kerran yksinkertaisen jonojärjestelmän, joka suorittaa useita protokollaistuntoja pyöreällä tavalla. Mutta se toimi normaalissa käyttöjärjestelmässä. Kun mikro-ohjaimet tulivat ensimmäisen kerran sulautettujen järjestelmien käyttöön, insinöörit kirjoittivat tyypillisesti oman alkeellisen käyttöjärjestelmänsä, kuten toisessa vastauksessa mainitaan.
Pienin käyttämäni hyödyllinen käyttöjärjestelmä, jolla oli moniajojen toiminnan perusominaisuudet -hyllyjärjestelmää kutsuttiin QNX: ksi. Se oli leikattu Unix-järjestelmä ja juoksi ensimmäisellä IBM-tietokoneella. Siinä ei ollut hienoa grafiikkaa, mutta pystyin tekemään siihen mukavasti ohjelmistokehitystä. Itse asiassa ainoa todellinen ero nykyaikaisiin koneisiin oli käyttöliittymä, jossa oli värejä ja grafiikkaa. Joten pohjimmiltaan IBM: n DOS: n käyttöönotto asetti tietokoneteollisuuden takaisin vähintään 10 vuoteen. Siellä oli useita ylivertaisia käyttöjärjestelmiä (joita olisi voitu mukauttaa) tai joita kehitettiin tuolloin tietenkin, että Unix asetti standardin.
Vastaus
Olen juuri saanut valmiiksi luokan ydin ( CS-4284 Systems & Networking Capstone ) viimeisen lukukauden aikana koulussa. Aiemmin otin käyttöjärjestelmän luokan, joka pyrkii työskentelemään käyttöjärjestelmän kanssa ohjelmoijan näkökulmasta, eikä käyttöjärjestelmän suunnittelijan näkökulmasta. Osallistuminen käyttöjärjestelmän ja ytimen kehittämiseen viimeiset puolitoista vuotta (se ei ole pitkään, mutta olen oppinut paljon), suosittelen tässä:
1. Mestari C En voi enää korostaa tätä. Ei oikeastaan, hallitse se. Käyttöjärjestelmän kehitys on vaikeaa. Se sisältää paljon käsitteitä, jotka sinun on todella hallittava C, joten se ei estä sinua. Ota esimerkiksi Unix-putki (kirjoitettu | kuoreen). Jotta voit kehittää käyttöjärjestelmän käyttöjärjestelmän, sinun on ymmärrettävä käyttöjärjestelmän tiedostojärjestelmä ja tiedostorakenne todella hyvin. Se on tyypillinen rajoitetun puskurin ongelma (kuluttaja / tuottaja) ja sen on käsiteltävä kaikki synkronoinnit. Sinun on oltava tietoinen virtuaalimuistista kirjoittaessasi sitä. Lisäksi Unix on tyypillisesti BYOB (tuo oma puskuri). Sinä käyttäjän on hallittava asianmukaisesti käyttäjän toimittama puskuri jne. … Viimeinen asia, jonka haluat tehdä tässä, on käsitellä C-peruskysymyksiä, kuten osoittimia ja muistinhallintaa. (Huomaa: käyttöjärjestelmän muistinhallinta on 10 kertaa vaikeampaa kuin C-muistin hallinta: sinun on oltava tietoinen käyttäjän vs. ytimen osoiteavaruuksista)
2. Ydin vs. käyttöjärjestelmä Sinun on ymmärrettävä ero ytimen ja käyttöjärjestelmän välillä. Ydin on lähinnä käyttöjärjestelmän aivoja. Käyttöjärjestelmä on joukko sovelluksia, jotka on niputettu yhteen. Esimerkiksi Mac OS X sisältää: ytimen, käyttöliittymän (GUI), sisäänrakennetut vakiosovellukset (Finder – mikä on vain abstrakti visualisoi tiedostojärjestelmä, TextEdit, kuori jne …)
3. Älä sukeltaa suoraan Käynnistäminen on mahdotonta ytimen kehittäminen muutamassa päivässä tai viikossa. Ehdotan, että aloitat seuraavalla:
- Tutustu GCC: n kokoamisvaiheisiin (mitä tapahtuu, kun suoritat gcc: tä, miten suoritettava tiedosto tuotetaan ja mitä Voit myös kirjoittaa yksinkertaisen assemblerin C: ksi (ota kokoonpanokoodi syöttö- ja tulostuskoneen koodiksi. Tämä edellyttää, että ymmärrät, mitä .data-, .text- ja .bss-osiot ovat kokoonpanossa (erittäin hyödyllinen tie ymmärtää käyttöjärjestelmän virtuaalimuisti). Ymmärrät myös konetason osoituksen ja sen, miten haarat ratkaistaan.
- perehdy machiin ine-tason työkalut ja ohjelmat. Ehdotan pommilaboratorion tekemistä, koska siellä on paljon opetusmateriaalia. Vain google pommilaboratorio.
- Tutustu käyttöjärjestelmän perushyökkäyksiin. Ehdotan, että tarkastellaan puskurin ylivuotoa samasta syystä kuin kohta 1 (Google-puskurin ylivuotolaboratorio).
- Lisätietoja järjestelmän puheluista, ketjuista ja prosesseista C. Kehitä sieltä oma kuori C. / li>
- Opi muistin allokoinnista ja ota malloc ja free käyttöön C: ssä. Opi suunnitteluprosesseista, allokointistrategioista, vapauttamisstrategioista jne.
- Lisätietoja monisäikeisestä ja moniprosessoinnista Sukella sieltä synkronointimekanismeihin (lukot, muteksit, semaforit) ja kehitä langankierre C: ssä, jota muut ohjelmat voivat käyttää.
4. Nyt voit aloittaa todellisen mutta yksinkertaistetun käyttöjärjestelmän ytimen kehittämisen Tässä vaiheessa voit alkaa kehittää todellista käyttöjärjestelmää käyttöjärjestelmän suunnittelijana. Google Stanford Pintos ja saat käyttöösi pienen Stanfordissa kehitetyn opetuksen ytimen. Sen mukana tulee dokumentaatio ja 4 projektisarja. Voit käyttää Googlea joissakin kouluissa, joissa on luentolistat Pintosille. Ehdotan, että ostat käyttöjärjestelmän käsitteet ( Amazon.com: Käyttöjärjestelmän käsitteet (9781118063330): Abraham Silberschatz, Peter B.Galvin, Greg Gagne: Kirjat ). Asiakirjat ovat melko hyvät ja projektit selitetään hyvin. Käyttöjärjestelmän mukana tulee myös testejä, jotka voit suorittaa suorittamalla `make check`, jotta näet, oletko tehnyt asioita oikein vai et.
5. Voit aloittaa osallistumisen Linuxiin Se vie paljon vaivaa lähdekoodin ja Linux-suunnittelupäätösten tutkimiseen (jotka ovat paljon monimutkaisempia kuin Pintos), mutta luulen tässä vaiheessa, että osaa ainakin aloittaa. Kun lisää harjoittelua ja lukemista, voit noutaa sen.
Suoritin juuri vaiheen 4. Rakastin vaiheita 1-3, mutta rehellisesti sanottuna puolivälissä 4 tajusin, etten ole niin kiinnostunut käyttöjärjestelmän kehittämisestä. Pidin paljon työskentelemästä käyttöjärjestelmän kanssa ohjelmoijana (ohjelmoijan näkökulmasta), mutta en nauttinut syvemmästä kaivamisesta. Olen kuitenkin oppinut paljon ytimen kehittämisestä, ja se altistaa sinut monille asioille. Lisäksi, jos pystyt kirjoittamaan ytimen, kirjoitat minkä tahansa ohjelmiston siellä. Suosittelen vahvasti vähintään kolmen ensimmäisen vaiheen tekemistä, koska se antaa sinulle hyvän käsityksen käyttöjärjestelmästä. Sinusta tulee kirjaimellisesti parempi ohjelmistoinsinööri. Opit arvostamaan enemmän korkean tason kieliä ja opit käyttämään oikeaa työkalua / kieltä / tekniikkaa myös oikeaan työhön.
Minulla on paljon materiaalia käyttöjärjestelmän kehittämisestä, projekteista, testeistä jne. … Jos ihmiset ovat kiinnostuneita, kerro siitä minulle kommentoimalla, ja voin kenties koota online-eBook / opetusohjelman / oppaan testausympäristöllä, joka ohjaa aloittelijoita käyttöjärjestelmän kehittämiseen ja tarjota projekteja ja palautetta työskennelläksesi.