Sei sulla pagina 1di 18

Lezione 1

Computer
Il computer è un dispositivo fisico che esegue programmi.
Esistono computer riprogrammabili dall’utente detti general purpose e
computer dedicati a una sola applicazione specifica detti special purpose.
Un computer general purpose può essere:
• monoutente (monotasking o multitasking)
• multiutente (è multitasking e effettua timesharing delle risorse).
Le macchine virtuali
Una macchina virtuale rende possibile riprodurre il funzionamento di altri
sistemi operativi, di telefoni cellulari o di interi computer direttamente sul PC o
su altri dispositivi mediante emulazione.
Possiamo usarla contemporaneamente al nostro sistema operativo, unico
difetto è l’uso eccessivo della memoria.
Architettura dei sistemi di elaborazione
Un sistema di elaborazione può essere definito come l’insieme di hardware
e di software.
Firmware, formato dall’insieme di programmi memorizzati direttamente sui
circuiti elettronici.
L’architettura dei computer è l’insieme di concetti che studiano come
progettare al meglio un sistema di elaborazione. L’architettura dei
calcolatori ha come obiettivo quello di ottenere le migliori prestazioni dai
componenti elettronici.
I componenti elettronici che formano un computer possono essere divisi in
due categorie:
• porte logiche
• generatori di segnali
Porte logiche: Sono dei circuiti elettronici in grado si svolgere le operazioni
algebriche con l’utilizzo dei valori logici Vero o Falso che corrispondono al
passaggio o al non passaggio di corrente elettrica nei circuiti. Le 3 porte
principali sono AND, OR, NOT.
I generatori di segnale: I generatori di segnali sono componenti in grado di
produrre un segnale periodico utile a sincronizzare gli elementi hardware
presenti nei computer.
Il modello di Von Neumann
Il modello di Von Neumann descrive il comportamento di una macchina che il
suo inventore chiamò stored-program computer.
Il computer che è rappresentato dalla CPU ha il compito di:
• prelevare o modificare il contenuto della memoria
• prelevare o modificare informazioni dai dispositivi di input/output fornendo
informazioni in uscita oppure leggendo informazioni in ingresso.
Inoltre esegue le azioni in modo sequenziale, cioè una alla volta, a una
velocità elevata.
E la sua velocità è legata alla frequenza di clock ovvero il numero di
processi al secondo.
Lo stored-program è l’insieme delle istruzioni che la CPU deve eseguire,
memorizzate nella memoria del computer. L’insieme delle istruzioni
rappresenta il programma da eseguire.
I componenti principali di questo modello sono: La CPU, la memoria
centrale e i dispositivi di input output. Troviamo anche i BUS
rappresentano il 4 elemento che consente di trasferire le informazioni. Le
frecce bidirezionali che troviamo nello schema segnalano la possibilità di
scrittura e lettura da parte del dispositivo.
Modello di Harvard
A differenza di quello di Neumann, questo dedica due memorie distinte per i
dati e per le istruzioni.
La memoria
La memoria è organizzata in celle da un byte ciascuna e l’accesso ad esse
avviene tramite indirizzi chiamati indirizzi logici che individuano la casella in
cui si trova il dato.
Può essere RAM (Random Access Memory) oppure ROM (Read Only
Memory).
RAM è ad accesso casuale, volatile e riscrivibile.
ROM è di sola lettura ed è permanente.
L’I/O (input/output)
I dispositivi di input consentono di acquisire segnali provenienti dall’esterno
mentre i dispositivi di output consentono di inviare segnali al mondo
esterno (i segnali sono rappresentati da dei bit).
CPU e I/O
La CPU gestisce la comunicazione con l’I/O in modo asincrono tramite un segnale
chiamato interrupt (IRQ). I dispositivi di I/O spesso sono solo delle interfacce controller
con una periferica vera e propria.
I controller
Sono dei dispositivi che si affiancano ad un dispositivo vero e proprio e gestiscono il
dialogo tra quest’ultimo e il BUS a esso collegato attraverso un protocollo di
comunicazione rappresentato dall’insieme di regole che governano la comunicazione tra
CPU e dispositivo.
I BUS
Il BUS dati consente la trasmissione dei dati dalla CPU agli altri elementi e
viceversa (bidirezionale). Il BUS indirizzi contiene l’indirizzo della cella di
memoria o del dispositivo di I/O sul quale o dal quale la CPU ha deciso di
operare (monodirezionale). Il BUS di controllo trasporta gli ordini dalla CPU
e restituisce i segnali di condizione/stato dai dispositivi.
CPU
Esegue l’elaborazione dei dati, ed è rappresentata a livello fisico dal
microprocessore. Esegue le istruzioni del programma, scritto in linguaggio
evoluto ma poi tradotto in linguaggio macchina.
Lezione 2
Il microprocessore
Il microprocessore è un circuito integrato costituito da un monocristallo di
silicio puro.
Il silicio è un semiconduttore ed è in grado quindi di resistere al passaggio di
corrente elettrica in misura maggiore rispetto ai normali conduttori come il
rame, ma non tanto quanto gli isolanti.
l microprocessore svolge fondamentalmente due funzioni: genera i segnali
necessari al funzionamento dei circuiti a esso collegati ed esegue i calcoli
aritmetici e logici.
Possiamo suddividere quindi la CPU in due unità fondamentali:
1 L’unità di controllo
2 L’unità aritmetico-logica (ALU, Arithmetic Logic Unit).
Inoltre, essa contiene anche una memoria interna formata da diverse celle di
memoria dedicate a scopi specifici, chiamati registri di memoria che
vengono utilizzati per il controllo dell’esecuzione di un programma.
Ciclo macchina
Il procedimento attraverso il quale la CPU esegue un’istruzione, prende il
nome di ciclo macchina.
Ogni ciclo macchina viene eseguito molto velocemente e in maniera ciclica a
sua volta con altri cicli macchina, fino a un reset.
Il numero di cicli macchina eseguiti in un secondo di tempo prende il nome di
Hertz (Hz).
Può essere suddiviso in quattro fasi:
Fetch dell’istruzione
Fase in cui la CPU deve reperire l’istruzione da eseguire.
La Control Unit legge la cella di memoria il cui indirizzo è memorizzato in un
apposito registro chiamato contatore di programma.
Decode dell’istruzione
Fase interna alla CPU durante la quale avviene l’interpretazione
dell’istruzione e la preparazione dei dispositivi necessari.
Fetch degli operandi
E’ un’operazione di lettura di un dato, dalla memoria o da un registro che
consente di completare l’esecuzione dell’istruzione.
Fase di Execute.
In questa fase la Control Unit invia segnali che rappresentano opportuni
comandi per l’esecuzione.
Piu in dettaglio:
Più in dettaglio, l’esecuzione di ogni istruzione da parte della CPU richiede una serie di
passi che, in linea di massima, possono essere così riassunti.
1. Preleva il codice macchina dell’istruzione di indirizzo uguale al contenuto del registro
PC e inseriscilo nel registro IR.
2. Incrementa il contenuto del registro PC per “puntare” all’istruzione seguente.
3. Decodifica l’istruzione appena prelevata.
4. Se l’istruzione necessita di operandi, determina dove si trovano (memoria oppure
registri).
5. Se necessario, preleva dalla memoria gli operandi e ponili nei registri della CPU.
6. Esegui l’istruzione.
7. Salva il risultato in un registro o in una cella di memoria.
8. Torna al punto 1.
Memory Dump
La memory dump identifica lo stato in cui si trovano le celle della memoria in
un determinato momento In alcuni casi viene anche mostrato il corrispettivo
ASCII del contenuto della singola cella di memoria.
Data path
Il data path è una sezione della CPU che raggruppa l’ALU e i registri Il
passaggio di due operandi attraverso l’ALU e la memorizzazione del risultato
in un nuovo registro viene detto ciclo di data path

L’architettura interna della CPU


Oltre alla memoria centrale (RAM), possiamo individuare i seguenti elementi funzionali
della CPU:
–unità di controllo (CU, Control Unit);
– registro PC (Program Counter);
• registro IR (Instruction Register);
• registro PSW (Process Status Word);
–ALU; – registri generali;
– registro MAR (Memory Address Register);
– registro MDR (Memory Data Register);
–BUS di controllo;
–BUS indirizzi;
–BUS dati

Il bus interno
Si tratta di un BUS che collega tutti gli elementi che fanno parte della CPU
senza distinzione tra dati e indirizzi.
I registri interni
Un registro è dove vengono memorizzate informazioni per un breve periodo ti
tempo e servono per trasferire dati tra celle di memoria.
I registri non possiedono un indirizzo ma un nome specifico.
Esistono i registri accessibili dal programmatore e altri che invece
risultano inaccessibili al programmatore, in quanto vengono usati
direttamente dalla CPU per le proprie operazioni di controllo.
MDR (Memory data register)
È un registro interno collegato direttamente al BUS dati, non è visibile al
programmatore, contiene i dati che la CPU invia/riceve dalla memoria e dai
dispositivi I/O.
MAR (Memory address register)
Registro interno collegato direttamente al BUS indirizzi, contiene indirizzi
necessari alla selezione delle celle o dei dispositivi I/O.
Durante la fase di fetch di un’istruzione il MAR contiene l’indirizzo della locazione di
memoria in cui si trova l’istruzione che deve essere codificata Nella fase di execute,
contiene l’indirizzo dell’operando che deve essere letto dalla RAM.
IR (Instruction register)
È il registro interno che contiene il codice operativo dell’istruzione durante la
sua codifica.
Modello di programmazione
E’ l’insieme degli elementi accessibili al programmatore. È formato dai registri
accessibili e dall’ALU.
PC (Program counter)
Registro interno accessibile parzialmente dal programmatore, contiene
l’indirizzo di memoria in cui si trova l’istruzione successiva da eseguire.
PSW (Process status word)
Ciascun bit che lo compone fornisce informazioni sul risultato delle operazioni
aritmetico-logiche dell’ultima istruzione eseguita dall’ALU.
Anche detta registro dei flag e i principali sono:
Carry, Overflow, Parity, Sign
Registri generali
Sono registri che ospitano temporaneamente i dati in corso di elaborazione.
CU (Control unit)
È il blocco che invia i comandi esecutivi all’ALU in base alla decodifica
dell’istruzione, e decide l’incremento dell’indirizzo di memoria contenuto nel
registro PC.
ALU (Arithmetic logic unit)
Parte della CPU dedicata alle operazioni aritmetiche e logiche anche se tutte
le operazioni passano attraverso l’alu visto che sono tutte riconducibili ad
operazioni aritmetico-logico.
Architetture RISC e CISC
Due tecnologie di riferimento per la costruzione di microprocessori:
CISC (Complex Instruction Set Computer)
• Numero elevato di istruzioni diverse, e complesse
• Compito del programmatore semplificato
• Programmi più compatti che utilizzino minore memoria
• Con la stessa archittetura è presente una memoria ROM contenente
microcodici, per eseguire azioni elementari nel microprocessore.
RISC (Reduced Instruction Set Computer)
• Forte riduzione del numero di istruzioni per conciliare la velocità del
microprocessore con la loro l’esecuzione.
• Il fine principale della struttura RISC è quello di produrre processori ad alta
velocità e dal costo ridotto.
Core della CPU
E’ il nucleo elaborativo della CPU, il resto è chiamato package, i pin di
contatto si innestano sul socket.
Inoltre i produttori hanno deciso di puntare su processori che presentano più
nuclei nello stesso package (MultiCore Architectures) che sfruttano il
parallelismo cioè elabora istruzioni da diversi core.
La Motherboard
Il chipset
Il Chipset è lo snodo tra la CPU e le periferiche, formato da due diversi circuiti
integrati:
• NorthBridge
• SouthBridge
NorthBridge
Il NorthBridge è connesso alla periferiche più veloci come la RAM e i
processori per la grafica tramite il FSB(Bus formato da quello dati e da quello
di indirizzo) E’ anche chiamato MCH (Memory Controller Hub) e ha
dimensioni maggiori rispetto al southbridge.
SouthBridge
Il SouthBridge, anche chiamato ICH (I/O Controller Hub), scambia i dati con:
controller dei dischi fissi, clock di sistema, porte di I/O, slot PCI e ISA ecc…
Il BUS LPC (Low Pin Out Controller) collega il SouthBridge con dispositivi
particolarmente lenti come ad esempio la memoria Flash.
BUS ISB e BSB
Il BUS che collega il chipset Northbridge con il chipset Southbridge si chiama
ISB (Internal Side Bus).
Il BSB (Back side Bus) collega direttamente la CPU alla memoria Cache di
secondo livello.
Lezione3

Le memorie
La memoria contiene informazioni espresse in binario, il bit viene
immagazzinato in un dispositivo elettronico chiamato flip-flop. Vi sono tre
ingressi di controllo denominati: Read, Select e Write.
La memorizzazione avviene quando vengono attivati gli ingressi Write e
Select.
La lettura avviene quando vengono attivati gli ingressi Read e Select (La
logica costruttiva del BUS di controllo fa sì che i segnali Read e Write non
possono mai essere contemporaneamente attivi).
Ciascun bit di una cella di memoria è collegato a un diverso filo conduttore
del data BUS, quando la cella viene letta ogni elemento impone il suo
contenuto sul filo conduttore.

I tipi di memoria
Un computer tipicamente contiene differenti tipi di memoria, essenzialmente
appartenenti a tre diverse categorie: RAM, ROM e cache.
RAM
Il termine RAM (Random Access Memory) indica che in tali memorie è
possibile accedere in qualunque locazione di memoria e per qualunque
tipo di accesso.
L’informazione in esse contenuta rimane solo quando vengono alimentate.
Le RAM si suddividono in due sottocategorie:
• RAM dinamiche (DRAM)
• RAM statiche (SRAM)
La DRAM mantiene i dati solo se alimentata, sono caratterizzate da tempi di
accesso che variano tra i 20 ns e i 70 ns.
La SRAM è una memoria molto veloce con tempi di accesso da 5 a 10 ns.
A parità di capacità, le SRAM sono molto più costose delle DRAM.
ROM
Con il termine ROM (Read Only Memory) indichiamo una categoria di
memorie accessibili solo in lettura.
Caratterizzate dal fatto che l’informazione in esse contenuta permane anche
quando manca la corrente.
Le memorie ROM vengono in genere utilizzate per memorizzare programmi
e dati che devono essere memorizzati anche quando il computer è spento.
Esistono differenti tipi di ROM:
• ROM non programmabili, vengono prodotte già inglobando il programma o i
dati.
• PROM Normalmente sono vuote al loro interno e possono essere
programmate successivamente ma non possono essere più modificate nel
contenuto.
• EPROM sono vuote al loro interno e possono essere programmate ma
differenza delle PROM, la programmazione può avvenire più volte, a
patto di cancellare la vecchia programmazione tramite raggi UV.
• EEPROM si differiscono dalle EPROM solo per il fatto che la cancellazione
della vecchia programmazione è realizzata tramite corrente elettrica.

Gli indirizzi delle celle di memoria


L’indirizzo di ciascuna cella è definito dalla posizione della cella rispetto alla
prima cella.
Possiamo definire spiazzamento o displacement, lo spostamento
necessario per raggiungere la cella desiderata iniziando dalla prima.
La quantità di celle presenti nella memoria viene chiamata spazio di
indirizzamento e il suo valore dipende dalle caratteristiche della CPU, dei
BUS e della scheda madre.
Il calcolo dello spazio di indirizzamento si ottiene a partire dal numero di fili
conduttori del BUS indirizzi individuando tutte le possibili disposizioni con
l’utilizzo di una formula.
La gestione della memoria del PC
La memoria all’interno della scheda madre di un PC è organizzata in livelli
gerarchici: ogni livello è caratterizzato da una dimensione crescente e da un
tempo di accesso decrescente.
Inoltre per migliorare le prestazioni vengono combinate memorie veloci con
memorie capienti ma lente, questa tecnica prende il nome di cache.
Quindi le memorie cache fanno da tramite tra la CPU e la RAM.
Cache miss: quando la cache riceve una richiesta dalla CPU non possedendo i dati
necessari.
Le memorie flash
Tipo di memoria non volatile, programmabile elettronicamente e ne esistono
due tipi:
• NOR versatili e ottimizzate per contenere sia codici da eseguire che piccoli
quantità di dati
• NAND ottimizzate per la memorizzazione di grandi quantità di dati.
Lezione 4:

Struttura del BUS


Un BUS è un insieme di fili conduttori che possono trasferire segnali elettrici
di tipo logico e che nel loro insieme formano la codifica binaria di
un’informazione.
Su un BUS può essere rappresentata e trasferita una sola informazione per
volta.

Bus dati
Il BUS dati consente il trasferimento di informazioni nelle quattro direzioni
descritte di seguito.
Da una cella di memoria alla CPU (lettura): questa azione viene svolta dalla
CPU quando deve ottenere il codice operativo di un’istruzione da eseguire
durante un’operazione di fetch, oppure quando un’istruzione richiede la
lettura dalla memoria di un dato.
Dalla CPU a una cella di memoria (scrittura): quest’azione viene svolta dalla
CPU quando un’istruzione richiede la scrittura di un dato in una cella di
memoria.
Da una porta di ingresso alla CPU (acquisizione): quest’azione viene svolta
dalla CPU quando un’istruzione richiede un dato da un dispositivo di I/O
(spostamento del mouse).
Dalla CPU a una porta di uscita (emissione): quest’azione viene svolta dalla
CPU quando un’istruzione richiede l’invio di un dato a un dispositivo di I/O .
La direzione dei dati su questo BUS cambia in relazione al
comportamento dell’elemento connesso a esso, quindi può comportarsi da
ingresso o da uscita nei confronti del data BUS.
Per questo motivo diciamo che il BUS dati è bidirezionale.

L’ampiezza del BUS dati è determinata dalla quantità di bit che la CPU è in
grado di trasferire attraverso esso in un’unica operazione. Maggiore e` il
numero di pin nel bus, maggiore sara l'amipiezza dati e maggiore è
l’ampiezza del data BUS, maggiore è il parallelismo e quindi la rapidità con
cui si svolgono le operazioni.
I valori di ampiezza di parola sono cresciuti nel tempo e le MPU attuali
possiedono un’ampiezza di parola di
8 byte (64 bit).
Bus di indirizzi
Il BUS indirizzi (address BUS) è di tipo monodirezionale in quanto i segnali
che lo compogono escono dalla CPU per raggiungere tutti gli altri dispostivi e
formano una sequenza di bit che rappresenta l’indirizzo dell’elemento
periferico (cella di memoria o porta di I/O) il quale è coinvolto nella
successiva operazione di trasferimento dati tramite il data BUS. Durante
questa operazione i dispositivi non coinvolti rimangono in stato di alta
impedenza (tri-state).
Bus di controllo
Tutte le operazioni che svolge la CPU vengono sincronizzate mediante il BUS
di controllo. Non si tratta di un BUS vero e proprio ma di un insieme di singoli
segnali logici,ciascuno dei quali ha un significato ben preciso. Tutti i segnali di
uscita del BUS di controllo rappresentano comandi esecutivi che informano le
periferiche su quello che devono fare.

Lezione 5:
Il BUS
Può essere identificato da un insieme di linee che conducono elettricità,
ciascuna delle quali collegata a un pin di un dispositivo.
I bus si possono dividere in due categorie:
• BUS interno alla CPU trasporta dati verso e dall’ALU.
• BUS esterno alla CPU trasporta dati da e verso la memoria e i
dispositivi di I/O.
Funzionamento bus
Il dispositivo che intende inviare un segnale sulla linea del BUS non fa altro
che attivare un voltaggio che identifica il dato inviato.
Il dispositivo in grado di iniziare un trasferimento dei dati è denominato
master, mentre un dispositivo che inizia la comunicazione solo su
comando del master assume il nome di slave.

Caratteristiche bus
Possiamo sintetizarez le caratteristiche principali di un bus in termini
prestazionali:
• bit rate: numero di bit al secondo trasmessi;
• larghezza: numero indipendenti per la trasmissione dati;
• velocità: frequenza di un ciclo di bus per un bus sincrono;
• banda: numero di byte al secondo che si possono trasmettere.
Bus sincroni
Possiede in ingresso un segnale proveniente da un oscillatore che ne
sincronizza le operazioni al microprocessore. Il segnale su questa linea è
un’onda generata dal clock di sistema. Ha una struttura più semplice ma che
rende difficile sfruttare al massimo le prestazioni dei dispositivi a esso
connessi.

Bus asincrono
Il BUS asincrono non è dotato di un clock principale. I cicli del BUS possono
essere della lunghezza necessaria e non devono essere uguali per tutti i
dispositivi. Esso è caratterizzato da una semplicità strutturale e sfrutta al
meglio le prestazioni di ciascun dispositivo che lo utilizza.
Arbitraggio del bus
• arbitraggio centralizzato (daisy chaining a un livello) il dispositivo
master che vuole utilizzare il bus attiva la linea bus request, quando la
linea viene attivata l’arbitro attiva la linea bus grant appena è
disponibile, quest’ultima viene propagata da un dispositivo a quello
successivo solo se esso non ha attivato la linea bus request, il
dispositivo che ha attivato il bus request deve attendere che la linea bus
grant diventi attiva prima di poter utilizzare il bus.
• arbitraggio centralizzato (daisy chaining con più livelli di priorità)
ciascun livello è indipendente,e funziona come quello
precedente,tranne quando due o piu linee bus request sono attivate
contemporaneamente perché l’arbitro attiva solo la linea bus grant di
livello più basso.
• arbitraggio distribuito il dispositivo master che vuole utilizzare il bus
nega la linea arbitration out,il dispositivo attende che la linea arbitration
in diventi attiva e che la linea busy venga negata ,quindi attiva la linea
busy, attiva la linea arbitration out e utilizza il bus.

I due BUS principali


• systemBUS o local BUS collega la CPU alla memoria di sistema ed è
molto veloce
• PCIBUS o BUS di espansione assai più lento, mette in comunicazione
periferiche quali per esempio il disco fisso oppure la scheda audio o la
scheda video.

Diversi tipi di BUS di espansione


BUS IDE (ATA) per connettere fino a due dischi IDE(inoltre integra nel drive
anche la scheda del controller del disco).
BUS SATA(prevede un controllo di tipo seriale e monodirezionale)
Gigabit Ethernet
Firewire
USB (Universal Serial BUS)È un insieme di specifiche che consentono di
connettere e configurare le periferiche plug and play al PC (arrivando a
definire fino a 127 periferiche che possono operare contemporaneamente).
Supporta una velocità di trasferimento fino a 12 Mbps. In pratica,
l’architettura USB non pone limitazioni sul tipo di periferica connessa ma
prevede solo delle specifiche e un limite superiore sulla larghezza di banda.
La tipologia di rete dell’usb è a piramide in cima il controller host che fa
connessioni con gli hub, a livello degli hub c’è il collegamento di nuove
periferiche, una volta connessa la periferica avviene una procedura chiamata
bus enumeration.
Lezione 6:
Dispositivi di I/O
I dispositivi di I/O sono componenti che trasformano l’informazione
rappresentata da una grandezza fisica qualsiasi in una grandezza fisica
elettrica o trasformano l’informazione rappresentata da una grandezza fisica
elettrica in una grandezza fisica di altro genere.
2 generi di porte
• Periferica componente in grado di comunicare con elementi di natura
elettrica oppure di nature ottica, magnetica, meccanica ecc.;
• Adattatore o controller è un componente che comunica con la CPU o
con la gran parte delle periferiche adattando i segnali della CPU alle
esigenze della periferica.
Funzionamento dei dispositivi di I/O
Per comprendere il funzionamento dei dispositivi di I/O è necessario iniziare
con il dispositivo elementare. L’elemento di informazione più piccolo che
viene acquisito in ingresso è \il bit. Il segnale di attivazione non può essere
connesso direttamente al bus infatti dobbiamo aggiungere una circuiteria in
grado di far memorizzare e indicare la direzioni in I/O (buffer tri- state).Il
circuito di selezione è formato da una porta logica AND che riceve il segnale
Read dal BUS di controllo e il segnale di selezione Select proveniente dall
address decoder. Quando la CPU decide di acquisire un valore proveniente
dal dispositivo di I/O (operazione di IN) seleziona la porta attivando anche il
segnale Read che la informa che si tratta di una lettura da quel dispositivo. A
quel punto il buffer tri-state esce dallo stato di alta impedenza e pone in
uscita il valore logico sul piedino del BUS dati.Così la CPU può a questo
punto leggere i dati liberando così il BUS dati.
Elemento d’uscita dell’I/O
Il bit è l’elemento minimo che può essere emesso in uscita. Facendo
riferimento ad un circuito elementare formato da un LED che emette un
segnale luminoso quando è presente un valore logico pari a 1 e si spegne
quando il valore logico è 0. Il filo conduttore che riceve il segnale logico non
può essere collegato direttamente con il BUS dati in quanto la continua
commutazione dei segnali presenti sul BUS farebbe accendere e spegnere il
led secondo una sequenza senza senso.
Le porte di I/O
Le porte di I/O sono dotate di piccoli processori con la ram che conservano
software che ne definisce le funzioni.

Vari tipi di porte I/O


Porte PS/2 Utilizzate per il collegamento del mouse e della tastiera, non si
possono invertire.
Interfaccia seriale Porta di comunicazione utilizzata per periferiche esterne
tramite il bus seriale.
Interfaccia parallela serve a far comunicare il PC a tutti quei dispositivi che
comunicano in modalità parallela, possono essere :
• Standard Parallel Port pensata solo per la connessione alle stampanti.
• Enhanced Parallel Port permette lo scambio bidirezionale dei dati
fornendo un supporto hardware per l’handshaking, si posso
raggiungere alte velocità di trasferimento.
• Extended Capabilities port permette la maggiore flessibilità di utilizzo,
ha il supporto del DMA e una grande varietà di modalità di
funzionamento.
Porte di rete per collegare la macchina direttamente a una rete di computer,
senza usare il modem.

Lezione 7

L’evoluzione dei sistemi di elaborazione


Per migliorare le caratteristiche delle CPU e dei sistemi di elaborazione in
generale esistono diverse tecniche:
• l’aumento progressivo della frequenza di clock rende più veloci le
elaborazioni
• l’aumento dell’ampiezza di parola e l’aumento dello spazio di
indirizzamento, incrementando rispettivamente il numero di bit elaborati
contemporaneamente e il numero di celle indirizzabili.
• Vi è anche un’altra direzione di sviluppo, chiamata non Von Neumann,
nella quale sono state introdotte funzioni di elaborazione parallele che
consentono di aumentare la velocità di elaborazione a parità di
frequenza di clock
Grado di parallelismo delle architetture:
Le architetture possono essere classificate in base al grado di parallelismo che
rendono possibile:
-SISD (Single Instruction Single Data), un unico processore esegue un’unica
istruzione per volta e può prelevare e de-positare in memoria un solo dato per
volta;
–SIMD (Single Instruction Multiple Data), permette di eseguire
contemporaneamente la stessa operazione su più dati (utile per le operazioni
multimediali);
–MISD (Multiple Instruction Single Data), consente di iniziare l’esecuzione di
diverse istruzioni, ognuna sui propri dati. Mentre si esegue un’istruzione si può
cominciare a elaborare la successiva;
–MIMD (Multiple Instruction Multiple Data), è relativa ai sistemi multiprocessori.
Esecuzione fuori ordine
Indica la capacità delle CPU di eseguire istruzioni senza rispettarne
necessariamente l’ordine imposto dal codice che le contiene. Per fare questo
la CPU analizza le istruzioni che dovrà eseguire, individuando le istruzioni
non vincolate dalle altre. Il metodo prevede prima di tutto che il programma
venga caricato con istruzioni seriali, quindi le istruzioni vengono analizzate e
riordinate tenendo conto delle dipendenze. Non Sempre è possibile utilizzare
questo metodo, prendiamo come esempio un’istruzione che chiede la somma
tra due registri,, il risultato deve essere usato come operando per una
divisione. In questo caso quindi l’esecuzione fuori ordine non potrà essere
utilizzata.
Il prefetch (precaricamento):
In base a questa tecnica i processori implementano delle unità che
analizzano il codice cercando di prevedere in anticipo quali dati o istruzioni
serviranno al processore, provvedendo inoltre al loro caricamento in cache (o
direttamente nel processore) prima del loro reale impiego.
Il precaricamento dei dati e delle istruzioni determina alcuni problemi:
• Se il microprocessore carica delle istruzioni dipendenti da un salto e
quel salto non viene eseguito il processore deve provvedere a eliminare
le istruzioni caricate erroneamente prima di caricare le istruzioni da
eseguire.
• Per esempio l’accesso a una locazione non consentita genera
un’eccezione che va segnalata al sistema operativo, ma la
segnalazione va effettuata nel momento in cui dovrebbe effettivamente
avere luogo e non prima, per via del precaricamento.
Queste criticità rendono il precaricamento dei dati e delle istruzioni molto
complesso da implementare in hardware senza un supporto diretto del set di
istruzioni.
Se invece il set di istruzioni supporta nativamente questa caratteristica
la sua gestione diventa molto più semplice.
Speculative execution:
È una tecnica che consiste nell’eseguire entrambi i rami di un salto in modo
da poter prevedere la direzione in una diramazione.

La pipeline:
Il termine pipeline significa catena di montaggio e sta proprio a indicare che
nella CPU esistono dei blocchi che elaborano parte delle fasi passandole al
blocco successivo.
L’elaborazione di un’istruzione da parte di un processore si compone di
cinque passaggi fondamentali:
• IF: lettura dell’istruzione da memoria (Instruction Fetch);
• ID: decodifica dell’istruzione e lettura degli operandi da registri
(Instruction Decode);
• EX: esecuzione dell’istruzione (Execute);
• MEM: attivazione della memoria (Memory);
• WB: scrittura del risultato nel registro opportuno (Write Back).

Le attività della CPU sono scandite da un clock: ciascuna operazione


elementare richiede almeno un ciclo di clock per poter essere eseguita.
L’attività di una CPU con pipeline è formata da cinque stadi specializzati,
capaci di eseguire ciascuno un ciclo macchina.
Riassumendo, la pipeline consente di migliorare le prestazioni in termini di
velocità di esecuzione, ma comporta una maggiore complessità circuitale
della CPU che deve essere composta da almeno cinque unità specializzate in
grado di collaborare tra loro.
Problematiche pipeline
• Conflitti strutturali: quando due fasi utilizzano contemporaneamente
la stessa risorsa, come per esempio i BUS, l’ALU o la RAM.
• Conflitti tra i dati: quando un’istruzione utilizza un dato che è ancora in
fase di elaborazione;
• Conflitti di controllo: quando le istruzioni che devono essere eseguite
da un salto si trovano in una zona di memoria non prevista.

Un metodo che viene applicato per la soluzione di queste criticità è dato


dallo stallo: consiste nell’inserimento di alcuni cicli per bloccare
temporaneamente una parte della pipeline in attesa che si risolva il conflitto.

Per i conflitti strutturali esiste una soluzione hardware: aggiungendo all’ALU


l’unità FPU (Floating Point Unit), consentiamo al sistema l’uso di questa unità
in alternativa all’ALU, in modo tale che due stadi della pipeline utilizzino
contemporaneamente le due unità, la prima per calcoli su numeri interi e la
seconda per calcoli con numeri espressi in virgola mobile.
Il conflitto tra i dati può essere semplicemente spostato a un livello software:
il compilatore può individuare le istruzioni che generano il conflitto sui
dati interponendo tra esse una serie di istruzioni assembly inutili
chiamate NOP (No Operation) con il compito di ritardare l’esecuzione della
seconda istruzione per consentire l’adeguamento delle pipeline.

Tecnologie superscalari:
Per realizzare CPU con prestazioni sempre migliori vengono integrati in un
unico microprocessore più pipeline che funzionano in parallelo. Nelle CPU
attuali le pipeline non sono composte da soli cinque stadi ma in realtà ne
utilizzano molte di più.

Branch prediction:
L’uso della pipeline è influenzato negativamente dai salti condizionati, un
processore basato su architettura x86 incontra un salto condizionato
mediamente ogni circa 6/7 istruzioni. Pertanto è assai importante cercare di
prevedere il salto condizionato, così da caricare in anticipo il blocco di
istruzioni corretto nella pipeline.
Cache memory:
La cache è una memoria di tipo statico molto veloce e di dimensioni
contenute. Consente un accesso più rapido alla memoria, tuttavia, essendo di
dimensioni ridotte rispetto alla RAM, la memoria cache è in grado di
memorizzare soltanto una minima parte dei dati contenuti nella RAM.
L’uso della cache è legato strettamente al comportamento delle applicazioni
durante la loro esecuzione secondo due principi, denominati principi di
località:
• Località spaziale: i programmi in esecuzione possono accedere a celle
di memoria presenti all’interno di una zona definita, oppure possono
accedere alle stesse locazioni di memoria già utilizzate.
• Località temporale: il programma eseguirà le istruzioni accedendo alle
istruzioni immediatamente successive a quella appena eseguita.
In genere, all’aumentare della sua dimensione otteniamo un
miglioramento nelle prestazioni del sistema.
Livelli cache
• cache integrata direttamente nel processore, chiamata cache di primo
livello (L1);
• cache interna collegata direttamente al processore, chiamata cache di
secondo livello (L2).
• cache esterna collegata sulla motherboard, denominata cache di terzo
livello (L3).
La cache viene usata per operazioni di lettura e scrittura ed è suddivisa in
due sezioni, una per le istruzioni e una per i dati.
Durante ogni operazione di lettura da parte della CPU avviene una ricerca
delle informazioni nella cache: se presenti (operazione di Cache Hit) non
serve accedere alla memoria centrale, altrimenti (operazione di Cache Miss)
viene effettuata la lettura in memoria e le informazioni prelevate vengono
memorizzate anche nella cache.
Per le operazioni di scrittura in memoria la cache può essere usata con due
modalità diverse:
• cache Write Through: le operazioni di scrittura vengono effettuate sia
nella cache sia nella memoria centrale.
• cache Write Back: le operazioni di scrittura avvengono solo nella
cache, mentre la linea di cache viene scritta in memoria solo quando
viene sostituita.

La cache viene gestita attraverso tre possibili metodi:


Nel metodo diretto, a ciascuna linea o blocco di celle della memoria
centrale viene associato un blocco analogo nella cache che contiene gli
stessi dati.
Nel metodo completamente associativo ogni blocco di memoria può
essere allocato in qualsiasi linea della cache.
Nel metodo associativo a N vie suddivisa in gruppi di N linee ciascuno.
Memoria virtuale:
La memoria virtuale rappresenta un metodo per far apparire la memoria
centrale di dimensione maggiore rispetto a quella effettivamente presente.
Di questo si occupa un componente chiamato MMU (Memory Management
Unit).
Le MMU moderne generalmente suddividono lo spazio degli indirizzi virtuali
(l’intervallo di indirizzi accessibili dal processore) in pagine di memoria di
dimensione di pochi kilobyte.
La MMU contiene una tabella, e ogni elemento di questa tabella si chiama
PTE (Page Table Entry) e restituisce il numero fisico della pagina
corrispondente a quello virtuale che, combinato con l’offset della pagina,
forma l’idirizzo fisico completo.
Quando non ci sono PTE inutilizzate a disposizione, il sistema operativo deve
liberarne una.

Le evoluzioni che riguardano gli I/O


DMA (direct memory access):
Abbiamo visto in precedenza come i dispositivi periferici segnalino la
disponibilità a emettere o accettare dati attraverso l’interrupt, tuttavia la
tecnica dell’interruzione è particolarmente inefficiente se il trasferimento
riguarda grosse moli di dati.
In questi casi è opportuno che dopo la segnalazione la CPU deleghi le attività
di trasferimento a un dispositivo che accede ai BUS di sistema quando non
sono usati dalla CPU.
Il DMA controller consente l’impostazione dei trasferimenti tramite un insieme
di porte di configurazione visibili dalla CPU.
Il programma imposta l’indirizzo iniziale del blocco di memoria da trasferire e
le dimensioni. Una volta iniziato il trasferimento il controller DMA provvederà
autonomamente al trasferimento dei dati da o per la memoria.

Coprocessori:
Sono CPU secondarie dedicate a scopi specifici che scaricano la CPU
principale da alcune elaborazioni consentendo un maggior parallelismo.

Di seguito alcuni esempi:


-coprocessore numerico: realizza una grande quantità di elaborazioni numeriche
soprattutto in virgola mobile non realizzate dalla CPU principale.
-coprocessore grafico: mantiene una memoria immagine della presentazione video e
realizza elaborazioni grafiche per la costruzione della presentazione.