Noțiuni introductive
On octombrie 2, 2021 by adminÎn primul rând, dezvoltarea unui sistem de operare este probabil unul dintre cele mai dificile lucruri pe care le puteți face pe un calculator (pe lângă uciderea șefului final din Doom la nivelul de dificultate Nightmare). Compunerea unui sistem de operare necesită o mulțime de cunoștințe despre mai multe domenii complexe din cadrul informaticii. Trebuie să înțelegeți cum funcționează hardware-ul și să fiți capabil să citiți și să scrieți limbajul complex de asamblare, precum și un limbaj de nivel superior (cum ar fi C, C++ sau Pascal). Mintea ta trebuie să fie capabilă să se înfășoare în jurul teoriei abstracte și să rețină o multitudine de gânduri. Vă simțiți deja descurajat? Nu vă temeți! Pentru că toate aceste lucruri sunt, de asemenea, cele care fac ca programarea sistemului de operare să fie amuzantă și distractivă.
Nimic nu se compară cu sentimentul de împlinire atunci când, în sfârșit, după ore de luptă, rezolvi problema. Iar după un timp ești capabil să te uiți înapoi și să vezi toate lucrurile pe care le-ai creat de la zero. Sistemul tău scris de mână este capabil să pornească, face magie față de hardware și îi oferă utilizatorului o interfață de utilizator și programe cu care să se joace.
Nu există o cale absolută pe care trebuie să o urmezi atunci când creezi un sistem de operare. Odată ce ați pus în funcțiune sistemul inițial (și faceți acest lucru găsind tutoriale adecvate), alegeți calea pe care doriți să o urmați. Sistemul tău de operare este exact asta – al tău. Aveți controlul suprem, iar cerul este limita!
Contenit
- 1 Adevărul crud
- 2 Responsabilitate
- 3 Cunoștințe necesare
- 4 Organizează-ți planurile
- 5 Alegerea mediului de dezvoltare
- 5.1 GNU/Linux
- 5.2 Windows
- 5.3 MacOS
- 6 Testarea sistemului de operare
- 7 Protejarea codului
- 8 Puncte comune de pornire
- 9 Obținerea de cunoștințe suplimentare
- 10 Vezi și
- 10.1 Articole
- 10.2 Fire de discuție
- 10.3 Legături externe
Adevărul dur
Sperăm că faptul de bază că dezvoltarea sistemului de operare este un proces complicat și continuu nu vă descurajează. Adevărul este că dezvoltarea sistemului de operare este cu adevărat de neegalat, deoarece necesită cea mai mare cantitate de răbdare și o proiectare atentă a codului, și returnează foarte puțin sau deloc „satisfacția instantanee” pe care o obțineți de la dezvoltarea unor lucruri precum jocurile și scriptingul bazat pe web.
Ați fost destul de avertizat cu privire la munca grea care vă așteaptă, dar dacă sunteți încă interesat, atunci mergeți mai departe pe tărâmul programatorului de sisteme de operare. Pregătiți-vă pentru episoade ocazionale de confuzie, descurajare și pentru unii dintre noi… nebunie temporară. În timp, și cu suficientă dedicare, vă veți găsi printre cei câțiva de elită care au contribuit la un sistem de operare funcțional. Dacă vă descurajați pe parcurs, reîmprospătați-vă cu conținutul acestei cărți. Să sperăm că vă va reaminti de ce ați început o astfel de călătorie nebunească de la bun început.
În acest stadiu, ar fi util să citiți și pagina Greșeli ale începătorilor. Utilizatorii de pe forum au observat că multe dintre aceste greșeli se repetă în timp, iar evitarea lor este o modalitate excelentă de a nu vă face de râs.
Responsabilitate
Oamenii au tendința de a susține că este în regulă să scrieți software ineficient, afirmând că sistemele informatice sunt atât de rapide în zilele noastre, încât nu veți vedea impactul. Acest tip de mentalitate este periculos în proiectarea sistemelor de operare. Ar putea fi în regulă să scrii cod neglijent atunci când faci o aplicație simplă, dar când vine vorba de cod critic care poate fi apelat de mii de ori pe secundă, trebuie să elimini tot ce poți. Sistemul de operare ar trebui să furnizeze computerul ca resursă de bază pentru aplicațiile care rulează, cu cât mai puține complicații, abstractizări și costuri suplimentare posibil.
Persoanele care proiectează sisteme de operare în ziua de azi tind să aibă mentalitatea „totul, mai puțin chiuveta de bucătărie”. Ei își asumă sarcina de a ține cont de tot, ceea ce, desigur, este bine, dar nu ar trebui să se facă în detrimentul de a permite programelor prost scrise să înflorească. Există multe lucruri care se întâmplă „sub capotă” atunci când apar erori de program. Programele prost scrise costă timp prețios de execuție și implică comutări de sarcini care sunt costisitoare atât în ceea ce privește memoria, cât și frecvența. Vă încurajăm să descurajați programele prost scrise.
Cunoștințe necesare
Articol principal: Cunoștințe necesare
Dacă credeți că puteți sări peste această secțiune, aceasta este doar pentru dumneavoastră.
Această secțiune a fost mutată pe o pagină separată deoarece este menționată atât de des în discuțiile de pe forum.
Organizați-vă planurile
Înainte de a continua, gândiți-vă la ceea ce doriți să obțineți din scrierea unui sistem de operare. Care sunt motivațiile care vă determină să vă ocupați de acest proiect? Există multe motive posibile pentru a prelua un proiect de sistem de operare ca hobby, iar majoritatea dezvoltatorilor de sisteme de operare au mai multe motive. Chiar și simplul fapt de a spune „vreau doar” poate fi suficient, deși cu cât vă gândiți mai mult și vă clarificați obiectivele și motivele, cu atât vă puteți concentra mai mult pe ceea ce vă doriți cu adevărat.
Să fiți sincer și cu voi înșivă. Nu este nicio rușine să ai ambiții mai mari pentru proiectul tău, chiar (sau mai ales) dacă acestea nu sunt obiectivul principal. Încercați să vă recunoașteți toate obiectivele, nu doar pe cel care credeți că este scopul principal.
Încercați să vă stabiliți care sunt aspectele designului sistemului de operare care vă interesează cel mai mult sau la care vedeți o nevoie de a lucra. Cea mai mare parte a ceea ce intră în dezvoltarea sistemului de operare, în special la început, este proiectarea și dezvoltarea nucleului, dar nucleul în sine este doar o mică parte a majorității sistemelor de operare; dacă interesul dvs. principal este în UX, sau în rețele, sau în programarea driverelor, ar trebui să vă gândiți dacă aveți cu adevărat nevoie (acum sau în viitor) să vă scrieți propriul sistem de operare sau dacă ați fi la fel de mulțumit să dezvoltați aceste lucruri pe un nucleu existent. Nu puțini au fost cei care au intrat în dezvoltarea de sisteme de operare atunci când de fapt doreau să proiecteze un mediu desktop, așa că aceasta este o întrebare foarte importantă pe care trebuie să v-o puneți.
Încercați să vă gândiți la orice proiect non-OS pe care ați putea dori să îl abordați mai întâi sau în același timp, în special la cele care ar putea servi ca practică sau pregătire pentru proiectul OS. De obicei, nu este nevoie să lucrați la proiectul OS chiar acum, și cu cât v-ați pregătit mai mult înainte, cu atât mai bine vă va fi (până la un punct, cel puțin – pregătirea este una, amânarea este altceva).
În mod similar, dacă intenționați să lucrați la bifurcarea unui proiect existent pentru a experimenta sau pentru a-l modifica în anumite scopuri specifice, concentrați-vă asupra acestui lucru mai degrabă decât asupra problemelor generale de dezvoltare. Luați în considerare de ce părți din baza de cod existentă veți avea nevoie și care sunt cele pe care doriți să le modificați.
Încercați să elaborați unele dintre obiectivele specifice ale proiectului și fiți pregătiți să planificați proiecte separate dacă vă ajută să faceți acest lucru. Dacă intenționați pur și simplu să umblați pe aici și să vedeți unde vă duce, este bine; dacă intenția dvs. este de a răsturna Microsoft, este bine (deși probabil nerealist), de asemenea. Odată ce știți ce vreți să faceți, puteți să împărțiți detaliile în obiective specifice și să vă dați seama de ce ar fi nevoie pentru a le atinge. Nu încercați să forțați prea multe obiective divergente într-un singur proiect – dacă aveți lucruri diferite pe care vreți să le încercați cu obiective contradictorii, împărțiți-le în proiecte diferite.
Ar putea fi de ajutor dacă ați scrie o prezentare generală a designului sistemului de operare planificat, cu orice cerințe specifice sau detalii pe care le considerați notabile sau care ar putea clarifica ceea ce aveți nevoie de ajutor, și să o adăugați la depozitul public dacă puteți. Acest lucru nu numai că le va fi mai ușor celorlalți să vă ajute, dar vă va ajuta să vă organizați și să vă stabilizați planurile, la fel ca și cum ați scrie o schiță pentru o poveste sau o lucrare. Pregătiți-vă să îl actualizați pe măsură ce obiectivele și planurile dumneavoastră se schimbă, dar păstrați o copie a versiunilor mai vechi (sau, mai bine, păstrați documentul sub control de versiune), astfel încât să puteți vedea cum se dezvoltă munca dumneavoastră în timp.
În cele din urmă, analizați timpul și resursele de care va avea nevoie proiectul și decideți dacă acestea sunt fezabile. Dacă știți că aveți la dispoziție doar o anumită perioadă de timp pentru a vă dedica proiectului, țineți cont de acest lucru și, orice ați face, nu vă angajați la un termen limită extern chiar dacă sunteți sigur că îl puteți respecta. Dezvoltarea sistemului de operare necesită timp – mult timp – și încercarea de a termina un proiect complet de sistem de operare într-un semestru nu este realistă.
Alegerea mediului de dezvoltare
Aveți nevoie de o platformă pe care să vă dezvoltați noul sistem. Urmând tendințele informaticii generale, cea mai populară este GNU/Linux, dar mulți folosesc și Windows. Dezvoltatorii care folosesc un sistem GNU/Linux au un ușor avantaj în ceea ce privește disponibilitatea instrumentelor, dar acest lucru poate fi rezolvat pe Windows folosind un sistem cum ar fi Cygwin sau MinGW.
- Binutils: Instrumente fundamentale pentru manipularea fișierelor obiect.
- GCC: Colecția de compilatoare GNU. GCC conține compilatoare pentru C, C++, Fortran și Ada, printre altele.
- Make: Pentru automatizarea procesului de compilare, care devine foarte util odată ce aveți mai mult de o mână de fișiere.
- Grep și sed: Pentru a face căutări mai puternice și căutări și înlocuiri (utile atunci când completați tabele cu date).
- Diffutils: Incredibil de util pentru a arăta diferențele dintre două fișiere.
- Perl sau Python: Unul dintre aceste două limbaje de scripting ar trebui să fie instalat. Utile pentru manipularea șirurilor de caractere, printre alte lucruri. Perl obișnuia să fie recomandarea, dar Python este acum destul de matur și este posibil să fie mai ușor de învățat. Ambele au sute de pachete/module disponibile pentru a face diverse sarcini.
- Un asamblor: De exemplu NASM sau GAS. Acest lucru variază în funcție de arhitectura procesorului țintă.
- Un editor: Pentru a scrie fișierele Assembly, C și alte fișiere (de cod).
S-ar putea să nu folosiți toate aceste instrumente, dar este mai bine să le aveți la îndemână „pentru orice eventualitate” și să știți cum să le folosiți, chiar și la un nivel de bază. Dar dacă ați decis să folosiți un alt limbaj, atunci instrumentele depind în mare parte de dumneavoastră și poate că lista de mai sus nu vă va ajuta în niciun fel. Mai jos sunt informații legate mai ales de dezvoltatorii C/C++ sau Assembly.
GNU/Linux
Sistemul cel mai recomandat pentru dezvoltarea de sisteme de operare este GNU/Linux. Atunci când se utilizează GNU/Linux, majoritatea instrumentelor de dezvoltare GNU sunt probabil deja prezente. Dacă nu, utilizați instrumentele de gestionare a pachetelor din distribuția dvs. (APT, RPM, Portage, Pacman, Apk etc.) pentru a le instala în funcție de necesități. Din nou, este necesară realizarea unui compilator încrucișat, pentru a nu se lega în fișierele de execuție ale sistemului de dezvoltare.
Editori comuni sunt Vim, Emacs, KDevelop, Komodo Edit, etc. Unii preferă editoare ușoare în locul unui IDE, cum ar fi gedit, Geany și SciTE. Multora le place Midnight Commander, care are o interfață text și un editor încorporat (mcedit) și, prin urmare, este extrem de ușor și extrem de rapid.
Despre ce distribuții ar trebui să folosiți, consultați lista de distribuții Linux. Acestea au venit în toate formele și mărimile și nu toate sunt potrivite pentru dezvoltarea kernelului. Nu folosiți o distribuție care are un scop specific, cum ar fi securitatea (Kali, Qubes, BackTrack, Parrot etc.), aplicații științifice (de exemplu, Scientific), firewall-uri și rutare (de exemplu, DD-WRT), recuperare de sistem sau medii încorporate (Knoppix, Rescatux, TinyCore) sau care se adresează în mod special începătorilor (cum ar fi Linux Mint, Nitrux etc.) Deși un Linux prietenos pentru începători ar putea fi bun, alegeți una care este o distribuție de uz general. De asemenea, folosiți o distro care are pachete actualizate, cel mai bine este să alegeți una care folosește rolling-release. Debian este ușor de utilizat, dar de multe ori livrează versiuni vechi și cu patch-uri (este posibil ca instrumentele să nu se comporte așa cum sunt descrise). Multor începători le place Ubuntu, ceea ce este bine, dar se raportează că are probleme cu unele toolchains și medii de compilare (dacă vă compilați propriul cross-compiler în loc să folosiți unul instalat, aceasta este o non-problemă).
Cele mai bune distribuții pentru dezvoltarea kernelului sunt (dar rețineți că aceasta este, de asemenea, o chestiune de gust personal, așa că aceste distribuții nu sunt obligatorii, mai degrabă sugerate, și de obicei necesită o anumită experiență): Arch, Gentoo, Solus, Slackware, void etc. chiar și Puppy.
Dacă nu sunteți sigur, încercați Ubuntu sau Manjaro.
Windows
Pentru a obține instrumentele necesare, ar trebui să instalați mediul Cygwin. MinGW sau DJGPP sunt alternative, dar MSYS2 este sugerat cu tărie, deoarece este cel mai complet și compatibil mediu și include, de asemenea, un manager de pachete pentru a instala biblioteci și instrumente.
Microsoft a lansat recent (în momentul scrierii acestui articol) subsistemul Windows pentru Linux ca o caracteristică opțională pentru Windows 10. Este practic o adevărată distribuție Ubuntu cu linie de comandă care rulează peste Windows FĂRĂ a utiliza o VM. Cele mai recente GCC și Binutils (6.1.0 și 2.27 în momentul redactării acestui articol) compilează și funcționează corect în acest mediu. Folosind shell-ul Bash, puteți accesa hard disk-urile Windows prin /mnt/<drive letter>. Avantajul acestei soluții este că puteți lucra cu orice instrumente Windows sau Linux de care aveți nevoie, fără a fi nevoie să aflați dacă acestea funcționează în Cygwin. Multe dintre uneltele necesare pot fi instalate folosind „apt-get”.
Pentru toate cele de mai sus, este puternic sugerat să se construiască un compilator încrucișat, nu numai pentru că compilatoarele implicite vizează formate executabile diferite, ci și pentru că, în general, este o idee bună. Consultați pagina GCC Cross-Compiler pentru detalii și instrucțiuni.
Voi avea nevoie, de asemenea, de un editor. Utilizarea Notepad va funcționa, dar este mai ușor dacă aveți un editor mai complet. De exemplu, Notepad++ sau Notepad2 sunt folosite de multă lume. Dacă vă simțiți confortabil cu editorii Unix, puteți alege unul din selecția oferită de Cygwin (care include, de exemplu, Vim și Emacs, cu care trebuie să vă obișnuiți, dar care sunt foarte puternice).
De asemenea, este posibil să folosiți Visual Studio, sau Visual C++ Express Edition, care poate fi descărcat gratuit, pentru a scrie și compila sistemul de operare. Veți avea nevoie de un fișier de configurare special și, cu siguranță, veți fi în minoritate, dar funcționează destul de bine. Puteți chiar să instalați Windows SDK pe deasupra, permițând dezvoltarea pe 64 de biți. Singura piedică este că acesta nu suportă Inline Assembly.
Se pot folosi și alte instrumente, cum ar fi Watcom sau Borland, dar fiecare dintre ele are cerințe specifice proprii și nu sunt utilizate pe scară largă pentru acest tip de lucru.
MacOS
Pentru că sub capotă folosește userland-ul FreeBSD, este complet compatibil POSIX. Toate instrumentele obișnuite sunt disponibile (vi, bash, dd, cat, sed, tar, cpio, etc.) Aproape fiecare tutorial funcționează out-of-the-box. Instrumentele care lipsesc sunt în mare parte legate de sistemul de fișiere: nu există dispozitiv loopback, nu există fdisk, nu există mkfs.vfat și nici mtools. Dar puteți folosi diskutil în aceste scopuri, sau puteți folosi brew sau macports pentru a instala acele instrumente lipsă.
Pentru a obține gcc, obișnuiați să aveți un mpkg pe al doilea DVD de instalare pentru versiunile mai vechi. Versiunile mai noi de MacOS (10.13 și mai sus) pot instala XCode în linie de comandă (nu IDE-ul, doar toolchain-ul) rulând „xcode-select –install” dintr-un Terminal. Aceasta va instala gcc, binutils și make. Acest gcc este, de fapt, un CLang mascarat, dar suficient de funcțional pentru a vă construi propriul compilator încrucișat fără probleme. Este de preferat să folosiți compilatorul oficial pentru bootstrap gcc decât să instalați unul din brew sau macports.
Testarea sistemului de operare
Articol principal: Testarea
Articolul de mai sus aprofundează foarte mult alegerea modului de testare a sistemului de operare și cum să integrați acest lucru în procesul de dezvoltare. Sunt discutate atât mediile de testare fizice, cât și cele emulate.
Protejarea codului dumneavoastră
În timpul construirii codului dumneavoastră veți scrie sute, chiar mii, de linii de cod. Veți petrece un număr de ore de nedescris și veți sta treaz până târziu în noapte codificând când ar trebui să vă culcați. Ultimul lucru de care aveți nevoie este o defecțiune a discului sau o comandă ‘rm’ sau ‘format’ prost scrisă care să vă arunce toată munca la gunoi.
De ce aveți nevoie este un sistem de control al versiunilor. CVS este folosit de câțiva ani, dar în ultima vreme a primit multă concurență de la Subversion, Bazaar, Mercurial și Git. Dacă puteți, ar trebui să configurați un computer sau un server la distanță ca server de control al versiunilor, dar dacă nu aveți o astfel de mașină disponibilă, puteți, de asemenea, să găzduiți sistemul de control al versiunilor pe computerul local de dezvoltare. Amintiți-vă doar să faceți o copie de rezervă a codului pe CD sau FTP din când în când.
Nu putem insista suficient de mult asupra acestui aspect: dacă nu folosiți deja controlul sursei, ar trebui să începeți să o faceți imediat. Este suficient să faceți o singură dată o greșeală gravă în codul dvs. pentru a vă da seama de importanța de a avea codul dvs. securizat în versiuni și ușor de recuperat. Deși poate părea exagerat pentru un proiect mic, privat, de hobby, odată ce ați căpătat obiceiul de a folosi controlul revizuirilor, vă veți întreba cum v-ați descurcat vreodată fără el.
Pentru Git vă puteți crea proiectul pe GitHub. Bitbucket este, de asemenea, o alternativă bună, deoarece suportă atât Git, cât și Mercurial. Ambele vin cu depozite gratuite și private.
Un beneficiu suplimentar al utilizării controlului versiunilor pe un depozit accesibil în rețea este că facilitează foarte mult colaborarea și obținerea de ajutor din partea altora. Acest lucru poate fi destul de util, în special în forumuri, deoarece poate evita necesitatea de a posta în mod constant versiuni actualizate ale codului dvs. într-un fir de mesaje – pur și simplu îndreptați conversația către depozitul dvs. și ceilalți din firul de mesaje vor avea acces direct la cele mai recente modificări ale dvs. Este, de asemenea, crucial dacă, pe măsură ce proiectul se dezvoltă, începeți să lucrați cu alți dezvoltatori în cadrul proiectului (doar că nu vă așteptați ca acest lucru să se întâmple peste noapte).
Puncte de pornire comune
Cel mai simplu mod de a pune în funcțiune un kernel „hello world” este tutorialul Bare Bones. O abordare diferită ar fi să învățați cum pornește calculatorul în sine, pe pagina Secvența de pornire.
Există și multe alte tutoriale disponibile.
Obținerea de cunoștințe suplimentare
Există o cantitate uimitoare de cunoștințe despre dezvoltarea sistemelor de operare disponibile astăzi pe Internet. Este doar o chestiune de a le găsi. Mai întâi de toate, există acest wiki în sine. Printre altele, avem o mulțime de tutoriale. Din moment ce vă aflați aici, probabil că le-ați găsit deja. Tot pe acest site se află și forumul, unde mulți dezvoltatori își petrec timpul și vă pot ajuta (dar asigurați-vă că citiți mai întâi How To Ask Questions). Au fost scrise destul de multe cărți despre dezvoltarea sistemelor de operare. O parte dintre acestea sunt prezentate pe pagina noastră de Cărți, iar altele pe osdever.net, de asemenea.
Lasă un răspuns