Capitolo 5 Le infrastrutture HardWare Il processore CPU – Central Processing Unit Unità Centrale di Elaborazione Organizzazione tipica di un calcolatore “bus oriented” CPU Dispositivi di I/O Unità di controllo Unità aritmetico logica (ALU) Terminale Stampante Registri CPU Memoria centrale Unità disco Bus L’ “esecutore” ¾ Un calcolatore basato sull’architettura di Von Neumann esegue un programma sulla base dei seguenti principi: • dati e istruzioni sono memorizzati in una memoria unica che permette sia la scrittura che la lettura; • i contenuti della memoria sono indirizzati in base alla loro posizione, indipendentemente dal tipo di dato o istruzione contenuto; • le istruzioni vengono eseguite in modo sequenziale. ¾ Il linguaggio per cui la CPU si comporta da esecutore è detto linguaggio macchina (ogni CPU ha il suo). Le istruzioni scritte in linguaggio macchina sono piuttosto rudimentali: • il concetto di tipo di dato è quasi assente, • il numero di operandi è limitato (in genere non più di due), • il numero di operazioni previste è ridotto. Struttura istruzione codice operativo dest src1 src2 Linguaggio assemblatore add R01 R02 R03 Linguaggio macchina 000000 00000 100000 00001 00010 00011 Ciclo Fetch–Decode–Execute Fetch Decode Execute Le parti di una CPU ¾ Data path (o percorso dei dati) • è la parte che si occupa dell’effettiva elaborazione dei dati; • comprende dispositivi diversi • una o più unità aritmetico-logiche, dette ALU (Arithmetic Logic Unit); • alcune unità di memorizzazione temporanea, i registri, memoria ad alta velocità usata per risultati temporanei e informazioni di controllo (il valore massimo memorizzabile in un registro è determinato dalle dimensioni del registro). ¾ Unità di controllo • coordina le operazioni di tutto il processore (anche quelle del data path!); • regola il flusso dei dati e indica quali registri debbano essere collegati agli ingressi e all’uscita dell’ALU; • invia all’ALU il codice dell’operazione da eseguire; • riceve indicazioni sull’esito dell’operazione appena eseguita dall’ALU e gestisce opportunamente queste informazioni; • comprende alcuni registri di uso specifico • • • • Program Counter (PC) – qual è l’istruzione successiva; Instruction Register (IR) – istruzione in corso d’esecuzione; Program Status Word (PSW) – registra informazioni sulle operazioni aritmetico logiche della ALU … Data Path Registri R00 R01 R02 R03 X X + Y Y … … … … Registri ingresso ALU X Y add esito Registro uscita ALU A L U X + Y PSW Bus indirizzi Data path Unità di controllo Bus dati CPU Bus controllo Unità di controllo IR PC Memoria CPU ¾ In grado di eseguire solo istruzioni codificate in linguaggio macchina ¾ Ciclo Fetch – Decode - Execute 1. Prendi l’istruzione corrente dalla memoria (quella individuata dal contenuto del PC) e mettila nell’IR (Instruction Register), contemporaneamente incrementa il Program Counter (PC) in modo che contenga l’indirizzo dell’istruzione successiva (fetch) 2. Determina il tipo di istruzione da eseguire (decode) 3. Se l’istruzione usa dei dati presenti in memoria, determinane la posizione; 4. Carica la parola, se necessario, in un registro della CPU; 5. Esegui l’istruzione (execute) 6. Torna al punto 1 e inizia a eseguire l’istruzione successiva. Tipologie di istruzioni ¾ Architettura di riferimento: load/store • le operazioni aritmetico-logiche possono essere eseguite solo su dati che siano già stati caricati nei registri; • le operazioni di caricamento dei dati dalla memoria nei registri (load) e di archiviazione dei risultati dai registri nella memoria (store) debbono essere previste esplicitamente. ¾ Un processore in architettura load/store dovrà quindi essere in grado di eseguire le seguenti categorie di istruzioni: • Istruzioni aritmetico-logiche (Elaborazione dati) • Somma, Sottrazione, Divisione, … • And, Or, Xor, … • Maggiore, Minore, Uguale, Minore o uguale, … • Controllo del flusso delle istruzioni • Sequenza • Salto condizionato o non condizionato (per realizzare selezioni e cicli) • Trasferimento di informazione • Trasferimento dati e istruzioni tra CPU e memoria • Trasferimento dati e istruzioni tra CPU e dispositivi di ingresso/uscita (attraverso le relative interfacce) Esempi di istruzioni Istruzione Significato Categoria R01,R02,R03 R01 ← R02 + R03 aritmetico-logica addi R01,R02,421 R01 ← R02 + 421 aritmetico-logica lw R01,R02,421 R01 ← M[R02 + 421] trasferimento sw R01,R02,421 M[R02 + 421] ← R01 trasferimento beq R01,R02,–421 se (R01 == R02) vai a PC–421 j 84210 add vai a 84210 salto (condizionato) salto (non condizionato) Istruzioni aritmetico-logiche ¾ Un’istruzione aritmetico-logica, ad esempio add RZ,RX,RY, viene eseguita in quattro passi: 1. l’istruzione viene prelevata dalla memoria e scritta nell’IR mentre il PC viene incrementato (si tratta della fase di fetch già descritta in precedenza); 2. viene letto il contenuto dei due registri RX e RY (in pratica l’unità di controllo attiva i collegamenti tra i registri RX e RY, individuati dal contenuto dell’IR, e i registri di ingresso all’ALU e provvede a effettuare il trasferimento dei dati); 3. la ALU opera sui dati letti dal banco dei registri, eseguendo l’operazione indicata dal codice compreso nell’istruzione (l’unità di controllo attiva il collegamento di un pezzo dell’IR con l’ingresso di controllo dell’ALU); 4. il risultato calcolato dall’ALU viene scritto nel registro RZ (anche il registro destinazione viene individuato a partire dal contenuto dell’IR). Istruzioni di trasferimento ¾ Un’istruzione di trasferimento, ad esempio lw RY,RX,base, viene eseguita in cinque passi: 1. l’istruzione viene prelevata dalla memoria e scritta nell’IR mentre il PC viene incrementato; 2. viene letto il contenuto del registro RX; RX 3. la ALU opera sui dati letti dal banco dei registri e sulla base scritta nell’IR; 4. il risultato calcolato dall’ALU viene utilizzato come indirizzo per la memoria dati; 5. il dato proveniente dalla memoria viene scritto nel registro RY. RY Istruzioni di controllo ¾ Un’istruzione di trasferimento, ad esempio beq RX,RY,salto, viene eseguita in quattro passi: 1. l’istruzione viene prelevata dalla memoria e scritta nell’IR mentre il PC viene incrementato; 2. viene letto il contenuto dei due registri RX e RY; RY 3. la ALU opera sui dati letti dal banco dei registri, eseguendo l’operazione indicata dal codice compreso nell’istruzione (nel caso dell’esempio si tratta di una sottrazione, per verificare poi se il risultato è uguale o diverso da zero); contemporaneamente il contenuto del PC viene sommato al valore del salto per calcolare l’eventuale destinazione del salto; 4. l’esito dell’operazione viene utilizzato per decidere quale valore debba essere memorizzato nel PC. PC Unità funzionali richieste dai diversi tipi di istruzioni Tipo di istruzione Aritmetico-logico Unità funzionali utilizzate Memoria Banco Banco ALU (istruzioni) registri registri Trasferimento Memoria Banco Memoria Banco ALU (dati) registri (registri ← memoria) (istruzioni) registri Trasferimento Memoria Banco Memoria ALU (dati) (registri → memoria) (istruzioni) registri Salto (condizionato) Salto (non condizionato) Memoria Banco ALU (istruzioni) registri Memoria (istruzioni) Durata indicativa di ogni categoria di istruzione (tempi in ns). Tipo di istruzione Memoria Lettura ALU Memoria Scrittura istruzioni registro dati registro Totale (MI) (LR) (AL) (MD) (SR) Aritmetico-logico 10 5 10 – 5 30 Trasferimento (registri ← memoria) 10 5 10 10 5 40 Trasferimento (registri → memoria) 10 5 10 10 – 35 Salto (condizionato) 10 5 10 – – 25 Salto (non condizionato) 10 – – – – 10 Un esempio Esecuzione di una successione di quattro istruzioni per il caricamento di due dati dalla memoria nei registri R01 e R02, la loro somma e la registrazione in memoria del risultato. lw R01,R11,421 lw R02,R11,842 MI LR AL 40 ns add R03,R01,R02 Tempo MD SR MI LR AL MD SR 40 ns MI LR AL SR 35 ns MI LR AL sw R03,R11,421 145 ns Ordine di esecuzione delle istruzioni 30 ns MD Architettura di una CPU ¾ Obiettivo: definire l’architettura complessiva di un processore ¾ Metodo: partiamo dai componenti che servono per completare l’esecuzione delle diverse fasi di ciascuna istruzione ¾ Ipotesi semplificativa: assumiamo di avere a disposizione due memorie distinte, una per le istruzioni e una per i dati Fetch ¾ Fase di fetch • prelievo istruzione corrente (da PC) • caricamento nell’IR • incremento PC ¾ Elementi necessari • i due registri (PC e IR) • memoria per le istruzioni • sommatore (per incrementare il PC senza l’intervento dell’ALU) +1 PC Indirizzo lettura Istruzione Memoria Istruzioni IR Istruzioni Aritmetico-Logiche ¾ Sequenza 1. Lettura di due registri (a meno che uno dei due operandi non sia diretto) 2. Esecuzione di un’operazione che coinvolge l’ALU 3. Scrittura del risultato in un registro. ¾ WR Elementi necessari • Registri • ogni lettura richiede un ingresso (il numero del registro) e un’uscita (il valore letto), • una scrittura richiede due ingressi (il numero del registro e il valore da scriverci) • servono quindi quattro ingressi (due per la lettura di due registri sorgenti e due per la scrittura) e due uscite (per le due letture). • ALU • Unità di controllo • indica all’ALU quale operazione eseguire; • indica ai registri quando leggere/scrivere i dati; • Attiva le opportune linee di collegamento. Dato reg. src2 Num. reg. src2 IR Num. reg. src1 Dato reg. src1 Banco registri Num. reg. dest Dato da scrivere OP ALU esito Trasferimento dati da memoria (load) ¾ Sequenza • legge un registro perché contiene parte dell’indirizzo • usa l’ALU per calcolare l’indirizzo effettivo della cella di memoria cui si vuole accedere • manda il risultato alla memoria dati • legge dalla memoria dati il valore da scrivere nei registri ¾ Elementi • Registri • lettura per calcolare l’indirizzo • scrittura per salvare il dato trasferito • ALU • calcola l’indirizzo effettivo • Memoria dati • Unità di controllo WR Dato reg. src2 Num. reg. src2 IR OP esito WR RD ALU Indirizzo per lettura Num. reg. src1 Dato reg. src1 Banco registri Dato letto Memoria dati Num. reg. dest Indirizzo per scrittura Dato da scrivere Dato da scrivere Trasferimento dati a memoria (store) ¾ Sequenza • legge due registri (uno contiene parte dell’indirizzo l’altro il dato da scrivere in memoria) • usa l’ALU per calcolare l’indirizzo effettivo della cella di memoria cui si vuole accedere • manda il risultato alla memoria dati insieme al dato da scrivere ¾ Elementi • Registri • lettura per calcolare l’indirizzo • lettura del dato da trasferire • ALU • calcola l’indirizzo effettivo • Memoria dati • Unità di controllo WR OP Dato reg. src2 Num. reg. src2 IR Num. reg. src1 Dato reg. src1 Banco registri esito WR RD Indirizzo per lettura ALU Dato letto Memoria dati Num. reg. dest Indirizzo per scrittura Dato da scrivere Dato da scrivere Combinazione di load e store WR Dato reg. src2 Num. reg. src2 IR Num. reg. src1 Dato reg. src1 Banco registri OP ALU esito WR RD Indirizzo per lettura Dato letto Memoria dati Num. reg. dest Indirizzo per scrittura Dato da scrivere Dato da scrivere ¾ Salti condizionati Salti • calcolo dell’indirizzo di destinazione del salto • valutazione della condizione (per capire se saltare o no) ¾ Salti non condizionati • sostituire una parte del PC con alcuni dei bit contenuti nell’IR ¾ Σ Elementi necessari • Sommatore aggiuntivo • Registri solo in lettura (il risultato non deve essere salvato ma solo esaminato per valutare l’esito dell’operazione) • ALU • Unità di controllo ¾ PC+1 Elementi necessari • … nulla in più … Destinazione del salto WR Dato reg. src2 Num. reg. src2 IR Num. reg. src1 Dato reg. src1 Banco registri Num. reg. dest Dato da scrivere OP ALU esito Combinazione di tutti gli elementi PC+1 Σ WR +1 PC Destinazione del salto Indirizzo lettura Dato reg. src2 Num. reg. src2 Istruzione Memoria Istruzioni IR Num. reg. src1 Dato reg. src1 Banco registri Cerchio: multiplexer OP ALU esito WR RD Indirizzo per lettura Dato letto Memoria dati Num. reg. dest Indirizzo per scrittura Dato da scrivere Dato da scrivere Questa unità di calcolo può eseguire tutte le operazioni elementari in un unico ciclo di clock NOTA:il clock è un segnale periodico che sincronizza il funzionamento dei dispositivi elettronici digitali. Incrementare le prestazioni con il parallelismo Migliorare le prestazioni di una CPU ¾ La frequenza di clock • influenza direttamente il tempo di ciclo del data path e quindi le prestazioni di un calcolatore; • è limitata dalla tecnologia disponibile. ¾ Il parallelismo permette di migliorare le prestazioni senza modificare la frequenza di clock. Esistono due forme di parallelismo: • parallelismo a livello delle istruzioni (architetture pipeline o architetture superscalari); • parallelismo a livello di processori (Array computer, multiprocessori o multicomputer). Architettura pipeline ¾ Organizzazione della CPU come una “catena di montaggio” • la CPU viene suddivisa in “stadi”, ognuno dedicato all’esecuzione di un compito specifico; • l’esecuzione di un’istruzione richiede il passaggio attraverso (tutti o quasi tutti) gli stadi della pipeline; • in un determinato istante, ogni stadio esegue la parte di sua competenza di una istruzione; • in un determinato istante, esistono diverse istruzioni contemporaneamente in esecuzione, una per ogni stadio. Esempio di pipeline /1 Pipeline in cinque stadi: S1 [MI] lettura istruzioni dalla memoria, caricamento IR e incremento PC; S2 [LR] lettura dai registri degli operandi richiesti; S3 [AL] esecuzione delle operazioni aritmetico-logiche necessarie; S4 [MD] accesso alla memoria dati (per lettura/load o scrittura/store); S5 [SR] scrittura nei registri dei risultati. Stadio 1 Stadio 2 Stadio 3 Stadio 4 Stadio 5 Memoria Istruzioni (MI) Lettura Registri (LR) ALU Memoria Dati (MD) Scrittura Registri (SR) 10 ns 5 ns (AL) 10 ns 10 ns 5 ns Con e senza pipeline ¾ Esempio a ds: • Senza pipeline T = 145 • Con pipeline T = 80 • Rapporto 145/80 = 1.81 ¾ Per esempio con 1000 istruzioni • Senza pipeline T ≥ 30ms • Con pipeline T = 10ms+40ns • Rapporto 30/10.00004 = 2.99998 MI LR AL lw R01,R11,421 Tempo MD SR 40 ns lw R02,R11,842 MI LR AL MD SR 40 ns add R03,R01,R02 MI LR AL SR 145 ns Ordine di esecuzione delle istruzioni lw R02,R11,842 add R03,R01,R02 35 ns MI LR AL sw R03,R11,421 lw R01,R11,421 30 ns MI 10 ns LR MI 10 ns sw R03,R11,421 AL LR MI 10 ns MD AL LR MD SR AL MI LR 80 ns Ordine di esecuzione delle istruzioni Tempo SR SR AL MD MD Prestazioni di una pipeline ¾ Il tempo di esecuzione (latenza) della singola istruzione non diminuisce, anzi aumenta • il tempo di attraversamento (latenza) della pipeline corrisponde al numero degli stadi (N) moltiplicato per il tempo di ciclo (T); • il tempo di ciclo è limitato dallo stadio più lento! ¾ Aumenta il numero di istruzioni completate nell’unità di tempo (throughput) • si completa un’istruzione a ogni ciclo di clock; • l’incremento di throughput è quasi proporzionale al numero degli stadi! Esecuzione in pipeline Stadi Stadio 5 (SR) Stadio 4 (MD) Stadio 3 (AL) Stadio 2 (LR) Stadio 1 (MI) Istruzione 1 Istruzione 2 10 ns Istruzione 3 20 ns Istruzione 4 30 ns Istruzione 5 40 ns Istruzione 6 50 ns 60 ns Tempo Esecuzione in pipeline Stadi Stadio 5 (SR) Istruzione 1 Istruzione 2 Istruzione 1 Istruzione 2 Istruzione 3 Istruzione 1 Istruzione 2 Istruzione 3 Istruzione 4 Istruzione 1 Istruzione 2 Istruzione 3 Istruzione 4 Istruzione 5 Istruzione 2 Istruzione 3 Istruzione 4 Istruzione 5 Istruzione 6 Stadio 4 (MD) Stadio 3 (AL) Stadio 2 (LR) Stadio 1 (MI) Istruzione 1 10 ns 20 ns 30 ns 40 ns 50 ns 60 ns Tempo Esempio di pipeline S1 S2 S3 S4 /2 S5 tempo t1 Istr. Istr. 11 t2 Istr. Istr. 22 Istr. Istr. 11 t3 Istr. Istr. 33 Istr. Istr. 22 Istr. Istr. 11 t4 Istr. Istr. 44 Istr. Istr. 33 Istr. Istr. 22 Istr. Istr. 11 t5 Istr. Istr. 55 Istr. Istr. 44 Istr. Istr. 33 Istr. Istr. 22 Istr. Istr. 11 t6 Istr. Istr. 66 Istr. Istr. 55 Istr. Istr. 44 Istr. Istr. 33 Istr. Istr. 22 Esecuzione in pipeline Stadi Stadio 5 (SR) Istr. N–4 Istr. N–3 Istr. N–2 Istr. N–1 Istr. N Istr. N+1 Stadio 4 (MD) Istr. N–3 Istr. N–2 Istr. N–1 Istr. N Istr. N+1 Istr. N+2 Stadio 3 (AL) Istr. N–2 Istr. N–1 Istr. N Istr. N+1 Istr. N+2 Istr. N+3 Stadio 2 (LR) Istr. N–1 Istr. N Istr. N+1 Istr. N+2 Istr. N+3 Istr. N+4 Stadio 1 (MI) Istr. N Istr. N+1 Istr. N+2 Istr. N+3 Istr. N+4 Istr. N+5 t1 t2 t3 t4 t5 t6 Tempo In ogni istante (e.g. t3) ci sono 5 istruzioni in esecuzione Esecuzione in pipeline S1 S2 S3 S4 S5 ii ii -- 11 ii -- 22 ii -- 33 ii -- 44 ti+1 ii + + 11 ii ii -- 11 ii -- 22 ii -- 33 ti+2 ii + + 22 ii + + 11 ii ii -- 11 ii -- 22 ti+3 ii + + 33 ii + + 22 ii + + 11 ii ii -- 11 ti+4 ii + + 44 ii + + 33 ii + + 22 ii + + 11 ii ti All’istante ti+2 ci sono 5 istruzioni in esecuzione Esecuzione in pipeline Stadi Stadio 5 (SR) Istr. N–4 Istr. N–3 Istr. N–2 Istr. N–1 Istr. N Istr. N+1 Stadio 4 (MD) Istr. N–3 Istr. N–2 Istr. N–1 Istr. N Istr. N+1 Istr. N+2 Stadio 3 (AL) Istr. N–2 Istr. N–1 Istr. N Istr. N+1 Istr. N+2 Istr. N+3 Stadio 2 (LR) Istr. N–1 Istr. N Istr. N+1 Istr. N+2 Istr. N+3 Istr. N+4 Stadio 1 (MI) Istr. N Istr. N+1 Istr. N+2 Istr. N+3 Istr. N+4 Istr. N+5 t1 t2 t3 t4 t5 t6 Tempo Ogni stadio (e.g. AL) esegue la parte di sua competenza di istruzioni successive l’una all’altra. Esecuzione in pipeline S1 S2 S3 S4 S5 ii ii -- 11 ii -- 22 ii -- 33 ii -- 44 ti+1 ii + + 11 ii ii -- 11 ii -- 22 ii -- 33 ti+2 ii + + 22 ii + + 11 ii ii -- 11 ii -- 22 ti+3 ii + + 33 ii + + 22 ii + + 11 ii ii -- 11 ti+4 ii + + 44 ii + + 33 ii + + 22 ii + + 11 ii ti Lo stadio S3 esegue la parte di sua competenza di istruzioni successive l’una all’altra. Caratteristiche delle CPU ¾I microprocessori sono identificati dalla casa costruttrice (per PC Intel, AMD o Motorola) tramite sigle. La sigla è associata a caratteristiche interne del processore quali la frequenza di clock e il parallelismo di elaborazione (ossia il numero di bit che possono essere elaborati simulataneamente). ¾ Processore a 16 bit ha registri interni che contengono i dati di 16 bis e spesso anche la dimensione del bus dei dati coincide. Siamo ormai a 64 bit. Evoluzione architetture ¾ Vista la disponibilità di un maggior numero di transistor si inseriscono più pipeline nella stessa CPU • aumenta il parallelismo perché è possibile eseguire contemporaneamente diversi flussi di istruzioni; istruzioni • è necessario garantire che non ci siano conflitti tra le istruzioni che vengono eseguite insieme; di solito il controllo è affidato al compilatore. Stadio 1 Memoria Istruzioni (MI) Stadio 2 Stadio 3 Stadio 4 Stadio 5 Lettura Registri (LR) ALU Memoria Dati (MD) Scrittura Registri (SR) Memoria Dati (MD) Scrittura Registri (SR) Lettura Registri (LR) (AL) ALU (AL) Architetture superscalari In alternativa si possono replicare le unità funzionali • rappresentano lo stadio più lento della pipeline (in genere richiedono diversi cicli di clock); • è più semplice evitare i conflitti tra le diverse istruzioni. ALU 1 execute ALU 2 LOAD STORE S1 S2 S3 fetch decode lettura operandi FP 1 FP 2 S5 write back Multiprocessori ¾ Diverse CPU condividono una memoria comune: • le CPU debbono coordinarsi per accedere alla memoria; • esistono diversi schemi di collegamento tra CPU e memoria, quello più semplice prevede che ci sia un bus condiviso; • se i processori sono veloci il bus diventa un collo di bottiglia; • esistono soluzioni che permettono di migliorarne le prestazioni, ma si adattano a sistemi con un numero limitato di CPU (<20). ¾ La memoria condivisa rende più semplice il modello di programmazione: • si deve parallelizzare l’algoritmo, ma si può trascurare la “parallelizzazione” dei dati. CPU CPU CPU CPU mem bus condiviso Multicalcolatori ¾ Sistemi composti da tanti calcolatori collegati fra loro • ogni calcolatore è dotato di una memoria privata e non c’è memoria in comune; • comunicazione tra CPU basata su scambio di messaggi. ¾ Non è efficiente collegare ogni calcolatore a tutti gli altri, quindi vengono usate topologie particolari: • griglie a 2/3 dimensioni, alberi e anelli; • i messaggi, per andare da fonte a destinazione, spesso devono passare da uno o più calcolatori intermedi o switch. • Tempi di trasferimento dei messaggi dell’ordine di alcuni microsecondi sono comunque facilmente ottenibili. ¾ Sono stati costruiti multicalcolatori con ~10.000 CPU. Struttura di un multicomputer mem mem mem mem CPU CPU CPU CPU bus condiviso Evoluzione delle CPU Intel Frequenza Dim. registri Numero di (MHz) bus dati transistor CPU Anno 8086 1978 4.77 — 12 8/16 29 000 80286 1982 8 — 16 16/16 134 000 80386 1986 16 — 33 32/32 275 000 80486 1989 33 — 50 32/32 1 200 000 Pentium 1993 60 — 200 32/64 3 100 000 Pentium II 1997 233 — 400 32/64 7 500 000 Pentium III 1999 450 — 1133 32/64 24 000 000 (Willamette) 2000 1300 — 2000 32/64 42 000 000 (Northwood) 2002 2000 — 3400 32/64 55 000 000 (Prescott) 2004 2800 — 3800 32/64 125 000 000 Pentium 4 Legge di Moore Osservazione fatta da Gordon Moore nel 1965: il numero dei transistor per cm2 raddoppia ogni X mesi In origine X era 12. Correzioni successive hanno portato a fissare X=18. Questo vuol dire che c’è un incremento di circa il 60% all’anno. # Transistor [CPU Intel] 100 000 000 10 000 000 1 000 000 100 000 1989 1991 1993 1995 1997 1999 Legge di Moore e progresso ¾ ¾ ¾ ¾ ¾ Il progresso della tecnologia provoca un aumento del numero di transistor per cm2 e quindi per chip. Un maggior numero di transistor per chip permette di produrre prodotti migliori (sia in termini di prestazioni che di funzionalità) a prezzi ridotti. I prezzi bassi stimolano la nascita di nuove applicazioni (e.g. non si fanno video game per computer da milioni di $). Nuove applicazioni aprono nuovi mercati e fanno nascere nuove aziende. L’esistenza di tante aziende fa crescere la competitività che, a sua volta, stimola il progresso della tecnologia e lo sviluppo di nuove tecnologie.