1.02 Lezione 2 - follen99/ArchitetturaDeiCalcolatori GitHub Wiki

📅 03-04 parte 1

Recap

In generale è possibile suddividere le istruzioni di un processore in opportune categorie:

  • Spostamento dati : sposta dati tra registri e memoria

  • Operazioni aritmetiche

  • Operazioni booleane: operazioni bit a bit

  • Trasferimento del controllo: context switching visto nella parte di SO.

Modi di indirizzamento

Una istruzione ha un codice operativo e degli operandi; un modo di indirizzamento è una modalità alternativa per indicare qual è l'operando: se devo sommare qualcosa, la stringa di bit che devo sommare, posso reperirla in diversi luoghi: ad esempio in un registro, in memoria, ecc.

In alternativa, potrebbe essere una costante. Quando ad esempio nel codice viene scritto x = x+1, non stiamo sommando realmente, ma usiamo un numero costante sempre uguale.

Questo significa che utilizziamo un operando di tipo costante; come conseguenza abbiamo che il valore da utilizzare non deve essere preso da un registro o da una locazione di memoria, ma è espresso esplicitamente all'interno dell'istruzione.

In assembly, ad esempio, abbiamo ADDI A1 1 A1

Alcuni modi di indirizzamento ci permettono di individuare dinamicamente l'indirizzo dell'operando; significa che non viene individuato una volta per tutte, ma a seconda del valore di qualcosa l'indirizzo reale viene individuato in una locazione o in un'altra.

La lista fondamentale dei modi di indirizzamento è la seguente:

  • Addressing immediato: dove i dati (valore, ad esempio 1) sono parte dell'istruzione

  • Addressing diretto: dove ll'indirizzo* dei dati è nell'istruzione.

  • Addressing a registri: dove i dati sono collocati in un registro

  • Addressing indiretto: dove è specificato l'indirizzo dell'indirizzo che contiene i dati dell'istruzione

  • Addressing a registri indiretto: dove vengono utilizzati dei registri per salvare l'indirizzo dell'indirizzo dei dati.

Ulteriormente

  • Indirizzamento indicizzato: significa che all'interno delle istruzioni, è presente un indirizzo che viene sommato ad un registro prefissato. E' come se avessi un puntatore (ad esempio l'indirizzo di un array) e scrivo uno spiazzamento rispetto a questo indirizzo di base. Questo tipo di indirizzamento è abbondantemente utilizzato per lavorare con gli array.

Ciclo di una istruzione

Si dice che il processore operi in un loop, ovvero il loop di esecuzione di un'istruzione.

Significa che un processore da quando viene collegato all'alimentazione, continua a prendere un'istruzione, decodificarla, trovare i suoi operandi, eseguirla, dopodichè va a prendere la prossima istruzione.

Ci sono quidni 4 fasi fondamentali durante l'esecuzione di un'istruzione che vengono tipicamente chiamate:

  1. Fetch: Il processore va a prendere la prossima istruzione da eseguire. Il program counter dice alla CPU dove è situato l'indirizzo della prossima istruzione da eseguire.

  2. Decode: l'istruzione viene portata nell'instruction register e viene esaminata dall'hardware del processore per capire che operazione bisogna eseguire.

  3. Assemblaggio degli operandi: vengono preparati gli operandi, dove essi vengono prelevati e spostati in appositi registri del processore.

  4. Esecuzione

I processori nati per consentire il risparmio energetico, possono andare in una condizione di stand by dove l'esecuzione può essere fermata per risparmiare energia.

Piccola precisazione

I processori non eseguono questo ciclo all'infinito senza mai fermarsi e passare ad altro; questo perchè una CPU fatta in questo modo è in grado di eseguire un solo programma alla volta, senza "accorgersi di cosa accade all'esterno".

Fase di BootStrap

Il termine bootstrap nasce in ambito elettronico dove il termine veniva usato per identificare delle strutture che vengono inizializzate automaticamente poco alla volta.

Letteralmente significa "tirarsi sù i lacci", ovvero che queste strutture sono in grado di inizalizzarsi autonomamente e di far partire la modalità operativa; per analogia anche nei SO si parla di fase di bootstrap.

La causa scatenante del processo, è proprio l'utente che, premendo il tasto di accensione della macchina, da inizio al processo;

La CPU "sa" che nel momento in cui riceve tensione deve eseguire un'sitruzione trovata in una locazione fissata in memoria.

All'indirizzo dove la CPU andrà a leggere la prima istruzione , viene posto un piccolo programma scritto in linguaggio macchina che permette di inizializzare il sistema; questa parte di SO viene chiamata BIOS (basic input output services).

Nei primi PC IBM, nella ROM che conteneva questa parte di inizializzazione, era contenuto tutto ciò che serviva per eseguire un minimo di I/O: ad esempio mostrare a schermo, leggere da tastiera, ecc. Questo tipo di computer andava a richiamare delle funzioni in linguaggio macchina poste sulla ROM, per eseguire un minimo di I/O, nulla di complicato.

Nei computer dei giorni nostri è ancora presente un BIOS, che contiene un minimo di I/O, ma che i sistemi operativi moderni ignorano completamente (e facendo I/O per fatti loro). Sul BIOS è presente il loader iniziale (che carica il SO) ed è presente un minimo di codice che esegue il cosiddetto POST.

POST significa power on self test, ed è un test che serve per effettuare una diagnostica eseguita nel momento in cui viene eseguito il computer.

Eseguito il POST il codice contenuto nel BIOS carica un bootstrap loader, che cerca su uno dei dischi (tipicamente sul disco selezionato) un settore (blocco di memoria tipicamente 512B) che contiene un'altra porzione di codice che serve a caricare il sistema operativo.

🏁 00:46

UEFI

L'UEFI sono dei metodi di protezione del BIOS; nel momento in cui si accende il computer, e si ha accesso al disco, i produttori di computers hanno inventato dei metodi di protezione che impediscono di manipolare il BIOS e di effettuare boot alternativi.


Fine parte 1

Esempi di CPU

Le CPU più vecchie, erano di tipo Dual inline, ovvero aveva i pin per comunicare all'esterno disposti su due lati. L'Intel 8085 aveva solo 40 pin. La frequenza del processore variava tra i 3.5 e 6 MHz, un clock molto molto basso.

La dimensione più piccola tra due minuscoli componenti all'interno del processore è nota come minimum feature size; all'epoca dell 8085 era di 3 micron. Ai tempi quindi le varie componenti non erano molto vicine tra loro, infatti i transistors utilizzati erano solo 6500. Ai giorni d'oggi parliamo di ordine dei nanometri.

Contenuto di una CPU

Negli anni 70 i processori erano molto simile all'idea base molto semplificata studiata accademicamente.

Esempio: Pentium 4 del 2000

I nomi come "Pentium 4" sono strettamente commerciali; infatti negli anni sono stati venduti processori con lo stesso nome, che però avevano architetture sostanzialmente diverse.

Questo processore aveva addirittura 100 milioni di transistor, un numero enormemente maggiore. Inoltre anche i pin per la comunicazione esterna erano nettamente maggiori (>700 pin).


FINE LEZIONE 0

Classi di computers

  • Computers personali: soggetti ad un tradeoff di costo/performances

  • Computers Server: gestiscono richieste provenienti dalla rete, e gestiscono siti web, archivi, ecc.

  • Supercomputers computers ad altissime prestazioni, utilizzati per applicazioni scientifiche

  • Computer embedded: piccoli computers poco potenti utilizzati un po' ovunque, come nelle lavatrici.

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