Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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.
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.
Lezione 7
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).
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.
Coprocessori:
Sono CPU secondarie dedicate a scopi specifici che scaricano la CPU
principale da alcune elaborazioni consentendo un maggior parallelismo.