1.01 Lezione 1 - follen99/ArchitetturaDeiCalcolatori GitHub Wiki

📅 2021-03-03 - Lezione "0" - lucidi

Interfaccia Di Memoria

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.

Terminologie usate per la memoria

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

Piccola differenza

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.

Control Unit

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.

I Registri

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.

Quattro registri essenziali

  • 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)

Bus

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).

Funzioni dei bus

  • 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.

Operazioni su bus - esecuzione istruzione

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.

Anatomia di un'istruzione

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.

Cosa fa un'operazione a zero 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).

Istruzioni ad un operando

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

Istruzioni a due operandi

Servirebbero sempre 3 operandi. Uno dei due operandi funge anche da destinazione.

ADD R1 R2 vuol dire R1+R2 -> R1

Istruzioni a tre operandi

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.

⚠️ **GitHub.com Fallback** ⚠️