| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  28-07-2007, 00:03 | #1 | 
| Senior Member Iscritto dal: Mar 2007 
					Messaggi: 7863
				 | 
				
				[c] compilazione a basso livello sistemi operativi
			 
		Essendo un sistema operativo un ' entita multistrato con diramazioni a livello molto basso fino alla comunicazione diretta con l' hardware,per quello che si puo dire su un sistema molto complicato oltre al lingiaggio macchina e al c oggi quali altri linguaggi si utilizzo per lo sviluppo di un SO.Quali ambienti di sviluppo si utilizzano e come avviene la compilazione e l' integrazioni di entità molto differenti.Mi incuriosce molto la compilazione di una struttura che poi dovrà essere la primaria sulla macchina.
		 | 
|   |   | 
|  01-08-2007, 11:07 | #2 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Dipende da che "livello" parti. Se hai già un sistema operativo compatibile con quello che vuoi compilare si tratta solo di andare ad utilizzare la libreria precompilata per quel dato sistema operativo. Se invece crei per la prima volta un sistema operativo, mettiamo di essere a livelli moooolto bassi, cioè sulla macchina non c'è niente, devi far uso di un altro sistema operativo e fare un cross compiling per la macchina ospite. Prima di tutto non puoi fare uso della libreria standard del C o del C++ per tutte quelle cose che accedono al sistema operativo. Quindi devi cominciare riscrivendoti delle routine di base che sfruttino inizialmente le routine messe a disposizione dal bios per permetterti di fare un minimo di debug visuale (in particolare output di testo). Quando si è arrivati a mettere la macchina ospite nello stato necessario per avviare il nostro sistema operativo (modalità del processore e della memoria desiderata) bisogna cominciare a scrivere le nostre routine di gestione delle interruzioni. In questo modo si creano le fondamenta sulle quali si baseranno tutte le system call del nostro sistema operativo. Le operazione basilari riguardano principalmente l'allocazione e la deallocazione di memoria e l'output. In questo modo sarà possibile andare a cominciare a creare un kernel base del sistema operativo. Successivamente si aggiungeranno man mano le altre routine di gestione delle interruzioni insieme ai rispettivi driver di periferica. Ad esempio la routine di gestione dell'input da tastiera dovrà appoggiarsi al driver della tastiera. Si va avanti così, ingrandendo sempre più il sistema. Inizialmente il sistema sarà completamente caricato in memoria in maniera monolitica dal disco di avvio, poi verrà implementato un file system (almeno inizialmente il più semplice possibile, magari mappato in memoria) ed a questo punto sarà possibile implementare una shell. | 
|   |   | 
|  01-08-2007, 12:33 | #3 | |||
| Bannato Iscritto dal: Feb 2005 Città: Roma 
					Messaggi: 7029
				 | Quote: 
 Quote: 
 Quote: 
 l'unica piccola eccezione a ciò è la compilazione del bootloader: il bootloader è costituito essenzialmente da due parti, un piccolo pezzo di codice eseguibile in formato binario puro (ci sono le istruzioni di assembly e basta) ed un altro eseguibile più grosso che può essere in vari formati a seconda delle scelte progettuali di chi scrive il bootloader. il primo pezzo altro non è che quello che va a finire direttamente nei primi settori della partizione su cui è installato il sistema operativo, e deve essere in formato binario puro perché la CPU al caricamento lo legge in RAM e lo esegue così com'è. tuttavia programmare in quelle condizioni (cioè in assembly in modalità reale a 16 bit) è estremamente scomodo, e di conseguenza questa prima parte del bootloader deve fare il meno possibile: si occupa di entrare in modalità protetta a 32 bit, di organizzare un memory model decente, di leggere dal disco il resto del bootloader vero e proprio, e di lanciare quello. il resto del bootloader è più comodo da programmare perché a quel punto può essere scritto tranquillamente in C a 32 bit. su Windows il bootloader si trova nel file NTLDR (senza estensione), il quale deve essere localizzato alla radice della partizione in cui è installato il sistema (tipicamente il file è C:\NTLDR, per vederlo in Esplora Risorse devi impostare l'opzione per visualizzare i files nascosti e i files di sistema). | |||
|   |   | 
|  01-08-2007, 12:38 | #4 | 
| Bannato Iscritto dal: Feb 2005 Città: Roma 
					Messaggi: 7029
				 | 
		
 aggiungo: in effetti non ci sono solo .exe e .dll, come estensioni puoi trovare anche .sys (estensione tipica per i drivers), .ocx (gli ActiveX), ed .scr (gli screensavers). ma il succo del discorso non cambia perché exe, dll, sys e quant'altro sono tutti esattamente la stessa cosa: sono immagini eseguibili, e sono memorizzate nello stesso identico formato (a meno di un unico bit nel'header che dice se quell'eseguibile può essere lanciato in maniera diretta, come gli exe e come gli scr).
		 | 
|   |   | 
|  01-08-2007, 12:40 | #5 | 
| Senior Member Iscritto dal: Nov 2005 
					Messaggi: 1868
				 | 
		
 Se vuoi "toccare con mano" buttati su linux, puoi ricompilarlo, modificarlo, studiarlo come ti pare.
		 
				__________________ [ W.S. ] | 
|   |   | 
|  01-08-2007, 13:21 | #6 | |
| Senior Member Iscritto dal: May 2003 Città: Napoli 
					Messaggi: 1344
				 | Quote: 
   | |
|   |   | 
|  02-08-2007, 08:33 | #7 | 
| Senior Member Iscritto dal: Nov 2005 Città: Texas 
					Messaggi: 1722
				 | 
		Il salto di qualita' e' stato fatto, appunto, introducendo i linguaggi ad alto livello per la scrittura del sistema operativo e riducendo le parti scritte in assembler al minimo indispensabile. Oltre ai linguaggi gia' citati, discreti successi sono stati ottenuti utilizzando i linguaggi PASCAL e JAVA. 
				__________________ In God we trust; all others bring data | 
|   |   | 
|  02-08-2007, 08:35 | #8 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | |
|   |   | 
|  02-08-2007, 08:38 | #9 | 
| Senior Member Iscritto dal: Nov 2005 Città: Texas 
					Messaggi: 1722
				 | 
		
So di molti tentativi (riusciti), anche da Apple e Sun stessa. Ho letto diversi articoli in proposito. Se ho tempo, posto una lista di cosa si puo' trovare in giro...
		 
				__________________ In God we trust; all others bring data | 
|   |   | 
|  02-08-2007, 08:47 | #10 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Ok    | 
|   |   | 
|  02-08-2007, 09:02 | #11 | |
| Senior Member Iscritto dal: Jul 2002 Città: Milano 
					Messaggi: 19148
				 | Quote: 
 http://www.tuxjournal.net/?p=15 | |
|   |   | 
|  02-08-2007, 09:12 | #12 | |
| Senior Member Iscritto dal: Nov 2005 Città: Texas 
					Messaggi: 1722
				 | Quote: 
    . Comunque posso riportare anche http://en.wikipedia.org/wiki/Object-...erating_system che mi fa venire in mente che abbiamo dimenticato di citare, fra i linguaggi, l'Objective-C, che so essere molto usato da un assiduo (e simpatico) frequentatore di questo forum   
				__________________ In God we trust; all others bring data | |
|   |   | 
|  02-08-2007, 09:14 | #13 | |
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | Quote: 
 Comunque mi sembra che non si riesca in ogni caso ad usare solo Java e assembly, ma serve sempre anche un terzo linguaggio, virtual machine a parte ovviamente (questa deve essere scritta sempre in C o C++). Ultima modifica di cionci : 02-08-2007 alle 09:16. | |
|   |   | 
|  02-08-2007, 11:23 | #14 | |
| Senior Member Iscritto dal: Oct 2005 
					Messaggi: 3306
				 | Quote: 
 Mi sono sempre chiesto come si potrebbe fare a scrivere la JVM in Java. | |
|   |   | 
|  02-08-2007, 12:22 | #15 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | |
|   |   | 
|  02-08-2007, 12:25 | #16 | |
| Senior Member Iscritto dal: Jul 2002 Città: Milano 
					Messaggi: 19148
				 | Quote: 
   | |
|   |   | 
|  02-08-2007, 15:22 | #17 | 
| Senior Member Iscritto dal: Oct 2005 
					Messaggi: 3306
				 | 
		
Per scrivere la JVM in Java dovresti avere la possibilità all'interno del linguaggio di gestire direttamente la (de)allocazione della memoria, l'algoritmo di GC ad un certo punto dovrà fare una "delete" che non è una operazione contemplata da Java.
		 | 
|   |   | 
|  02-08-2007, 15:35 | #18 | |
| Senior Member Iscritto dal: Jul 2002 Città: Milano 
					Messaggi: 19148
				 | Quote: 
 ma poi a che pro scrivere una JVM in Java? come prossimo step propongo un sistema operativo in Perl  (qualcuno pare ci abbia provato) | |
|   |   | 
|  02-08-2007, 15:37 | #19 | 
| Bannato Iscritto dal: Feb 2005 Città: Roma 
					Messaggi: 7029
				 | 
		
 o per meglio dire, sarebbe un'operazione che verrebbe affidata al garbage collector del linguaggio, il quale di conseguenza dovrebbe essere implementato automaticamente dal compilatore quando genera il codice eseguibile per la macchina. troppo complicato, è molto meglio realizzare una virtual machine in C++ e poi scrivere tutto il resto in Java.
		 | 
|   |   | 
|  02-08-2007, 16:01 | #20 | |
| Senior Member Iscritto dal: Oct 2005 
					Messaggi: 3306
				 | Quote: 
 Tutto perchè era stato postato di sistemi operativi scritti in Java, in realtà sono OS nel cui kernel è integrata una JVM ed esguono programmi Java. | |
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 21:27.









 
		 
		 
		 
		




 
 






 
  
 



 
                        
                        










