Domanda

La creazione di un sistema operativo sembra un progetto massiccio . Come si potrebbe iniziare qualcuno?

Ad esempio, quando inserisco Ubuntu nella mia unità, come può il mio computer eseguirlo ? (Questo, immagino, è quello che mi piacerebbe davvero sapere.)

Oppure, osservandolo da un'altra angolazione, qual è la quantità minima di byte che potrebbe essere su un disco ed essere ancora " eseguire " come sistema operativo?

(Mi dispiace se questo è vago. Non ho nessuna idea su questo argomento, quindi non posso essere molto specifico. Fingo di sapere un bel po 'su come funzionano i computer, ma sono completamente all'oscuro di questo argomento.)

È stato utile?

Soluzione

Bene, la risposta risiede nei libri: Sistemi operativi moderni - Andrew S. Tanenbaum è ottimo. La seguente illustrazione di copertina.

Il kernel del sistema operativo più semplice ma completo, adatto all'apprendimento o solo alla curiosità, è Minix .
Qui puoi sfogliare codice sorgente .

 Sistemi operativi moderni
(fonte: cs.vu.nl )

Altri suggerimenti

I sistemi operativi sono un argomento enorme, la cosa migliore che posso consigliarti se vuoi approfondire come sono progettati e costruiti i sistemi operativi è un buon libro:

Concetti relativi al sistema operativo ??

Concetti relativi al sistema operativo

Se sei veramente curioso, ti indirizzerei a Linux from Scratch come un buon posto per imparare il completo dettagli di un sistema operativo e come tutti i pezzi si incastrano. Se queste sono più informazioni di quelle che stai cercando, questo articolo di Wikipedia sui sistemi operativi potrebbe essere un buon punto di partenza.

Un PC sa guardare un settore specifico del disco per le istruzioni di avvio. Queste istruzioni diranno quindi al processore che su determinati processori si interrompe, è necessario chiamare un codice specifico. Ad esempio, su un segno di spunta periodico, chiamare il codice dello scheduler. Quando ricevo qualcosa da un dispositivo, chiama il codice del driver del dispositivo.

Ora come fa un sistema operativo a configurare tutto con il sistema? Bene anche l'hardware ha API. Sono scritti pensando al programmatore di sistemi.

Ho visto molti sistemi operativi bare-bones e questo è davvero il nucleo assoluto. Esistono molti sistemi operativi domestici integrati che è tutto ciò che fanno e nient'altro.

Funzionalità aggiuntive, come richiedere alle applicazioni di richiedere memoria al sistema operativo o richiedere privilegi speciali per determinate azioni, o persino processi e thread stessi sono davvero opzionali sebbene implementate sulla maggior parte delle architetture di PC.

Il sistema operativo è, semplicemente, ciò che consente al software di gestire l'hardware. Chiaramente alcuni sistemi operativi sono più sofisticati di altri.

Al suo centro, un computer inizia l'esecuzione a un indirizzo fisso, il che significa che quando il computer si avvia, imposta il contatore del programma su un indirizzo predefinito e inizia a eseguire il codice macchina.

Nella maggior parte dei computer, questo "bootstrap" il processo inizializza immediatamente le periferiche note (come, per esempio, un'unità disco). Una volta inizializzato, il processo di bootstrap utilizzerà una sequenza predefinita per sfruttare quelle periferiche. Utilizzando nuovamente il driver del disco, il processo potrebbe leggere il codice dal primo settore del disco rigido, posizionarlo in uno spazio noto all'interno della RAM e quindi passare a tale indirizzo.

Questa sequenza predefinita (l'avvio della CPU, il caricamento del disco) consente ai programmatori di iniziare aggiungendo sempre più codice nelle prime parti dell'avvio della CPU, che nel tempo possono, alla fine, avviare programmi molto sofisticati .

Nel mondo moderno, con periferiche sofisticate, architetture CPU avanzate e risorse vaste e vaste (GB o RAM, TB di disco e CPU molto veloci), il sistema operativo può supportare astrazioni piuttosto potenti per lo sviluppatore (più processi , memoria virtuale, driver caricabili, ecc.).

Ma per un sistema semplice, con risorse limitate, non hai davvero bisogno di molto per un " OS " ;.

Come semplice esempio, molti computer con controller di dimensioni ridotte hanno un "SO" molto piccolo, e alcuni possono semplicemente essere considerati un "monitor", offrendo poco più che un facile accesso a una porta seriale (o un terminale o LCD) display). Certamente, non ci sono molte esigenze per un sistema operativo di grandi dimensioni in queste condizioni.

Ma considera anche qualcosa come un classico sistema Forth. Qui, hai un sistema con un "OS", che ti fornisce I / O su disco, I / O su console, gestione della memoria, oltre al linguaggio di programmazione effettivo e un assemblatore, e questo si adatta a meno di 8 KB di memoria su una macchina a 8 bit.

o ai vecchi tempi di CP / M con il suo BIOS e BDOS.

CP / M è un buon esempio di dove un semplice sistema operativo funziona bene come strato di astrazione per consentire l'esecuzione di programmi portatili su una vasta gamma di hardware, ma anche in questo caso il sistema ha impiegato meno di 8 KB di RAM per avviarsi ed eseguire .

Molto lontano dagli MB di memoria utilizzati dai moderni sistemi operativi. Ma, per essere onesti, ABBIAMO MB di memoria e le nostre vite sono MOLTO MOLTO più semplici (principalmente) e molto più funzionali, per questo.

Scrivere un sistema operativo è divertente perché è interessante fare in modo che HARDWARE stampi " Hello World " inserendo i dati 1 byte alla volta in una porta I / O oscura o inserendoli in un indirizzo di memoria magica.

Ottieni un emulatore x86 e fai festa facendo in modo che un settore di avvio pronunci il tuo nome. È un piacere ridicolo.

Fondamentalmente ... il tuo computer può semplicemente eseguire il disco perché:

Il BIOS include quel dispositivo disco nell'ordine di avvio.

All'avvio, il BIOS esegue la scansione di tutti i dispositivi di avvio in ordine, come l'unità floppy, il disco rigido e il CD ROM. Ogni dispositivo accede al suo supporto e controlla una posizione codificata (in genere un settore, su un disco o dispositivo cd) per un'impronta digitale che identifica il supporto ed elenca la posizione su cui saltare sul disco (o supporto) dove iniziano le istruzioni. Il BIOS dice al dispositivo di spostare la testa (o qualsiasi altra cosa) nella posizione specificata sul supporto e di leggere un grosso pezzo di istruzioni. Il BIOS consegna queste istruzioni alla CPU.

La CPU esegue queste istruzioni. Nel tuo caso, queste istruzioni avviano il sistema operativo Ubuntu. Potrebbero anche essere istruzioni per fermare, o per aggiungere 10 + 20, ecc.

In genere, un sistema operativo si avvia prendendo una grande porzione di memoria (di nuovo, direttamente dalla CPU, poiché i comandi di libreria come 'GlobalAlloc' ecc. non sono disponibili in quanto forniti da ancora-da-essere- caricato-OS) e inizia a creare strutture per il sistema operativo stesso.

Un sistema operativo fornisce una serie di "funzionalità" per le applicazioni: gestione della memoria, file system, input / output, pianificazione delle attività, rete, gestione della grafica, accesso alle stampanti e così via. Questo è quello che sta facendo prima di "ottenere il controllo": creare / avviare tutti i servizi in modo che le applicazioni successive possano funzionare insieme, non calpestare la memoria dell'altra e avere una bella API per i servizi forniti dal sistema operativo.

Ogni 'funzionalità' fornita dal sistema operativo è un argomento di grandi dimensioni. Un sistema operativo li fornisce tutti quindi le applicazioni devono solo preoccuparsi di chiamare la libreria del sistema operativo corretta e il sistema operativo gestisce situazioni come se due programmi provassero a stampare contemporaneamente.

Ad esempio, senza il sistema operativo, ogni applicazione dovrebbe affrontare una situazione in cui un altro programma sta provando a stampare e 'fare qualcosa' come stampare comunque, o annullare l'altro lavoro, ecc. Invece, solo il sistema operativo ha per gestirlo, le applicazioni dicono semplicemente al sistema operativo "stampa questa roba" e il sistema operativo assicura che un'app venga stampata e tutte le altre app devono solo attendere fino al termine della prima o l'utente lo annulla.

Il minimo numero di byte per essere un sistema operativo non ha davvero senso, come un "sistema operativo". potrebbe implicare molte o pochissime funzionalità. Se tutto ciò che volevi era eseguire un programma da un CD, sarebbero pochi i byte. Tuttavia, questo non è un sistema operativo. Il compito di un sistema operativo è fornire servizi (li ho chiamati funzionalità) per consentire l'esecuzione di molti altri programmi e gestire l'accesso a tali servizi per i programmi. È difficile e più risorse condivise aggiungi (reti e wifi, masterizzatori CD, joystick e video iSight e doppi monitor, ecc. Ecc.) Più diventa difficile.

Uno dei più recenti progetti di sistemi operativi che ho visto che ha un serio sostegno è stato un progetto di ricerca sulla SM chiamato Singolarità , che è scritto interamente in C # .NET da zero.

Per avere un'idea di quanto lavoro richiede, ci sono 2 sviluppatori principali ma hanno fino a una dozzina di stagisti in un dato momento, e ci sono voluti ancora due anni prima che riuscissero persino a portare il sistema operativo a un punto in cui farebbe il boot e visualizzerebbe le immagini BMP (è come usano per fare le loro presentazioni). Ci è voluto molto più lavoro prima che potessero arrivare a un punto in cui c'era una riga di comando (come circa 4 anni).

Fondamentalmente, ci sono molti argomenti su cosa sia effettivamente un sistema operativo . Se tutti concordano su cosa sia un sistema operativo specifico (è solo il kernel? Tutto ciò che funziona in modalità kernel? È la parte shell del sistema operativo? X è parte del sistema operativo? Il browser Web è parte del sistema operativo?), La tua domanda è risposto! Altrimenti, non esiste una risposta specifica alla tua domanda.

Potresti ottenere il libro La progettazione e l'implementazione del sistema operativo FreeBSD per una risposta molto dettagliata. Puoi ottenerlo da Amazon o questo link al sito di FreeBSD.org sembra il libro come lo ricordo: testo del link

Non posso credere che questo non sia stato menzionato ... ma un libro classico per una panoramica della progettazione del sistema operativo è Sistemi operativi - Progettazione e implementazione scritto da Andrew S Tanenbaum, il creatore di MINIX. Molti esempi nel libro sono orientati direttamente anche su MINIX.

Se vuoi saperne di più, OS Dev è un ottimo punto di partenza. Soprattutto il wiki. Questo sito è pieno di informazioni così come gli sviluppatori che scrivono sistemi operativi personali per un piccolo progetto / hobby. È anche un'ottima risorsa di apprendimento, poiché ci sono molte persone nella stessa barca su OSDev che vogliono imparare cosa succede in un sistema operativo. Alla fine potresti anche provare tu stesso!

il sistema operativo (SO) è il livello di software che controlla l'hardware. Più semplice è l'hardware, più semplice sarà il sistema operativo e viceversa ;-)

se ai primi tempi dei microcomputer, si poteva adattare il sistema operativo a una ROM 16K e cablare la scheda madre per iniziare a eseguire le istruzioni del codice macchina all'inizio dello spazio degli indirizzi della ROM. Questo processo di "bootstrap" carica quindi il codice per i driver per gli altri dispositivi come la tastiera, il monitor, l'unità floppy, ecc., E in pochi secondi il computer verrà avviato e pronto per l'uso.

Oggigiorno ... stesso principio, ma hardware sempre più complesso ;-)

Oh, questo è divertente. Ho fatto tutto in un punto o nell'altro e ci sono stato per gran parte dell'evoluzione.

In generale, inizi a scrivere un nuovo sistema operativo avviando in piccolo. La cosa più semplice è un bootstrap loader, che è un piccolo pezzo di codice che estrae un pezzo di codice e lo esegue. C'era una volta, con i computer Nova o PDP, era possibile inserire il caricatore bootstrap attraverso il pannello frontale: è stato inserito il numero esadecimale delle istruzioni per numero esadecimale. Il caricatore di avvio legge un supporto in memoria e imposta il contatore del programma sull'indirizzo iniziale di quel codice.

Quel pezzo di codice carica di solito qualcos'altro, ma non è necessario: puoi scrivere un programma che dovrebbe essere eseguito sul bare metal. Questo tipo di programma fa qualcosa di utile da solo.

Un vero sistema operativo è più grande e ha più pezzi. è necessario caricare i programmi, metterli in memoria ed eseguirli; è necessario fornire il codice per eseguire gli IO Device; man mano che aumenta, è necessario gestire la memoria.

Se vuoi davvero imparare come funziona, trova Libri Xinu di Doug Comer e Andy Tannenbaum l'ultimo libro del sistema operativo su Minix .

Prova Come si avviano i computer , Il processo di avvio del kernel e altri articoli correlati dallo stesso blog per una breve panoramica di ciò che fa un computer all'avvio.

Che cosa fa un computer quando il suo avvio è fortemente dipendente (forse ovvio?) da il design della CPU e altro "materiale di basso livello"; quindi è un po 'difficile anticipare cosa fa il tuo computer all'avvio.

Bene, hai qualcosa che collega l'avvio del chip a un "bios", quindi a un sistema operativo, che di solito è un compito molto complicato svolto da molti servizi di codice.

Se VUOI REALMENTE saperne di più su questo, ti consiglio di leggere un libro ... sui microcontrollori, in particolare uno in cui crei un piccolo sistema operativo in c per un 8051 o simili .. o impari un assemblaggio x86 e crei un molto piccolo "sistema operativo bootloader".

Potresti dare un'occhiata a questa domanda .

Un sistema operativo è un programma, proprio come qualsiasi altra applicazione che scrivi. Lo scopo principale di questo programma è che ti permette di eseguire altri programmi. I sistemi operativi moderni sfruttano l'hardware moderno per garantire che i programmi non si scontrino tra loro.

Se sei interessato a scrivere il tuo sistema operativo, controlla qui la mia domanda:

Come iniziare nello sviluppo del sistema operativo

Ti chiedi quanti byte potresti mettere su disco ed eseguire comunque come sistema operativo ? La risposta dipende da cosa ti aspetti dal tuo sistema operativo, ma il più piccolo utile che conosco si adatta a 1,7 Megabyte. È Tom's Root Boot ed è un sistema operativo molto piccolo se piccolo con " salvataggio " applicazioni che si inserisce su un floppy disk . Ai tempi in cui ogni macchina aveva un'unità floppy e non tutte le macchine avevano un'unità CD-ROM, la usavo spesso.

La mia opinione è che è come la tua stessa vita. All'inizio, sai molto poco, quanto basta per andare d'accordo. Questo è simile a quello che fornisce il BIOS: sa abbastanza per cercare un'unità disco e leggere le informazioni. Poi impari un po 'di più quando vai alle elementari. È come se il settore di avvio venisse letto in memoria e ricevesse il controllo. Poi vai al liceo, che è come il caricamento del kernel del sistema operativo. Poi vai al college (driver e altre applicazioni.) Naturalmente, questo è il punto in cui sei responsabile di CRASH. HE HE.

In conclusione, i livelli di capacità sempre maggiore vengono caricati lentamente. Non c'è nulla di magico in un sistema operativo.

Leggere qui ti darà un'idea di ciò che è stato necessario per creare Linux https://netfiles.uiuc.edu/rhasan/linux/

Un altro sistema operativo davvero piccolo che si adatta a un disco è QNX (quando l'ho visto l'ultima volta tanto tempo fa, l'intero sistema operativo, con interfaccia GUI, browser web, accesso al disco e un web server integrato, si adattava a uno floppy drive).

Da allora non ne ho più sentito parlare, ma è un sistema operativo in tempo reale, quindi è progettato per essere molto veloce.

In realtà, alcune persone visitano un college di 4 anni per farsi un'idea approssimativa di questo.

Alla base, il sistema operativo è estremamente semplice. Ecco la guida per principianti a QUALI sistemi operativi di successo sono fatti per fare: 1. Gestire la CPU utilizzando lo scheduler che decide quale processo (istanza in esecuzione del programma) deve essere pianificato. 2. Gestire la memoria per decidere quali processi vengono utilizzati per la memorizzazione di istruzioni (codice) e dati (variabili). 3. Gestire le interfacce I / O come unità disco, allarmi, tastiera, mouse. Ora, oltre 3 requisiti generano la necessità che i processi comunichino (e non combattano!), Interagiscano con il mondo esterno, aiutino le applicazioni a fare ciò che vogliono fare. Per approfondire in COME lo fa, leggi il libro sui dinosauri :)

Quindi, puoi rendere il sistema operativo piccolo quanto vuoi purché riesca a gestire tutte le risorse hardware. All'avvio, il BIOS dice alla CPU di iniziare a leggere il bootloader (che carica la prima funzione del sistema operativo che risiede in un indirizzo fisso in memoria - qualcosa come main () del piccolo programma C). Quindi questo crea funzioni, processi e thread e avvia il big bang!

In primo luogo, leggendo e leggendo, cos'è il sistema operativo; quindi quali sono gli usi / tipi / natura / obiettivo / esigenze / dei diversi sistemi operativi. Alcuni dei collegamenti sono i seguenti; i principianti apprezzeranno questi collegamenti:

SO moderno - questo dà Idea sul sistema operativo generale.

Inizio del sistema operativo - questo fornisce le basi di ciò che serve davvero per REALIZZARE il sistema operativo, come possiamo farlo e come si può modificare un codice open source attuale del sistema operativo da solo.

Wiki OS - Dà un'idea dei diversi OS utilizzati in diversi campi e li utilizza (Oggetti / caratteristiche del sistema operativo.)

Vediamo in generale cosa contiene il sistema operativo (non il sofisticato Linux o Windows)

Il sistema operativo ha bisogno di una CPU e per scaricare un codice al suo interno è necessario un bootloader . Il sistema operativo deve avere gli obiettivi da compilare e tali obiettivi devono essere definiti in un wrapper chiamato Kernel Al suo interno potresti avere tempo di programmazione e ISR's (dipende dall'obiettivo e dal sistema operativo che devi realizzare)

Lo sviluppo del sistema operativo è complicato. Ci sono alcuni siti web come osdev o lowlevel.eu (tedesco) dedicati all'argomento. Ci sono anche alcuni libri, che altri hanno già menzionato.

Non posso fare a meno di fare riferimento anche a " Scrivi il tuo sistema operativo " serie di video su YouTube, visto che sono io quello che ce l'ha fatta :-)

Vedi https://www.youtube.com/playlist?list=PLHh55M_KqZMSP >

scroll top