Creare Sistema Operativo

Stato
Discussione chiusa ad ulteriori risposte.

Gio.Pan

Nuovo Utente
5
1
CPU
Intel Core i5-5200U Quad-Core 2.20GHz
HDD
500gb
RAM
8GB DDDR3
GPU
Intel HD Graphics 5500, NVIDIA GEFORCE 920MX
Audio
Conexant SmartAudio HD
Periferiche
USB, Wi-Fi
OS
Windows 10 PRO
Salve vorrei creare un mio sistema operativo, ma non con siti (Tipo SUSESTUDIO), ma proprio programmando. Io ho buone conoscenze del C#, Java, C++, HTML e javascript. Ho provato a seguire forum, tutorial etc. provando ad imparare un po' di Assembly però quando vado a compilare con nasm mi da errore. Quindi come devo fare? Che linguaggi devo imparare?
 

Hobet

Utente Attivo
609
222
CPU
i5 6600k
Dissipatore
AIO H100
Scheda Madre
ASUS z170 Deluxe
HDD
1 WD Blue 1 TB; evo 850 500gb
RAM
Vengeance 4x4
GPU
GTX 1070ti MSI
Audio
Nope
Monitor
MG278Q
Case
750D Corsair
Net
Fastweb 200/30
OS
PucyBuntu
Salve vorrei creare un mio sistema operativo, ma non con siti (Tipo SUSESTUDIO), ma proprio programmando. Io ho buone conoscenze del C#, Java, C++, HTML e javascript. Ho provato a seguire forum, tutorial etc. provando ad imparare un po' di Assembly però quando vado a compilare con nasm mi da errore. Quindi come devo fare? Che linguaggi devo imparare?

https://www.tomshw.it/forum/threads...-sistema-operativo-sarà-il-mio-futuro.345398/

Possiamo chiudere ora.
 

movlw

Nuovo Utente
32
6
CPU
AMD A4 5300
Dissipatore
Default
Scheda Madre
AsRock DG3+
HDD
Toshiba 500GB
RAM
Kingstone 8GB DDR3
GPU
APU HD7480D
Monitor
Benq FP71G+
PSU
ITEK
OS
Windows 10 64bit
:asd::asd:
Una risposta molto semplice: non puoi. Non hai nemmeno una vaga idea di cosa signfichi sviluppare un software, figuriamoci un sistema operativo! Sviluppare un OS non è di certo un hobby per ragazzini annoiati, bensì il compito affidato ad ingegneri del software, analisti, programmatori, logici senior al culmine della carriera con oltre 30 anni di esperienza alle spalle. E anche nel caso in cui decidessi di partire con lo studio dell'elettronica digitale, scordati i tutorial di idioti che trovi in giro per la rete e le guide ridicole di siti come html.it. Per studiare si comprano manuali ottimi e ci si fa aiutare dai migliori, ossia dai suddetti informatici senior.
 

Hobet

Utente Attivo
609
222
CPU
i5 6600k
Dissipatore
AIO H100
Scheda Madre
ASUS z170 Deluxe
HDD
1 WD Blue 1 TB; evo 850 500gb
RAM
Vengeance 4x4
GPU
GTX 1070ti MSI
Audio
Nope
Monitor
MG278Q
Case
750D Corsair
Net
Fastweb 200/30
OS
PucyBuntu
Avevo già guardato quell'articolo ma non c'è nessuna informazione, comunque grazie.

Era un modo per dirti che stai volando troppo alto. Capisco che non se capisci nulla dal fatto che lo chiedi su un forum, cioè se eri esperto ok ma da ciò si deduce che non lo sei dunque è un post inutile.
 

Gio.Pan

Nuovo Utente
5
1
CPU
Intel Core i5-5200U Quad-Core 2.20GHz
HDD
500gb
RAM
8GB DDDR3
GPU
Intel HD Graphics 5500, NVIDIA GEFORCE 920MX
Audio
Conexant SmartAudio HD
Periferiche
USB, Wi-Fi
OS
Windows 10 PRO
:asd::asd:
Una risposta molto semplice: non puoi. Non hai nemmeno una vaga idea di cosa signfichi sviluppare un software, figuriamoci un sistema operativo! Sviluppare un OS non è di certo un hobby per ragazzini annoiati, bensì il compito affidato ad ingegneri del software, analisti, programmatori, logici senior al culmine della carriera con oltre 30 anni di esperienza alle spalle. E anche nel caso in cui decidessi di partire con lo studio dell'elettronica digitale, scordati i tutorial di idioti che trovi in giro per la rete e le guide ridicole di siti come html.it. Per studiare si comprano manuali ottimi e ci si fa aiutare dai migliori, ossia dai suddetti informatici senior.

Da quando ho 22 anni che mi sono comprato il mio primo computer. Mi sono comprato un computer con MS-DOS e non mi sono fermato lì, ho continuato mi sono anche creato un sito web in HTML e CSS e javascript (http://www.softwarefos.altervista.org) e li ci pubblico tutti i miei programmi che creo. Purtroppo ho ricevuto un attacco DDOS e ho perso tutto ma ho rifatto il sito e ora sto per ripubblicare il mio primo programma e comunque a casa ho questi "manuali" di C#, C++, VB.NET e altri. E so cosa significa sviluppare un software più che altro credo che tu non sappia cosa significa programmare. Pensa prima di scrivere l'hai scritto te che bisogna avere minimo 30 anni di esperienza e tu ne hai ancora 22 quindi. Questo non è un insulto o qualcosa del genere sto cercando di dirti di pensare prima di scrivere
 
Ultima modifica:
  • Mi piace
Reazioni: Andreagamer1999

cdtux

Utente Èlite
1,829
911
CPU
I7 3770
Scheda Madre
Asrock Z77 Extreme 4
HDD
Samsung 850 pro 250GB
RAM
Corsair Vengeance LP 16GB
GPU
Gigabyte GTX1060 6GB
Monitor
Dell U2412M
PSU
Seasonic Focus Plus 650
Case
Corsair Graphite 760T
OS
Debian / Ubuntu
Il linguaggio di programmazione è l'ultima cosa che dovrai guardare.
Un OS è un progetto mastodontico per una sola persona. Ad esempio il SOLO kernel linux ha orientativamente 16MILIONI di righe di codice scritte in vari linguaggi (assembly, c, xml, ecc...). Al kernel poi devi aggiungere un'altra marea di altre cose (interfaccia grafica, ecc..).

Per scrivere un kernel (che è la base di un OS) decente, dovesti prima conoscere/approfondire le varie architetture. A tal proposito di consiglio di comprare questo (non l'ho ancora studiato per bene, ma dando un'occhiata veloce sembra molto ben fatto).
Ti consiglio inoltre di dare un'occhiata anche a questo (che dicono tutti sia ottimo).

Sicuramente poi ci sarà una marea di altre cose da sapere.

Per curiosità, che tipologia di kernel pensavi di scrivere??
 

movlw

Nuovo Utente
32
6
CPU
AMD A4 5300
Dissipatore
Default
Scheda Madre
AsRock DG3+
HDD
Toshiba 500GB
RAM
Kingstone 8GB DDR3
GPU
APU HD7480D
Monitor
Benq FP71G+
PSU
ITEK
OS
Windows 10 64bit
Da quando ho 22 anni che mi sono comprato il mio primo computer. Mi sono comprato un computer con MS-DOS e non mi sono fermato lì, ho continuato mi sono anche creato un sito web in HTML e CSS e javascript (http://www.softwarefos.altervista.org) e li ci pubblico tutti i miei programmi che creo. Purtroppo ho ricevuto un attacco DDOS e ho perso tutto ma ho rifatto il sito e ora sto per ripubblicare il mio primo programma e comunque a casa ho questi "manuali" di C#, C++, VB.NET e altri. E so cosa significa sviluppare un software più che altro credo che tu non sappia cosa significa programmare. Pensa prima di scrivere l'hai scritto te che bisogna avere minimo 30 anni di esperienza e tu ne hai ancora 22 quindi. Questo non è un insulto o qualcosa del genere sto cercando di dirti di pensare prima di scrivere
Io so benissimo cosa significhi programmare e soprattutto sviluppare un software, dato che è quello che studio insieme alla progettazione di hardware. Di certo non devo dimostrare nulla a nessuno, né tantomeno sbandierare in giro cosa so fare e cosa non so fare. Ho 22 anni, non ho 30 anni di esperienza, ma seguo un percorso di studi strutturato, organizzato e soprattutto non improvvisato. Piuttosto che perdere tempo inutilmente a ribattere e tentare di mostrare le tue presunte conoscenze ridotte, io al tuo posto, umilmente, comincerei a studiare seriamente tutto ciò che viene prima di poter comprendere il funzionamento di un sistema operativo, se veramente ti interessa.
Comincia col prendere qualche manuale di elettronica di base e studiare le leggi che stanno alla base dei circuiti elettrici. Poi studia le porte le logiche, l'aritmetica booleana, le mappe di Karnaugh, metodo di Quin-McCluskey, multiplexer, demultiplexer, encoder, decoder, flip flop di ogni tipo, le memorie RAM, ROM, PAL, VHDL/Verilog, FPGA, ASIC etc Poi dovresti imparare l'assembly di qualche MCU semplice come un qualsiasi PIC 16FXXX e progettare sistemi embedded semplici senza troppe pretese. In seguito devi studiare gli algoritmi e le strutture dati, l'ingegneria del software, qualche metodo formale leggero (ossia non quelli adoperati per i sistemi embedded safety-critical) di specifica, il linguaggio C. Nel frattempo dovresti proseguire con lo studio delle architetture dei calcolatori e relativo set di istruzioni, imparare che non esiste solo la solita noiosa architettura Intel x86, ma che ci sono anche architetture come Alpha DEC, MIPS, PowerPc, ARM,Luna etc etc Una volta completata tutta questa fase potrai studiare i sistemi operativi sui testi sacri come i due libri di Tanenbaum e il Silberschatz. Successivamente dovrai dilettarti nello scrivere driver e demoni per Minix, Windows, Linux, Mac, i vari *BSD e QNX, seguendo al contempo lo sviluppo (in sola lettura ovviamente) di qualche progetto open source valido come OpenBSD. Sopravvissuto a tutto questo i linguaggini ridicoli che conosci sembreranno una barzelletta e potrai incominciare a studiare argomenti avanzati senza problemi. Queste non sono nient'altro che le basi per poter pensare in futuro, a fine carriera, di poter partecipare allo sviluppo di un qualche sistema operativo.
 
  • Mi piace
Reazioni: jax29

Fenix27

Utente Attivo
863
220
Perchè creare un nuovo sistema operativo, quale esigenza hai ?
Ricordiamo che i vari O.S che si sono formati negli anni sono stati creati per non dover imparare come funzionasse ogni computer.
Mi spiego meglio: all'epoca ogni computer aveva un suo sistema operativo e quindi essendoci moltissimi computer e di conseguenza moltissimi O.S una persona non era in grado di lavorare con tutti i computer, quindi una persona che lavorava su un computer non era in grado di lavorare su un altro computer, appunto perchè gli O.S erano diversi.
Quindi si ebbe un'idea di creare un O.S comune per tutti e in seguito questo O.S doveva essere solo installato su una macchina.
Facendo così aumentavano le applicazioni per quel O.S e aumentava il numero di persone che era in grado di saperlo usare e riparare.
Inoltre c'era un solo codice da gestire che poi si sarebbe automaticamente adattato alla macchina. Prima erano le persone che dovevano adattarsi ad ogni O.S (ad ogni codice).
Prima di programmare un O.S ti consiglio di imparare come funziona un O.S, come funziona un computer (quindi la parte hardware: elettronica), come far interagire l'O.S con l'hardware e come interagire tra l'utente e la macchina (O.S + hardware).
E diciamocelo, imparare come funziona un O.S è dura, molto dura.
Pensa solo al processore, tu non immagini quante cose ci siano dietro ad un processore. Prova a imparare l'architettura dei processori x8086 giusto per farti un'idea di come funziona una semplice somma tra due numeri. Conoscere perfettamente un'architettura non è una cosa da poco, figuriamoci svilupparne un'altra.
Inoltre è molto importante avere pure una squadra, non potrai gestire un progetto come questo da solo.
 
Ultima modifica:

pabloski

Utente Èlite
2,868
916
Salve vorrei creare un mio sistema operativo

Lavoro complesso ma non impossibile.

ma non con siti (Tipo SUSESTUDIO)

Che ti portano completamente fuori strada. SuSEStudio e' un servizio che ti permette di creare una distribuzione di SuSE Linux personalizzata. A questo proposito ti sarebbe utile dare un'occhiata al concetto di distribuzione, perche' ti serve per capire cos'e' un sistema operativo, a quali funzioni assolve e quali componenti lo compongono.

In parole povere se un po' in alto mare, cioe' ti mancano le basi concettuali. Il linguaggio lascialo perdere, perche' veramente e' l'ultima cosa. Negli anni ho visto sistemi operativi ( o meglio kernel, anche questo termine e' bene cercarlo e comprenderne il significato ) scritti in C, C++, Java, C#, Javascript, Pascal, D, Rust e un'altra dozzina di linguaggi.

Ho provato a seguire forum, tutorial etc. provando ad imparare un po' di Assembly però quando vado a compilare con nasm mi da errore. Quindi come devo fare? Che linguaggi devo imparare?

Primo problema, ovvero i tutorial e i forum. C'e' un unico forum con wiki che ti consiglio se vuoi fare sul serio ed e' questo http://wiki.osdev.org/Main_Page

E' in inglese, lingua che DEVI conoscere se vuoi avventurarti in quest'impresa.

Terminata la premessa, posso dirti che l'assembly c'entra ( e infatti qualsiasi kernel ha un minimo di codice scritto in assembly ), in quanto e' assolutamente necessario per il setup di base della macchina durante il bootstrap ( passaggio a modalita' protetta/estesa per esempio, IDT, GDT, ecc... ). Il grosso problema che hai allo stato attuale e' la visione astratta e di alto livello che hai dei linguaggi. Da quanto leggo mi pare di capire che ti sfugge il ruolo dei compilatori/interpreti/linker nello stack software, ovvero in cosa e come viene trasformato il codice che scrivi in Javascript, C, ecc... Capire questi passaggi e' fondamentale, perche' moltissimi linguaggi di alto livello fanno girare il tuo programma sopra un ambiente di runtime preparato ad hoc, che non avrai a disposizione durante la creazione del tuo kernel. Se per esempio volessi usare Javascript, dovresti prima creare tale ambiente e su questo far girare il tuo codice Javascript.

E questa e' la parte pratica. Poi c'e' la parte teorica, quella che si puo' studiare sui libri di Tanenbaum, Silberschatz, Stallings, ecc... Non e' strettamente necessario conoscere la parte teorica, non all'inizio almeno. Ma non conoscerla implica creare un sistema operativo mediocre, che magari diventa non portabile, non espandibile, fa girare i programmi da schifo, ha prestazioni orrende e altre amenita'.

C'e' un ulteriore elemento nell'equazione, ovvero l'architettura di CPU/computer per la quale si sta realizzando il sistema. Non puoi ovviamente pretendere di creare un sistema operativo senza conoscere a menadito tutte le intercapedini dell'architettura di riferimento ( x86 in genere ). Insomma devi studiarti un libro come questo https://www.safaribooksonline.com/library/view/introduction-to-80x86/9780763772239/

Se vuoi puoi cominciare a dare un'occhiata al sito che ho indicato, li' troverai piu' o meno gli stessi consigli che ho scritto qui, con in piu' una serie di informazioni tecniche ed articoli utili.

Ma imho dovresti seguire questa scaletta:

1. studiarti l'architettura x86 ( non perche' e' obbligatorio, ma perche' e' quella usata in tutti i PC del mondo )
2. il punto 1 ti aiutera' a capire ( intuire almeno ) il rapporto che c'e' tra linguaggi di alto livello come il Javascript e la CPU ( la storia dell'ambiente di runtime, interprete, compilatore, ecc... )
3. studiarti questo libro sui linker https://www.amazon.com/Linkers-Kaufmann-Software-Engineering-Programming/dp/1558604960

dopo i primi 3 punti, il funzionamento del computer e del suo software dovrebbe aver smesso di sembrare magici

4. creare programmi, possibilmente in assembly ma non solo, che fanno cose a basso livello, tipo un bootloader, un programma che stampa una stringa ma al boot ( cioe' senza avere sotto un sistema operativo e una libc ), un programma che manipola i registri di una periferica ( magari la scheda grafica )
5. dare almeno un'occhiata alla teoria, perche' altrimenti verrebbe fuori solo un mostro
6. dai un'occhiata al codice di qualche sistema operativo open
7. puoi procedere con la progettazione dell'architettura del tuo kernel

per il punto 6 ti possono essere utili questi link

https://github.com/CosmosOS/Cosmos
http://www.redox-os.org/
http://jnode.org/
http://mikeos.sourceforge.net/

il primo e il terzo sono utili in quanto realizzati in C# e Java rispettivamente e servono per capire quel concetto di cui scrivevo sopra, cioe' cosa bisogna fare per poter creare un ambiente di runtime adatto a scrivere un kernel in questi linguaggi ( suggerimento: non e' semplice come in C )

il secondo e' scritto in Rust, un linguaggio "sicuro", di nuova concezione, ma che non necessita degli ambaradan degli altri due

l'ultimo e' un sistema operativo scritto apposta per essere studiabile, cioe' il codice e' semplice, scritto bene, ben commentato, adatto proprio a chi deve imparare

ce ne sono altri in verita', per esempio Minix, ma lascio a te il compito di scoprirli qualora dovessero servirti
 
  • Mi piace
Reazioni: cdtux

Nico911

Utente Attivo
192
13
Guarda mi pare di intuire che potresti essere uno studente di ingegneria informatica, se si non so a che punta tu stia(probabilmente visto che hai citato Verilog flipflop ecc.. hai fatto reti informatiche)
Se ci ho preso imparerai a creare un sistema operativo al corso di Calcolatori elettronici, ma lungi dal poterlo creare effettivamente, avrai le conoscenze per analizzarlo e progettarlo modificarlo ma non di scriverlo da zero per far quello ti serve un lavoro mastodontico fai conto creare un so costa sui 13 miliardi(non sono sicuro e dovrei ricontrollare ma mi pare sia il costo di linux) e anni di lavoro di team di informatici.(per uno didattico molto meno ovviamente ammesso che lo vuoi far girare in un ambiente simulato come virtualbox)
Se non mi credi e ti vuoi cimentare in questa impresa ti dico bastano due linguaggi in linea generale Assembly e C/C++. Da questo devi dimenticarti il concetto di programma precaricato(.exe per capirci) e tornare agli albori dell'informatica con un processore che esegue istruzioni partendo da un bootstrap, innanzitutto dovrai creare in assembly un driver per caricare le informazioni del sistema dal disco rigido(il come dovrai vederlo te, ogni disco può avere impostazioni diverse per il pcie) caricato tuo sistema in memoria il driver/loader lo metterà in esecuzione con una jump all'indirizzo iniziale del programma che hai caricato. A quel punto hai tu il controllo, il tuo programma gira sul PC. A quel punto devi sviluppare tutto, dovrai scrivere i driver per ogni dispositivo che usi(tastiera, mouse, schermo, internet, ogni driver è dipendente da cosa usi)
E sviluppare le componenti del sistema che ti interessano(memoria virtuale, multitasking, scheduler ecc...), queste cose sono teoriche però non c'è una regola e se sei uno studente di ii le studierai a calcolatori elettronici e sistemi operativi.
 

movlw

Nuovo Utente
32
6
CPU
AMD A4 5300
Dissipatore
Default
Scheda Madre
AsRock DG3+
HDD
Toshiba 500GB
RAM
Kingstone 8GB DDR3
GPU
APU HD7480D
Monitor
Benq FP71G+
PSU
ITEK
OS
Windows 10 64bit
@Nico911 guarda che non sono io quello che vuole realizzare un kernel! Io sto proprio dicendo che creare un sistema operativo richiede competenze assolutamente straordinarie, credo che tu abbia capito male. Ho solo elencato a OP il minimo indispensabile da studiare per capirci qualcosa. Io non ho di queste velleità.

PS: ho la terza media. L'università l'ho vista solo in foto.
 
  • Mi piace
Reazioni: Hobet

Nico911

Utente Attivo
192
13
Ah scusa, pensavo fosse una risposta di chi ha postato la domanda xD comunque la mia risposta era diretta a Gio Pan. Complimenti se sei in terza media ;p
 

pabloski

Utente Èlite
2,868
916
Comunque mi pare che l'op abbia gia' gettato la spugna. Per lo meno non replica sul forum.

Il discorso dei miliardi dei dollari e dei milioni di righe di codice, pero', e' un po' fuori luogo in questo contesto. Un tizio che parte da zero sta cercando di creare un kernel molto semplice, col minimo indispensabile in termini di supporto hardware e API.

I milioni di righe di codice di Linux son al 95% driver, solo una piccolissima parte e' il kernel inteso come meccanismi e politiche.

Quindi non e' un lavoro impossibile se si ha del tempo a disposizione ( si parla comunque di alcune migliaia di ore ) e la necessaria volonta'. Nel suo caso mancano le basi, nel senso che e' il tipico programmatore "web 2.0" che usa strumenti di alto livello che ti portano a vedere il computer come un oggetto magico. Gli occorre sfatare questo mito e colmare le molte lacune, studiando lo stack software tipico nella sua interezza, a partire dall'alto fino al livello dell'ISA.

Pero' ripeto, e' una cosa che volendo si puo' fare, lo dimostrano le centinaia di kernel amatoriali ( e sistemi operativi piu' o meno completi ) che nascono ogni anno. Vi posso citare Redox ( recentissimo e scritto in Rust ), ToAruOS ( resterete strabiliati nel vedere cos'e' riuscito a fare questo programmatore solitario ), TempleOS, NewOS ( di Travis Geiselbrecht, ex ingegnere che ha lavorato alla realizzazione di BeOS, il suo kernel e' alla base di Haiku, lo stesso Travis adesso lavora per Google e ha scritto in pochi mesi il kernel Fuchsia ), MikeOS, Kolibri, Baremetal. Tutto quelli citati sono progetti realizzati in tempi relativamente brevi e da piccolissimi gruppi ( spesso 1 ) di programmatori.

Quindi non e' che bisogna avere i tentacoli come le piovre per realizzare un OS, ma di sicuro ci vogliono molte piu' conoscenze di quante l'op possiede.
 
  • Mi piace
Reazioni: Xpovos
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!