Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Si descriva il Data Path di una macchina di von Newman Organizzazione dei sistemi di calcolo
Data Path Organizzazione dei sistemi di calcolo
Stati di esecuzione di una istruzione ed interprete Organizzazione dei sistemi di calcolo
Formati di Istruzione Organizzazione dei sistemi di calcolo
Tipi di Istruzioni Organizzazione dei sistemi di calcolo
Architetture con Pipeline Organizzazione dei sistemi di calcolo
Si descriva l’Architettura IntelCore i7Organizzazione dei sistemi di calcolo
Si descriva e si discuta la gerarchia di memoria di un sistema di elaborazione Organizzazione dei sistemi di calcolo
Sistemi RAID Organizzazione dei sistemi di calcolo
Si descriva la Memoria cache e se ne discuta il funzionamento Organizzazione dei sistemi di calcolo
Bus del Calcolatore e arbitraggio Organizzazione dei sistemi di calcolo
Si descriva la tecnica della Paginazione della Memoria Gestione della memoria centrale
Si descriva la tecnica della Segmentazione della Memoria Gestione della memoria centrale
Si descriva la tecnica della Memoria Virtuale Gestione della memoria centrale
File System File system
FAT e i-node File system
Tipi di Indirizzamento
Formato di Microistruzioni Mic-1
Formato delle istruzioni del linguaggio assemblativo
Comandi LINUX e DOS
Tipi di Dati
Codici a Correzione di Errore
Per vari motivi come: cambiamenti di tensione di alimentazione dei chip, accoppiamento tra le piste, fenomeni atmosferici o altre
cause, i valori sulle linee di trasmissione possono essere modificati e i dati trasmessi errati.
I codici di correzione degli errori sono codici che consentono la rilevazione e/o correzione degli errori di una parola. La distanza di
HAMMING tra A e B è definita come:
Si definisce distanza di Hamming di un codice la minima distanza tra due parole di un codice. Se tra due parole di codice vi è una
distanza di Hamming pari a d, allora saranno necessari d errori singoli per trasmettere una parola nell’altra (ovvero n° di bit in cui
differiscono nella stessa posizione due parole es. 10001100 . 00101110).
La distanza di Hamming gioca un ruolo chiave nella rilevazione e correzione di errori in un codice:
● Per rilevare d errori singoli è necessario un codice con distanza Hamming d+1 (infatti in questo modo non esiste alcun
modo in cui d errori singoli possono cambiare una parola valida in un’altra parola valida)
● Per correggere d errori singoli è necessario un codice con distanza di Hamming 2d+1 (infatti in questo modo anche
con d cambiamenti la parola di codice originaria continua ad essere “più vicina” rispetto a tutte le altre non esiste alcun
modo in cui d errori singoli possono cambiare una parola valida in un’altra parola valida).
Nei codici a correzione di errori si utilizzano alcuni bit extra (ridondanti) che vengono aggiunti alla parola stessa. Questi bit si
chiamano BIT DI CONTROLLO.
Data una parola di M bit di dati, si aggiungono R bit extra di controllo. Si ottiene quindi una CODEWORD composta di N=M+R
bit. Vi è una condizione di codice ottimo ovvero : Bit_datiM + Bit_controlloR + 1 ≤ 2bit_controllo
R
Tutti i bit la cui posizione è potenza di 2 sono bit di parità (in esempio 1,2,4,8,16). Quelli restanti sono usati per i dati da
trasmettere.
Ciascun bit di parità controlla posizioni specifiche dei bit ed è impostato in modo che sia pari il numero totale dei bit che hanno
valore 1 nelle posizioni controllate.
Ogni posizione va convertita in binario, (es 1 = 00001, 21=10101). Il bit 1 controlla i bit dispari dato che 1=00001 andrà a
controllare tutti i bit aventi posizione (in binario) con cifra corrispondente a 1. Ad esempio, il bit 1=0001 controlla 3,5,7… 3=0011
5=0101, 7=0111.
Rispettivamente per l’esempio sopra:
• Il bit 1 controlla i bit dispari: 1,3,5,7,9,11,13,15,17,19,21 infatti ci sono in totale 6 bit a 1 quindi il bit 1 per rendere pari i bit
controllati deve essere 0.
• il bit 2 controlla i bit : 2,3,6,7,10,11,14,15,18,19
• Il bit 4 controlla i bit: 4,5,6,7,12 ,13,14,15,20,21
• Il bit 8 controlla i bit: 8 ,9,10,11,12,13,14,15
• il bit 16 controlla i bit: 16,17,18,19,20,21. infatti ci sono in totale 3 bit a 1 quindi il bit 16 per rendere pari i bit controllati deve
essere 1.
FULL ADDER
Si descriva la struttura del circuito Latch, Flip Flop temporizzato e se ne illustri il funzionamento
Questi circuiti di solito sono utilizzati per le memorie centrali. Il latch può essere di due tipi: uno normale (SR) e uno temporizzato
(D). Il latch ha la proprietà di memorizzare un bit. Il flip flop invece hanno caratteristiche simile ai latch ma differiscono da essi in
quanto hanno un segnale di controllo detto clock in relazione al quale è sincronizzato al suo funzionamento.
Data Path
• Il data path è un insieme di unità di calcolo, come ad esempio le unità di elaborazione (ALU), i registri e i moltiplicatori necessari
per l'esecuzione delle istruzioni nella CPU, è di grande importanza per l’esecuzione di tutte le operazioni aritmetico-logiche.
• Il data-path insieme all’unità di controllo costituisce il nucleo della CPU altri 3 componenti che la completano sono la memoria,
gli input e output.
Tipi di istruzioni
Trasferimento
– processore – memoria (e viceversa)
– processore - modulo di I/O (e viceversa)
• Elaborazione di dati (operazioni logico-aritmetiche)
• Controllo (modifica della sequenza di esecuzione)
Una istruzione può contenere una combinazione delle precedenti possibilità
Il set di istruzioni (ISA) dipende dal processore
Formati di Istruzione
Se dobbiamo compilare un linguaggio di alto livello ed eseguirlo in maniera efficiente dobbiamo utilizzare istruzioni CISC o RISC
1. CISC: avere una architettura molto complessa che includa un numero elevato di istruzioni e di modi di indirizzamento e che
includa anche istruzioni molto vicine a quelle presenti nel linguaggio di alto livello (interprete)
2. RISC : semplificare il set delle istruzioni e adeguarlo alle necessità dell’utente
Architetture con Pipeline
A livello di istruzione, uno dei metodi applicati è quello di Pipeline, è un’architettura nonché un miglioramento di un’architettura
tradizionale di un microprocessore in cui si cerca di introdurre una sorta di parallelismo temporale fra i vari componenti del
microprocessore.
Il meccanismo di pipeline divide il ciclo di esecuzione in più parti e ciascuna parte è affidata ad una componente hardware
• incrementa il throughput (quantità di istruzioni eseguite in una data quantità di tempo)
• dipende dal formato di istruzioni adottato
Nota: in una architettura RISC la gestione della pipeline è più semplice di quella in una CISC.
• Ogni processore i7 può essere compatibile con memorie DDR3/4 dipendentemente dal i7 preso in questione esse
permettono il doppio di transazioni rispetto alla loro frequenza base es: una DDR3 a 666Mhz permette 1332 milioni di
transazioni al secondo (DDR = Double Data Range)
• Le connessioni tra CPU e periferiche avvengono tramite bus PCI Express: una interfaccia seriale veloce in cui ogni singolo
collegamento forma una “lane”.
• DMI (DIRECT MEDIA INTERFACE): connessione tra CPU e chipset, ossia insieme di chip che servono alla gestione delle porte,
USB, Audio, PCIe, Flash e il DMA lo fa attraverso il chip I/O Controller Hub che al suo interno ha anche il controllo del clock in
real time.
Scendendo nella gerarchia: Diminuisce il costo per bit, aumenta la capacità, aumenta il tempo di accesso, diminuisce la frequenza
di accesso del processore.
Sistemi RAID
Lo scopo del RAID è migliorare prestazioni e affidabilità di un sistema di memorizzazione di mazza utilizzando una batteria di
dischi piuttosto che un unico disco.
Al sistema operativo un disco RAID appare come un unico disco, potenzialmente con prestazioni e affidabilità maggiori rispetto ai
dischi precedenti
• Implementazione:
- tecnologia SCSI che consente l’utilizzo simultaneo di più dischi con buone prestazioni
- un disco RAID consiste in un controllore RAID SCSI più un insieme di dischi SCSI.
I RAID hanno la proprietà di distribuire i dati sulle diverse unità consentendo elaborazioni parallele.
• In tutti i cicli di istruzione la CPU accede alla memoria principale almeno una volta
• La velocità del processore è limitata dalla velocità della memoria
• La velocità della memoria centrale è minore di quella del processore
• Strutturando il principio di località si inserisce una memoria piccola e veloce (la cache) fra processore e memoria centrale
• Obiettivo della cache è:
- fornire una memoria con velocità prossima a quella del processore
- disporre una quantità di spazio sufficiente per non rallentare il processore
- contenere i costi delle memorie del sistema
• Il contenuto della cache è una copia di una porzione della memoria centrale
L’arbitraggio del BUS serve per decidere quale dispositivo può accedere al BUS. L’arbitro quasi sempre è integrato all’interno del
chip della CPU. Tutti i dispositivi sono collegati ad una unica linea nell’ordine che si desidera dare loro (l’ordine è uguale alla
distanza del dispositivo dall’arbitro = livello di priorità). L’arbitro vede solo se c’è una richiesta, se c’è concede il bus e se ne serve
il dispositivo più vicino all’arbitro lungo il “festone”, che è quello che ha fatto la richiesta, se non l’ha fatta si passa oltre al
successivo, la concessione passa lungo tutto il festone di dispositivo in dispositivo fino al dispositivo che ha fatto richiesta.
In alcuni sistemi invece di un festone si usano anche 2,4 o 8 livelli e così si può assegnare una priorità in base alla distanza e al
livello di priorità del festone.
Thread e Processo
Processo:
possiede delle risorse:
- Spazio di indirizzamento virtuale che contiene l’immagine del processo
- può chiedere ulteriore memoria
- può chiedere il controllo di canali di I/O , il controllo di dispositivi
- può chiedere files
possiede unità di esecuzione:
- ha uno stato (ready, running, blocked, swapped, …)
- ha una priorità e deve essere schedulato
Thread (light weight process LWP):
- non possiede risorse
- viene allocato (main memory)
- è una traccia in esecuzione in uno o più programmi
Inoltre i Thread condividono lo stato e le risorse del processo a cui appartengono, risiedono nello stesso spazio di indirizzamento
e hanno accesso agli stessi dati.
Vi sono (oggigiorno tutti) sistemi operativi che supportano più thread per ogni processo. Ad esempio, lo scorrimento della pagina
con la barra laterale richiede il thread eventi che controlla la barra di scorrimento e il thread di ridisegno dello schermo che
ridisegna la pagina in base allo spostamento. Ovviamente è Necessitata la sincronizzazione tra i thread!
Iv antaggi dell’utilizzo dei thread sono ad esempio:
- Il tempo di creazione di un nuovo thread è inferiore al tempo di creazione di un nuovo processo
- Come il tempo di terminazione di un thread è inferiore a quello di un processo
- tempo necessario allo switch tra threads all’interno dello stesso processo è inferiore al tempo di switch tra processi
Gli svantaggi sono:
- La sospensione di un processo richiede che tutti i thread siano sospesi contemporaneamente perché si deve liberare
spazio in memoria e tutti i thread utilizzano lo stesso spazio di memoria condivisa.
- La terminazione di un processo richiede che tutti i thread siano terminati.
Ovviamente i thread all’interno di uno stesso processo condividono memoria e files , infatti vi è uno scambio di dati senza
richiedere l’intervento del kernel. Inoltre, vi è la necessità di sincronizzare le attività dei threads.
Kernel e Microkernel
Il kernel è la chiave di un sistema operativo, ovvero il software che fornisce un accesso sicuro e controllato dell’hardware ai
processi in esecuzione sul computer. Dato che possono eventualmente essere eseguiti simultaneamente, il kernel può avere la
responsabilità di assegnare una porzione di tempo-macchina (scheduling) e di accesso all’hardware a ciascun programma
(multitasking).
Mentre il m icrokernel è un piccolo nucleo del SO, contrine le funzioni essenziali del SO, servizi che solitamente sono inclusi nel
SO sono sottoinsiemi esterni al microkernel ed eseguiti in modalità utente come : device drivers, file systems, virtual memory
manager, windowing system, security services.
Il microkernel deve contenere le funzioni che dipendono direttamente dall’hardware, le funzioni per la comunicazione tra
processi e la gestione primitiva della memoria.
I vantaggi derivati dal Microkernel sono:
- Interfaccia uniforme: I moduli usano stesse interfacce per le richieste al microKernel
- Estensibilità: introduzione di nuovi servizi o modifiche non richiedono modifiche del microkernel
- Flessibilità: a seconda delle applicazioni certe caratteristiche possono essere ridotte o potenziate per soddisfare meglio le
richieste dei clienti. Es. Windows home- professional- ultimate.
- Portabilità: il cambio dell’hardware comporterà unicamente la modifica del microkernel.
- Affidabilità: lo sviluppo di piccole porzioni di codice permette una migliore ottimizzazione e test.
- Supporto ai sistemi distribuiti: ogni servizio è identificato da un numero nel microkernel e una richiesta da client non è
necessario che sappia dove si trova il server in grado di soddisfare la stessa.
Stallo di processi
Un insieme di processi è in stallo (deadlock) se ogni processo è in attesa di un evento che solo un altro processo nello stesso
insieme può generare. Nessuno dei processi in stallo può passare in esecuzione, rilasciare risorse, essere riattivato. Le condizioni
per lo stallo sono di un processo sono che vi siano almeno 2 processi e che ognuno aspetta una risorsa occupata da un altro
processo in attesa circolare.
Algoritmo Dekker
Costituisce una soluzione completa al problema della mutua esclusione nella coordinazione decentrata di processi
(sincronizzazione), impedendo lo stallo (deadlock) ed assicurando che soltanto un processo alla volta possa eseguire una sezione
critica (serializzazione). A differenza da altre soluzioni di coordinazione decentrata, l'algoritmo di Dekker funziona correttamente
anche quando lo scheduling dei due processi si alterna imprevedibilmente sezione critica il flag viene cancellato. Il principale
inconveniente della coordinazione decentrata sussiste tuttavia: i processi in attesa non rilasciano il controllo del processore, ma
continuano ad utilizzarlo attraverso cicli di attesa attiva.
In informatica la paginazione (o paging) è la tecnica attraverso la quale il sistema operativo del computer, per mezzo dei rispettivi
algoritmi di paging, suddivide la memoria in parti di dimensioni minori, e la alloca al programma da eseguire usando pagine come
blocco minimo di lavoro.
La memoria fisica viene suddivisa in pagine di dimensione fissa chiamate pagine fisiche o frame.
La memoria logica è suddivisa in pagine logiche o virtuali di stessa dimensione delle pagine fisiche.
Caricamento in memoria di un processo:
• si prelevano le pagine logiche dalla memoria ausiliaria
• si caricano le pagine logiche nelle pagine fisiche (blocchi) della memoria centrale
Il sistema operativo tiene traccia della corrispondenza tra pagine virtuali e pagine fisiche mediante la tabella delle pagine (TDP) o
page table.
Il sistema operativo tiene traccia dello stato di tutte le pagine fisiche mediante la tabella di memoria (TDM).
File System
È un meccanismo con il quale i files sono posizionati e organizzati su dispositivi di archiviazione (dischi rigidi, cd, ecc. o in casi
particolari anche nella RAM) o su dispositivi remoti tramite protocolli di rete.
Per memorizzare grandi quantità di informazioni, rendere la memoria permanente e dare la possibilità a più processi di accedere
alle stesse informazioni è necessario registrare tali informazioni in dischi o altri supporti in unità dette files. Il sistema operativo
consente la gestione dei file mediante il modulo di gestione del File System. Oltre al contenuto proprio del file, il file system
gestisce informazioni complementari relative al file come: struttura, nome, tipo di accesso, protezione.
FAT e i-node
FAT (File Allocation Table) utilizza la tecnica con allocazione a lista concatenata con indice, l’elenco dei blocchi assegnati al file è
mantenuto mediante una tabella. Ogni elemento della tabella contiene un numero di blocco (su disco) successo fino all’ultimo
che punta a NULL (blocchi vuoti). L’elemento directory deve contenere il numero del 1° blocco del file.
I pregi dell’allocazione FAT sono: l’intero blocco su disco è usato per i dati (senza puntatori), l’accesso diretto ad un blocco è
rapido. I difetti sono: ad un gran numero di blocchi di disco corrisponde una tabella grande che occupa molto spazio in memoria
centrale, la lettura della FAT può causare numerosi spostamenti della testina.
Mente l’allocazione mediante tabelle i-node utilizza l’allocazione indicizzata dove tutti i puntatori ai blocchi di un file sono
raggruppati in un solo blocco indice (index block). Ogni file ha proprio blocco indice (tabella+info), l’elemento directory contiene
l’indirizzo blocco indice.
Gli i-node sono delle piccole tabelle che contengono:
- attributi dei file
- gli indirizzi dei primi quindici blocchi assegnati al file (di cui i primi 12 puntano a blocchi diretti, gli altri 3 a blocchi indiretti).
Tipi di Indirizzamento
I microprocessori sono capaci di accedere agli operandi che vengono recuperati dall'unità di controllo in base al loro indirizzo, che
può essere specificato in vari modi, detti appunto tipi di indirizzamento.
Possono essere di quattro tipi:
● Diretto immediato: Il dato è presente in memoria nella locazione immediatamente successiva all'istruzione: è parte
integrante dell'istruzione stessa. Non utilizza registri ma viene o specificato nell'istruzione il valore del dato oppure viene
utilizzata una variabile che contiene il dato in memoria;
● Diretto: L'opcode di una istruzione si riferisce già ad un certo particolare dato: si tratta in genere di istruzioni speciali.
● A registro: L'operando è contenuto in uno dei registri della CPU che essendo interni al processore permettono un accesso
veloce.
● A registro indiretto: L'istruzione contiene sia un indirizzo immediato che l'indicazione di un registro: la CPU carica il dato
dall'indirizzo ottenuto sommando il valore immediato al valore del registro.
● Indicizzato: il registro di un istruzione viene specificato da più di uno spaziamento costante.
Tipi di Dati:
● Booleani: True/False - 1/0
● Numeri: interi, razionali,
con virgola mobile
● Caratteri e stringhe:
generalmente ASCII