|
Wiki
UniCrema
Materie per semestre
Materie per anno
Materie per laurea
Help
|
|
Uni.SOcap2 History
Show 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
|
|