Calcolatori: La Macchina di Von Neumann 1 La Macchina di Von Neumann • L’architettura della maggior parte dei Calcolatori è organizzata secondo il modello della cosiddetta Macchina di Von Neumann. • John Von Neumann è stato il ricercatore americano che, sollecitato dall’esercito americano durante il corso della seconda guerra mondiale, dedicò i suoi studi alla realizzazione dei primi Calcolatori Elettronici. • Grazie ai suoi studi Von Neumann nel 1946 realizzò ENIAC (Electronic Numerical Integrator and Computer). • ENIAC era in grado di effettuare 300 moltiplicazioni al secondo, ed occupava una stanza lunga più di 30 metri. 2 I Componenti fondamentali • L’Unità di Elaborazione (CPU, Central Processing Unit): contiene i dispositivi elettronici in grado di acquisire, interpretare ed eseguire le istruzioni di un Programma. • La Memoria Centrale: è il dispositivo dove si trovano le informazioni necessarie all’esecuzione di un Programma, ossia istruzioni e dati. • Dispositivi di Input/Output o Periferiche: permettono di trasferire informazioni tra memoria centrale e/o CPU e l’ambiente esterno (es. schermo, tastiera, memoria di massa). • Bus di sistema: opera il collegamento tra i vari componenti. 3 I Componenti fondamentali CPU Memoria di massa Schermo/tastiera Interfaccia di I/O Interfaccia di I/O Memoria (centrale) BUS NOTA: la memoria di massa (tra cui il Disco fisso) e altri dispositivi periferici di uso comune non rientrano tra i componenti fondamentali, mentre ne fanno parte solo le relative interfacce. L’ENIAC aveva un sistema a schede perforate per l’I/O dei dati. 4 Principi di funzionamento • L’unità di elaborazione (CPU) coordina le varie attività, in particolare estrae istruzioni dalla memoria, le decodifica comprendendo il loro significato e le esegue. • I contenuti della memoria sono indirizzati in base alla posizione, indipendentemente dal tipo di dato o istruzione contenuto. • Le istruzioni vengono eseguite in modo strettamente sequenziale (principale limite del modello di Von Neumann). 5 Memoria centrale • Affinché un Programma possa essere eseguito deve necessariamente risiedere in Memoria centrale. • La Memoria centrale è composta da un certo numero di celle (o locazioni o posizioni), ciascuna delle quali può memorizzare un’informazione in forma binaria. • Le celle hanno generalmente dimensione di un byte (8 bit) o di una parola quindi, a seconda del tipo di Calcolatore, 16, 32 o 64 bits. • Le celle sono numerate con numeri interi da 0 a N-1, con N il numero di celle totali. • Ciascuna cella è individuata univocamente da un numero intero che è il suo indirizzo. 6 Memoria centrale • La capacità della Memoria (non solo quella centrale) si misura in byte: – Kilobyte (Kb) = 210 Byte = 1024 Byte. – Megabyte (Mb) = 220 Byte = 1048576 Byte. – Gigabyte (Gb) = 230 Byte = 1073741824 Byte • Il numero di bit che costituiscono l’indirizzo definisce la dimensione massima della memoria indirizzabile (lo spazio di indirizzamento): con k bit si possono indirizzare 2k celle diverse. • E’ realizzata con circuiti a semiconduttori (memoria elettronica) ed è volatile, ossia perde le informazioni in essa contenute quando non alimentata (es. quando il 7 calcolatore viene spento). Componenti della Memoria centrale • Oltre all’insieme delle celle, la Memoria centrale è costituita da: – Registro Indirizzi: contiene l’indirizzo della cella di memoria che vogliamo leggere o scrivere. – Decodificatore di indirizzi: è il dispositivo che individua la cella rappresentata nel Registro indirizzi. – Registro Dati: contiene l’informazione che deve essere scritta nella cella o che è stata letta dalla cella individuata dal Decodificatore di indirizzi. • Il tempo necessario ad accedere ad una cella di memoria è costante, ossia è indipendente dall’indirizzo della cella a cui si accede (memoria RAM, Random Access Memory). 8 Altri tipi di Memoria • Read Only Memory (ROM): memoria sempre a semiconduttori ma di tipo non volatile e di sola lettura. Utilizzata ad esempio per memorizzare i microprogrammi a livello firmware (BIOS). • Memorie flash: memorie elettroniche riscrivibili non volatili. Sono più lente delle memorie RAM (soprattutto in scrittura) ma sono sempre più diffuse in dispositivi portatili (macchine fotografiche digitali, telefoni cellulari, etc.) e per trasportare dati (collegandosi al calcolatore tramite interfaccia USB). • Memorie di massa: di grande capacità e non volatili, sono più lente rispetto alla RAM. Sono principalmente realizzate tramite tecnologie magnetiche (Hard Disk) e 9 ottiche (CD, DVD). Il tempo di accesso non è costante. Bus di sistema • Il Bus di sistema è costituito da un insieme di connessioni elementari, o linee, lungo le quali viene trasferita informazione. • Ciascuna linea sarà preposta al trasferimento del segnale elettrico relativo ad un solo bit (tensione alta=1, tensione bassa=0) quindi si parlerà ad esempio di Bus a 16, 32 o 64 bits. I bit vengono trasferiti in parallelo, ossia contemporaneamente. • Il Bus è in genere sotto il controllo della CPU, che seleziona l’interconnessione da attivare e indica l’operazione da compiere. • Le altre unità collegate al Bus entrano in azione solo quando sono selezionate dalla CPU. 10 Bus di sistema • Le linee del Bus si suddividono in tre categorie: – Bus dati: usato per trasferire dati fra CPU e memoria o interfacce di I/O. La sua ampiezza dovrebbe essere quella della parola di memoria. – Bus indirizzi: usato per trasferire l’indirizzo della cella di memoria in cui la CPU va a scrivere/leggere. La sua ampiezza dipenderà dallo spazio di indirizzamento. – Bus di controllo: dove passano i segnali di controllo che indicano il tipo di operazione da effettuare. Esempio, supponiamo vi siano due linee: • R/W: indica (se alto) un’operazione di lettura (READ) oppure (se basso) di scrittura (WRITE). • M/IO: distingue tra operazione con la memoria (alto) o 11 con un’interfaccia di I/O (basso). Schema di funzionamento di una RAM cella da 8 bit parola da 8 bit 0 1 0 0 1 1 0 0 16 celle di memoria Decodificatore Bus controllo Bus dati Bus indirizzi linee di selezione parola 0110 R/W 0 1 0 0 1 1 0 0 dato (letto o da scrivere) 12 L’Unità di Elaborazione (CPU) • La sua funzione è quella di eseguire i Programmi contenuti nella memoria centrale. • Si compone di tre componenti fondamentali: – L’Unità di Controllo: è il dispositivo che coordina le operazioni della CPU. – L’Unità aritmetico-logica (ALU, Arithmetic and Logic Unit): effettua le operazioni di tipo aritmetico e logico richieste dalle istruzioni di un Programma. – Registri: in pratica costituiscono la memoria interna alla CPU, del tutto analoghi a celle di memoria, ma accessibili più velocemente; contengono dati o istruzioni di uso frequente, oppure risultati intermedi. Tra questi registri troviamo anche i Registri Dati e i Registri Indirizzi. 13 L’Unità di Controllo • I suoi compiti principali sono: 1. Recuperare l’istruzione successiva da eseguire 2. Decodificarla 3. Organizzare la sua esecuzione • Contiene almeno tre registri fondamentali: – Instruction register (IR): contiene l’istruzione corrente. – Program counter (PC): contiene l’indirizzo di memoria della prossima istruzione da eseguire. – Program status word (PSW): contiene dei bit speciali che riflettono il risultato dell’ultima operazione (i cosiddetti effetti collaterali). 14 Arithmetic-Logic Unit (ALU) • • • • Esegue le operazioni logiche (AND, OR, NOT), aritmetiche (somme, prodotti) e confronti. In genere memorizza il risultato in un registro predefinito. Inoltre imposta i bit del Program Status Word in accordo al risultato. Operazioni su valori in virgola mobile e funzioni trascendenti (trigonometriche, radici quadrate, etc.) vengono in genere calcolate da un’unità apposita della ALU detta Floating Point Unit (FPU). 15 Program Status Word (PSW) • Contiene una serie di bit (in questo caso denominati flags) che se impostati ad 1 indicano il verificarsi di alcune situazioni particolari: – bit di carry: l’ultima addizione ha avuto un riporto. – bit di zero: il risultato dell’ultima operazione è 0. – bit di segno: segno del risultato dell’ultima operazione. – bit di overflow: ad esempio se il risultato dell’ultima operazione è più grande del massimo intero rappresentabile. – etc.. 16 Struttura della CPU e collegamenti con la memoria CPU ALU PSW Address Bus R01 R00 Data Registers Data Bus Control Unit Control Bus op R02 IR R03 PC Memory 17 Ciclo di esecuzione della CPU • Nell’esecuzione di un Programma, la CPU opera in modo ciclico, ripetendo fino alla terminazione del Programma almeno queste tre fasi (azioni atomiche): 1. 2. 3. Lettura (fetch): acquisizione dalla memoria della prossima istruzione da eseguire; Decodifica (decode): riconoscimento dell’istruzione e identificazione delle operazioni da svolgere per completarne l’esecuzione; Esecuzione (execute): effettuazione delle operazioni corrispondenti all’istruzione. 18 Ciclo di esecuzione della CPU • Tutte le azioni eseguite all’interno della CPU (ma anche di altri dispositivi) vengono sincronizzate da un oscillatore a cristalli di quarzo (clock), che segna la scansione temporale degli eventi: ciclo di clock • • In un ciclo di clock viene eseguita una singola azione atomica. La frequenza di clock si misura in Hertz (cicli o oscillazioni al secondo). Le frequenze delle CPU dei moderni Calcolatori è 19 dell’ordine dei GHz (1 GHz = 1000000000 Hz). CPU: Linguaggio Macchina • Il linguaggio in cui sono scritti i Programmi che la CPU è in grado di eseguire si chiama linguaggio macchina. • Ogni istruzione (es. lettura, somma, etc.) è definita da un codice binario speciale detto codice operativo. • Ogni CPU è caratterizzata da un suo insieme di istruzioni elementari (instruction set) che ne costituisce il linguaggio macchina. • CPU diverse “parlano linguaggi” diversi (anche se oggi, ad esempio, AMD e Intel “parlano” quasi lo stesso linguaggio, molto diverso invece, ad esempio, 20 da quello delle CPU IBM)! CPU: Linguaggio Macchina • Un’istruzione è costituita da una stringa di bit contenente: – Il codice operativo dell’istruzione – Gli operandi dell’istruzione • Esempio di istruzione che effettua la somma di due operandi src1 e src2 contenuti nei registri R02 e R03 e salva il risultato nel registro R01 (dst): codice operativo 000000 00000 100000 dst(R01) src1(R02) src2(R03) 00001 00010 00011 21 Linguaggio Assembler • La scrittura di un Programma in Linguaggio Macchina è un’operazione estremamente complicata, per via del fatto di dover indicare istruzioni e operandi in codice binario. • Il Linguaggio Assembler (o Assemblativo) è un linguaggio simbolico, nel senso che vengono adoperati dei simboli per la rappresentazione del codice operativo (tipo add per la somma) e degli operandi di un’istruzione (direttamente il nome di un Registro, es. R01, o un numero in esadecimale per indicare un indirizzo di memoria). • In pratica sussiste una corrispondenza biunivoca tra l’insieme delle istruzioni in Linguaggio Macchina e quello delle istruzioni in Linguaggio Assembler per una stessa CPU. • Un Programma scritto in Assembler deve essere tradotto in Linguaggio Macchina per essere eseguito dalla CPU, la traduzione è effettuata da un Programma apposito, chiamato 22 Assemblatore. Tipi di Istruzione • Istruzioni aritmetico-logiche: manipolano dati in ingresso e restituiscono il risultato in uscita, specificando dove depositare il risultato (Registro). • Istruzioni di salto: permettono di alterare l’esecuzione sequenziale di un programma. Si dividono in istruzioni di: – salto incondizionato: specificano l’indirizzo di memoria in cui si trova la prossima istruzione da eseguire. – salto condizionato: specificano inoltre una condizione che deve essere verificata affinché il salto abbia luogo, altrimenti l’elaborazione prosegue in sequenza. • Istruzioni di ingresso/uscita: servono a trasferire dati da e verso la CPU, specificando l’unità periferica da usare (es. memoria di massa) e la posizione del dato sia nella periferica che nel Calcolatore (es: Registro o cella di Memoria). 23 Esempi di Istruzioni in Assembler Istruzione add R01,R02,R03 addi R01,R02,421 lw R01,R02,421 sw R01,R02,421 j 8B2F0 beq R01,R02,-421 Significato R01 ← R02 + R03 R01 ← R02 + 421 R01 ← M[R02 + 421] M[R02 + 421] ← R01 vai a 8B2F0 se (R01=R02) vai a PC-421 Tipo aritmetico-logica aritmetico-logica ingresso/uscita (I) ingresso/uscita (O) salto (incondizionato) salto (condizionato) 24 Esecuzione di un Programma nella Macchina di Von Neumann • Come abbiamo visto, ciascuna istruzione di un Programma viene eseguita in tre fasi: l’acquisizione dalla Memoria, l’interpretazione e l’esecuzione. • L’acquisizione (fetch) si svolge a sua volta in quattro passi: • Il contenuto del PC viene trasferito attraverso il Bus Indirizzi al Registro Indirizzi della Memoria Centrale. Attraverso il Bus di Controllo viene specificata un’operazione di Lettura. • Avviene l’operazione di Lettura dalla Memoria Centrale: il contenuto della Cella specificato dal Registro Indirizzi viene copiato nel Registro Dati della Memoria. • Attraverso il Bus Dati viene trasferita la nuova istruzione nell’IR della CPU. • Viene incrementato di 1 il valore del PC (ma in caso di “salto” il PC sarà 25 aggiornato con un altro valore) Esecuzione di un Programma nella Macchina di Von Neumann • La fase di interpretazione (decode) consiste nell’analisi dell’IR per identificare l’operazione da eseguire. In questa fase viene analizzato solo il Codice operativo dell’istruzione corrente. • La fase di esecuzione (execute) dipende dal tipo di operazione (aritmetico-logica, salto o trasferimento dati). Se l’operazione è di tipo aritmetico-logica sarà eseguita con l’ausilio dell’ALU. 26 Dispositivi Periferici • Le Periferiche comunicano con la CPU tramite delle interfacce di I/O. • Un’interfaccia contiene Registri per inviare comandi alla Periferica, scambiare dati e controllarne il funzionamento. • Le interfacce sono molto diverse tra loro a seconda del tipo di Periferica considerata: – Tastiera – Stampante – Dispositivi di Memoria di massa – Scheda Video – Strumenti di misurazione – Sensori e attuatori di robot – etc. 27 Dispositivi Periferici • Le Periferiche possono essere più o meno “intelligenti”, ovvero possono essere dotate di proprie unità di controllo, capaci di convertire ed elaborare dati. • In questo caso le Periferiche saranno in grado di cooperare con la CPU, occupandosi di eseguire operazioni più o meno complesse (si pensi, ad esempio, alla Scheda Video). 28 Memorie di massa: dischi magnetici • Il dispositivo di Memoria di massa (o Memoria secondaria) che riveste un’importanza maggiore in un Calcolatore è sicuramente il Disco fisso (o Hard Disk) • Un Disco fisso è composto da uno o più supporti circolari di pari diametro ricoperti su entrambe le facce da un sottile strato di materiale magnetico, le cui condizioni di magnetizzazione consentono di memorizzare i dati. • Ogni unità atomica di memorizzazione si può trovare in due sole condizioni di magnetizzazione, corrispondenti ai valori 0 e 1. 29 Memorie di massa: dischi magnetici • I Dischi magnetici sono supporti di memorizzazione non volatile, però presentano un tempo di accesso ai dati molto maggiore rispetto a quello richiesto dalla Memoria centrale. • D’altra parte, la loro capacità può superare notevolmente quella della Memoria centrale, e ciò rende questi dispositivi particolarmente adatti alla funzione di storage di Dati e Programmi. 30 Organizzazione di un disco magnetico • Le operazioni di lettura/scrittura sono eseguite da una testina che viene posizionata in prossimità della zona magnetizzata coinvolta nell’operazione. • Le informazioni sono memorizzate in cerchi concentrici detti tracce la cui larghezza è pari alla dimensione della testina, e che contengono tutti la stessa quantità di dati (la densità di memorizzazione cresce dalla periferia al centro del disco). • Le tracce sono suddivise in settori ed ogni settore ospita dei blocchi di dati (records), in genere l’unità minima di trasferimento tra disco e memoria centrale. 31 Organizzazione di un disco magnetico tracce e settor spazi tra tracce spazi tra record 32 Funzionamento di un disco magnetico • • • Per poter essere utilizzato un disco deve essere formattato: in pratica si organizza la sua superficie in tracce e settori. Durante il funzionamento, il disco ruota a velocità costante. Per accedere ad un determinato record del disco si deve: 1. Posizionare la testina nella traccia contenente il record (seek time o tempo di posizionamento). 2. Attendere che la rotazione posizioni il settore cercato sotto la testina (latency time o tempo di latenza, dipende dalla velocità di rotazione del disco). 3. Attivare la lettura/scrittura (trasferimento) dei dati. 33 Estensioni della Macchina di Von Neumann • Se ci limitiamo a considerare il modello classico di Von Neumann, i fattori che influiscono sulla velocità di elaborazione e potenzialità del Calcolatore sono: – Dimensione dei Registri: determina la quantità di informazione su cui la CPU può lavorare in un certo istante. I moderni Calcolatori hanno Registri a 32, 64 e talvolta 128 bit. – Dimensione della RAM: più grande è la disponibilità di Memoria centrale, meno accessi al Disco fisso sarò costretto a fare per caricare in Memoria Dati e Istruzioni dei Programmi. – La frequenza di clock della CPU: infatti, la CPU usa le oscillazioni delle molecole di un cristallo di quarzo (come l’orologio) per scandire il tempo delle sue operazioni. I primi PC avevano una frequenza pari a 4.77 MHz. – Ampiezza del Bus Dati: determina quanti bit alla volta vengono trasmessi fra CPU e gli altri dispositivi. – Ampiezza del Bus Indirizzi: determina il numero di byte di Memoria che la CPU è in grado di indirizzare. 34 Estensioni della Macchina di Von Neumann • Il modello classico di Von Neumann presenta però tre limiti fondamentali che ne limitano le prestazioni: 1. L’esecuzione dei Programmi avviene in maniera sequenziale, un’istruzione dopo l’altra. 2. Impiego eccessivo del Bus di sistema per l’interscambio delle informazioni con la Memoria centrale e gli altri dispositivi. 3. I tempi di accesso alla Memoria centrale sono alti rispetto alla velocità di funzionamento della CPU. 35 Estensioni della Macchina di Von Neumann • Al fine di incrementare al massimo le prestazioni, nel corso dei decenni sono state studiate e realizzate alcune modifiche apportate al modello classico di Von Neumann: – – – Esecuzione separata ed in parallelo da parte di dispositivi appositi delle varie fasi di un’istruzione (fetch, decode e execute): architetture di tipo Pipeline. Utilizzo di memorie Cache, ossia memorie estremamente veloci ma anche più costose e ridotte da inserire tra CPU e Memoria centrale, dove conservare Dati e Istruzioni di uso più frequente. Architetture che utilizzano più processori: • Processori dedicati: affiancano la CPU eseguendo dei compiti specifici, quali il calcolo numerico (coprocessori matematici), la gestione della grafica (GPU), la gestione dei canali di I/O (DMA, Direct Memory Access). • Sistemi multiprocessore: architetture dotate di molteplici CPU indipendenti. 36 Architetture Pipeline • • • • Nelle CPU dotate di Pipeline, l’esecuzione delle istruzioni di un Programma vengono eseguite mediante un meccanismo simile a quello di una catena di montaggio. In pratica, mentre la CPU sta eseguendo una determinata istruzione, è in corso l’acquisizione e decodifica dell’istruzione successiva. Questa tecnica prende anche il nome di Parallelismo Virtuale, perché il flusso delle istruzioni procede dando l’impressione, in termini di prestazioni, di disporre di più processori. Per ottenere il massimo delle prestazioni è necessario però che non ci siano istruzioni consecutive dipendenti tra di loro, ad esempio: – y ← x + 1; z ← y + 1 37 Memoria Cache • • • • • Ogni volta che la CPU deve accedere a Istruzioni e Dati, questi devono essere caricati dalla RAM, il cui tempo di accesso è molto più lento rispetto alla velocità della CPU. La Memoria Cache è un’area di memoria particolare ad alta velocità di accesso e di dimensioni piuttosto piccole rispetto alla RAM. Contiene Dati e Istruzioni utilizzati con maggior frequenza dalla CPU, e questo determina l’incremento delle prestazioni. In fase di Lettura, se alla CPU serve un Dato o un’Istruzione, la ricerca viene fatta prima nella Cache, e se l’informazione non è presente viene prelevata dalla RAM e copiata nella Cache. In fase di Scrittura, l’informazione viene scritta sia in RAM che nella Cache. 38 Memoria Cache • • L’esistenza della Cache è del tutto trasparente dal punto di vista del Linguaggio Macchina, in quanto la CPU è “convinta” di lavorare solo con la RAM. La Memoria Centrale non può essere sostituita con una memoria realizzata come la Cache, per due motivi principali: – La Cache è molto più costosa di una memoria di tipo tradizionale. – Per garantire un tempo di accesso estremamente basso, la Cache deve fisicamente risiedere vicino alla CPU, possibilmente integrata sullo stesso chip, così da non richiedere l’utilizzo del Bus di sistema per l’accesso. Quindi è fisicamente impossibile, per ragioni puramente di spazio, realizzare Cache veloci e allo stesso tempo 39 molto capienti. Architetture a più processori • • • • Un’architettura a più processori (o parallela) è un sistema di calcolo costituito da un insieme di processori in grado di comunicare e cooperare tra loro. Se si considerano i sistemi multiprocessore (quelli dove sono presenti N CPU), teoricamente sarebbe lecito aspettarsi un aumento delle prestazioni direttamente proporzionale al numero di CPU (N processori, allora sistema N volte più veloce). In realtà l’incremento di prestazioni è inferiore, e il motivo principale risiede nel fatto che è complicato scrivere programmi che siano in grado di sfruttare appieno tale architettura. Infatti, il problema delle istruzioni dipendenti (vedi Pipeline) riguarda anche questo tipo di architettura. 40 Architetture a più processori • • L’impiego di architetture a più processori comporta l’importante scelta di come gestire e sincronizzare gli accessi alla Memoria centrale. In genere si distinguono due approcci: – – Architetture a Memoria Distribuita: ciascuna CPU è dotata di una memoria privata. Ad esempio i processori dedicati GPU (Graphics Processing Unit) delle schede grafiche più sofisticate, dispongono anche di una memoria propria. Architetture a Memoria Condivisa: tutte le CPU condividono l’accesso ad una memoria comune, utilizzando anche uno stesso BUS di sistema. La necessità di dover utilizzare un BUS comune riduce le prestazioni del sistema introducendo un “collo di bottiglia” nell’accesso alla memoria. Il problema può essere affrontato adottando memorie Cache locali per ciascuna CPU. I moderni sistemi “dual core” (due CPU nello stesso chip) rientrano in questa categoria. 41 Architetture CISC e RISC • E’ possibile classificare i Calcolatori anche rispetto al numero e alla complessità dell’insieme di istruzioni componenti il Linguaggio Macchina della CPU. – Architetture CISC (Complex Instruction Set Computers): su questo tipo di architettura è stata basata a lungo la maggior parte dei Calcolatori sul mercato, si caratterizza per: • Il Linguaggio Macchina è costituito da un numero grande di istruzioni. • L’elaborazione di ogni singola istruzione è piuttosto complessa. • Comporta una struttura hardware della CPU complessa. – Architetture RISC (Reduced Instruction Set Computers): queste architetture sono caratterizzate da un ridotto insieme di istruzioni, inoltre le istruzioni sono progettate in maniera tale da rendere l’hardware della CPU il più semplice possibile, con notevoli vantaggi in termini di prestazione. 42 Architetture CISC e RISC Processori Intel CISC (“famiglia x86”) Modello 8086 80286 80386 80486 Anno Bus Dati produzione (bit) 1978 1982 1985 1989 16 16 32 32 Registri Memoria (bit) Indirizzabile 16 16 32 32 1 Mb 16 Mb 4 Gb 4 Gb Frequenza massima CPU (MHz) 8 20 33 100 43 Architetture CISC e RISC Processori Motorola CISC (“famiglia 680x”) Modello 68000 68020 68030 68040 68060 Anno Bus Dati produzione (bit) 1979 1984 1987 1989 1993 16 32 32 32 32 Registri Memoria (bit) Indirizzabile 32 32 32 32 32 16 Mb 4 Gb 4 Gb 4 Gb 4 Gb Frequenza massima CPU (MHz) 8 16 32 40 66 44 Architetture CISC e RISC Processori Intel “ibridi” (CRISC) Modello Anno Bus Dati produzione (bit) Pentium P MMX Pentium II Pentium III Pentium 4 Itanium-2 1993 1997 1997 2000 2002 2003 64 64 64 64 64 128 Registri Memoria (bit) Indirizzabile 32 32 32 32 32 64 4 Gb 4 Gb 4 Gb 4 Gb 4 Gb 128 Gb Frequenza massima CPU (MHz) 150 266 450 1000 3200 1500 45 Architetture CISC e RISC Processori IBM-Motorola RISC Modello Anno Bus Dati produzione (bit) MPC 601 PowPC 750 MPC 7400 MPC 7455 PowPC 970 1994 1997 1999 2002 2004 64 64 64 64 2 da 32 Registri Memoria (bit) Indirizzabile 32 32 32 32 64 4 Gb 4 Gb 4 Gb 4 Gb 4 Tb (42 bit) Frequenza massima CPU (MHz) 120 466 500 1250 2500 46