Sartomiki.net

  • Aumenta dimensione caratteri
  • Dimensione caratteri predefinita
  • Diminuisci dimensione caratteri
Home Appunti Calcolatori elettronici Domande riassuntive

Domande riassuntive

E-mail Stampa PDF
Valutazione attuale: / 0
ScarsoOttimo 

domandaSi illustri brevemente il concetto di microprogrammazione, dando risalto alle differenze tra microprogrammazione verticale ed orizzontale. (Per approfondire da un'occhiata qui)

Fu inventata da Winkens intorno al 1950. L’insieme dei segnali di controllo prodotti dalla UC, viene detto microistruzione. Ogni microprogramma è un insieme di microistruzioni, memorizzati in una memoria apposta detta memoria di microprogramma ed aventi un determinato formato. Il funzionamento si divide principalmente in 4 parti: si esegue una lettura dalla memoria di microprogramma, utilizzando un microPC. La parola è caricata in un microIR. Il microIR pilota i segnali di controllo per l’unità di elaborazione e per la generazione dell’indirizzo della microistruzione successiva. La logica genera un nuovo indirizzo anche in base ai segnali che arrivano dall’esterno. Tutte le operazioni vengono eseguite in un solo colpo di clock. La microprogrammazione è molto semplice da implementare ed è molto flessibile, in quanto è molto semplice aggiungere nuove istruzioni. I contro sono una minore velocità, in quanto bisogna fare accesso in memoria per sapere quale è il passo da eseguire e il costo, in quanto una memoria molto veloce di grande dimensione fa crescere il costo in termini di hardware. Esistono diversi tipi di microprogrammazione a seconda di come si risolvono i problemi di determinazione della successiva microistruzione o come codificare i segnali di controllo. Ad esempio se ciascuna microistruzione contiene una serie di bit che determinano il valore dei segnali di controllo allora si parla di microistruzione orizzontale. In questo caso si ha il massimo parallelismo nell’esecuzione (si possono eseguire più micro operazioni contemporaneamente) e massima velocità di esecuzione anche se la lunghezza di ogni microistruzione è molto lunga e c’è uno spreco di memoria. E’ per questo motivo che si ricorre alla tecnica delle microistruzioni verticali in cui ogni microistruzione contiene una serie di segnali codificati che determinano i segnali di controllo da attivare. Questa tecnica ha il problema che sono meno adatte a descrivere micro operazioni contemporanee.

domandaSi illustri brevemente il ruolo ed il funzionamento del DMA controller. (Per approfondire da un'occhiata qui)

Serve a trasferire grosse quantità di dati e il DMA controller è il dispositivo che esegue il trasferimento da una periferica alla memoria o viceversa. Questo circuito deve pilotare e organizzare le operazioni sul bus, si dice quindi che funziona da bus master. Il DMA controller gestisce più periferiche e dispone per ciascuna di esse di linee di richiesta e di acknowledge, registri DC e IOAR e circuiti di controller. Il DMA controller è in grado di arbitrare più richieste contemporanee. Il trasferimento di un blocco in DMA si articola in diverse fasi. All’inizio dell’operazione la CPU carica nel registro IOAR l’indirizzo dell’area di memoria da trasferire e nel registro DC il numero di parole da trasferire, contemporaneamente indica al DMA se si tratta di una operazione di lettura o di scrittura nella periferica. Il DMA controller riceve la richiesta di trasferimento di una periferica e invia alla CPU il segnale Request. Quando la CPU giunge ad un punto di rilevamento del Request libera il BUS e attiva il segnale di Acknoweledge. Il DMA Controller può quindi iniziare il trasferimento di ciascuna parola incrementando IOAR e decrementando DC. Il DMA Controller può anche decidere di sospendere temporaneamente il trasferimento, consentendo quindi alla CPU di tornare a pilotare il BUS. Nel momento in cui DC giunge a zero, il trasferimento termina e il DMA Controller invia un segnale di Interrupt alla CPU, per segnalare il corretto trasferimento dei dati.  Il traferimento dei dati può avvenire in diversi modi: a blocchi, con cycle stealing, e in trasparente DMA.

domandaSi illustrino brevemente le caratteristiche della tecnica dell’arbitraggio centralizzato con richieste indipendenti, evidenziandone pregi e difetti. (Per approfondire da un'occhiata qui)

In un qualunque calcolatore è possibile che le periferiche di I/O abbiano bisogno di pilotare il BUS. Per soddisfare le richieste di questi dispositivi è necessario che ci siano delle componenti logiche in grado di “arbitrare” le richieste. Il dispositivo può essere indipendente e fungere da “arbitro” oppure ogni dispositivo può avere la logica di arbitraggio al suo interno. Nel primo caso l’arbitro può avere diversi criteri per decidere a chi affidare il compito di BUS master e si parla di arbitraggio centralizzato. Le due tecniche più utilizzate sono il polling e l’interrupt. Nel polling è l’arbitro che effettua un sondaggio periodico, secondo un preciso ordine, per verificare se qualche dispositivo sta richiedendo il controllo del Bus. Questo metodo è molto semplice da implementare, poco costoso e supporta la priorità dei vari dispositivi, ma può portare a lunghi periodi di latenza e di attesa da parte del dispositivo prima che la sua richiesta venga soddisfatta. Il metodo dell’interrupt è basato invece sull’utilizzo di un segnale asincrono, che ogni dispositivo manda all’arbitro ogniqualvolta ha bisogno di utilizzare il BUS.

domandaSi illustri brevemente la modalità di indirizzamento dei dispositivi periferici nota come memory mapped (Per approfondire da un'occhiata qui)

Una CPU a n linee, può gestire al massimo 2^n locazioni di memoria differenti. Lo spazio di indirizzamento può essere gestito principalmente in due modi diversi: Isolated I/O e Memory mapped I/O. Nelle CPU che utilizzano il sistema Memory Mapped I/O lo spazio di indirizzamento è condiviso tra memoria e dispositivi di I/O, il che significano che non ci sono bit specifici che identificano se si sta utilizzando una locazione di memoria oppure un dispositivo di I/O. In questo caso quindi i registri di I/O sono connessi come le normali celle di memoria e quindi lo spazio di indirizzamento per la memoria risulta essere ridotto. Si può fare accesso ai registri delle periferiche utilizzando le normali istruzioni ed i modi di indirizzamento a loro associati. Questo metodo di indirizzamento è usato in molti processori come ad esempio il Motorola 68000. Un esempio tipico di funzione utilizzabile sia  per la memoria che per i registri delle periferiche è la funzione MOV. Con questo metodo di indirizzamento è necessaria una circuiteria che identifichi se l’indirizzo che si sta chiamando è quello contenuto in memoria oppure quello che identifica il registro di una periferica.

domandaSi illustri brevemente la modalità di indirizzamento dei dispositivi periferici nota come Isolated I/O (Per approfondire da un'occhiata qui)

Al contrario che nel memory mapped, l’Isolated I/O ha spazi di indirizzamento diversi e separati per memoria e periferiche. Essi sono diversificati da specifici bit di controllo che appunto identificano l’indirizzo. Questo sistema è utilizzato ad esempio dall’8086. Per accedere quindi ai registri presenti nelle periferiche bisogna utilizzare specifici comandi (ad esempio IN o OUT). In questo caso non vi sono riduzioni dello spazio di indirizzamento della memoria anche se normalmente ci sono sprechi, in quanto normalmente si potrebbero pilotare 2^n periferche quando esse al massimo sono un centinaio.
Si illustrino brevemente le principali differenze tra memorie statiche e dinamiche.
Al momento esistono due tipi di Memorie volatili ad accesso causale (RAM): statiche o dinamiche. Entrambe hanno una struttura matriciale e differiscono principalmente in come è strutturata la cella base. Infatti nelle RAM statiche essa è costituita da un Flip Flop mentre nelle dinamiche esso è sostituito da un condensatore o da un transistor a seconda della tecnologia con cui è realizzato. Le RAM statiche, siccome il dato è memorizzato sottoforma di carica presente o non presente all’interno di un condensatore che tende a scaricarsi, necessitano di un periodico rinfresco, in cui il dato viene ripristinato al valore di partenza; in più nelle RAM dinamiche ogni lettura è distruttiva e quindi deve essere seguita da una riscrittura del dato stesso. I pregi delle memorie statiche sono molteplici in quanto sono più veloci e più semplici da integrare e più affidabili, il difetto principale è che esse richiedono maggiore superficie. A seconda del Flip Flop utilizzato, nella memoria SRAM vengono modificati i metodi di lettura e scrittura anche se si può dire che generalmente finchè la linea e la colonna relativa a una cella il flip flop ad essa associata rimane in uno stato di memoria, quando invece i due segnali vengono attivati allora si può procedere con la lettura o la scrittura. Nelle DRAM quando viene attivata una determinata il condensatore se era carico si scarica portando quindi una carica sulla linea di out (si registra 1) altrimenti rimane nello stato in cui è. La cella quindi al termine di un’operazione di lettura ha il condensatore sempre scarico e quindi il dato andrebbe perso se al termine dell’operazione di lettura non seguisse sempre un’operazione di scrittura del valore letto in precedenza. Il secondo problema è quello che ogni condensatore dopo un certo periodo di t, tende a scaricarsi e quindi a settarsi sul valore 0. E’ quindi necessario un periodico rinfresco, che si basa su una serie di letture fittizie, che quindi sostituiscono al valore letto lo stesso valore ma con il condensatore più carico.

domandaSi illustri brevemente il principio di località dei riferimenti che è alla base del funzionamento delle memorie cache. (Per approfondire da un'occhiata qui)

Il miglioramento delle prestazioni di un processore che utilizza anche memorie cache è osservabile analizzando il principio di località temporale e spaziale, rintracciabile nella maggior parte dei programmi. Il principio di località temporale afferma che se un programma fa riferimento a una cella di memoria all’istante t è probabile che in un istante successivo (t+D) esso faccia nuovamente riferimento a quella locazione. Il principio di località spaziale afferma che se un programma fa riferimento a una cella di memoria x è probabile che in un istante di tempo minore di t+D esso faccia riferimento a una cella di memoria vicino ad essa (x+a). E’ quindi probabile, che se all’interno di una memoria cache vengono memorizzati tutti i contenuti degli indirizzi adiacenti ad una cella di memoria a cui il programma ha fatto accesso, per un certo periodo di tempo il programma abbia solo bisogno dei dati presenti all’interno della cache. Da questo consegue che interponendo ad ogni livello delle gerarchie di memoria presenti in un calcolatore un livello a velocità intermedia che funga da memoria cache, le prestazioni complessive del processore migliorino. Le memorie cache di primo livello ad esempio sono realizzate in modo da essere poste tra i registri di sistema e la memoria RAM e hanno una velocità intermedia tra queste due. Esse copiano il contenuto di alcune celle della RAM e normalmente riescono ad accelerare di molto la velocità di esecuzione del programma.

domandaSi illustrino brevemente le funzioni svolte dall’interrupt controller. (Per approfondire da un'occhiata qui)

Nelle CPU attuali il numero di piedini è limitato, mentre il numero di dispositivi ad esso collegato a volte è molto elevato. Sarebbe necessario un piedino per ogni dispositivo per gestire in maniera efficiente i segnali di interrupt, ma questo è impraticabile. Esistono quindi diverse tecniche per risolvere questo problema e utilizzare un solo piedino per la gestione degli interrupt. Uno di questi è l’Interrupt vettorizzato, che consente di ottenere risultati accettabili. Esso richiede la presenza di un interrupt controller, direttamente collegato alle periferiche, che riceve le richieste di interrupt e le gestisce. Quando la CPU è pronta a ricevere un segnale di interrupt, l’interrupt controller mette sul piedino che lo collega alla CPU il codice relativo alla procedura di interrupt che viene chiamata. La CPU, usando l’interrupt code come indirizzo di un vettore la esegue. Le procedure da eseguire in caso di interrupt sono molteplici e vengono normalmente raccolte all’interno di una tabella denominata interrupt vector table.
Si elenchino le principali differenze esistenti tra un processore CISC ed uno RISC.
Negli ultimi decenni si sono divise due filosofie di pensiero, riguardanti l’organizzazione dei microprocessori. I processori RISC hanno un set di istruzioni molto limitato, mentre quelli CISC hanno un numero di istruzioni più ampio e tendono a trasformare la programmazione in linguaggio macchina in programmazione ad alto livello. A fronte di un basso numero di istruzione, normalmente i processori RISC hanno un elevato numero di registri e una pipeline particolarmente ottimizzata, mentre al contrario quelli di tipo CISC hanno un numero minore di registri e una pipeline difficile da implementare e quindi poco ottimizzata. Esempi di CISC sono IBM 370 e Intel 80486, processori invece che sfruttano la tecnologia RISC (al momento la più diffusa) sono ARM7, ARM9, Sparc, Intel 860, IBM 801. Una caratteristica fondamentale dei RISC è l’utilizzo efficiente della pipeline in cui se sfruttata bene e se a regime si ottiene un’operazione per colpo di clock.

domandaSi illustri brevemente il principio di località dei riferimenti (Per approfondire da un'occhiata qui)

Il principio viene utilizzato nelle memorie virtuali. La memoria virtuale è un sistema per il quale il processore riesce ad avere uno spazio di indirizzamento molto maggiore rispetto a quello di cui la memoria principale è realmente dotata. Il meccanismo prevede che vengano tenuti in memoria principale solamente i dati che verranno maggiormente utilizzati nel breve periodo, mentre mette in memoria secondaria i rimanenti. Le memorie virtuali mettono in correlazione dinamica tra gli indirizzi logici, quelli che vengono usati dal processore e quelli fisici, invece usati dalle memorie. La traduzione da indirizzo logico a fisico e viceversa viene svolta dalla MMU (Memory Management Unit). Per ogni indirizzo creato dal processore la MMU ha il compito di tradurlo in indirizzo fisico, se la parola è contenuta in memoria principale, o altrimenti richiedere l’intervento dell’OS, affinchè venga spostato il relativo blocco in memoria principale (page fault). Dato che gli indirizzi sono localizzati è utile che la memoria venga suddivisa in pagine in modo tale che quando il processore fa accesso a un dato contenuto in una pagina tutta la pagina venga trasferita in memoria principale. La conversione da indirizzo logico a fisico avviene per mezzo della Memory Address Table (MAT), che contiene l’indirizzo di memoria a cui una determinata pagina si trova.

domandaSi elenchino i tre termini che costituiscono il tempo necessario per accedere ad un blocco di dati memorizzati su un disco magnetico, illustrando il significato di ciascun termine e fornendo degli ordini di grandezza per il loro valore (Per approfondire da un'occhiata qui)

Le memorie di massa sono per lo più realizzate in modo tale che l’accesso sia seriale. Esse sono caratterizzate da un basso costo di realizzazione per byte, ma da un alto tempo di accesso ad ogni dato. I dati sono memorizzati serialmente su un disco magnetico e sono dotati di una testina in grado di leggere/scrivere. Il tempo di accesso (Ta) è dato dalla somma di diversi contributi: Seek Time (Ts) è il tempo necessario affinchè la testina raggiunga la traccia richiesta, questo tempo è nullo se ogni traccia è dotato di una propria testina. Latency Time (Tl) è il tempo necessario affinchè la testina si posizioni sulla parte della traccia interessata. Data-transfer Time (Td) è il tempo necessario affinchè i dati vengano letti serialmente. Per ridurre il Td si può fare in modo che i dati vengano scritti parallelamente su tracce diverse in modo da poter garantire la lettura simultanea di più bit corrispondenti allo stesso dato. Ts e Tl  >> Td quindi per ammortizzarli è comune organizzare i dati in blocchi in modo da effettuare una sola volta Ts e Tl per dati consecutivi.

domandaSi illustri brevemente l’uso del codice di parità per aumentare l’affidabilità delle memorie dinamiche. (Per approfondire da un'occhiata qui)

Esistono diversi tipi di memoria ad accesso causale: le memorie statiche e le memorie dinamiche. Le memorie statiche memorizzano un dato in un flip flop, mentre quelle dinamiche all’interno di un transistore o di un condensatore. Questo porta a una minor affidabilità delle memorie dinamiche, che hanno bisogno anche di un rinfresco periodico affinchè il segnale non vada perso. Esistono quindi alcuni metodi per verificare la correttezza del dato presente in memoria e quindi per segnalare eventuali errori. Il metodo più semplice è quello del codice di parità: al momento di ogni scrittura oltre a scrivere il dato in memoria si procede a calcolare e memorizzare il corrispondente codice di parità. Nel momento della lettura esso viene ricalcolato e confrontato con quello derivante dalla lettura del dato memorizzato. In caso di discordanza viene inviato un segnale di errore.

domandaSi illustrino brevemente le possibili funzioni di traduzione (o mapping) utilizzate nelle memorie cache. (Per approfondire da un'occhiata qui)

Le cache hanno la funzione di copiare i dati che dovrebbero essere utilizzati più spesso nell’immediato futuro, in modo da minimizzare i tempi di accesso alla memoria. Essi sono normalmente situati nella gerarchia delle memorie nei passi intermedi. Le funzioni di traduzione servono a verificare in tempi brevi se il dato è presente o no all’interno della memoria cache e se si’ di fornirne il contenuto. I principali metodi sono il direct mapping, l’associative mapping e il set associative mapping. Nel direct mapping ogni linea k della cache è messa in corrispondenza con un blocco i della memoria. In questo modo con la semplice funzione k= i mod n (n numero di righe della cache) si ottiene l’indirizzo al quale si potrebbe trovare il contenuto della cella che si sta cercando. Il problema è che se il programma continua alternativamente a fare accesso a due celle presenti nello stesso blocco di memoria principale, si ha una serie di miss. Nell’associative mapping ogni dato può essere memorizzato all’interno di una qualsiasi cella della memoria cache. Il problema è che è difficilmente implementabile, con tempi accettabili, una search miss. Il set-associative mapping non è altro che l’unione dei due sistemi precedenti: sia la cache che la memoria vengono divisi in blocchi. Con la funzione k= i mod n (con n il numero dei blocchi in cui è divisa la cache) si identifica il blocco di cache in cui la parola si trova e poi si procede con una ricerca associativa.

domandaSi descriva brevemente, indicandone i principali vantaggi e svantaggi rispetto alle architetture tradizionali, il meccanismo del pipelining (Per approfondire da un'occhiata qui)

Per migliorare le prestazioni di un processore si può agire in diversi modi: o si aumenta la velocità dei singoli dispositivi oppure si migliora l’architettura. La pipeline modifica profondamente l’organizzazione dell’architettura. I vantaggi della pipeline sono quelli, se completamente a regime, di poter portare nelle architetture RISC ad un risultato valido per ogni colpo di clock e a un numero anche maggiore di risultati nei calcolatori superscalari. Per realizzare una pipeline si usa il principio di una catena di montaggio, cioè si eseguono più operazioni in parallelo, suddividendo l’operazione da eseguire in più parti, ciascuna eseguita da un dispositivo diverso. Ogni operazione infatti è divisa in FETCH (l’operazione viene caricata in memoria), DECODE (l’operazione viene “tradotta” e vengono caricati gli operandi), OPERATE (l’operazione viene eseguita), WRITE (il risultato viene scritto). Prima e dopo ogni fase c’è un buffer che consente di far passare l’operazione da uno stadio all’altro. Ovviamente se per portare a termine ogni fase il processore impiega un solo colpo di clock, evidentemente se viene riempita la pipeline, per ogni istruzione che viene fetchata un risultato viene scritto. I problemi vengono principalmente nella fase di fetch, che ha un tempo di esecuzione variabile, a seconda che il dato debba essere preso in memoria o in cache o in un registro. Questo porta quindi a un rallentamento e alla creazione di momenti  di stallo, in cui quindi la pipeline non lavora a pieno regime in quanto le operazione a monte non possono essere trasferite alla fase successiva. Per sopperire a questo problema il buffer presente tra la fase di fetch e quella di decode è organizzato come una coda FIFO. Ovviamente questa struttura funziona solo se non sono presenti operazioni di salto; in questo caso la coda viene svuotata e ririempita con i valori corretti. La pipeline non funziona anche nel caso in cui vi siano operandi non ancora calcolati. In questo caso bisogna aspettare che essi vengano processati e prodotti per poi procedere con la pipeline.

domandaSi illustrino brevemente le due tecniche di indirizzamento dei dispositivi periferici note come I/O isolated I/O e memory mapped I/O , evidenziandone le differenze. (Per approfondire da un'occhiata qui)

La CPU a n bit, ha spazio di indirizzamento massimo pari a 2^n. Esistono principalmente due modi per suddividere questo spazio di indirizzamento tra memoria e periferiche: Isolated I/O e Memory Mapped I/O. Nel Memory Mapped I/O i dispositivi I/O condividono lo spazio di indirizzamento con le normali locazioni di memoria. Questo permette di accedervi usando le normali funzioni presenti nella libreria del processore. Lo spazio destinato alla memoria risulta quindi essere ridotto. Questa tecnica è utilizzata in molti processori come dal 68000. Il principio dell’Isolated I/O consiste invece nell’usare due spazi di indirizzamento distinti per memoria e periferiche. Per accedere quindi alle periferiche bisogna usare quindi funzioni specifiche come IN e OUT. Questa tecnica è usata nell’8086

domandaSi illustrino brevemente le due tecniche note come write-back e write-through per la gestione delle memorie cache, evidenziando vantaggi e svantaggi di ciascuna. (Per approfondire da un'occhiata qui)

Siccome la memoria cache è la copia di alcune celle della memoria più lenta che le sta a valle molto spesso, ad esempio nelle operazioni di scrittura, ci si può trovare nella situazione in cui un dato contenuto nella memoria cache debba essere rimpiazzato da un altro valore. Quando si è in questa situazione ci si può comportare in diversi modi. Secondo il criterio del Write Back per ogni blocco presente in cache viene costantemente tenuto aggiornato un bit (Dirty Bit) che serve a segnalare se sono state eseguite operazioni di scrittura sul dato presente in Cache: nel momento in cui il dato presente in cache viene eliminato dalla stessa viene controllato il dirty bit e nel caso sia attivo il contenuto della cache viene copiato in memoria, altrimenti non si esegue nessuna operazione. Nel caso di write-through, quando ci si trova di fronte a un’operazione di scrittura simultaneamente si scrive sia in cache, che in memoria. Entrambi i metodi hanno delle controindicazioni. Nel write back, in caso di sistemi multiprocessore, ci può essere discordanza tra gli elementi presenti nelle due cache oppure in caso di black out improvviso si può avere la perdita di dati. Il write-through è invece molto lento, anche se questo fatto è parzialmente compensato dal fatto che le operazioni di lettura sono molto più frequenti delle operazioni di scrittura.

domandaSi descrivano brevemente le caratteristiche di un processore RISC. (Per approfondire da un'occhiata qui)

Negli ultimi anni si sono sviluppati due correnti di pensiero riguardo l’organizzazione dei microprocessori: CISC e RISC. Mentre i primi hanno un numero complesso di istruzioni, le seconde hanno un numero di istruzioni macchina molto limitato, allontanando la programmazione assembler a quella dei linguaggi di alto livello. I processori RISC più conosciuti sono quelli di tipo ARM e Power PC, usati ad esempio in palmari e Smartphone, o anche in veri e propri calcolatori come Intel 860 e altri. Ultimamente la filosofia RISC sta prendendo il sopravvento. Normalmente i processori RISC sono muniti di un ampio numero di registri, in modo da garantire il minor numero di accessi in memoria, e hanno una ben organizzata pipeline. Grazie infatti alla pipeline, se a regime,  essi sono in grado di produrre il risultato di ogni istruzione in un colpo di clock, nel senso che ad ogni inizio di una istruzione corrisponde la fine di un’altra istruzione iniziata qualche colpo di clock prima. L’unità di controllo RISC può essere organizzata in modo cablato in quanto la complessità delle microistruzioni dei RISC è paragonabile a quella dei CISC. I processori RISC hanno normalmente due sole istruzioni: quella di LOAD (un dato da memoria va in un registro) e quella di STORE (un dato da registro va a memoria). I processori RISC hanno un formato standard delle istruzioni e questo porta a un’unità di controllo fissa, ad una fase di fetch molto ottimizzata e alla possibilità di adottare una pipeline efficiente in quanto l’operazione di load può essere eseguita in parallelo alla decodifica dell’istruzione precedente. Normalmente i processori RISC hanno un numero limitato di modi di indirizzamento, applicabile per altro alle sole funzioni di LOAD e STORE. L’approcio RISC porta alcuni vantaggi, come ad esempio: il minor numero di fetch, in quanto i codici sono più corti in termini di byte, si riducono quindi il numero delle fasi di stallo della pipeline, richiedono un hardware semplice e normalmente di piccole dimensioni, le istruzioni eseguibili sono più ottimizzate, c’è una maggiore attenzione agli interrupt.

domandaSi illustrino brevemente le principali e potenziali cause di stallo in un sistema che utilizza un’architettura a pipeline. (Per approfondire da un'occhiata qui)

La pipeline permette di eseguire più operazioni all’interno di un processore in parallelo. Essa, se a pieno regime, riesce a produrre un risultato ad ogni colpo di clock. E’ strutturata come una catena di montaggio in cui componenti diversi svolgono diversi passaggi sequenzialmente in modo da ottenere il risultato che serve per trasferirlo allo stadio successivo. La pipeline di un normale processore si divide in 4 fasi: Fetch, Decode, Operate, Write. Il problema è che non sempre ogni operazione è eseguita in un colpo di clock e quindi l’istruzione successiva deve “aspettare” che l’altra operazione sia conclusa per poter essere mandata allo stadio successivo. Questa situazione porta allo stallo. Gli stalli possono essere causati da un tempo di accesso in memoria più lungo del previsto o più lungo di un colpo di clock, oppure nella lunghezza della istruzione da compiere. Per ovviare al primo motivo di stallo sono necessarie memorie cache ben funzionanti in modo da dare risposte senza effettuare direttamente in memoria, operazione normalmente molto lunga da eseguire. Quando si ha stallo si crea una bolla di inattività che si propaga a valle della pipeline: questa bolla viene assorbita lentamente. Per evitare continui stalli dovuti al fatto che l’unità di fetch non trova l’operazione in cache, il buffer tra unità di fetch e di decodifica è strutturato come una coda fifo, che deve essere mantenuta sempre il più piena possibile. Questa coda funziona quasi sempre a meno delle istruzioni di salto quando ovviamente l’indirizzo dell’istruzione successiva non si trova nella posizione successiva del codice. In questo caso la coda del buffer viene svuotata e man mano ririempita. Affinchè la pipeline funzione non ci deve essere dipendenza dei dati che si stanno trattando. Nel caso in cui due operandi non siano ancora stati prodotti è ovvio che la pipeline si debba fermare e aspettare che essi vengano prodotti provocando uno stallo e la conseguente bolla.

domandaSi illustrino brevemente, corredando la risposta di un disegno, le differenze tra microprogrammazione verticale ed orizzontale (Per approfondire da un'occhiata qui)

L’insieme dei bit di controllo prodotti dalla UC in un determinato istante è definita come microistruzione. Ogni microprogramma è l’esecuzione di una sequenza di microistruzioni, memorizzata all’interno di una apposita memoria. Nel caso più semplice ogni segnale di controllo ha un bit e un valore prefissato per ogni microistruzione. In questo caso si parla di microprogrammazione orizzontale, in quanto si ha massimo parallelismo e massima velocità di esecuzione. I problemi derivano dal fatto che si ha bisogno di una memoria che raccolga tutti questi dati abbastanza grande e c’è anche uno spreco di essa in quanto ad esempio qualche combinazione potrebbe non verificarsi mai (20 segnali di controllo portano a una tabella di 2^20 righe). Si ha quindi un secondo tipo di approccio quello verticale in cui le combinazioni e i segnali di controllo vengono codificati prima di essere memorizzati; si ha bisogno quindi di un maggior tempo per ottenere una risposta ed è quasi impossibile avere parallelismo nelle operazioni da eseguire.
Si illustri brevemente, corredando la risposta anche di un disegno contenente tutte le informazioni necessarie, l’arbitraggio di bus di tipo centralizzato noto con il nome di polling.
In ogni istante solo un dispositivo può pilotare e trasmettere dati sul bus (Bus Master). Esistono diversi metodi per definire quale dispositivo debba essere il prescelto per fungere da Bus Master in un determinato momento. Se esiste un dispositivo apposito in grado di decidere quale dispositivo debba svolgere il ruolo di bus master di parla di arbitraggio centralizzato. Esistono diversi criteri secondo i quali “l’arbitro” decide quale dispositivo debba essere il prescelto. Uno di questi è il polling, secondo il quale ogni unità può fare richiesta di pilotaggio, mandando un segnale sul BUS REQUEST, nel momento in cui il segnale BUS BUSY è libero. “L’arbitro” a turno scandisce tutte le periferiche finchè non trova un BUS REQUEST attivo e gli da il controllo settando il BUS BUSY come attivo e mandando un segnale di approvazione al dispositivo prescelto. Il metodo del polling è un po’ lento, ma supporta le priorità (si cambia l’ordine in cui ogni dispositivo è interrogato) e supporta anche il guasto di qualche unità.


blog comments powered by Disqus
 

http://sartomiki.net/modules/mod_fuofb/assets/it/find-us-on-facebook-1.png

Follow me

Amici

Chi è online

 14 visitatori online

Siti amici

Banner

Notizie flash

Da oggi avete la possibilità di commentare tutti gli articoli presenti sul sito!! Scrivete le vostre opinioni!

PUBBLICITA'