Cel mai bun răspuns
Depinde ce înțelegeți prin sistem de operare. Odată am scris un sistem simplu de așteptare care să execute mai multe sesiuni de protocol într-un mod round-robin. Dar a funcționat sub un sistem de operare standard. Când microcontrolerele au apărut pentru prima dată pentru sistemele încorporate, inginerii de obicei își scriau propriul sistem de operare rudimentar, așa cum se indică într-unul din celelalte răspunsuri. -sistemul raft s-a numit QNX. A fost un sistem Unix redus și a funcționat pe primul computer IBM. Nu avea grafică extravagantă, dar aș putea face confortabil dezvoltarea software-ului pe ea. De fapt, singura diferență reală față de o mașină modernă a fost interfața cu utilizatorul cu culoare și grafică. Așadar, practic introducerea DOS de către IBM a determinat industria computerelor înapoi cu cel puțin 10 ani. Există o serie de sisteme de operare superioare (care ar fi putut fi adaptate) sau în curs de dezvoltare la acel moment, desigur, Unix stabilind standardul.
Răspuns
Tocmai am terminat dezvoltarea un nucleu pentru o clasă ( CS-4284 Systems & Networking Capstone ) în ultimul meu semestru la școală. Anterior, am urmat o clasă de sistem de operare care urmărește să lucreze cu sistemul de operare din perspectiva programatorului și nu din perspectiva unui designer de sistem de operare. Fiind implicat în dezvoltarea sistemului de operare și a nucleului în ultimul an și jumătate (nu este mult timp, dar am „învățat multe), iată ce vă recomand:
1. Maestrul C Nu mai pot sublinia acest lucru. Nu chiar, stăpânește-l. Dezvoltarea sistemului de operare este dificilă. Include o mulțime de concepte de care aveți nevoie cu adevărat pentru a stăpâni C, deci nu vă stă în cale. De exemplu, luați conducta Unix (tastată | într-un shell). Pentru a dezvolta o conductă în sistemul dvs. de operare, trebuie să înțelegeți foarte bine sistemul de fișiere OS și structura fișierelor. „Este o problemă tipică a bufferului mărginit (consumator / producător) și va trebui să se ocupe de toate sincronizările. Trebuie să fiți conștienți de memoria virtuală în timp ce o scrieți. Mai mult, Unix este de obicei BYOB (aduceți-vă propriul buffer). va trebui să gestioneze în mod corespunzător bufferul pe care utilizatorul l-a furnizat etc … Ultimul lucru pe care ați dori să-l faceți aici este să vă ocupați de problemele de bază C, cum ar fi pointerele și gestionarea memoriei (notă: gestionarea memoriei în sistemul de operare este de 10 ori mai dificilă decât gestionarea memoriei C: trebuie să fiți conștienți de spațiile de adresă ale utilizatorului vs. ale nucleului)
2. Kernel vs. OS Trebuie să înțelegeți diferența dintre un kernel și un SO. Un nucleu este în esență creierul sistemului de operare. Sistemul de operare este un set de aplicații grupate împreună. De exemplu, Mac OS X include: un nucleu, interfața (GUI), aplicații standard încorporate (Finder – care este doar o abstracție pentru vizualizați sistemul de fișiere, TextEdit, un shell etc …)
3. Nu vă scufundați direct Este imposibil să începeți dezvoltând kernel în câteva zile sau săptămâni. Vă sugerez să începeți cu următoarele:
- Familiarizați-vă cu pașii de compilare GCC (ce se întâmplă când rulați gcc, cum este produs un executabil și ce se întâmplă atunci când rulați programul). De asemenea, puteți scrie un asamblor simplu în C (luați codul de asamblare ca cod de mașină de intrare și de ieșire. Acest lucru vă cere să înțelegeți ce secțiuni .data, .text și .bss sunt în asamblare ( drumul spre înțelegerea memoriei virtuale a sistemului de operare). Veți înțelege, de asemenea, adresarea la nivel de mașină și modul în care sunt rezolvate ramurile.
- Familiarizați-vă cu mach instrumente și programe de nivel ine. Vă sugerez să faceți laboratorul de bombe, pentru că există o mulțime de materiale educaționale acolo. Doar google bomb lab.
- Familiarizați-vă cu atacurile de bază ale sistemului de operare. Vă sugerez să vă uitați la depășirea bufferului din același motiv ca punctul 1 (Google buffer overflow lab).
- Aflați despre apelurile de sistem, firele și procesele din C. De acolo, dezvoltați propriul shell în C.
- Aflați despre alocarea memoriei și implementați malloc și gratuit în C. Aflați despre compromisurile de proiectare, strategiile de alocare, strategiile de eliberare etc …
- Aflați despre multi-threading și multi-procesare în C. De acolo, scufundați-vă în mecanisme de sincronizare (încuietori, muturi, semafore) și dezvoltați un pool de fire în C, pe care alte programe îl pot folosi.
4. Acum, puteți începe dezvoltarea reală, dar simplificată a nucleului de sistem de operare În acest moment, puteți începe să vă dezvoltați pe un sistem de operare real ca designer de sistem de operare. Google Stanford Pintos și veți avea acces la un mic nucleu educațional dezvoltat la Stanford. Vine cu documentație și un set de 4 proiecte. Puteți să faceți google pentru unele școli care au diapozitive de curs pentru Pintos. Vă sugerez să cumpărați concepte de sistem de operare ( Amazon.com: Conceptele de sistem de operare (9781118063330): Abraham Silberschatz, Peter B.Galvin, Greg Gagne: Cărți ). Documentația este destul de bună, iar proiectele sunt explicate bine. Sistemul de operare vine, de asemenea, cu teste pe care le puteți rula executând `make check`, astfel încât să puteți vedea dacă ați„ făcut lucrurile corect sau nu.
5. Puteți începe să contribuiți la Linux Va fi nevoie de mult efort pentru a examina codul sursă și deciziile de proiectare Linux (care sunt mult mai complicate decât „Pintos”), dar cred că în acest moment, veți să poți începe cel puțin. Cu mai multă practică și citire, vei putea să-l ridici.
Tocmai am finalizat pasul # 4. Mi-au plăcut pașii de la 1 la 3, dar, sincer, la jumătatea celor 4 mi-am dat seama că nu sunt atât de interesat de dezvoltarea sistemului de operare. Mi-a plăcut mult să lucrez cu sistemul de operare ca programator (din perspectiva programatorului), dar nu mi-a plăcut să sap la fel de mult. Totuși, am învățat multe din dezvoltarea nucleului și te expune la o mulțime de lucruri. În plus, dacă puteți scrie un kernel, scrieți orice software acolo. Vă recomand cu tărie să faceți cel puțin primii 3 pași, deoarece vă oferă o perspectivă excelentă asupra sistemului de operare. Veți deveni literalmente un inginer software mai bun în ansamblu. Veți învăța să apreciați mai mult limbile de nivel înalt și veți învăța cum să folosiți instrumentul / limbajul / tehnologia potrivite și pentru jobul potrivit.
Am o mulțime de material despre dezvoltarea sistemului de operare, proiecte, teste etc … Dacă oamenii sunt interesați, anunțați-mă comentând și poate pot pune împreună o carte electronică / tutorial / ghid online cu un mediu de testare care îi va ghida pe începători în dezvoltarea sistemului de operare și oferiți proiecte și feedback pentru a lucra.