Notice: Undefined index: arturo in /home/artupanett/domains/arturu.it/public_html/v/computer/hw/index.php on line 2
Hardware
23 May 2019 - 16:49--=[Computer]=----=[Computer]=----=[Musica]=----=[Musica]=----=[Geometra]=----=[Geometra]=----=[Download]=----=[Download]=----=[Link]=----=[Link]=----=[Articoli]=----=[Articoli]=--
Indice Computer Computer/ Hardware/ Microprocessore/


L'unità centrale di elaborazione è solitamente realizzata fisicamente sotto forma di microprocessore, i microprocessori sono dispositivi elettronici estremamente complessi, ad esempio, un microprocessore Intel Pentium III è composto da circa 18 milioni di transistor, mentre un processore Intel Pentium IV ne contiene circa 42 milioni.


Struttura di una unità centrale di elaborazione

Un processore di divide in molti componenti, ma le più inportanti sono, l'unità di controllo, l'unità aritmetico-logica (ALU), e i registri.

Alu


Registri

L'unità centrale di elaborazione contiene un numero limitato di celle di memoria, chiamete registri, con scopi specifici:
1) registro delle istruzioni: PC, program counter, indirizzo della prossima operazione da eseguire;
2) registro delle istruzioni: IR, instruction register, l'istruzione che deve essere codificata (eseguita);
3) registro di indirizzamento della memoria: MAR, indirizzo della cella di memoria che deve essere acceduta o memorizzata;
4) registro dati di memoria MDR, dato che è stato acceduto o che deve essere memorizzato;
5) parola di stato del processore PSW, contiene informazioni, opportunatamente codificate, circa l'esito dell'ultima istruzione che è stata eseguita.
Questi sono i registri princiapali, poi ci sono altri registri, utilizzati ad esempio per la memorizzazione degli operandi e del risultato di una operazione.
Per un approfondimento su questo argomento vai a organizzazione software dei registri »


Funzionamento dell'unità centrale di elaborazione

L'unità centrale di elaborazione esegue una istruzione svolgendo tre operazioni di base:
1) fetch, lettura, legge dalla memoria la prossima istruzione da eseguire;
2) decode, decodifica, determina il tipo di istruzione che deve essere eseguito;
3) execute, esecuzione, richiede lo svolgimento di tutte le azioni necessarie per l'esecuzione dell'istruzione (compreso l'incremento automatico del registro contatore delle istruzioni), ciascuna azione viene richiesta al componente opportuno.
L'esecuzione di un programma avviene eseguendo ordinatamente le istruzioni del programma, svolgendo ripetutamente il ciclo fetch-decode-execute.


Cartteristiche dei processori

Le caratteristiche principali di un microprocessore sono:
1) il repertorio di istruzioni, sono le istruzioni del linguaggio macchina del processore;
2) la velocità misurata come frequenza del clock, la frequenza del clock misura la durata del cliclo macchina, che è l'unità di tempo all'interno del processore (il più delle volte l'esecuzione di un'istruzione richiede più cicli macchina);
3) l'ampiezza del bus, numero di bit nel bus interno del processore;
4) il co-processore, i moderni processori sono integrati a co-processori specializzati (ad esempio, il co-processore matematico);
5) cache, è una memoria veloce locale al processore, che consente una accellerazione nell'esecuzione dei programmi (nei processori standard c'è solo la memoria cache di 1° livello, se si vuole si può aggiungere quella di 2° livello).


Come funziona la CPU

L'organizzazione interna di parte di una tipica CPU di Von Neuman si chiama data path e include i registri, l' ALU (Aritmetic Logic Unit) e molti bus che collegano i componenti. I registri sono collegati a due ulteriori registri di input dell'ALU (A e B nella figura).Questi registri memorizzano i dati di ingresso dell'ALU mentre l'ALU sta eseguendo i calcoli.

L'ALU stessa esegue addizioni, sottrazioni e altre semplici operazioni sugli ingressi, calcolando così un risultato che viene memorizzato nel registro di uscita. Il contenuto del registro di uscita può essere a sua volta trasferito in un registro. In seguito il contenuto del registro si potrà scrivere (immagazzinare) nella memoria, se necessario.
Gran parte delle memorie si possono dividere in una di due categorie:
  1. registro-memoria: permettono di prendere parole (dati) dalla memoria e di metterli nei registri, dove si possono usare come input ALU in istruzioni successive.
  2. registro-registro: prende due operandi dai registri e li porta ai registri di ingresso dell'ALU, esegue qualche operazione su di essi, ad esempio addizione o AND logico, e memorizza il risultato di nuovo in uno dei registri.
Il processo di far passare due operandi attraverso la ALU e di memorizzare il risultato si chiama ciclo del data path ed è al centro del funzionamento di quasi tutte le CPU. Possiamo dire che tale ciclo definisce quello che può fare una macchina. Più veloce è il ciclo del data path più veloce è la macchina.

Registri

La CPU esegue ogni istruzione per mezzo di una serie di piccoli passi. In linea di massima questi sono i passi:
  • Prende l'istruzione seguente dalla memoria e la mette nel registro delle istruzioni;
  • Cambia il program counter per indicare l'istruzione seguente;
  • Determina il tipo di istruzione appena letta;
  • Se l'istruzione usa una parola in memoria, determina dove si trova;
  • Mette la parola, se necessario, in un registro della CPU;
  • Esegue l'istruzione;
  • Torna al punto 1 e inizia a eseguire l' istruzione successiva.
Questa sequenza di passi viene spesso chiamata ciclo fetch-decode-execute (leggi-decodifica-esegui). Si tratta di una parte fondamentale del funzionamento di tutti i calcolatori.
La macchina che viene interpretata ha due registri visibili ai programmi dell'utente: il program counter (PC) per ricordare dove si trova l'indirizzo dell'istruzione, e l'accumulatore (AC) per accumulare i risultati aritmetici. è dotata inoltre di registri interni per memorizzare l'istruzione attuale durante la sua esecuzione (instr), il tipo di istruzione attuale (instr_type), l'indirizzo dell'operando dell'istruzione (data_loc) e l'attuale operando (data). Si assume che le istruzioni contengano un unico indirizzo di memoria. La cella di memoria utilizzata contiene l'operando,ad esempio il dato da sommare all' accumulatore.
Il solo fatto che sia possibile scrivere un programma in grado di imitare le funzioni di una CPU dimostra che un programma non deve necessariamente essere eseguito da una CPU "hardware" fatta da una scatola piena di componenti elettronici. Invece un programma si può eseguire facendo leggere, decodificare, ed eseguire le istruzioni da un altro programma. Un programma che legge decodifica ed esegue le istruzioni di un altro programma si chiama interprete. Un interprete suddivide le informazioni della macchina che interpreta (target machine) in piccoli passi.


Differenze tra RISC e CISC

Verso la fine degli anni '70 ci fu molta sperimentazione con istruzioni molto complesse resa possibile dall'interprete. I progettisti cercarono di chiudere il "divario" fra quello che le macchine potevano fare e quello che richiedevano i linguaggi di programmazione ad alto livello.
Nel 1980 un gruppo di scienziati cominciarono a progettare CPU su chip VLSI che non usavano l'interpretazione. Coniarono il termine RISC per questo concetto e chiamarono la loro CPU RISC I che fu seguita a breve da RISC II. Poco dopo, nel 1981, John Hennessy progettò e costruì un chip leggermente diverso che chiamò MIPS (Milions of Instruction Per Second). Questi nuovi processori erano molto diversi da quelli commerciali disponibili in quel momento. Poiché queste nuove CPU non avevano bisogno di essere compatibili con prodotti già esistenti, i progettisti erano liberi di scegliere instruction set nuovi che erano in grado di ottimizzare le prestazioni totali del sistema. Mentre lo slancio iniziale era posto su istruzioni semplici che si potessero eseguire in poco tempo, ben presto si capì che era più importante progettare istruzioni che venissero messe in esecuzione velocemente.
Quando venivano progettati questi primi processori semplici, la caratteristica più importante fu quella del numero ristretto di istruzioni disponibili, circa 50. Questo numero era molto più limitato delle 200 o 300 dei calcolatori in commercio come le unità centrali IBM. L'acronimo RISC sta per Reduced Instruction Set Computer, al contrario di CISC, che significa Complex Instruction Set Computer. IBM e INTEL, sostenevano che il modo migliore per progettare un calcolatore era di disporre un numero limitato di istruzioni semplici che venivano eseguite in un ciclo del data path, che cioè prendevano il contenuto di due registri, li combinavano (ad es. per mezzo di addizione o di AND) e memorizzavano il risultato in uno dei registri. Sostenevano che anche se una macchina RISC richiedeva quattro o cinque istruzioni per fare quello che una macchina CISC faceva con una, dato che le istruzioni RISC erano potenzialmente 10 volte più veloci (perché non venivano interpretate). La velocità delle memorie centrali aveva raggiunto lo stesso livello della velocità del control store, per cui vennero favorite le macchine RISC.
Le CPU Intel contengono un piccolo processore RISC che esegue le istruzioni più semplici (e le più comuni) in un ciclo del data path unico, mentre le istruzioni CISC più complesse vengono interpretate nel solito modo CISC. Il risultato è che le istruzioni più comuni vengono gestite velocemente, mentre quelle meno comuni sono più lente. Questo approccio non è veloce quanto quello RISC ma le prestazioni sono abbastanza competitive e il software resta invariato.


Principi di progettazione per i moderni calcolatori

Ora che sono passati più di dieci anni dall'introduzione delle prime macchine RISC, alcuni principi di progettazione sono stati accettati come un buon modo per progettare calcolatori. I principi più importanti sono:
  1. Tutte le istruzioni vengono eseguite direttamente dall'hardware,
    Tutte le istruzioni comuni vengono eseguite direttamente dall'hardware e non vengono interpretate da microistruzioni (è il numero di istruzioni compiute dall'interprete). Eliminando un livello di interpretazione aumenta la velocità di gran parte delle istruzioni. Nel caso di calcolatori che implementano l'instruction set CISC, le istruzioni più complesse si possono scomporre in parti separate che si possono poi eseguire come una sequenza di microistruzioni.
  2. Ottimizzare la velocità con la quale vengono iniziate le istruzioni,
    I calcolatori moderni utilizzano molti trucchi per ottimizzare le loro prestazioni, soprattutto cercano di iniziare ad eseguire più istruzioni possibili al secondo. Dopo tutto, se si possono inviare 500 milioni di istruzioni/secondo si è costruito un processo a 500 MIPS. Questo principio suggerisce che il rapporto può svolgere un ruolo fondamentale nel miglioramento delle prestazioni, perché inviare una grossa quantità di istruzioni lente a intervalli brevi e possibile solo se istruzioni multiple si possono eseguire contemporaneamente.
    Le istruzioni devono essere sempre eseguite nello stesso ordine specificato dal programma, esse non vengono iniziate sempre nello stesso ordine (perché una risorsa necessari potrebbe essere occupata) e non devono necessariamente finire nell'ordine specificato dal programma.
  3. Le istruzioni dovrebbero essere facilmente decodificabili,
    Una limitazione fondamentale della velocità con la quale vengono mandate in esecuzione le istruzioni è dovuta alla decodifica delle singole istruzioni per determinare le risorse necessarie. Qualsiasi cosa aiuti questo processo è utile e questo comprende usare istruzioni con una struttura regolare, di lunghezza fissa e con un numero limitato di campi. Più i formati delle istruzioni sono simili meglio è.
  4. Disporre di molti registri
    Poiché l'accesso alla memoria è un processo relativamente lento, è necessario avere a disposizione molti registri (almeno 32), in modo che, una volta letta una parola, la si può tenere in un registro affinché non serve più. La soluzione migliore è quindi di disporre un numero sufficiente di registri.



Parallelismo a livello delle istruzioni

Un modo per migliorare le prestazioni di un calcolatore, consiste nell'accelerare il funzionamento dei chip aumentando la velocità dei loro clock. Pertanto i ricercatori si rivolgono al parallelismo (eseguire due o più operazioni contemporaneamente) per ottenere di più da una specifica frequenza di clock. Il parallelismo ha due forme principali:
a) Parallelismo a livello di istruzioni: viene utilizzato all'interno delle singole istruzioni per ottenere dalla macchina l'esecuzione di più istruzioni /secondo.
b) Parallelismo a livello di processore: sono CPU multiple che lavorano insieme sullo stesso problema.
Esaminiamo il primo caso.
  1. Pipelining
    La lettura delle istruzioni dalla memoria rallenta la velocità di esecuzione delle istruzioni. Per superare questo problema i calcolatori sono in grado di leggere le istruzioni dalla memoria in anticipo in modo da averle a disposizione quando sono necessarie. Queste istruzioni vengono immagazzinate in un insieme di registri chiamati prefetch buffer. In questo modo, quando serve un istruzione, si prende dal prefetch buffer invece di aspettare che si completi la lettura della memoria.
    Il prefetching divide le istruzioni in due fasi: lettura dalla memoria e vera e propria esecuzione. Il concetto di pipeline estende questa strategia ancora di più. Invece di vedere l'esecuzione delle istruzioni in due fasi, spesso la divide in molte fasi,ognuna delle quali viene gestita da un pezzo hardware dedicato in modo che tutto possa funzionare in parallelo. Pipelining
  2. Parallelismo a livello di processore
    Array computer
    La velocità dei programmi può essere facilmente aumentata per mezzo dell'esecuzione parallela. Vi sono due metodi utilizzati per eseguire velocemente programmi di grosse dimensioni.
    Un array processor è composto da un gran numero di processori identici che eseguono la stessa sequenza di istruzioni su un insieme di dati diversi.
    Un vector processor è come un array processor ma molto più efficiente nell'esecuzione di operazioni, in quanto tali operazioni vengono eseguite in un sommatore unico dotato di molte pipeline.



Multiprocessori

Gli elementi di elaborazione di un array processor non sono indipendenti dalla CPU, poiché c'è solo un unità di controllo condivisa da tutti. Il primo sistema parallelo con CPU multiple è il multiprocessore, un sistema con più CPU che condividono una memoria comune, poiché ogni CPU e in grado di leggere o scrivere qualsiasi parte della memoria, queste operazioni vanno coordinate (nel software) per evitare che si ostacolino a vicenda.
Sono possibili vari schemi di realizzazione. Quello più semplice consiste nell'avere un unico bus collegato con CPU multiple e una memoria.
Multiprocessori


Multicomputer

Benché i multiprocessori con pochi processori ( < = 64 ) siano di costruzione relativamente facile, crearne uno di grosse dimensioni è particolarmente difficile. La difficoltà sta nel collegare tutti i processori alla memoria. Per superare questi problemi si costruiscono sistemi composti da un grosso numero di calcolatori collegati tra loro, ognuno dei quali è dotato da una memoria privata, ma non di memoria in comune. Questi sistemi si chiamano multiprocessori.
Le CPU in un multicalcolatore comunicano inviandosi dei messaggi simili a posta elettronica, ma molto più veloci.
Poiché i multiprocessori sono più facili da programmare e i multicalcolatori sono più facili da costruire, vengono studiati vari sistemi che combinano le qualità di ambedue, e cercano di presentare l'illusione della memoria in comune senza rincorrere al costo di costruirne una vera.
--=[Home page]=----=[Home page]=----=[Forum]=----=[Forum]=----=[lingua]=----=[lingua]=----=[Statistiche]=----=[Statistiche]=----=[Cerca in questo sito]=----=[Cerca in questo sito]=----=[Info sul copyright]=----=[Info sul copyright]=----=[Scegli le impostazioni che preferisci]=----=[Scegli le impostazioni che preferisci]=----=[Scrivi al webmaster]=--
vPHPvHTMLvCSS