Qual è il sistema operativo più piccolo al mondo?

La migliore risposta

Dipende da cosa intendi per sistema operativo. Una volta ho scritto un semplice sistema di accodamento che eseguiva più sessioni di protocollo in modo round-robin. Ma funzionava con un sistema operativo standard. Quando i microcontrollori sono usciti per la prima volta per i sistemi embedded, gli ingegneri in genere hanno scritto il proprio sistema operativo rudimentale come indicato in una delle altre risposte.

Il più piccolo sistema operativo utile che ho usato che aveva le caratteristiche di base di un multitasking che funziona -il sistema a scaffale si chiamava QNX. Era un sistema Unix ridotto e girava sul primo PC IBM. Non aveva una grafica stravagante, ma potevo fare comodamente lo sviluppo del software. In effetti, lunica vera differenza rispetto a una macchina moderna era linterfaccia utente con colori e grafica. Quindi, fondamentalmente, lintroduzione del DOS da parte di IBM ha riportato lindustria dei computer indietro di almeno 10 anni. Cerano un certo numero di sistemi operativi superiori in giro (che avrebbero potuto essere adattati) o in fase di sviluppo allepoca con, naturalmente, Unix che stabiliva lo standard.

Risposta

Ho appena finito di sviluppare un kernel per una classe ( CS-4284 Systems & Networking Capstone ) durante il mio ultimo semestre a scuola. In precedenza, ho seguito un corso di OS che mira a lavorare con il sistema operativo dal punto di vista del programmatore e non dal punto di vista di un progettista del sistema operativo. Essere coinvolto nello sviluppo del sistema operativo e del kernel per lultimo anno e mezzo (non è da molto tempo, ma ho imparato molto), ecco cosa consiglio:

1. Master C Non posso più sottolinearlo. No davvero, padroneggiarlo. Lo sviluppo del sistema operativo è difficile. Include molti concetti di cui hai davvero bisogno per padroneggiare il C, quindi non ti ostacola. Ad esempio, prendi il pipe Unix (digitato | in una shell). Per sviluppare una pipe nel proprio sistema operativo, è necessario comprendere molto bene il file system del sistema operativo e la struttura dei file. È un tipico problema di buffer limitato (consumatore / produttore) e dovrà occuparsi di tutta la sincronizzazione. È necessario essere consapevoli della memoria virtuale durante la scrittura. Inoltre, Unix è tipicamente BYOB (porta il proprio buffer). dovrà gestire correttamente il buffer che lutente ha fornito ecc … Lultima cosa che vorresti fare quièdi affrontare i problemi di base del C come i puntatori e la gestione della memoria (nota: la gestione della memoria nel sistema operativo è 10 volte più difficile della gestione della memoria C: è necessario essere consapevoli degli spazi degli indirizzi dellutente rispetto a quelli del kernel)

2. Kernel vs OS È necessario comprendere la differenza tra un kernel e un sistema operativo. Un kernel è essenzialmente il cervello del sistema operativo. Il sistema operativo è un insieme di applicazioni raggruppate insieme. Ad esempio, Mac OS X include: un kernel, linterfaccia (GUI), applicazioni standard integrate (Finder, che è solo unastrazione per visualizzare il filesystem, TextEdit, una shell ecc …)

3. Non immergerti subito È impossibile iniziare fare lo sviluppo del kernel in pochi giorni o settimane. Ti suggerisco di iniziare con quanto segue:

  1. Familiarizzare con i passaggi di compilazione di GCC (cosa succede quando si esegue gcc, come viene prodotto un eseguibile e cosa si verifica quando esegui il programma). Puoi anche scrivere un semplice assemblatore in C (prendi il codice assembly come codice macchina di input e output. Ciò richiede di capire quali sezioni .data, .text e .bss sono in assembly (molto utile in basso la strada per comprendere la memoria virtuale del sistema operativo). Capirai anche lindirizzamento a livello di macchina e come vengono risolti i rami.
  2. Familiarizza con mach strumenti e programmi di livello ine. Suggerisco di fare il laboratorio di bombe, perché ci sono molti materiali educativi là fuori per questo. Solo google bomb lab.
  3. Acquisisci familiarità con gli attacchi di base del sistema operativo. Suggerisco di esaminare il buffer overflow per lo stesso motivo del punto 1 (google buffer overflow lab).
  4. Informazioni su chiamate di sistema, thread e processi in C. Da lì, sviluppa la tua shell in C.
  5. Informazioni sullallocazione della memoria e sullimplementazione di malloc e free in C. Informazioni su compromessi di progettazione, strategie di allocazione, strategie di liberazione ecc …
  6. Informazioni su multi-threading e multielaborazione in C. Da lì, immergiti nei meccanismi di sincronizzazione (lock, mutex, semafori) e sviluppa un pool di thread in C, che altri programmi possono utilizzare.

4. Ora puoi iniziare lo sviluppo del kernel del sistema operativo reale ma semplificato A questo punto, puoi iniziare a sviluppare un sistema operativo reale come designer del sistema operativo. Google Stanford Pintos e avrai accesso a un piccolo kernel educativo sviluppato a Stanford. Viene fornito con documentazione e un set di 4 progetti. Puoi cercare su Google alcune scuole che hanno diapositive di lezioni per Pintos. Suggerisco di acquistare Operating System Concepts ( Amazon.com: Operating System Concepts (9781118063330): Abraham Silberschatz, Peter B.Galvin, Greg Gagne: Books ). La documentazione è abbastanza buona ei progetti sono spiegati bene. Il sistema operativo include anche test che puoi eseguire eseguendo “make check”, così puoi vedere se hai fatto le cose correttamente oppure no.

5. Puoi iniziare a contribuire a Linux Ci vorrà molto sforzo per esaminare il codice sorgente e le decisioni di progettazione di Linux (che sono molto più complicate di quelle di Pintos), ma penso che a questo punto tu essere in grado almeno di iniziare. Con più pratica e lettura, sarai in grado di riprenderlo.

Ho appena completato il passaggio 4. Ho adorato i passaggi da 1 a 3, ma francamente, a metà del 4 ho capito che non sono così interessato allo sviluppo del sistema operativo. Mi è piaciuto molto lavorare con il sistema operativo come programmatore (dal punto di vista di un programmatore), ma non mi sono divertito a scavare più a fondo. Tuttavia, ho imparato molto dallo sviluppo del kernel e ti espone a molte cose. Inoltre, se puoi scrivere un kernel, scrivi qualsiasi pezzo di software là fuori. Consiglio vivamente di fare almeno i primi 3 passaggi in quanto ti dà una visione eccezionale del sistema operativo. Diventerai letteralmente un ingegnere del software migliore in generale. Imparerai ad apprezzare di più i linguaggi di alto livello e imparerai anche come utilizzare lo strumento / il linguaggio / la tecnologia giusti per il lavoro giusto.

Ho molto materiale sullo sviluppo del sistema operativo, progetti, test ecc … Se le persone sono interessate, fammelo sapere commentando e forse posso mettere insieme un eBook / tutorial / guida online con un ambiente di test che guiderà i principianti nello sviluppo del sistema operativo e fornire progetti e feedback su cui lavorare.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *