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

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Sistemi Operativi - Riassunto del capitolo 2

 :: Sistemi Operativi - Riassunto del capitolo 2 ::

Torna alla pagina di 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

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

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:

  1. RAM in genere troppo piccola
  2. 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

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.

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

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:

  1. user mode = modalità utente
  2. 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).

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