|
|
|
|
Strumenti |
26-12-2009, 11:27 | #1 |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
[C/C++] Programmare un Sistema Operativo
[EDIT: Questa presentazione è un po' vecchia e non rispecchia gli sviluppi fatti (ce ne sono stati alcuni molto importanti), per i sorgenti aggiornati scorrere un po' in giù questo post.]
Salve a tutti ! Io e un mio amico stiamo scrivendo un kernel che dovrebbe essere compatibile a livello di API con Linux. Ovviamente non intendiamo sviluppare tutte le Api subito, ma almeno quelle base per poter avere almeno bash, poi ci sarà tempo per ampliare Lo stato attuale del Kernel è questo:
Il sistema di sviluppo è GNU/Linux (Ubuntu ma non è importante), con compilatore gcc, utility make e assemblatore nasm. Gli obiettivi per la versione 1.0 sono i seguenti:
Il kernel sarà di tipo "modulare": all' avvio il bootloader caricherà un kernel minimale che successivamente caricherà i moduli vari per gestire il sistema ( filesystem, video, network, ecc). TUTTI i moduli lavoreranno in User Mode, l'unico pezzo che sarà in kernel mode sarà un piccolo kernel (volevo evitare il termine "microkernel" per non generare confusione ), non accessibile direttamente dalle applicazioni, che verrà chiamato dai moduli sovrastanti per gestire operazioni privilegiate. Oltre a ciò gestirà il multitasking (quindi scheduler e quello che gli và dietro) e la gestione della memoria. Tutto il resto sarà in user mode, le chiamate di sistema non causeranno un switch perchè il gestore degli interrupt sarà anch'esso in user mode. Così si assicura una buona protezione. Tutto ciò sembra un microkernel, ma, una volta che i moduli sono stati caricati e gli indirizzi delle funzioni sono stati inseriti in apposite tabelle, diventa di fatto un kernel monolitico, solo che lavora in user mode; poi si può sempre attuare qualche modifica e farlo diventare una specie di microkernel "orientato alle procedure" (come tra l'altro è, in misura minore, il kernel linux, che ha dei punti dove può essere interrotto) La richiesta che faccio in questo forum è se qualcuno ha informazioni sull' hardware PC, tutorial, datasheet, pezzi di codice, esperienza diretta, per favore me lo faccia sapere, possibilmente qui sul forum cosicchè (è scritto giusto?) altri possano beneficiarne. Se qualcuno ha voglia di contribuire alla codifica, posso dargli un compito specifico da portare avanti. Spero di essere stato chiaro e di non essermi dilungato troppo Saluti! --- Download versione attuale: --- Pagina su SourceForge dove poter scaricare i sorgenti aggiornati e le immagini disco Versione 0.06: (in git corrisponde al branch cpp_conv) - Tradotta gran parte del codice in C++ - Nuovi sistemi per gestione dispositivi e interrupt orientati agli oggetti Versione 0.05: - Ho dimenticato di aggiornare il post e ora non ricordo più cosa ho fatto... Versione 0.04d3: - Allocatore delle memoria completato Versione 0.04d: - Migliorato gestione della memoria: - Paginazione funzionante - Allocatore di pagine funzionante anche sotto paginazione - Funzione per aggiungere pagine nuove allo spazio virtuale del kernel - Allocatore di blocchi di dimensione arbitraria (kmalloc) - Ora il kernel gira tutto in modalità paginata ! Versione 0.04c: - Migliorato il supporto alle modalità video VESA - Cominciata paginazione Versione 0.04b: - Sistemato supporto LFN della FAT12 - Inserita una sottospecie di shell Versione 0.04a: - Inserito supporto (incompleto) per VGA (non Vesa) 640x480x16 e 320x200x256 Versione 0.04: - Inserito supporto RamDisk - Inserito Device Manager - Cominciato il parsing della tabella Multiboot - Cominciato a gestire la modalità video VESA Versione 0.03a: - Implementato lettura da filesystem FAT12 Ultima modifica di Z80Fan : 24-01-2012 alle 23:51. Motivo: modifica titolo |
26-12-2009, 14:22 | #2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
|
Molto interessante, complimenti.
Se tutto gira in user mode ti risulterà quindi facile anche testare i vari moduli direttamente sul sistema di produzione. Bello... |
27-12-2009, 15:23 | #3 |
Senior Member
Iscritto dal: Jun 2005
Messaggi: 365
|
Bello, anzi bellissimo!
Se mai pubblicherete il sorgente ci giocherò un po' di sicuro. Non posso dirvi purtroppo "contribuirò allo sviluppo" perchè non ho tempo libero a sufficienza al momento per entrare in un progetto del genere, ma dalle funzionalità che hai descritto siete partiti bene |
28-12-2009, 13:50 | #4 |
Senior Member
Iscritto dal: Sep 2009
Città: Nel mondo dei sogni
Messaggi: 4125
|
Parteciperei volentieri nel tempo libero, ma le poche conoscenze di C che avevo sono chissà dove nel mio cervello
|
28-12-2009, 16:20 | #5 |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Aggiunto link per download
Ragazzi grazie per tutti i complimenti!
Ho aggiunto il link per scaricare la prima versione del kernel. Come è scritto nel README all'interno, è ancora sotto sviluppo e carente in molte parti, ma sono fiducioso nelle mie capacità Fatemi sapere cosa ne pensate! Bye Bye! |
28-12-2009, 19:27 | #6 |
Senior Member
Iscritto dal: Sep 2009
Città: Nel mondo dei sogni
Messaggi: 4125
|
Ma non avevi detto che era in C? A me sembra scritto in C++.
|
28-12-2009, 20:27 | #7 |
Senior Member
Iscritto dal: Nov 2006
Città: Andalo
Messaggi: 1038
|
Complimenti per il lavoro, specialmente le risposte agli errori con la parolaccia finale, fantastica!
__________________
WEB: www.botlab.it -- MOBO: X370PRO | CPU: Ryzen 1600 | VGA: GTX1070 |RAM: 16GBDDR4 | ALI: Seasonic 750w Gold | LCD: LG Flatron 24" | CASE: NZXT S340 Elite | NOTEBOOK: MacBook PRO | CELL: Iphone 11 | CONSOLE: Xbox360 | TRATTATIVE A BUON FINE: >10 |
28-12-2009, 20:38 | #8 |
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Ero partito come "no ancora un altro nabbo che vuole programmare il nuovo linux"
Ma invece vedo che avete messo su un bel progetto coi piedi per terra, molto interessante A capire qualcosa di system programming sarebbe stato bello aiutare... PS: ma non è un lavoro immane andare oltre la scrittina che lampeggia su schermo nero? |
28-12-2009, 20:56 | #9 |
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
chiamate DanieleC88!!!
|
29-12-2009, 00:56 | #10 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
|
29-12-2009, 08:18 | #11 | |||
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
Quote:
Quote:
Sicuramente ma sono fiducioso nelle nostre capacità e (semmai il progetto prenda piede) nella possibilità di interessare alcuni programmatori Linux. Se poi a nessuno interesserà, me lo terrò per me come sistemino da usare su computer scrausi |
|||
29-12-2009, 09:24 | #12 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Sottoscrivo il thread perchè voglio seguire la cosa.... mi interessa
|
29-12-2009, 09:29 | #13 |
Senior Member
Iscritto dal: Jul 2009
Messaggi: 1160
|
capisco a livello educativo fare una piccola prova.. per imparare.
ma poi sinceramente non condivido per nulla il "proseguire" negli sviluppi quando già esistono un milione di OS opensource che non aspettano altro che nuovi volenterosi programmatori
__________________
Web2.0 Guides And Tutorials SLR: Canon 6D ZOOM: Canon EF 24-105mm f/4L IS USM FISSI: - Canon EF 28mm f/1.8 USM - Canon EF 40mm f/2.8 STM - Canon EF 50mm f/1.4 USM - Canon EF 100mm f/2 USM - Canon EF 200mm f/2.8L USM II ALTRO: Canon 430 EX II |
29-12-2009, 11:51 | #14 | ||
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
Quote:
Ma la mia idea di proseguire nel progetto è data da molti miei pensieri nati sopratutto da questi punti: - Vedo sempre le cose in grande (grandissimo) - I sorgenti di Linux sono veramente complicati allo stato attuale. - Il kernel monolitico tutto in kernel mode è un'architettura vecchia, e con i vari moduli anche non-free (nVidia?), c'è il rischio di codice pericoloso. - Avevo molte idee di come si fosse potuto scrivere - Volevo fare in modo che Linux prendesse piede come OS, convincendo gli sviluppatori a mettersi d'accordo e creare degli standard che potessero veramente creare una totale compatibilità tra distro e una piattaforma uniforme su cui scrivere driver per incentivare anche gli sviluppatori di hardware (perchè senza driver non si và da nessuna parte) Mettendo tutto ciò assieme, ho pensato "un codice è meglio di 1000 parole (), perchè non comincio a scrivere del codice per dare un'idea agli sviluppatori veramente bravi?" L'idea finale è di creare un sistema operativo base, parecchio commentato e documentato, consistente in kernel, applicazioni di utilità, una shell e una primitiva interfaccia grafica, tutto senza eccessive funzionalità ma funzionante e con la base pronta, diciamo il "framework", e spedirlo a qualcuno di rilevante nella Linux Foundation (Torvalds?), per vedere se possa essere accettato. Questa è la mia visione. Non siamo più negli "anni della rivoluzione", una persona non può più rivoluzionare il mondo. Tutto ciò può rimanere un sogno di un ragazzo che programma nel tempo libero, o può diventare una realtà di decine, centinaia, migliaia, milioni di persone. A voi la scelta. (Tu mi dirai: "ma se loro sono programmatori veramente bravi, non ci avranno già pensato?" E io risponderò "Boh") (caspita che poeta , ma va là, programmiamo per divertirci! ) (Come vedi Tommo, l'idea di partenza era tutt'altro che con i piedi per terra ) PS: so che esistono altri os open source, sono partito con linux perchè è quello il mio target; è anche vero che molti altri os open source rimangono a un livello base di funzionalità, pochi sono veramente seri (Haiku?). Ultima modifica di Z80Fan : 29-12-2009 alle 12:55. Motivo: ps. |
||
29-12-2009, 12:40 | #15 | ||
Senior Member
Iscritto dal: Sep 2009
Città: Nel mondo dei sogni
Messaggi: 4125
|
Quote:
Quote:
|
||
29-12-2009, 12:54 | #16 |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
|
29-12-2009, 13:00 | #17 |
Senior Member
Iscritto dal: Sep 2009
Città: Nel mondo dei sogni
Messaggi: 4125
|
C'era un main?
Ho guardato solo la cartella fat, al più presto guarderò gli altri file. Di sicuro c'è che ora dovrò trovare il tempo per rinfrescare e incrementare le mie conoscenze di C, la cosa mi stuzzica non poco |
29-12-2009, 13:05 | #18 |
Member
Iscritto dal: Oct 2007
Messaggi: 250
|
Buone le idee e bellissimo progetto
|
29-12-2009, 13:09 | #19 |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
|
29-12-2009, 13:28 | #20 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:04.