cerca
Sistemi Operativi - Riassunto del capitolo 2
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Uni.SOcap2 History

Hide minor edits - Show changes to output

Added lines 216-241:
!!!2.6 Strutture di rete
Due tipi:
* LAN = Local Area Network
* WAN = Wide Area Network = reti geografiche (città diverse etc.)

=> differenze in hw, protocolli, efficienza etc.

!!!2.6.1 Reti locali
LAN = nate inizio anni 70 come sostituto dei grandi mainframe => più economico avere piccoli computer in rete ed autonomi che uno ciccione centrale.

LAN = poca distanza => cavi veloci ed affidabili.

Gateway = punti di accesso ad altre reti.

Lo schema più usato è Ethernet per la connessione fisica => non è centralizzata, ma è un bus ad accesso multiplo in "autogestione" => scala facilmente.

!!!2.6.2 Reti geografiche
Vasta area => bassa velocità, meno affidabilità rispetto alle LAN.

Computer connessi molto diversi.

Reti locali raggruppate in reti regionali => '''router''' per connettere più reti regionali nella rete mondiale.

Altri tipi di accesso: telefono (56K e DSL), fibra ottica, wireless.

[[Torna alla pagina di Sistemi Operativi -> Sistemi Operativi]]
Changed lines 165-215 from:
!!!2.5 Protezione hardware
to:
!!!2.5 Protezione hardware
Primi tempi: quando il system admin si connetteva, faceva quello che voleva.

Monitor residente: i primi SO installati, che governavano l'hw.

Poi: condivisione risorse tra diversi utenti => multiprogrammazione => un processo può causare errori sia un un altro processo, che nel monitor (SO) stesso.

!!!2.5.1 Funzionamento in modalità differenziate
Voglio funzionamento corretto => proteggere i processi e il SO da altri processi => protezione per ogni risorsa condivisa.

2 modalità separate:
# '''user mode''' = modalità utente
# '''supervisor | monitor | system | privileged mode''' = modalità di sistema

Bit di modalità: dice in che modalità sto.

Avvio: computer in modalità di sistema, poi si caricano i processi dell'utente.
Trap o interrupt: computer passa in modalità di sistema.

Istruzioni privilegiate = eseguibili solo in modalità di sistema => '''chiamata di sistema''' da parte di un processo utente per chiedere al SO di fare cose privilegiate.

Chiamata di sistema = trattata come un interrupt software => SO controlla che i parametri siano legali, esegue e ritorna.

Se c'è la modalità di sistema in hardware, i programmi che la violano sono trovati automaticamente dall'hw, il quale invierà una trap al SO => possibile terminazione anomala del processo (eventuale dump).

!!!2.5.2 Protezione dell'I/O
Il funzionamento anomalo del sistema si può avere con:
* chiamate a I/O illegali
* accesso a locazioni di memoria proprie del SO
* rifiuto di un processo di lasciare il processore ad altri

=> tutte le op. I/O sono definite privilegiate => se un utente vuole usare l'I/O deve passare attraverso le chiamate di sistema.

Se un processo utente diventa attivo in modalità supervisore, può fare danni => virus che sfruttano errori di programmazione del SO per abusarne.

!!!2.5.3 Protezione della memoria
* Proteggere la memoria usata dal SO
* Proteggere la memoria usata da un processo
=> i non autorizzati non devono leggere fuori dai loro confini

Confini di memoria => indirizzo di partenza della memoria valida è contenuto nel '''registro base''', indirizzo finale nel '''registro limite''' => ogni processo ha i suoi confini => l'hw controlla ogni accesso in memoria per vedere se è legale.

Registi base e limite sono caricabili solo dal SO.

!!!2.5.4 Protezione della CPU
Il SO deve mantenere il controllo: se un processo prende il sopravvento, il SO scompare

'''Temporizzatore''': un clock che interrompe il computer dopo un tot di tempo.

Uso comune del temporizzatore: si definisce un '''quanto di tempo''' della durata di N millisecondi => alla scadenza una interrupt ferma il processore e trasferisce il controllo al SO, che opera un '''cambio di contesto''' (cap 4).
Changed lines 140-165 from:
Accesso lento e sequenziale => ideale per backup, non per accesso diretto.
to:
Accesso lento e sequenziale => ideale per backup, non per accesso diretto.

!!!2.4 Gerarchia di memorizzazione
Vedi il libro per la piramide. Il succo è che più la memoria è veloce, più è costosa. L'ideale è trovare un compromesso tra velocità d'accesso e quantità di memoria. Per questo c'è la cache.

!!!2.4.1 Caching
Caching = memorizzazione temporanea di informazioni in dispositivi veloci.
Quando si accede ad un sistema di memorizzazione (uno qualsiasi), i dati vengono prima copiati nella cache, che è veloce e vicina al processore, e da lì vengono acceduti.

Gestione della cache = in hw o in sw.
Politiche di aggiornamento = se sono buone, ho 80-99% di accessi in cache.

Nella gerarchia di memorizzazione, un tipo di memoria più in alto può fare da cache per memorie più in basso.

!!!2.4.2 Consistenza
Struttura gerarchica usata come cache => stessi dati che appaiono in modi diversi in due livelli diversi => devo renderli consistenti.

Sistemi con un solo processo: allo stesso dato accede lo stesso processo => accede sempre al livello più alto possibile => non è un problema.

Sistemi multitasking: allo stesso dato possono accedere processi diversi => necessario sincronizzare le copie dei dati disponibili ai vari processi.

Sistemi multiprocessore: l'aggiornamento della cache di un processore deve riflettersi nella cache dell'altro processore => coerenza della cache in genere gestita in hw.

Modi per garantire coerenza = capitolo 16.

!!!2.5 Protezione hardware
Added lines 117-140:
Memoria secondaria di grandi dimensioni.
Composti da:
* piatti magnetici
* braccio
* testina in fondo al braccio

Un piatto è diviso in tracce circolari.
Una traccia è divisa in settori.
Cilindro = insieme delle tracce che stanno sotto il braccio (vedi immaginetta sul libro...)

'''Tasso di trasferimento''' = ritmo con cui i dati vanno da disco a processore.
'''Tempo di posizionamento''' = somma del tempo richiesto per
* spostare il braccio sul cilindro desiderato
* far ruotare il piatto sotto la testina.

Caduta della testina: essa atterra sul piatto e lo distrugge.

'''I/O bus''' = cavi per collegare dischi al computer (EIDE, SCSI, ATA).
I trasferimenti sono gestiti da controller:
* un controller presso il computer
* un controller presso il disco, dotato di cache interna.

!!!2.3.3 Nastri magnetici
Accesso lento e sequenziale => ideale per backup, non per accesso diretto.
Added lines 82-116:
Programmi dei computer: per essere eseguiti devono stare nella memoria centrale (RAM).
RAM = sequenza di parole, ognuna con il proprio indirizzo.

Ciclo di esecuzione di un'istruzione in Von Neumann:
* fetch
* decode
* execute

Situazione ideale = tutti i programmi da eseguire in RAM, per velocità. Ma:
# RAM in genere troppo piccola
# Se spengo, la RAM si cancella

=> esiste una '''memoria secondaria'''.

!!!2.3.1 Memoria Centrale
Memoria centrale = l'unica cui la CPU accede direttamente => ai dischi eg non accede direttamente, perché non può usare indirizzi delle parole nei dischi come usa invece gli indirizzi di memoria.

Spazio di indirizzamento = insieme degli indirizzi di memoria cui la CPU può accedere.

Accesso comdo all'I/O = '''I/O a memoria mappata''', in cui alcuni blocchi dello spazio di indirizzamento sono mappati non nella memoria centrale, ma in registri del controller del dispositivo => utile per dispositivi rapidi eg schede video.

Per spedire dati la CPU:
* scrive quei dati nel registro dei dati
* attiva un bit nel registro di controllo per segnalare che il byte è stato messo
Il dispositivo:
* prende il byte
* azzera il bit nel registro di controllo per segnalare che il byte è stato preso.

'''I/O programmato''': è la CPU che ciclicamente controlla lo stato del bit nel registro di controllo.
'''I/O guidati da interrupt''': è il dispositivo che genera un interrupt dicendo che ha trasferito il byte.

Accesso ai registri della CPU: si ottiene in un clock.
Accesso alla memoria: si ottiene in più clock => rallenta il tutto => occorre della '''cache''' per cercare di velocizzare questo possibile collo di bottiglia (si vedrà poi).

!!!2.3.2 Dischi magnetici
Changed lines 37-81 from:
!!!2.2 Struttura dell'I/O
to:
!!!2.2 Struttura dell'I/O
Controller della periferica = mantiene dati nel buffer locale. Responsabile dello spostamento di dati tra periferiche.

!!!2.2.1 Interruzioni di I/O
Iniziare un'operazione IO:
* CPU: carica i registri appropriati nel controller del dispositivo
* Controller: in base ai valori, decide che azione intraprendere
* Controller: finita l'operazione, genera un'int e avvisa la CPU che ha finito

Dopo che è iniziata, l'operazione di I/O può essere:
* '''sincrona''': quando finisce l'I/O, il controllo torna al processo che chiamò l'I/O
* '''asincrona''': non si aspetta che l'op finisca, e si fanno altre cose nel frattempo.

Attesa della rispsota dell'I/O, alternative:
* '''Wait''' = istruzione che alcune CPU hanno per dormire mentre attendono I/O.
* wait loop: un loop che chiama se stesso fino a che non arriva un int.

I/O sincrono: posso gestire una chiamata I/O alla volta perché aspetto che finisca => no I/O concorrente.

I/O asincrono: meglio, ma devo tener traccia delle molte richieste contemporanee => '''tabella di stato del dispositivo''' che indica
* tipo
* indirizzo
* condizione
del dispositivo. Se il dispositivo è impegnato, allora salvo la richiesta nella tabella => più processi che vogliono accedere allo stesso dispositivo sono messi in una '''coda di attesa'''.

Arriva un interrupt:
* la CPU deve determinare quale periferica lo generò
* la CPU cerca nella tabella di stato del dispositivo e vede se far partire il dispositivo con un altra richiesta

Se dal dispositivo arriva qualcosa che un processo attendeva, posso ridare il controllo a questo processo.

Kernel buffer = dispositivo per salvare i segnali in input prima che qualcuno li richieda (eg buffer della tastiera).

La routine di gestione dell'interrupt salva tutti i registri che la CPU stava utilizzando, così poi può riprendere da dov'era.

Vantaggio dell'I/O asincrono = più efficienza, perché mentre un I/O avviene, la CPU fa altro <= in genere l'I/O è molto più lento della CPU.

!!!2.2.2 Trasferimenti in DMA
Dispositivo ad alta velocità = trasmette veloce quasi quanto la CPU => gli interrupt sarebbero troppo frequenti.

=> DMA: '''direct memory access'''. Il controller del dispositivo imposta il conroller DMA e trasferisce '''blocchi di dati''' direttamente tra sé e la memoria, senza intervento della CPU => un solo interrupt per blocco.

Ocio: cmq il DMA compete con la CPU per l'accesso alla memoria.

!!!2.3 Struttura della memoria
Added lines 1-37:
(:title Sistemi Operativi - Riassunto del capitolo 2:)
%titolo%''':: Sistemi Operativi - Riassunto del capitolo 2 ::'''

[[Torna alla pagina di Sistemi Operativi -> Sistemi Operativi]]

!!Capitolo 2 - Architettura del computer

!!!2.1 Funzionamento del computer
Un computer general-purpose (cioè adatto a fare un po' tutto) ha:
* CPU
* Dispositivi di controllo
* Memoria condivisa

Ogni dispositivo di controllo gestisce una periferica specifica.
Sono tutti su un bus condiviso.
Tutti, CPU e dispositivi, agiscono in modo concorrente per rubarsi a vicenda l'accesso alla memoria => occorre un '''controller della memoria''' per gestire gli accessi.

Per partire quando si dà corrente occorre un programma di '''bootstrap'''
* semplice
* in genere in una ROM con indirizzo noto, così la CPU sa dove andare a pescarlo.

Eventi = segnalati da interruzioni ('''interrupt''').
Gli eventi che le generano possono essere
* provenienti dall'hardware
* provenienti dal software (chiamate di sistema = system call = monitor call)

Sistemi operativi moderni = guidati dalle interruzioni

Eventi = segnalati da interrupt o da '''eccezioni''' ('''trap'''), che sono interruzioni generate dal software (divisioni per zero, accessi non validi alla memoria).

Per ogni interrupt, c'è una routine che lo deve gestire => il controllo deve passare a questa routine => per sapere quale routine assegnare a quale int, c'è una '''tabella'''.

Gestire un interrupt = salvare l'indirizzo dell'istruzione che ha chiamato l'interrupt nello '''stack''', assieme a program counter e a registri => dopo aver gestito l'interrupt, si riprende come se non fosse successo niente.

Chiamata di sistema = un processo utente chiama una funzione del SO => in genere si usa una trap.

!!!2.2 Struttura dell'I/O