2010-01-20 21 views
7

Mi chiedo solo, possiamo eseguire un programma su una macchina senza un sistema operativo?È possibile eseguire il software nella macchina bare metal?

Inoltre, ho sentito che il kernel di Linux è scritto in linguaggio C e un kernel viene eseguito durante l'avvio, quindi mi chiedo solo come un computer capisce la lingua senza prima compilare?

+0

Non c'è nulla di nudo in una macchina che può avviare Linux o Windows. Ha bisogno di un BIOS. –

+1

@nobugz: cosa ti fa pensare che il BIOS * non sia * "software"? Voglio dire, la maggior parte dei chip del BIOS sono flasibili, quindi posso riscriverlo se voglio davvero ... – dmckee

+0

Questo è stato il mio punto. L'opposto di "nudo". –

risposta

8

Da Wikipedia:

Quando un computer viene prima acceso, esso non dispone di un sistema operativo nella ROM o RAM. Il computer deve inizialmente eseguire un piccolo programma memorizzato nella ROM insieme al minimo indispensabile di dati necessari per accedere ai dispositivi non volatili da cui i programmi e i dati del sistema operativo vengono caricati nella RAM. Il piccolo programma che avvia questa sequenza di caricamento nella RAM, è noto come bootstrap loader, bootstrap o boot loader. L'unico compito di questo programma di caricamento del caricatore di piccole dimensioni è caricare altri dati e programmi che vengono quindi eseguiti dalla RAM.

Il computer è in grado di comprendere il kernel di Linux perché è già stato compilato e memorizzato (solitamente) su disco. Il bootloader fornisce al computer abbastanza funzionalità per caricare il kernel precompilato in memoria.

Non è necessario caricare un intero sistema operativo per eseguire un programma su un computer, è possibile scrivere un bootloader per avviare un programma che è stato compilato. Non avresti accesso a nessuna delle chiamate del sistema operativo che semplificano la vita dei programmatori.

+3

Il bootloader * è * "software". – dmckee

7

il kernel linux potrebbe essere scritto in C. È ancora compilato in machinecode. Ed è questo codice macchina che viene eseguito durante l'avvio

È anche possibile scrivere software eseguito durante l'avvio. In questo modo puoi creare il tuo sistema operativo personalizzato o creare il tuo software personalizzato che può essere eseguito senza un sistema operativo direttamente. Fai attenzione, però, che un sistema operativo ti offre molte funzionalità che dovrai realizzare da solo. Cose come il supporto del driver, le routine di I/O del disco, gli stack di rete, il multitasking e la gestione della memoria che dovrai fare da solo.

Infine: non penso che alla gente non piaccia molto se devono riavviare la macchina per eseguire il software. Quindi andrei con la scrittura di un sistema operativo ... rende il live più facile per te e per l'utente.

+0

Gli utenti potrebbero utilizzare la virtualizzazione (e in effetti molti sostenitori del DRM sono sedotti dall'idea di non fare affidamento sul sistema operativo host - l'iniziativa "trusted computing"). –

+0

Ma ovviamente non ci si può assolutamente fidare dell'hardware ... DRM non è possibile. –

+1

Quindi, questo significa che ogni sistema operativo come Windows è un software ?? Allora come era il giorno prima che il sistema operativo fosse creato? E un bootloader deve essere scritto in linguaggio di basso livello assembly ?? – caramel1995

9

In breve, sì.

Linux è ancora un programma software, in codice macchina, eseguito su una macchina bare metal. Mentre è possibile eseguire un programma software senza un sistema operativo, il programma dovrà implementare TUTTO il codice utilizzato per comunicare vari tipi di hardware in un computer a vari livelli, ad es. emettere dati su un display, interpretare input da una tastiera/mouse/scheda di rete, ecc. (Alcuni elementi di livello molto basso sono implementati dal firmware nei componenti del computer, ma il resto del programma dovrà essere implementato). Ciò rende molto laborioso e difficile per te scrivere qualcosa che gira interamente senza un sistema operativo.

7

Sì, ed è fatto oggi per piccoli microcontrollori con pochi KB di memoria.

Il programma è tipicamente scritto in C e compilati su qualche altro computer (che si chiama cross compilazione) e poi caricato come dati binari nella memoria flash del controllore.

3

Che cos'è un sistema operativo se non il software è in esecuzione su una macchina "nuda"? Voodoo?XD

+5

Non conosco il voodoo, ma Windows * sicuramente * fa qualche negromanzia da qualche parte lungo la linea. –

1

Basta guardare qualsiasi console di gioco prima di quelle a 32 bit. Quasi tutti mancavano del tutto il codice di avvio e si avviavano semplicemente direttamente dalla cartuccia inserita.

+0

Correzione leggera: mentre alcune console non avevano alcun tipo di ROM interna, inclusa la più brillante console di gioco di tutti i tempi (l'Atari 2600), non è esatto dire che "quasi tutti" lo hanno fatto. Intellivision, Odyssey2, Bally Astrocade e Atari 7800 hanno preceduto l'era a 32 bit e avevano una ROM interna di avvio (tutti iniziano ad eseguire il codice dalla ROM interna, anche se alcuni saltano nello spazio della cartuccia prima di confermare che esiste una cartuccia) – supercat

1

1: sicuro. Non hai davvero bisogno di un sistema operativo solo per masterizzare alcuni cicli.

Potrebbe essere necessario un qualche tipo di supporto del sistema operativo se si desidera caricare o archiviare i file o dati, gestire ingresso o di uscita, ma questo può essere fatto anche chiamare le funzioni del BIOS direttamente: chiave di lettura da tastiera, scrivere a qualche schermo o LED o interfaccia seriale. Solo quando si desidera eseguire più programmi o gestire interrupt dall'esterno, risorse in conflitto o simili, quindi si avrà un disperato bisogno di un sistema operativo.

2nd: Il kernel viene compilato su codice macchina, che viene eseguito durante l'avvio. Non c'è il C coinvolto durante l'esecuzione di un kernel. C aiuta solo a scrivere un kernel o qualsiasi programma che dovrebbe essere eseguito, se nel kernel o "bare metal".

0

in teoria, è possibile creare il bootloader utilizzando l'editor esadecimale su un'altra macchina.