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.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Sistema di Elaborazione
Un sistema di elaborazione (o di calcolo) è un insieme di risorse hardware e software per l'elaborazione automatica delle informazioni. Può essere suddiviso in 4 componenti:
- Hardware: le risorse di calcolo fondamentali (CPU, memoria, dispositivi di I/O);
- Sistema Operativo: controlla e coordina l'utilizzo dell'hardware da parte dei vari programmi applicativi o di diversi utenti;
- Programmi Applicativi: definiscono come le risorse del sistema devono essere usate per risolvere i problemi di elaborazione dei diversi utenti;
- Utenti: coloro che utilizzano i programmi applicativi.
Classificazione di Flynn (basata su architetture hardware)
I sistemi di calcolo sono stati classificati sulla base delle architetture hardware in sistemi:
- SISD (single instruction single data): calcolatori monoprocessore;
- SIMD (single instruction multiple data): array processor;
- MISD (multiple instruction single data);
- MIMD (multiple instruction multiple data): multiprocessori, multicalcolatori strettamente accoppiati e multicalcolatori lassamente accoppiati.
Sistema Operativo
E' un insieme di programmi (software) che gestisce gli elementi fisici di un calcolatore (hardware), fornisce una piattaforma o un ambiente ai programmi applicativi e agisce da intermediario tra l'utente e la struttura fisica del calcolatore tramite un'interfaccia. Un SO è formato da:
- Interfaccia;
- Allocatore di risorse: gestisce ed allocca in modo efficiente le risorse;
- Programma di controllo: controlla l'esecuzione dei programmi utenti e le operazioni dei dispositivi di I/O;
- Kernel: l'unico programma che è sempre in esecuzione.
Classificazione basata sui SO
I SO si dividono in:
- Batch: un solo job alla volta al SO in memoria;
- Multitasking: diversi job oltre al SO in memoria e CPU multipla tra le job.
Nel multitasking i sistemi si suddividono in: multiprogramming, time-sharing e real-time (hard e soft).
Un sistema operativo svolge dunque diverse funzioni come la gestione dei processi, la gestione della memoria centrale, la gestione dei dispositivi di I/O, gestione della memoria secondaria, la gestione dei file system, la gestione delle reti, la gestione della sicurezza e l'interpretazione dei comandi.
I SO vengono suddivisi in diverse categorie che si differenziano tra di loro per la loro architettura e per i metodi di accesso all'hardware; si differenziano quindi in:
- - ARCHITETTURE MONOLITICHE: il SO e' contenuto all'interno di un unico blocco che si interfaccia direttamente con l'hardware (es: MS-DOS e UNIX);
- - ARCHITETTURE STRATIFICATE: il SO e' suddiviso in un certo numero di strati che prendono il nome di livelli; ogni strato e' costruito sopra gli strati precedenti, il livello piu' basso (livello 0) e' l'hardware mentre il livello piu' alto (n) e' l'interfaccia utente; i livelli sono definiti in modo che ogni livello utilizzi solo operazioni e servizi che appartengono a livelli inferiori (es: OS 2);
- - ARCHITETTURE MICROKERNEL: un microKernel offre servizi minimi di gestione dei processi, della memoria e della comunicazione, tutto il resto viene visto come programmi applicativi utente e di sistema. Nello spazio utente risiedono dunque applicazioni client e vari servizi che comunicano tra loro scambiando messaggi col micro Kernel (es: Windows NT e Symbian);
- - ARCHITETTURE IBRIDE: a meta strada tra architettura monolitica e quella stratificata, ovvero ha un'architettura monolitica ma una usa dei moduli (es: Linux);
- - MACCHINE VIRTUALI: una macchina virtuale porta all'estremo l'approccio stratificato, tratta l'hardware ed il Kernel del SO come facenti parte entrambi dell'architettura creando l'illusione ad ogni processo di avere a sua completa disposizione un proprio processore con la sua memoria.
Nei sistemi multiprocessore, dove ogni processore oltre ai registri ha una sua cache privata, il caching introduce il problema noto come COERENZA DELLA CACHE: le CPU possono elaborare dati in modo concorrente e, dato che esiste, nuove più copie simultanee della stessa variabile in diverse cache, vi è la possibilità che vengano introdotte delle incoerenze nel momento in cui uno dei processori modifica la variabile.
Nei sistemi multiprocessore, si bisogna quindi adottare dei meccanismi di coerenza che permettono di conoscere G lo stato di un dato:
- UNA CACHE PER OGNI DATO —> UMA e NUMAUn solo processore alla volta può avere in cache una copia del dato.
- BUS SNOOPING —> UMA e NUMAOgni cache controller spia il bus per cambiare lo stato dei dati nella sua cache, essendo collegato al bus degli indirizzi spia gli indirizzi che passano sul bus.
- CENTRALIZED DIRECTORY —> UMA e NUMAIl sistema mantiene una directory centralizzata, dove per ogni dato è indicato in quale cache è copiato e quale è il suo stato, directory unica.
- HOME-BASED DIRECTORY —> NUMAIl sistema mantiene una directory per ogni nodo, dove per ogni dato della memoria locale del nodo è indicato in quale cache è copiato e quale è il suo stato.
— Protocolli di COERENZA: ogni nodo (processore) associa ad ogni blocco di
memoria uno STATO che indica la disponibilità di quel blocco per quel nodo,il controllore di ogni cache si deve attenere al protocollo scelto:
- osservando gli eventi : richieste che provengono del proprio processore e da altri processori (che transitano sul bus);
- eseguendo azioni sul bus (che verranno osservate dagli altri controllori);
- cambiando lo stato locale del blocco interessato (un blocco può trovarsi in stati diversi su nodi diversi);
① PROTOCOLLI BASATI SULL'INVALIDAZIONE (MSI e MESI) : quando un blocco
Viene modificato da un nodo, quel blocco viene marcato come INVALIDO.
② PROTOCOLLI BASATI SULL'AGGIORNAMENTO (DRAGON) : quando un blocco
condiviso viene modificato da un processore, il suo valore viene aggiornato
nella cache di tutti i processori che possiedono quel blocco; questi protocollihanno miss-rate più basso, ma generano più traffico sul bus.
Nelle architetture più semplici si hanno 3 tipi di schemi per eseguire le azioni di I/O:
- BUSY WAITING (ATTESA ATTIVA): la CPU chiede un'operazione di I/O ad una periferica ed attende il risultato controllando periodicamente il registro di stato (fa polling). CONSEGUENZE: la CPU rimane bloccata e non continua l'esecuzione del programma finché la sua richiesta di I/O non è soddisfatta, la CPU non è utilizzata al massimo delle sue potenzialità.
- I/O guidato da INTERRUPT: dato che CPU e dispositivi di I/O hanno velocità molto diverse, è opportuno non tenere la CPU bloccata in un ciclo di controllo dei bit di stato in attesa che termini l'operazione richiesta bensì utilizzare la CPU in altre azioni; mentre la CPU sta eseguendo un altro programma, la periferica continua ad attendere l'input, una volta che ha ottenuto il risultato, il controller del dispositivo invia una richiesta alla CPU che prende il nome di INTERRUPT, la CPU identifica la richiesta e riprende l'esecuzione del primo programma.
Il segnale di interrupt viene inviato sul bus di controllo, che dunque è bidirezionale.
- COMMAND INPUT: la CPU invia una richiesta alla scheda di controllo, a questo punto la CPU può essere assegnata ad altri programmi.
- INTERRUPT: appena arriva l'input, che viene salvato in un registro del controller, esso genera un interrupt.
- CPU OPERA: la CPU copia in memoria il valore salvato nel registro, interrompendo l'esecuzione del secondo programma.
Sono INTERRUPT HARDWARE poiché realizzate a livello circuitale, sono dei segnali: ASINCRONI.
Nel caso in cui ci siano più dispositivi che inviano un interrupt, la CPU ne può gestire solamente uno alla volta, per cui:
- i segnali provenienti da dispositivi diversi vengono messi in OR;
- vengono poi utilizzate 2 tecniche differenti per individuare il dispositivo che ha generato l'interrupt:
- POLLING: la CPU interroga i dispositivi per ordine di importanza, ciò determina una gerarchia implicita e tempi diversi nell'individuare la richiesta; trovato il dispositivo indiziamo al suo INTERRUPT HANDLER. In questo caso la CPU deve interrogare tutti i dispositivi, perciò tempi lunghi.
- INTERRUPT VETTORIZZATO: questa tecnica utilizza un protocollo di comunicazione tra CPU e dispositivi, quando la CPU riceve la richiesta di interrupt invia un segnale di Acknowledge (INTA), quando il controller riceve l'ACK risponde inviando sul bus dati un ID e un codice identificativo dell'interrupt che la CPU utilizzera per individuare l'INTERRUPT HANDLER nel vettore degli interrupt. I dispositivi sono collegati in DAISY CHAIN, il segnale di INTA viene dunque propagato sequenzialmente, ciò implica una gerarchia tra i dispositivi.