Matteo Baldoni Architetture degli Elaboratori 1
Corso di Corso di
Architettura degli Elaboratori Architettura degli Elaboratori
Il livelo ISA:
ISA IJVM, tipi di dati e formato delle istruzioni
Matteo Baldoni Dipartimento di Informatica Università degli Studi di Torino C.so Svizzera, 185 – I-10149 Torino [email protected] http://www.di.unito.it/ ~baldoni
Matteo Baldoni Architetture degli Elaboratori 2
Progettare l'ISA Progettare l'ISA
Ponte tra l'hardware e il software:
Forte correlazione tra hardware e livello ISA
Forte correlazione tra livello hardware, ISA e i ideatori di compilatori Garanzia di compatibilita`
con modelli precedenti (vedi esempio Intel) per questioni di marketing (i programmi precedenti devono continuare a funzionare!) ISA per sistemi embedded
Matteo Baldoni Architetture degli Elaboratori
Progettare l'ISA Progettare l'ISA
ISA e tecnologia:
facilmente realizzabile con la tecnologia corrente
facilmente realizzabile con la tecnologia futura(!) Facilmente utilizzabile dai compilatori (traduttori automatici) e che
permettano la generazione di codice efficiente
Pubblicazione delle specifiche ISA
Modalita` kernel o utente
Matteo Baldoni Architetture degli Elaboratori
Interpretazione Interpretazione
Interprete (JavaScript, Scheme, Prolog):Interazione.
Più facile modificare un programma durante l'esecuzione
Sparc/Solaris
Apple Codice Sorgente
Interprete Sparc/Solaris
Interprete MacOS
Interprete Intel/GNU-Linux
Intel/GNU-Linux Intel/Windows
Matteo Baldoni Architetture degli Elaboratori 5
Traduzione o compilazione Traduzione o compilazione
Compilazione (Pascal, C, Ada, C++):Efficienza di esecuzione. Il codice generato dal
compilatore può essere ottimizzato, perché la compilazione è fatta una sola volta
Compilatore Sparc/Solaris
Compilatore MacOS
Compilatore Intel/GNU-Linux
binario binario
binario
Intel/GNU-Linux Intel/Wind
Apple Sparc/Solaris Codice Sorgente
Matteo Baldoni Architetture degli Elaboratori 6
Memoria Memoria
Importanza dell'allineamento
Indirizzamento per area dati e programmi
Hardware supplementare per estrazione delle informazioni non allineate
Registri Registri
Non tutti i registri visibili al livello della microarchitettura sono visibili a livello ISA (es. TOS e MAR del Mic-1 non sono visibili a livello ISA)
Registri ad applicazione particolare (SP, PC, ecc) e registri ad applicazione generale (OPC, ecc): i programmatori e i compilatori devono attenersi alle eventuali convenzioni di utilizzo
Registri visibili a livello kernel: es. il registro dei flag o Program Status Word (PSW) contenente i condition codes (N, Z, V, C, A, P, livello di priorita` CPU, livello di abilitazione degli interrupt e altri ancora)
ISA IA-32 Intel (cenni) ISA IA-32 Intel (cenni)
E` l'architettura ISA a 32 bit dell'80386, estesa poi con il set di istruzioni MMX (per la multimedialita`)
Modalita` reale (come un 8088), modalita` 8086 virtuale (ambiente isolato per l'esecuzione dei programmi 8088) e modalita` protetta di esecuzione con quattro livelli di protezione (tra cui kernel e utente)
Memoria: 16384 segmenti da 232 – 1 indirizzi (solitamente e` utilizzato un solo segmento)
Solitamente i SO: spazio lineare di 232 byte
Formato little endian
Matteo Baldoni Architetture degli Elaboratori 9
ISA IA-32 Intel (cenni) ISA IA-32 Intel (cenni)
I registri sono organizzati in modo da garantire la possibilita` di emulare 8088, 80286 (e in parte 8080!)
Matteo Baldoni Architetture degli Elaboratori 10
ISA UltraSparc (cenni) ISA UltraSparc (cenni)
Architettura RISC a 64 bit (in origine a 32 bit)
Memoria: 264 indirizzi, solitamente spazio lineare di 264 byte
Formato big endian (ma possibile anche little endian)
Due gruppi di registri: 32 registri (64 bit) generici e 32 registri floatin-point
Meccanismo del register window
Architettura load/store: le unicheoperazioni con accesso diretto alla memoria sono LOAD e STORE, le istruzioni per spostare i dati fra i registri e la memoria, tutti gli operandi (inclusa la destinazione) per le istruzioni aritmetiche e logiche devono provenire da registri
Matteo Baldoni Architetture degli Elaboratori
ISA JVM (cenni) ISA JVM (cenni)
Memoria organizzata in quattro regioni: frame delle variabili locali, lo stack degli operandi, l'area del metodo e la constant pool come visto sull'esempio IJVM
Heap per la memorizzazione di oggetti dinamici o di grosse dimensioni (int a[] = new int[4096];)
Runtime storage allocator e garbage collector
Macchina a stack pura: richiede una grande quantita` di accessi alla memoria ma ISA e` estremamente semplice ed elegante
Implementazioni hardware relativamente semplici
(ricordiamoci che Java era nato per programmare prodotti di tipo consumer!)
Matteo Baldoni Architetture degli Elaboratori
Tipi di dati Tipi di dati
Supporto hardware per un particolare tipo di dati:
presenza di istruzioni che si aspettano i dati in un dato formato
Numeri interi complemento a due, i numeri floating point secondo lo standard IEE 754, i caratteri secondo la codifica ASCII sono un tipo di dati e la maggior parte dei livelli ISA per processori di uso corrente offre istruzioni per il loro trattamento
Simulazione software per i tipi di dati non supportati
Matteo Baldoni Architetture degli Elaboratori 13
Tipi di dati numerici Tipi di dati numerici
Tipicamente 8, 16, 32 e 64 bit
Numeri interi unsigned e signed
Numeri floating point: 32, 64, 80, 128 bit
Standard IEEE 754 e istruzioni ISA dedicate alla gestione di di tale formato standard
Binary code decimal format introdotto nel COBOL (hardware dedicato, esempio IBM System 360): 4 bit per ogni cifra decimale
Matteo Baldoni Architetture degli Elaboratori 14
Tipi di dati non numerici Tipi di dati non numerici
Codifica ASCII (7 bit ed in seguito 8 bit)
Codifica UNICODE (16 bit)
Istruzione speciali del livello ISA per la gestione di stringhe (la maggior parte delle applicazioni degli eleboratori è quella dell'elaborazione di informazione non numerica!)
Valori Booleani: vero (1) e falso (0)
Bit map
Puntatori: indirizzo di memoria
Panoramica supporto tipi di dati Panoramica supporto tipi di dati
Pentium II
(Un)Signed integer: 8, 16 e 32 bit
Binary coded decimal integer: 8 bit
Floating point: 32 e 64 bit
Manipolazione di caratteri ASCII di 8 bit
UltraSPARC II
(Un)Signed integer: 8, 16, 32 e 64 bit
Floating point: 32, 64 e 128 bit
JVM:
Signed integer: 8, 16, 32 e 64 bit
FLoating point: 32 e 64 bit
Manipolazione di caratteri UNICODE di 16 bit
Formato delle istruzioni Formato delle istruzioni
Formati comuni delle istruzioni:
(a) zero indirizzi
(b) un indirizzo
(c) due indirizzi
(d) tre indirizzi
Lunghezza omogenea per facilitare la decodifica
Matteo Baldoni Architetture degli Elaboratori 17
Formato delle istruzioni Formato delle istruzioni
Criteri per la progettazione del formato delle istruzioni:
l'insieme delle istruzioni deve poter essere esteso facilmente nel futuro per includere nuove istruzioni
tecnologia con cui è realizzato il calcolatore (ma tenendo conto delle future possibili evoluzioni)
Istruzioni corte vs istruzioni lunghe:
spazio occupato dai programmi
larghezza di banda della memoria (CPU molto più veloci della capacità di fornire istruzioni da parte della memoria)
avvio di più istruzioni possibili all'esecuzione in un ciclo di clock
La lunghezza è una scelta fondamentale!
Matteo Baldoni Architetture degli Elaboratori 18
Formato delle istruzioni Formato delle istruzioni
Codici dedicati agli opcode: meglio prevederne di più di quelli necessari ma questo implica occupare spazio
Spazio riservato agli indirizzi nelle istruzioni: maggiore risoluzione della memoria vs istruzioni più lunghe
Bilanciamento della dimensione degli indirizzi con la risoluzione della memoria
Attualmente la maggior parte delle moderne
implementazioni adottano una risoluzione di 8 bit (ma leggono la memoria in blocchi di 1, 2, 4 o più parole alla volta con necessità di hardware di scomposizione del blocco di bit letti per l'accesso ai singoli byte)
Matteo Baldoni Architetture degli Elaboratori
Espansione degli opcode Espansione degli opcode
Bilanciare il numero di istruzioni: numero di istruzioni vs risoluzione della memoria e numero di operandi
Opcode più corti per le istruzioni più frequenti o quelle che necessitano di più operatori
Problemi con l'allineamento delle istruzioni
Matteo Baldoni Architetture degli Elaboratori
Pentium II Pentium II
Risente della compatibilità all'indietro
Tecnica del prefisso (gli opcode erano finiti!): ecape code
Lunga e complessa decodifica
Molte istruzioni poco utilizzate
Allineamento in memoria difficile
Matteo Baldoni Architetture degli Elaboratori 21
UltraSPARC II UltraSPARC II
Istruzioni di 32 bit allineate in memoria
Successivamente si sono aggiunti nuovi formati (incomincia a risentire della compatibilità all'indietro?)
Due bit iniziali per aiutare a determinare il tipo di istruzione
Matteo Baldoni Architetture degli Elaboratori 22
JVM JVM
Si predilige il codice compatto
Machina a stack pura
Opcode di un byte
ILOAD speciali per offset di 0, 1, 2, 3
Tecnica del prefisso (esempio WIDE)
JVM JVM
34 byte!
42 byte!
2 byte vs 4 byte