cerca
Sistemi Perativi: Appunti del 26 febbraio 2008
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Sistemi Perativi: Appunti del 26 febbraio 2008

 :: Sistemi Perativi: Appunti del 26 febbraio 2008 ::

Torna alla pagina di Sistemi Perativi

Lezione 3

La Memoria

La memoria la si può vedere organizzata gerarchicamente. Partiamo dall'alto e scendiamo verso il basso.

Registri

Sono realizzati all'interno della CPU. Hanno dimensioni ridotte, in genere pari alla lunghezza della word del processore (eg, un processore a 32 bit ha tipicamente registri di 32 bit, uno a 16 bit ne avrà a 16 bit, la macchina MixAL ovviamente fa casino).

Non sono molti, da una manciata ad un max di un centinaio. Ma sono veramente veloci.

Cache

La cache di primo livello è costruita all'interno del processore. Quella di secondo livello appena fuori. Sono più lente dei registri, ma anche più capienti.

Servono per copiarci la zona di memoria centrale su cui il processore sta lavorando attualmente. In questo modo può leggere e scrivere in modo molto veloce senza passare per i BUS etc. etc. Occorre stare attenti alla coerenza della memoria: se scrivo in cache e non nella porzione di memoria centrale corrispondente, allora quando svuoto la cache devo aggiornare anche la memoria centrale, se no si creano discrepanze e tutto va a ramengo. Tutto ciò viene fatto dall'hardware.

Memoria centrale

Secondo Fonnoiman, vi metto dati e programmi. Più ampia, molto più ampia della cache, è anche più lenta di un ordine di grandezza.

Occorre precisare che il processore è in grado solo di leggere roba dalla memoria centrale. L'esistenza della cache è un trucco tecnologico, al processore sembrerà comunque di leggere dalla memoria centrale, non ha nozione dell'esistenza della cache. Semplicemente, se un certi chippettino si accorge che l'indirizzo di memoria voluto dal processore è in cache, evita di scomodare i bus e glielo fornisce seduta stante. Ma il processore di ciò non sa nulla.

Memoria di massa

La memoria centrale è ampia ma mai abbastanza. Quindi ci sono diverse tipologie di memoria di massa che, pur essendo molto più lente, hanno molto spazio a basso costo. Dischi magnetici, ottici, nastri, memorie flash e così via sono tipi di memoria di massa.

Protezione della memoria

Se il mio calcolatore ha un solo programma in memoria, questo è padrone di tutte le risorse del computer. Ma se ne ho due, nessuno dei due è più il Signore dei Byte. Ogni programma deve girare nella sua brava porzione di memoria e non scomodare quelle altrui, se no immaginate quanti casini. Quindi, c'è un'unità chiamata MMU, ovvero Mia Moglie Uccide, oppure Memory Management Unit, che contiene l'indirizzo iniziale e quello finale dell'area di memoria che un certo programma può usare o no. Se la CPU sconfina, ovvero chiede un'indirizzo di memoria fuori da quest'area, viene notificato un errore. È il sistema operativo che informa la MMU dei limiti della memoria, visto che il processore non sa niente di programmi ma si limita ad eseguire le sue fasi in sequenza.

La protezione dei registri e della cache è implicita nel cambio di contesto: tutto viene salvato nello stack e lo si ripiglia dopo, e la cache si riempie a seconda di ciò che il processore vuole.

La protezione nelle memorie di massa è realizzata dal file system. È il file system a decidere se qualcuno sta scrivendo su di un file dove non dovrebbe, o sta accedendo a zone del disco fisso che gli sono vietate.

Lezione 4

Connessione delle periferiche

Le periferiche non sono connesse direttamente alla CPU, ma tra questa e le periferiche ci sono degli opportuni gestori. Il vantaggio di avere i gestori è che posso modificare le periferiche, aggiornare gli standard per comunicarci etc. ma lasciare uguale l'interfaccia del gestore che la CPU vede.

L'interfaccia è composta da 2 parti:

  1. gestore che comunica direttamente con il processore. Riceve comandi ed invia dati
  2. parte elettronica che comunica con la periferica, generando segnali elettrici etc.

Anche presso la periferica ci sono 2 parti:

  1. parte che comunica con la periferica stessa, eg il chip che in un disco fisso alza e abbassa il braccio etc.
  2. parte che comunica con il gestore del sistema

Tra periferica e gestore di periferica ci può essere una connessione USB, seriale, parallela, PS2, PCI etc.

Interfaccia nell'unità centrale

Tra CPU e interfaccia c'è un bus. L'interfaccia presenta tree registri: un registro di stato, un registro comandi ed un registro dati.

Il registro di stato viene letto dalla CPU. In questo modo la CPU sa se la periferica è occupata, rotta, connessa e così via. Il registro comandi viene scritto dalla CPU, e contiene i comandi che la CPU invia all'interfaccia. Il registro dati viene scritto dalla CPU e contiene i comandi che la CPU invia alla periferica.

Quindi, è l'interfaccia che pensa a inviare ciò che legge nel registro dati alla periferica, e a restituire ciò che la periferica risponde al registro di stato, così che la CPU possa leggerlo. NON succede che la CPU scrive i dati che vuole mandare alla periferica nel registro dati, generalmente, bensì colà vi scrive i comandi.

È la periferica poi ad eseguire i comandi e a rispondere all'interfaccia.

La CPU deve trovare il momento in cui la periferica sia disponibile. Può farlo in 2 modi:

  1. attesa passiva: la CPU si mette in attesa che lo stato della periferica sia disponibile
  2. interruzione: la CPU dà l'ordine, e quando la periferica esegue risponde con un'interruzione, così che la CPU possa rendersi conto di ciò che è successo.

Lo svantaggio dell'attesa passiva è che mentre la CPU attende, non può fare altro, e si perde tempo.

Il trasferimento dei dati tra CPU e periferica può anche avvenire con il registro dati, ma è limitato e poco efficiente. Per questo si è inventato il DMA, ovvero Direct Memory Access, cioè un affare che gestisce in modo autonomo il trasferimento di blocchi di dati dalla memoria centrale alla periferica, senza scomodare nessun altro.

Un altro modo per ottenere questa comunicazione è mappare la periferica in una zona dello spazio di indirizzamento. In pratica, organizzo il mio sistema in modo tale che alcuni indirizzi di memoria non portino alla memoria centrale, ma siano "deviati" verso una certa periferica. In questo modo alla CPU sembrerà di scrivere in memoria, ma in realtà sta scrivendo in periferica.

Lezione 5

Va beh qui si parla di reti ma non si dice molto di interessante, quindi non scrivo niente.

Lezione 6

Classificazione dei sistemi di elaborazione

Questa lezione è una specie di excursus storico - funzionale sui tipi di sistema di elaborazione. Niente di fondamentale.

Mainframe

Un computerone grande e grosso e costoso, tipico degli anni 60, che esegue un lavoro, detto job, alla volta. Eseguire un job alla volta vuol dire lavorare a batch, cioè a lotti: eseguo il mio lotto, poi faccio il successivo. Si tratta quindi di un sistema monoprogrammato, in cui la macchina esegue un programma, e quando questo finisce se ne esegue un altro..

Siccome così si sprecavano tempo e risorse, si è inventata la multiprogrammazione: la macchina tiene in memoria contemporaneamente più programmi, e quindi non c'è la perdita di tempo di mandare l'omino a caricarne uno nuovo ogni volta con le schede perforate che si usavano a Bedrock ("Wilma, dammi la schedaaaaa!!!").

Nemmeno questa soluzione è sufficiente per ottimizzare le spese, quindi si passa alla condivisione CPU, in cui la CPU esegue contemporaneamente più programmi. Un altro modo per chiamare ciò è multiprocessing. La cosa balorda del multiprocessing è che si passa da un processo all'altro quando il primo è in un tempo morto, eg aspettando dell'input da parte di Fred Flinstone. Se un processo fa qualcosa di oneroso, gli altri si attaccano ed aspettano. Quando si sono inventati i sistemi multiutente, con i terminali in giro per l'edificio, capitava che il programma in esecuzione su di un terminale bloccasse gli altri, utilizzando questa tecnica di multitasking.

Ecco quindi che si passa al time sharing, ovvero si stabilisce che un processo, qualsiasi cosa faccia, usi la CPU per un certo periodo di tempo e poi passi il testimone al processo dopo. Così, tutti gli utenti hanno l'impressione che la macchina sia dedicata a loro. Quando, come e perché cambiare processo attivo è una specie di magia nera, cmq, ma vedremo più in là.

Minicomputer

È una versione per piccoli gruppi dei mainframe. Non è ancora un sistema monoutente, perché non c'è ancora convenienza, ma siamo su quella strada. Da qui in poi si assume che tutti i sistemi siano chi più chi meno multiprogrammati, multiprocessing e time sharing.

Workstation

Anni 80: soddisfa le esigenze avanzate di un singolo utente. Eg una workstation grafica dedicata al CAD, o alla grafica 3D.

Personal Computer

Il terminale del mainframe acquisisce vita autonoma e capacità di calcolo in proprio. Non esagerate, ma abbastanza per i bisogni del singolo utente.

Palmare

bla bla bla

Sistemi di elaborazione in tempo reale

Apparecchi industriali, divisibili a loro volta in hard real time e soft real time, sul cui significato si indagherà più in là.

Sistema dedicato

Fa 1 e 1 sola cosa. Eg il software di John Waine: o cammina o mastica la gomma.

Sistemi multimediali

Hanno cose avanzate per il multimedia bla bla blabaorum.

Sistemi multiprocessore

Invece di fare un processure suppauppa, ne prendo un po' e li faccio lavorare insieme. Il sistema è simmetrico se tutti i processori sono equivalenti a livello di capacità, ovvero possono fare tutti lo stesso tipo di lavoro (eg avere 2 o 4 processori pentium sulla scheda madre). Se invece ho processori dedicati ad uno scopo particolare, allora il sistema è asimmetrico (eg ho un processore generico e uno dedicato al download di porno da internet).

Cluster

Un altra versione del sistema multiprocessore, in cui però non ho più processori sulla stessa scheda, ma più processori in macchine diverse, connesse tramite hardware performante.

Sistema distribuito

Ulteriore generalizzazione del multiprocessore. Si tratta di un cluster in cui l'hardware di interconnessione è quello standard di rete. In questo modo, prendo letteralmente macchine normali e le faccio lavorare insieme quando serve.

Torna alla pagina di Sistemi Perativi