PDA

View Full Version : Un sistema operativo: come lo si programma ?


DanieleC88
25-02-2003, 19:16
Un sistema operativo... fa funzionare molti programmi... ma lo si dovrà pur programmare ? In che modo ? Naturalmente non coln i "normali" metodi e programmi... Ma allora come ?

Kleidemos
25-02-2003, 19:22
Ma guarda che la richiesta che hai fatto non è per niente semplice!!!! Hai pensato che dovrai gestire tutto l'hardware del tuo sistema (e non solo)..... Sicuro intendi proprio un sistema operativo?

gokan
25-02-2003, 19:42
Originally posted by "Kleidemos"

Ma guarda che la richiesta che hai fatto non è per niente semplice!!!! Hai pensato che dovrai gestire tutto l'hardware del tuo sistema (e non solo)..... Sicuro intendi proprio un sistema operativo?
Non credo che Daniele pensa di voler "fare" un O.S, credo che la sua sia una semplice curiosità.
Posso solo dire che C/C++ sono gli strumenti base :D

Kleidemos
25-02-2003, 19:45
Per riuscire a fare qualcosa di guardabile (e sottolineo guardabile) devi conoscere bene l'assembly e il C(o il C++, un os può essere strutturato in modo tendente al divino se codato in un buon C++) e conoscere bene le strutture dati. Questa ovviamente e' solo la conoscenza pratica. Per quella teorica devi sciropparti libri di hardware e avere concetti come IRQ, DMA, interrupt, syscall e ovviamente conoscere a menadito il processore su cui stai lavorando (quindi studiarti ben bene il 1° e 3° manuale che l'Intel mette a disposizione degli sviluppatori). Infine devi procurarti un testo capibile e completo su come strutturare la progettazione e programmazione di un os e francamente non ce ne sono molti di questo livello.Queste sono solo le basi per poter fare un lavoro quanto meno sufficiente :sofico:


Ciao

ghego
25-02-2003, 20:08
ASM x86 :D

cionci
26-02-2003, 09:15
Un sistema operativo è composto da diverse parti...

Le 3 principali semplificando molto sono Loader, Kernel (Nucleo), Interprete dei comandi...
Il Loader non è altro che un programma che viene mandato in esecuzione quando il BIOS va a cercarlo nel Master Boot Record del disco fisso...
Per crearlo soltamente si fa in assembler...ma anche un misto assembler C/C++ va venissimo... L'importante è che l'esegibile non abbia riferimenti a system call del sistema operativo su cui è stato creato, ma solo a quelle messe a disposizione dal BIOS (o solo a quelle routine che lui stesso immette in memoria)... Il Loader non fa altro che caricare il kernel di cui ha un riferimento fisso sul disco fisso (visto che a questo punto dobbiamo accedere al disco in maniera molto basilare, senza la possibilità di sfruttare il file system)... Per caricare il Kernel solitamente deve conoscerne il sia la posizione sul disco che la dimensione (a meno che il Kernel non abbia un programma di caricamento a dimensione fissa che si occupa di caricare i vari moduli)...lo mette in memoria e trasferisce l'esecuzione al Kernel...
Il Kernel è composto da vari moduli che mettono a disposizione "system call" sia ad altri moduli che ai programmi utente...
I più importanti sono lo scheduler (in un SO avanzato si occupa di gestire l'esecuzione dei vari programmi utente permettendone l'avanzamento parallelo, il cosiddetto multitasking), il gestore del file system, il gestore della memoria...
L'interprete dei comandi (o shell) non è altro che un programma utente che non fa altro che che comunicare con l'utente... Quando l'utente indicherà alla shell che vuole eseguire un programma non farà altro che indicare allo scheduler la posizione dell'eseguibile e lo scheduler pensaerà ad eseguirlo quando più gli torna opportuno...
Anche per il Kernel vale lo stesso discorso del Loader, può usare solo le routine messe a disposizione dal BIOS, quelle messe da lui stesso in memoria o le system call...
Può essere realizzato nella parte più interna (le system call che sono le parti più a contatto con l'hardware) con un misto assembler-C/C++ (o anche in qualsiasi altro linguaggio compilato che permetta l'escuzione diretta di codice assembler)... Mentre il resto viene programmato solamente in un linguaggio di alto livello senza usare l'assembler...
La shell può essere programmata con qualsiasi linguaggio di alto livello...

gokan
26-02-2003, 18:42
Originally posted by "DanieleC88"

Un sistema operativo... fa funzionare molti programmi... ma lo si dovrà pur programmare ? In che modo ? Naturalmente non coln i "normali" metodi e programmi... Ma allora come ?
Non so se hai mai sentito parlare di xinu.E' un piccolo sistema operativo se sei interessato puoi vedere qui:
http://www.dmi.unict.it/~pappalar/lab3/#xinu