Guida Introduzione ai Sistemi Operativi

System32

Utente Stellare
Autore del topic
2 Gennaio 2010
15.556
112
Miglior risposta
0
Guida introduttiva ai Sistemi Operativi


Premessa


Scrivo questa guida perchè non è mai stata postata da nessuno su questo forum, e anche perchè ritengo che sia importante comprendere come funziona quello che noi oggi utilizziamo, ovvero il sistema operativo. In questa guida dunque tratterò degli argomenti importanti che riguardano il sistema operativo, ma non saranno approfonditi al 100% perchè ci sarebbe parecchio da scrivere su questo argomento, ma comunque quello che scriverò in questa guida sarà una BASE per coloro che comunque vogliono approfondire questo argomento.

Buona lettura.

Introduzione


Tutti coloro che stanno su questo Forum hanno un computer, ma questi che lo hanno si sono mai chiesti come riescono ad aprire una pagina/finestra ? Forse se lo sono chiesti, forse no. Chi se lo è chiesto si sarà documentato su google, chi non se lo è chiesto di sicuro avrà pensato che non è molto importante, la cosa importante è che le finestre si aprano. Io mi trovo qui a scrivere questa guida proprio per far apprendere a coloro che vogliono saperne di più, quelle che sono le funzionalità principali di un sistema opearivo ( qualsiasi esso sia ), e se ci dovesse essere tempo le approfondirò, magari con un altro topic.

Ecco gli argomenti principali che tratterò in questa guida :

- Funzioni di un Sistema Operativo

- Evoluzione dei Sistemi Operativi

- Sistemi Operativi monoprogrammati

- Sistemi operativi multiprogrammati

- Richiami architetturali ( gestione delle interruzioni )

- Classifica dei Sistemi Operativi

- Chiamate di sistema ( system calls )


Quando abbiamo acquistato il computer ci siamo trovati di fronte ad uno "strumento" di gestione dei files : sistema operativo. Ma il sistema operativo in realtà cos'è ? Il sistema operativo non è altro che un insieme di programmi di grandi dimensioni, molto complessi, per cui è bisogno definire una struttura per ognuno di essi. Attualmente i sistemi operativi esistenti sono :

- Unix & Unix-like ( linux )

- Windows

- Macintosh

Funzioni di un Sistema Operativo


Voi penserete che la principale funzione di un sistema operativo sia quella di garantirci le funzionalità base affinchè noi possiamo continuare a fare quello che facciamo di solito, invece no. La funzione PRIMARIA di un sistema operativo è quella di nasconderci le varie istruzioni che in quel momento sta eseguendo. Mi spiego meglio : quando accendiamo il nostro computer, notiamo che carica il sistema operativo, mostrandoci il ligo di windows ( cioè del sistema operativo usato dall'80% del mondo ), ma in realtà in quel momento, il sistema operativo sta eseguendo delle istruzioni, caricando prima i files di sistema, che gli serviranno per avviarsi. Successivamente verranno caricati i files dell'utente che usufruisce del sistema operativo. Ma come abbiamo detto prima, il sistema operativo è un programma, ma cos'è un programma ? Un programma è un insieme di istruzioni, così come lo è un virus. I sistemi operativi sono scritti in linguaggio C e ASM ( Assembly ). Quindi, appena avviamo il nostro computer, in realtà NON VEDIAMO quello che c'è "sotto", perchè sarebbe una schermata nera con delle istruzioni che vengono eseguite ( il che è visibile SOLO sui sistemi Unix & Unix-like, e FORSE con Macintosh ). Ovviamente è impossibile parlare di un sistema operativo senza parlare dei vari componenti hardware che agiscono su di esso. Cos'è l'hardware ? L'hardware non è altro che un insieme di componenti elettronici che collaborano tra di loro, in modo da garantire all'utente una funzionalità e quindi un motivo per usare il sistema operativo. Senza i componenti hardware il sistema operativo non avrebbe senso. Come detto prima, quando si avvia il computer, il sistema operativo carica i files di sistema, ma come li carica ? Li carica sulle aree di memoria virtuali : HEAP e STACK. L'HEAP è la parte più "superficiale" della memoria virtuale, lo STACK è la "parte più bassa", questo significa che prima verrà letta la memoria dell'HEAP e successivamente dello STACK. In queste 2 AREE DI MEMORIA ( termine più che corretto ) sono contenute le operazioni basilari per avviare il sistema operativo. Ma questi registri di memoria come fanno a funzionare ? E qui entrano in gioco i componenti hardware, tra cui il calcolatore ( o CPU ). I registri di memoria vengono "letti" dal calcolatore, e successivamente vengono riportati a schermi. Cos'è il calcolatore ? Non è altro che un componente elettronico, quindi è un componente hardware, che serve per gestire tutte le operazioni che richiederà l'utente, ma prima il calcolatore riserverà la sua "disponibilità" per caricare i files di sistema del sistema operativo. In conseguenza al calcolatore, troviamo un altro componente fondamentale affinchè possiamo usare il computer : la scheda grafica ( o GPU ). La scheda grafica ha il compito di visualizzare le immagini che le vengono passate dal calcolatore, e le visualizza a schermo, in modo che l'utente possa vedere quale operazione ha compiuto, e se essa è stata "letta" e "interpretata" in modo corretto. Una volta che abbiamo capito come viene caricato il sistema operativo e di conseguenza tutti i files necessari affinchè esso possa essere avviato, possiamo parlare dei LINKER, e INTERPRETE DEI COMANDI. Dunque, i linker non sono altro che dei "caricatori", o come si dice in inglese : LOADER. I loader non sono altro che delle istruzioni che vengono lette dal calcolatore, in cui sono definiti I PARAMETRI grazie ai quali il sistema operativo si avvierà, questo implica che se l'utente ha applicato delle modifiche al sistema operativo ( a livello di registri di memoria, oppure chiavi di registro ), sarà compito del loader salvare tali impostazioni, e avviare quando il sistema operativo si sarà riavviato. L'interprete dei comandi invece è un altro programma predefinito del sistema operativo ( che quindi viene caricato all'avvio del computer ) con cui è possibile "dare dei comandi" per farli eseguire al sistema operativo. Sul sistema operativo Windows, l'interprete dei comandi si chiama CMD ( abbreviazione di "command" ), dove i comandi sono piuttosto ristretti, rispetto agli interpreti di Unix o Unix-like o Mac. Sui sistemi unix l'interprete dei comandi è il terminale ( shell ) così come lo è sul Macintosh. L'unica differenza tra questi sistemi operativi è che il sistema operativo Windows è ristretto nei comandi che è possibile fargli eseguire, invece Linux & Mac sono un po' diversi. Questo perchè ? Perchè l'azienda che produce il sistema operativo Windows ( Microsoft Corporation ) è una maledetta società CLOSE SOURCE, cioè che per usare il loro sistema operativo, si deve pagare. A differenza di unix o unix-like, con cui è possibile fare veramente di tutto. Torniamo a quello che è l'argomento fondamentale di questa guida : le funzionalità del sistema operativo. Quindi abbiamo detto che serve per "mascherare" tutte le istruzioni che sta eseguendo, mostrandoci quindi un'interfaccia grafica per l'utente. Ci semplifica ovviamente il lavoro, perchè per fare le nostre cose ci bastano solo dei click, poi sarà il sistema operativo ( che opera insieme all'hardware ) a farci vedere quello che noi vogliamo vedere ( apertura di una cartella, cancellazione di un file etc... ). Un'altra funzionalità importante e quindi non trascurabile, è che il sistema operativo deve in qualche modo organizzare le risorse hardware che gli vengono assegnate. Ciò significa che il sistema operativo non sfrutterà al 100% l'hardware del computer, ma lo dividerà in base alla memoria e alla potenza che gli serve per compiere/gestire le operazioni richieste dall'utente. Un'altra cosa importante che deve fare un sistema operativo nei confronti dell'utente è quella di riuscire ad "organizzare" e quindi a definire dei criteri secondi i quali verranno assegnate le risorse che successivamente verranno utilizzate dall'utente.

Evoluzione dei sistemi operativi


I sistemi operativi non sono esistiti da sempre. I primi computer che sono stati creati non avevano un'interfaccia grafica che poteva essere paragonata a quella di un sistema operativo. I primi computer avevano solo uno schermo in cui venivano visualizzati tutti i comandi che eseguiva la macchina, quindi vi era l'assenza di questo "strato" che permetteva di nascondere i comandi che eseguiva la macchina ( cioè il sistema operativo ). Le prime macchine avevano un'elaborazione SERIALE, ovvero che i programmi venivano eseguiti uno dopo l'altro, seguendo una logica pre-meditata che chiaramente l'utente non poteva modificare. Quindi è chiaramente comprensibile che con l'assenza del sistema operativo, l'utente doveva gestire la macchina attraverso la consolle. In conseguenza a questo ( che ovviamente risultava parecchio scomodo ), si aveva la necessità di introdurre un componente molto semplice del sistema operativo che si chiama MONITOR, che ha come compito quello di controllare l'esecuzione dei programmi. Questi primi sistemi che vennero creati con il monitor venivano definiti : BATCH ( che letteralmente vuol dire pacco, il che stava ad indicare l'insieme di schede che venivano inserite all'interno della memoria del programma ( calcolatore ) che doveva essere elaborato. Col tempo però la tecnologia è andata sempre più avanti, scoprendo nuove cose e di conseguenza creando nuove cose. Da questo punto di vista venne introdotto il sistema di protezione della memoria, come l'esempio dei sistemi operativi monoprogrammati, che da una parte vi era il programma ( calcolatore ) e dall'altra parte la memoria, che devono essere SEPARATI TRA LORO. Successivamente venne introdotto il concetto di TIMER che quindi serviva per gestire gli intervalli di tempo attraverso i quali i programmi dovevano essere eseguiti. Un'altra cosa importante che venne introdotta è quella delle ISTRUZIONI PRIVILEGIATE. Cosa significa ? Significa che quando prima esistevano i sistemi operativi monoprogrammati, l'utente non aveva dei grandi privilegi, aveva dei privilegi utente, cioè aveva dei limiti entro i quali poteva eseguire le sue operazioni, invece con la nascita di questi nuovi "privilegi", l'utente poteva accedere a quella parte del sistema operativo che in realtà non era accessibile prima. Cosa fondamentale nonchp la più importante, è la nascita delle INTERRUZIONI, il che sta alla base di tutti i sistemi operativi, sia moderni che monoprogrammati. Un altro passo avanti che è stato fatto, è stata l'introduzione di DISCHI, che permetteva una gestione di INPUT/OUTPUT più vasta. Ad esempio, quando il calcolatore e la memoria operavano sul disco, il disco contemporaneamente poteva ricevere degli input da altri componenti hardware. Questi sistemi operativi venivano detti SPOOLING ( simultaneous peripheral operation on-line ). L'ultima classificazione dei sistemi operativiè riferita ai sistemi operativi interattivi. Cosa sono questi sistemi operativi interattivi ? Sono i sistemi operativi che usiamo noi oggi, quindi con un'interfaccia di login/logout, una sessione. Con questa sessione ovviamente l'utente INTERAGIRA' direttamente con l'utilizzo/realizzo dei suoi programmi. Però bisogna distinguere due tipi di interfacce :

- Interfaccia a carattere
- Interfaccia a finestra

L'interfaccia a carattere implica l'utilizzo di uno strumento che ci permetta di "comunicare" direttamente con il sistema operativo : il terminale. Quindi come potrete capire l'utente che usa quel sistema operativo dovrà scrivere dei comandi che successivamente verranno eseguiti dall'interprete dei comandi ( che è appunto il terminale ). Mentre l'interfaccia a finestre è molto ma molto più semplice. Basta fare un click e tutto è risolto ( classico dell'ambiente windows, su linux è più usato il terminale, o altri tipi di interfacce grafica, come DWM [Dynamic Windows Manager], che a mio parere risulta anche più comodo ).

Sistemi operativi monoprogrammati


I primi si sistemi operativi, come prima abbiamo detto i BATCH ( pacchetto ) e anche l'MS-DOS ( il primo sistema operativo in assoluto senza interfaccia grafica ) erano dei sistemi operativi monoprogrammati. Cosa significa questo ? Significa che i programmi venivano eseguiti singolarmente, cioè finchè il programma che in quel momento utilizzava l'utente non finiva il suo compito, l'utente non poteva richiedere l'avvio di un altro programma. Quando invece il programma finiva il suo "compito", veniva caricato un nuovo programma, e il monitor aveva il compito di "mascherare" quelle che erano le funzioni di input/output del programma che in quel momento era in esecuzione. Una con seguenza dei sistemi operativi monoprogrammati, è che ( come detto prima ), essendo eseguiti singolarmente, inplicherà che tutte le risorse del calcolatore, la memoria e tutto il componente hardware, verranno dedicate al singolo programma che in quel momento è in esecuzione.

Sistemi operativi multiprogrammati


Ed eccoci finalmente all'argomento che riguarda più i nostri tempi, ovvero i sistemi operativi multiprogrammati. Cosa significa multiprogrammato ? Significa che il calcolatore può gestire molti più programmi ( quindi molti più input/output ) contemporaneamente. Questo implica il fatto che il calcolatore deve assegnare ai vari programmi un TOT di risorse hardware. Chiaramente più un sistema operativo ha molte funzioni, più sarà complicato, e se il sistema operativo è complicato, significa che sotto sotto vi sono dei processi che deve eseguire che dipendono da un fattore importante : l'algoritmo. Parlando di algoritmo di un sistema operativo si intende un insieme di istruzioni che servono per "mettere ordine" tra le varie chiamate di input/output da parte di programmi. Altrimenti il calcolatore le eseguirebbe tutte contemporaneamente e si creerebbe solo confusione.

Richiami architetturali ( gestione delle interruzioni )


Al fine di poter offrire un ambiete di sviluppo/utilizzo all'utente che usufruisce dei "servizi" del sistema operativo, è bene che il sistema operativo sia dotato di "strumenti" per gestire le varie azioni che l'utente gestirà ( quindi è facilmente intuibile che stiamo parlando di un sistema operativo multiprogrammato e non monoprogrammato, perchè l'utente andrà a gestire più programmi anzichè i singoli ). Il primo strumento che andremo ad analizzare è il TIME SHARING. Cos'è il time sharing ? Il time sharing non è altro che un QUANTUM ( ovverò una quantità ) di memoria che il sistema operativo assegna ai singoli programmi. Facciamo un esempio : supponiamo che io abbia un programma, lo lancio ( termine tecnico, ma interpretatelo come "lo eseguo" ). Cosa succede ? Succede che il mio calcolatore legge le "informazioni" che contiene questo mio programma, in modo da poterlo far eseguire. Successivamente gli assegna un TOT di memoria che il programma potrà usare, E CHE NON POTRA' RICHIEDERNE E/O AVERNE ALTRA. Chiaramente la quantità di memoria viene "decisa" dal programma, non dal calcolatore, questo è MOLTO importante. Perchè ovviamente un gioco avrà disponibile un TOT di memoria che chiaramente risulterà essere molto più grande di quella di un normale programma ( ad esempio il notepad ). Quindi, il programma IN BASE ALLE SUE RISORSE, cioè a ciò che serve, richiederà un TOT di memoria al calcolatore. Se questo TOT di memoria può essere assegnato allora quel programma occuperà quel TOT di memoria, ma ( attenzione qui ), se il programma richiede una memoria CHE IL CALCOLATORE NON PUO' ASSEGNARGLI perchè quella memoria è limitata, allora il programma si fotte ( questo chiaramente non dipende soltanto dal calcolatore, ma ovviamente dipende anche dalla RAM ), la memoria virtuale è quello che conta di più. Oggi questi problemi non si hanno, perchè comunque i computer sono "potenti", siamo arrivati ad avere un terabyte di Hard Disk e chissà fino a quanto potremo arrivare. Quindi, quando il programma sarà in esecuzione, la memoria che gli è stata data la userà per tutto il tempo che sarà in esecuzione, e se il programma si chiude ? Se il programma si chiude allora la memoria che gli era stata assegnata al programma, verrà DEALLOCATA ( anche questo è un termine tecnico, ma interpretatelo come "tolta" ), e verrà resa disponibile ad eventuali programmi che verranno "lanciati" dall'utente. Il primo sistema operativo al mondo che è stato "progettato" secondo l'uso del time-sharing ( quindi è intuibile che fosse un sistema multiprogrammato ) è il MULTICS ( sviluppato dall' MIT [leggesi em-ai-ti] ), famosissimo sistema operativo degli anni '60, da cui poi derivano VMS ( oggi non più in uso ) e i sistemi che io adoro : Unix & Unix-like. E Windows da dove spunta fuori ? Ve lo dico io : essendo un sistema operativo in concorrenza con Unix/Linux & Macintosh, ha deciso anche lui ( o meglio, coloro che lo hanno progettato ) di essere "strutturato secondo le regole" del time-sharing. Poco fa ho parlato del time-sharing, ma in realtà prima di fare questo discorso ( il discorso sul MULTICS ), avrei dovuto parlarvi dell'overhead. Cos'è l'overhead ? Supponiamo che io abbia un programma ( che sfrutta la tecnica del time-sharing ) e scade il QUANTUM di tempo ( cioè il TOT di memoria che gli è stata assegnata al programma ), il sistema operativo evidentemente provvederà a salvare lo stato attuale del programma. E' come se io scrivessi qualcosa su un notepad, e il programma quando cliccherò sulla X per chiudere il programma, mi verrà chiesto se salvare il programma o no. Ecco, quello è un esempio di overhead, in modo che il calcolatore all'esecuzione del programma salvato, possa riconosco che quel programma è stato aperto e che da quello stesso programma è stato salvato "un pezzo" dell'utilizzo che ne ha fatto l'utente.

Classifica dei Sistemi Operativi


I Sistemi Operativi dunque possono essere classificati in :

- Batch ( vedi sopra per la spiegazione )

- Interattivi ( vedi sopra per la spiegazione )

- Dedicati ( Sistemi Operativi dedicati ad una sola applicazione )

- PC/PDA [Personal Data Assistant] ( Sistemi Operativi installati sui personal computer/notebook, invece i PDA sono Sistemi Operativi con risorse limitate )

- Sistemi in tempo reale ( Sistemi Operativi che "rispondono" alle richieste dell'utente entro dei limiti pre-fissati, non andando oltre )

- Sistemi Transazionali ( Sistemi Operativi di tipo interattivo usati per applicazioni per la gestione delle risorse )

- Sistemi Distribuiti ( Si classificano in Sistemi Operativi di rete[che permettono lo scambio di dati tra altri Sistemi Operativi], e i Sistemi Operativi distribuiti veri e propri, cioè quelli che comunemente usiamo )

Chiamate di sistema ( system calls )


Le chiamate di sistema sono quelle funzioni che il sistema operativo mette a disposizione dei programmi applicativi attraverso le quali è possibile sfruttare le caratteristiche e quindi le funzionalità del calcolatore, e di conseguenza di tutto il componente hardware. Un esempio di system calls è l'I/O ( input / output ). L'input non è altro il momento in cui l'utente "richiede" al sistema operativo un determinato processo ( per esempio l'apertura di una cartella ), e l'output non è altro che la risposta che ci da il sistema operativo.

Conclusioni


Come ho detto all'inizio di questa guida, quello che ho scritto è solo una "base", e neanche, sono le cose che io da autodidatta ho imparato, e che ho deciso di condividere con voi perchè non tutti conoscono quello che hanno sotto gli occhi, come in questo caso un sistema operativo. Alcuni si limitano a prendere quello che hanno per buono, senza chiedersi il perchè e il come funziona quello che usiamo quotidianamente.

Che dirvi...spero che abbiate imparato qualcosa da ciò che ho scritto.
 
Ultima modifica:
  • Like
Reactions: 3 people
Riferimento: Guida introduttiva ai Sistemi Operativi

Prova a metterla su Wikipedia può darsi che la diano per buono :soso:
Volendo potresti cambiare font cosicché invogli a leggere.
Personalmente l'ho letta tutta,ed e stato difficile caratteri troppo piccoli e scritte nere,ma sinceramente ho chiarito alcuni dubbi che avevo.
Anche se la parte diciamo "storica" e la parte di "oggi" ne ero gia a conoscenza inquanto ho un libro che parla proprio di questo,mettendo qualche cosuccia in piu.
Potrebbe andare anche in rilievo per me,ma ripeto non credo la leggeranno tutta.
GoodWork .
 
Riferimento: Guida introduttiva ai Sistemi Operativi

Prova a metterla su Wikipedia può darsi che la diano per buono :soso:
Volendo potresti cambiare font cosicché invogli a leggere.
Personalmente l'ho letta tutta,ed e stato difficile caratteri troppo piccoli e scritte nere,ma sinceramente ho chiarito alcuni dubbi che avevo.
Anche se la parte diciamo "storica" e la parte di "oggi" ne ero gia a conoscenza inquanto ho un libro che parla proprio di questo,mettendo qualche cosuccia in piu.
Potrebbe andare anche in rilievo per me,ma ripeto non credo la leggeranno tutta.
GoodWork .

Giusto, nessuno legge le cose lunghe come quelle che scrivo io, ma io la posto comunque, penso che QUALCUNO ci sarà che ha la buona voglia di imparare anzichè scrivere il solito "bravo" o altre cavolate varie.

Per quanto riguarda la formattazione del testo, è fatta apposta proprio per evidenziare le parti importanti. Non mi sembra che il font sia così piccolo...Forse lo reputi piccolo perchè alcuni argomenti sono lunghi, ma ( a mio parere ) è più che leggibile.

Comunque grazie :soso:
 
Riferimento: Guida introduttiva ai Sistemi Operativi

Bellissima guida , ci ho messo 21 minuti a leggerla e a capirla ne è valsa la pena ;)
 
Riferimento: Guida introduttiva ai Sistemi Operativi

Mi fa piacere.

Se nessun altro ha qualcosa in contrario, quando ci saranno più commento la metto in rilievo.
 
Riferimento: Guida introduttiva ai Sistemi Operativi

Bhè metti qualche punto e a capo e metti qualche immagine ... per il resto mi pare buona ;)
 
Riferimento: Guida introduttiva ai Sistemi Operativi

Bhè metti qualche punto e a capo e metti qualche immagine ... per il resto mi pare buona ;)

E che immagine devo mettere ? ::emoji_relieved:

Punto e a capo ? E perchè ? E' un discorso omogeneo, la pagina sarebbe più lunga della muraglia cinese.

Comunque grazie :soso:
 
Riferimento: Guida introduttiva ai Sistemi Operativi

Piccole cosucce:
il MAC non ha Bios
Potresti mettere dove hai scritto "si caricano i primi programmi" metti Bios ;)
sul MAC si possono vedere le istruzioni [almeno su iDeneb]su utility.
 
Riferimento: Guida introduttiva ai Sistemi Operativi

Potresti mettere dove hai scritto "si caricano i primi programmi" metti Bios ;)
sul MAC si possono vedere le istruzioni [almeno su iDeneb]su utility.

Sì, ma io ho parlato di Mac OS X in generale, non di Hackintosh.
 
Riferimento: Guida introduttiva ai Sistemi Operativi

Ottima guida.

Secondo me merita il RILIEVO ;)

Che ne pensate?
 
Riferimento: Guida introduttiva ai Sistemi Operativi

Woow... Finito proprio adesso di leggerla, molte grazie System, qualcosina grazie a questa guida adesso la so. Do grazie e aumento reputazione
 
Riferimento: Guida introduttiva ai Sistemi Operativi

In una minima parte della guida va a Wikipedia ;)
Non credo hai scritto tutto da te.
Comunque, complimenti ottimo lavoro!
 
Riferimento: Guida introduttiva ai Sistemi Operativi

In una minima parte della guida va a Wikipedia ;)
Non credo hai scritto tutto da te.
Comunque, complimenti ottimo lavoro!

Perchè dici che una parte è presa da Wikipedia ? Forse perchè è troppo lunga ? Trovami ESATTAMENTE le stesse righe che sono riportate qui su Wikipedia.

Le guide che faccio io sono fatte da me, non le copio da nessuna parte, a differenza di altri.

Sinceramente mi girano le palle quando dopo tante ore di lavoro mi sento dire che le cose che faccio non sono nemmeno mie.

@arthur
 
Riferimento: Guida introduttiva ai Sistemi Operativi

Bhè metti qualche punto e a capo e metti qualche immagine ... per il resto mi pare buona ;)

Scusami ma, che razza di immagine bisognerebbe mettere secondo te, in una guida sui sistemi operativi?! o.o capisco magari che ne so, cambiare i colori dei titoli, ma addirittura le immagini!? Bha..

Comunque Ale è veramente ben fatta, complimenti ^^
 
Riferimento: Guida introduttiva ai Sistemi Operativi

ci ho messo un po' ma l'ho letta tutta,bravo system