1.01 Lezione 1 - follen99/ArchitetturaDeiCalcolatori GitHub Wiki
📅 2021-03-03 - Lezione "0" - lucidi
Come si interfaccia la CPU con i vari processi alla memoria?
Si usano i due bus:
-
Memory Address Bus - Bus Indirizzi. Serve per dire a quale indirizzo la CPU vuole accedere.
-
Memory Data Bus - Bus Dati. Permette di leggere o scrivere in memoria; è bidirezionale.
La memoria nei calcolatori è organizzata a bytes, dove un byte = 8 bit.
La memoria è singolarmente accessibile ad un solo byte per volta, ed ogni byte ha un singolo indirizzo.
1 byte | 8 bits |
---|---|
1 KB | 1024 bytes (B) |
1 MB | 2^20 bytes |
1 GB | 2^30 bytes |
1 TB | 2^30 bytes |
1 PB | 2^50 bytes |
Quando si parla di memoria non si ragiona in potenze di 10, ma in potenze di 2. Inoltre si utilizza il byte (B) e non il bit.
Misurare le quantità a potenze di 2, vale solo per le memorie e dischi. Quando si parla di linee trasmissive (ad esempio le connessioni), si usano i bit, e sopratutto si ragiona a potenza di 10.
La ALU, Arithmetic locig unit, è il cuore di un processore. E' il componente che permette di eseguire le operazioni di base; i primi processori erano in grado di eseguire solo operazioni del tipo Addizione e Sottrazione.
Con il tempo i processori si sono evoluti, potendo compiere operazioni molto più complesse, su numeri interi e reali, a 32 e 64 bit.
All'interno della ALU, troviamo anche altri componenti, come i registri ed il program counter.
Il Program Counter PC è un registro che contiene (in ogni istante) l'indirizzo della prossima istruzione da eseguire. L'istruzione viene prelevata dalla memoria, e spostata nel cosiddetto instruction register.
-
Program counter
-
Instruction Register
-
Memory Address Register (indirizzo della locazione della memoria)
-
Memory Buffer Register (contiene le word di dati che devono essere scritti/letti in memoria)
Sono delle connessioni multiple tra la CPU e le unità esterne, o interni alla CPU. Sono composti fisicamente da fili (ad esempio i cavi jumper), oppure tracce sulla board (tracce di rame sulla mobo).
-
Control bus: porta i segnali che si interfacciano con le unità esterne.
-
Address Bus: porta gli indirizzi della locazione di memoria a cui voglio accedere; è connesso direttamente al memory address register.
-
Data Bus: è bidirezionale e porta i dati tra memoria e CPU. Posto a metà strada tra ram e cpu, è posto il memory buffer register.
Il DB trasferisce una word (solitamente multipli di un byte quindi per word si intende 4 o 8 byte - 32 o 64 bit) tra ram e CPU; i dati passano dall' MBR. Se si parla di operazione di lettura in memoria viene eseguito il processo inverso: RAM -> MBR -> CPU.
Se voglio accedere alla memoria la CPU carica nel MBR l'indirizzo della locazione di memoria richiesta. Questo contenuto dellMBR viene esposto sull'address bus e a questo punto la memoria è a conoscenza dell'indirizzo richiesto.
Esempio
supponiamo che la CPU voglia prendere la prossima istruzione da eseguire; per prendere l'istruzione (to fetch - prima fase) utilizza l'indirizzo contenuto nel program counter, che viene copiato all'interno del MAR.
Il MAR viene trasmesso sull'address bus; l'indirizzo arriva alla momoria. Una volta che l'Address bus ha individuato la locazione che va acceduta, l'unità di controllo pone sul control bus un segnale di operazione di lettura (perchè dobbiamo leggere la memoria).
La memoria risponde con il contenuto di quella locazione sul data bus; il Data bus viene quindi caricato sul buffer (MBR). L'istruzione da eseguire va trasferita sul registro apposito: instruction register.
L'istruzione viene esaminata nelle sue componenti e viene finalmente eseguita.
Le istruzioni sono composte da una sequenza di bit:
-
All'interno della stringa abbiamo una prima parte detta codice operativo (opcode): ci dice che tipo di operazione deve eseguire l'istruzione (somma, XOR, ecc).
-
L'istruzione potrebbe richiedere degli operandi (somma, moltiplicazione, ecc), oppure no.
-
Si parla di operando sorgente (source operand) quando parliamo di operandi usati come input per l'istruzione; vengono quindi manipolati dall'istruzione. Potremmo avere un solo operando o più.
-
Le istruzioni potrebbero avere un operando destinazione: dopo aver eseguito l'operazione, questo operando dice dove mandare il risultato.
Per ottenere gli operandi, le istruzioni potrebbero avere più modi di indirizzamento. L'istruzione potrebbe infatti prendere gli operandi all'interno dei registri, in memoria, ecc. All'interno dell'istruzione bisogna specificare gli operandi e questi potrebbero essere individuati mediante diversi metodi di indirizzamento.
esempio
Solitamente un'istruzione ha massimo 3 operandi.
Questo tipo di istruzione, non ha esplicitamente un operando, ma in maniera implicita è lo stesso codice operativo che dice quale operando usare. Alcuni processori hanno istruzioni del tipo CLA Clear Accumulator, che è un registro particolare: se eseguo l'istruzione CLA viene azzerato il registro (usato per mantenere tutte le somme).
Altri processori hanno istruzioni con un unico operando;
Sopratutto i processori più antichi hanno un registro detto accumulatore: questo registro viene usato come ingresso ed uscita di tutte le istruzioni.
Ad esempio, se troviamo un'istruzione del tipo ADD B
, significa che l'istruzione dirà al processore di prendere il contenuto del registro B e sommarlo all'accumulatore. Fatto questo prendi il risultato e inseriscilo nuovamente nell'accumulatore.
Quindi il programmatore ha esposto solo B, quindi l'istruzione ha un solo operando, ma in realtà ne ha 3, perchè sorgente e destinazione sono altri due operandi.
ADD B
vuol dire Acc + B -> acc
Servirebbero sempre 3 operandi. Uno dei due operandi funge anche da destinazione.
ADD R1 R2
vuol dire R1+R2 -> R1
Ci sono in totale 3 registri che vengono usati come sorgente e destinazione:
ADD R1, R2, R3
vuol dire R3+ R2 -> R1
Il RISC-V ha istruzioni a 3 operandi.