Appunti delle lezioni di “Sistemi Operativi”
2005-06 Scienze di Internet
1. Introduzione
Sistema operativo: è la parte software che si appoggia direttamente all’hardware, di cui ci fornisce una visione più astratta.
Esso ha essenzialmente due obiettivi:
- Convenienza, ovvero rendere facile da usare l’hardware disponibile su una certa macchina.
- Efficienza, ovvero eseguire programmi utenti e fare in modo di risolvere in maniera semplice i problemi degli utenti, mantenendo il processore attivo il più possibile.
Il sistema operativo ha 3 aspetti che possono essere considerati sue caratteristiche peculiari:
- Resource allocator: un sistema che si occupa di gestire le risorse della macchina nel migliore dei modi.
- Control Program: tutte le attività eseguite non devono danneggiarsi tra loro.
- Programma sempre in esecuzione e che non termina mai.
Kernel
Storia. Una volta i sistemi di calcolo erano molto lenti, la memoria molto limitata e il sistema operativo stava perennemente su essa.
1) Sistemi Batch
Veniva eseguita una e una sola applicazione alla volta. Questo però presentava un inconveniente: non c’è uno sfruttamento ottimale delle risorse, per esempio durante un’operazione di I/O il processore rimane inattivo fino al termine.
Sergio Malavolti 2
Appunti delle lezioni di “Sistemi Operativi”. 2005-06 Scienze di Internet
2) Sistemi Batch multiprogrammati
Per ovviare a questo inconveniente essi hanno la caratteristica di eseguire più istruzioni contemporaneamente. Per esempio, quando c’è un’operazione di I/O il processore, invece di rimanere in attesa, seleziona l’attività successiva e la esegue fino a quando non termina l’operazione di I/O.
Successivamente il processore decide se riprendere l’attività precedente o se continuare a eseguire quella corrente; questa decisione può essere influenzata da diversi fattori, come ad esempio la priorità.
La multiprogrammazione è adatta per sistemi con grande quantità di memoria. Ovviamente è necessario un meccanismo della gestione della memoria, in modo che le operazioni di lettura e scrittura siano fatte sui processi corretti e non su altri.
3) Sistemi Time-Sharing
Attuano una forma di multiprogrammazione spinta, ovvero vengono applicati context switch frequenti dal sistema operativo in modo da dare l’impressione all’utente di avere la macchina in suo possesso. Questa idea è resa possibile dai processori che diventano più veloci, le memorie più grandi e dall’introduzione di memorie secondarie.
Il sistema operativo assegna un quanto di tempo ad un’attività: se essa entro la fine del quanto di tempo non ha effettuato una richiesta di I/O il sistema operativo sottrae la CPU al processo e l’assegna ad un altro. Col time-sharing diventa possibile l’interazione con la macchina perché non si utilizzano più le schede perforate come nei precedenti sistemi; questo concetto oggi è utilizzato da tutte le macchine.
4) Personal Computer
Con essi arriva una macchina dove l’idea principale, oltre l’efficienza, è quella della convenienza, ovvero chiunque può utilizzare in maniera veloce e semplice la macchina senza che gli siano richieste conoscenze approfondite. Sostanzialmente c’è un’interattività tra la macchina e l’utente.
Tra gli altri aspetti importanti nei PC, che hanno fatto sì che la differenza tra essi e le altre macchine sia diventata molto più piccola, troviamo:
- Sicurezza e protezione.
- Utilizzati come server.
- Utilizzati come rete.
5) Sistemi paralleli
Sono macchine che hanno al proprio interno più di un processore, quindi c’è più efficienza e un miglioramento del throughput, ovvero il numero di attività che sono portate a termine per unità di tempo. La memoria centrale è una sola.
Sergio Malavolti 3
Appunti delle lezioni di “Sistemi Operativi”. 2005-06 Scienze di Internet
Essi si dividono in due categorie:
- Simmetrici: sulla macchina sono presenti più processori identici in grado di eseguire più attività contemporaneamente. Un vantaggio di questi sistemi è la robustezza, ovvero se si verifica un guasto sul processore ci sono comunque altri processori che possono essere impiegati.
- Asimmetrici: sulla macchina sono presenti più processori ma non identici, per esempio un processore grande e altri piccoli processori secondari dedicati ad attività particolari.
6) Sistemi Real-Time
Ci sono attività che hanno dei vincoli di tempo forti che devono essere rispettati, per esempio la riproduzione di un video multimediale.
Anche questi sistemi si dividono in due categorie:
- Hard real-time: i vincoli di tempo sono forti, nel senso se arrivano certi eventi importanti devono essere eseguiti immediatamente e senza ritardi. Qui la gestione della memoria è relativamente semplice (non viene impiegata la memoria virtuale).
- Soft real-time: hanno caratteristiche meno restrittive. I processi d’elaborazione in tempo reale critici hanno priorità sugli altri processi e la mantengono fino al completamento dell’operazione.
7) Sistemi distribuiti
Sono un’evoluzione dei sistemi paralleli. Si tratta di più macchine collegate tra loro che possono scambiarsi i dati e cooperare. Ogni processore ha la sua memoria centrale.
Presentano diversi vantaggi:
- Resistenza ai guasti.
- Condivisione di risorse anche fisicamente distanti tra loro.
- Comunicazione.
- Più copie del file system su tutte le macchine in modo tale che se vi sono guasti su una macchina il file system viene mantenuto e comunque l’accesso è più veloce da macchina a macchina.
Sergio Malavolti 4
Appunti delle lezioni di “Sistemi Operativi”. 2005-06 Scienze di Internet
2. Architettura del calcolatore
Bus
Formato da una serie di cavetti microscopici dove passano comandi e dati. È la strada attraverso la quale il processore comunica con le altre unità.
Controller
Dispositivo costituito da un piccolo circuito che gestisce fisicamente l’hardware. Siccome lavora a un livello molto basso deve essere a completa conoscenza dell’hardware della periferica di cui si occupa. Nel caso dei dischi controlla i bracci del disco per arrivare alle operazioni e dati richiesti.
Buffer e altri registri
Sono associati ai vari controller e servono per memorizzare i dati che si vogliono leggere o scrivere.
Driver
Parte del sistema operativo che dialoga col controller. In particolare deve essere aggiunto al sistema operativo attuale per permettere il dialogo tra il controller e il dispositivo hardware. Permette al sistema operativo di mascherare la differenza tra le varie periferiche.
Processore
È la risorsa più importante della macchina che ne costituisce il vero cervello.
È costituito da due componenti importanti:
- L’ALU: unità nella quale vengono effettuati i calcoli.
- Control Unit: esegue tutte le funzioni tramite 3 comandi:
- Fetch = estrae l’istruzione.
- Decode = interpreta l’istruzione.
- Execute = esegue l’istruzione (che può essere inviata all’ALU per eventuali calcoli).
Sergio Malavolti 5
Appunti delle lezioni di “Sistemi Operativi”. 2005-06 Scienze di Internet
Pipelining
Tecnica parallelistica in base alla quale divido la CPU S1 S2 S3 S4 S5 T1 T2 in momenti e ad ogni ciclo viene eseguita una parte di un’istruzione. Ogni momento necessita del risultato prodotto dal momento precedente.
Unità di memoria
- MAR: indica un indirizzo di memoria (1234).
- MDR: riporta i dati che si vogliono scrivere o leggere sulla memoria.
- Command: riporta l’istruzione che si vuole scrivere in memoria (“write”).
Questi tre elementi costituiscono un’interfaccia attraverso la quale il processore comunica attraverso la memoria.
Program Counter
Puntatore a una certa cella di memoria che contiene l’istruzione che sarà eseguita al passo successivo.
Instruction Register
Registro dove è presente l’istruzione attualmente eseguita.
Avvio PC
All’accensione del PC (detto BOOT) il sistema operativo viene caricato in memoria e successivamente si metterà in ascolto per le istruzioni che devono essere eseguite.
Interrupt
È un segnale hardware che arriva al processore per comunicargli che il sistema operativo deve intervenire perché si è verificato un evento, per esempio:
- La terminazione di un’operazione I/O.
- Una divisione per zero.
- Un’istruzione che cerca di accedere a una locazione di memoria sbagliata.
Quando arriva l’interrupt, se la CPU sta eseguendo un’attività, essa viene interrotta e salvata in memoria per poi essere ripresa in seguito. A questo punto il sistema operativo tratta l’interrupt. Essa può avere un bit e alcune informazioni che mi indicano come localizzarla sull’interrupt vector, un insieme di indirizzi contenente l’interrupt che a sua volta punta alla procedura che deve essere eseguita. Terminata, la CPU riprende il controllo del processo che stava eseguendo.
È importante che l’interrupt vector sia di proprietà del sistema operativo e che sia gestito interamente da esso.
Mentre tratto un interrupt ci può essere la possibilità che ne arrivino altre: a questo punto possiamo valutarle per importanza.
Unità Input/Output
Possono essere gestite in due modi:
- Sincrono: il processore testa in continuazione un bit sul controller per verificare se l’attività di I/O è terminata. Questo metodo, utilizzato diverso tempo fa, è ovviamente svantaggioso perché il processore perde tempo che potrebbe benissimo impiegare per svolgere altri compiti.
- Asincrono: quando l’attività di I/O è terminata viene inviata un’interrupt per informarne il processore senza bisogno che testi continuamente la situazione. In questo modo può svolgere altro lavoro.
Sergio Malavolti 6
Appunti delle lezioni di “Sistemi Operativi”. 2005-06 Scienze di Internet
Per gestire questo meccanismo asincrono con interrupt il sistema operativo utilizza una tabella (Device Status Table) che mi indica per ciascuna delle periferiche che ho il suo stato e se eventualmente ci sono code.
Memorie
DMA
Se le interrupt sono troppo frequenti il tempo di gestione (overhead) diventa troppo alto e il processore si ritroverebbe a eseguire solo quello. Il DMA è un dispositivo che fornisce un altro modo di interazione del processore con le periferiche I/O. Sostanzialmente mi permette un collegamento diretto tra una periferica veloce e la memoria centrale. C’è una sola interrupt che informa la CPU del completamento dell’attività.
Svantaggio: competizione tra CPU e DMA per l’accesso alla memoria, in particolare quest’ultimo può rubare cicli alla CPU.
Memoria RAM
Memoria abbastanza veloce, ma volatile, cioè perde il suo contenuto allo spegnimento del PC. Di conseguenza serve una memoria permanente per contenere i dati.
Memoria secondaria
Costituita da vari piatti contenenti informazioni su entrambe le superfici. Sono presenti dei bracci che si muovono sui vari piatti per selezionare le informazioni.
- Settore: circa 500 byte.
- Track: insieme cilindrico dei settori.
- Braccio: lento (movimento in millisecondi).
Gerarchia memorie
Registri, cache, RAM, dischi elettronici, dischi magnetici, dischi ottici, nastri magnetici. I primi sono i più veloci e quindi più costosi mentre gli ultimi sono i più lenti ma anche i più economici.
Memoria Cache
Tipo di memoria più veloce da utilizzare da parte del processore perché è più vicina rispetto al processore stesso rispetto alla RAM. Ne abbiamo una interna al chip del processore e una esterna. Esistono per ragioni di efficienza. L’idea è avere una memoria abbastanza vicina al processore che contenga le informazioni che hanno la più alta probabilità di essere eseguite in un dato momento. Quando viene eseguita un’istruzione essa viene anche caricata sulla cache, compresi i dati che vengono utilizzati, in modo che successivamente possano essere utilizzati più velocemente.
Sergio Malavolti 7
Appunti delle lezioni di “Sistemi Operativi”. 2005-06 Scienze di Internet
Esempio: se devo eseguire un loop un certo numero di volte, pago un po’ all’inizio per trasferire i dati dalla RAM alla cache, ma poi ho un guadagno perché tutti i dati (variabili e codice del loop) sono già presenti sulla cache in modo tale da impiegare pochissimo tempo per utilizzarli.
Caching: questa tecnica viene chiamata tale e, oltre a un semplice loop, può essere applicata su qualunque tipo di istruzione arbitraria.
Principio di località dei programmi
Se in un certo momento sto eseguendo una certa istruzione su un certo insieme di dati, negli istanti successivi ho un’altra probabilità che le istruzioni successive siano strettamente correlate a tali dati. Essi non cambiano in maniera brusca, ma in maniera contigua. Sfruttando questo principio, anche tramite la cache, i sistemi operativi moderni riescono quasi al 100% (generalmente 95-98%) a funzionare utilizzando solo la cache.
La cache complica la vita al sistema operativo in caso di multiprogrammazione time-sharing.
- Perché quando si cambia processo la cache va aggiornata.
- Consistenza dei dati: il processore opera sui dati che trova più vicino. Se la CPU modifica il valore di una variabile sul livello più vicino al processore, tale valore non è modificato negli altri livelli. Se quindi si presenta un problema devo andare a recuperare la variabile su un altro livello e questa non sarà aggiornata e, di conseguenza, avrà un valore diverso.
Protezione dell’hardware
Vi sono alcune tecniche per monitorare e proteggere l’attività di controllo del sistema operativo.
1) Dual-Mode
Mi permette di sapere se, all’interno del processore, l’attività in esecuzione è del sistema operativo o dell’utente. Vi sono attività rischiose che devono essere eseguite dal sistema operativo per consentire che tutto venga fatto in maniera corretta, come operazioni I/O o modifica di variabili residenti in memoria.
C’è un bit che mi dice se l’attività in esecuzione è del sistema operativo o dell’utente. Per esempio se sto eseguendo un’attività il bit è settato a 1. Se arriva un’interrupt che mi dice che deve essere eseguita un’istruzione da parte del sistema operativo il bit viene settato a 0.
2) Protezione I/O
Le operazioni di I/O devono essere eseguite da parte del sistema operativo. Di conseguenza sono dette istruzioni privilegiate.
3) Protezione memoria
Tutte le volte che accedo alla memoria il sistema operativo deve verificare che le porzioni di istruzioni eseguite siano nelle celle giuste. Esiste uno schema di base per controllare la memoria.
Le informazioni sull’istruzione attualmente eseguita sono contenute in 2 registri presenti nella CPU:
- Base Register: contiene l’indirizzo della locazione di memoria.
- Limit Register: contiene lo spazio assegnato all’istruzione da eseguire.
Sergio Malavolti 8
Appunti delle lezioni di “Sistemi Operativi”. 2005-06 Scienze di Internet
Vengono effettuati 2 controlli:
- Il primo per vedere se non occupiamo una locazione di memoria sbagliata.
- Il secondo per constatare che non siamo oltre il limite della memoria richiesta.
4) Protezione CPU
Bisogna evitare che l’istruzione che viene eseguita rimanga sul processore per sempre. Viene implementato un clock che mi invia dei tic regolari e un contatore che, ad ogni tic del clock, viene automaticamente decrementato: quando raggiunge il valore 0 viene emessa un’interrupt che dice al sistema operativo di togliere il controllo della CPU sul processo attualmente in esecuzione e di selezionarne un altro.
System Call
Sono messe a disposizione dal sistema operativo per eseguire queste istruzioni privilegiate e possono essere utilizzate dai programmi utenti. Sono istruzioni che mi fanno intervenire il sistema operativo, per esempio quando un programma utente vuole effettuare un’operazione I/O. Dipendono dall’architettura specifica della macchina che stiamo utilizzando.
Funzionamento: quando voglio effettuare un’operazione I/O invoco la system call e il controllo della macchina viene passato al sistema operativo, che setta il bit dual-mode a “0”. Terminata l’operazione il bit viene settato a “1” e il controllo ripassa all’utente che continua ad eseguire il suo programma.
Esempio pratico di system call: supponiamo di analizzare cosa succede quando invochiamo una semplice utility (programma di sistema che si appoggia al sistema operativo) che effettua la copia di un file con la sintassi “cp file1 file2”.
- Vengono letti i nomi dei due file (intervengono system call per leggere l’input da tastiera).
- Viene effettuato l’accesso al primo file (anche qui viene fatta una system call perché l’accesso è riservato al sistema operativo).
- Viene creato il file di output (occorre verificare che il file2 non esista già e, in tal caso, decidere se procedere dialogando con l’utente o ignorando la cosa).
- Si entra in un ciclo dove i caratteri sono copiati dal file1 al file2 (anche questa è un’operazione effettuata dal sistema operativo).
- Vengono chiusi entrambi i files.
Quando invochiamo una system call vengono passati dei parametri al sistem
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.