Pagina 1 di 2

Prelievo istruzione nella cache delle istruzioni

MessaggioInviato: 28 mag 2015, 20:30
da Paolovox
Non comprendo alcune fasi dell'esecuzione di un qualsiasi programma a basso livello.
Ho il mio file eseguibile da qualche parte nell'HD, tramite il loader carico l'immagine del processo in RAM.
Il mio Program Counter come fa a capire che la prossima istruzione da eseguire è quella del programma appena caricato?
Nella cache delle istruzioni si dovrebbe verificare una miss ma per verificarsi una miss significa che il PC deve avere un indirizzo da controllare.
Come aggiorno la mia cache delle istruzioni?
Se qualcuno potrebbe delucidarmi mi farebbe un gran favore, questi grattacapi mi stanno lacerando :D

Re: Prelievo istruzione nella cache delle istruzioni

MessaggioInviato: 28 mag 2015, 20:44
da DanteCpp
Stai mischiando un po i livelli di astrazione! :mrgreen:

La cache è trasparente al programmatore, poiché gestita completamente dall'hardware e dal sistema operativo. Si può approfondire...

A te interessa il punto di vista del programmatore o quello dell'architetto di calcolatori?

Re: Prelievo istruzione nella cache delle istruzioni

MessaggioInviato: 28 mag 2015, 20:49
da Paolovox
Faccio informatica e ho capito perfettamente il concetto di miss e hit e le politiche di rimpiazzo.
Però in uno schema del genere:

http://www.google.it/imgres?imgurl=http ... D4QMygJMAk

non capisco una volta caricato un programma in ram come mi preleva la prima istruzione dalla ram a partire dal programma appena caricato. Mi andava di capire!!!

Re: Prelievo istruzione nella cache delle istruzioni

MessaggioInviato: 29 mag 2015, 15:55
da DanteCpp
Purtroppo gli algoritmi di sostituzione e le politiche di scrittura non sono gli unici parametri che caratterizzano un'architettura di cache.

Lo schema che hai linkato non è abbastanza informativo per capire com'è strutturato il sistema di memoria, e quindi analizzare in dettaglio come avviene la comunicazione tra cpu e main memory. Da esso possiamo solo capire il numero di cache e a cosa sono destinate.

Ci sono tre livelli per i dati e uno per le istruzioni, anche se non capisco perché la cache istruzioni non è collegata al bus di sistema o ad un livello di cache superiore. Comunque quello schema non mi piace proprio.

Per capirci ti faccio un esempio semplificato: il sistema è composto da un livello di cache completamente associativa di 16 B e da una memoria primaria di 256 B. La memoria è indirizzabile al singolo byte ed è divisa in blocchi di 4 B.



Assumiamo che sia una cache istruzioni.
Ora fregandocene di quale sia il programma in esecuzione, di quali istruzioni sia composto, di come si incrementa il program counter e del senso della vita! Ipotizziamo che il flusso di programma richieda il caricamento delle istruzioni contenute nei seguenti indirizzi di primaria espressi in esadecimale:

01
02
03
04
A3
A4
A5
A6
06
07

La cpu richiede la prima istruzione del programma, contenuta in (01)_{16}. Ma essendo la cache inizialmente vuota il sistema va subito a cercarla in memoria primaria, caricando l'intero blocco contenente l'indirizzo richiesto in cache.

L'indirizzo fisico è quindi: (00000001)_2, i due bit di line index sono entrambi a zero, quindi questa locazione di memoria si può trovare solo nella prima linea della cache (00). Per cui il blocco viene caricato nella prima linea di cache ed etichettata con il tag (0000)_2.

Le successive due istruzioni fanno parte dello stesso blocco, quindi la cpu le troverà gia in cache.

L'istruzione allocata in (00000100)_2 ha line index (01)_2, quindi deve essere memorizzata nella seconda linea di cache (01).

Ora tocca all'istruzione salvata in (10100011)_2, ha i bit di line index (00)_2 quindi va salvata nella prima linea di cache, rimpiazzando il blocco precedentemente allocato.

etc etc

Segue una mappa, che descrive l'evoluzione temporale della cache. Nelle caselle identificate dalle coordinate: tempi/linea; ci sono i tag.



Inoltre ti posto anche uno schema un po meno di principio che può aiutare a chiarire l'architettura del sistema.



Naturalmente l'indirizzamento diretto è una delle tecniche più rozze, per avere una buona panoramica ti consiglio di leggere il capitolo tre di Architettura e organizzazione dei calcolatori. Progetto e prestazioni, poi se vuoi approfondire puoi leggere le innumerevoli pubblicazioni la citate.

Dante

Re: Prelievo istruzione nella cache delle istruzioni

MessaggioInviato: 31 mag 2015, 12:38
da Paolovox
Ti ringrazio tantissimo. Si quello schema è davvero inguardabile. Sto studiando su "Hennessy - Patterson - Struttura, Organizzazione e Progettazione dei calcolatori" che spiega molto bene dalla cache directed mapped alla set associative a più vie.
La mia curiosità anche se sono cosciente del fatto che non mi servirà mai nell'ambito della programmazione, è come viene inizializzata la cache delle istruzioni e come muta nel momento in cui carico un nuovo programma.
Mi toccherà dopo informatica, iscrivermi ad elettronica.
Di nuovo grazie :D

Re: Prelievo istruzione nella cache delle istruzioni

MessaggioInviato: 31 mag 2015, 12:56
da fairyvilje
Scusate, avevo risposto al post orginale, ma non si erano caricati gli altri interventi. La risposta di DanteCpp era sicuramente più completa :mrgreen: . Saluti.

Re: Prelievo istruzione nella cache delle istruzioni

MessaggioInviato: 1 giu 2015, 21:13
da DanteCpp
Paolovox ha scritto:La mia curiosità è come viene inizializzata la cache delle istruzioni e come muta nel momento in cui carico un nuovo programma


Tale e quale a una cache dati, non capisco da cosa nasca la perplessità dal momento che conosci i principi di funzionamento delle cache...

Re: Prelievo istruzione nella cache delle istruzioni

MessaggioInviato: 2 giu 2015, 20:46
da Paolovox
Le prime istruzioni come finiscono nella cache delle istruzioni? Il PC come cambia quando eseguiamo un nuovo programma?

Re: Prelievo istruzione nella cache delle istruzioni

MessaggioInviato: 2 giu 2015, 21:00
da DanteCpp
Ma quindi a te non interessa l'architettura di cache, ma vuoi chiarire come avviene la fase di fetch?

Re: Prelievo istruzione nella cache delle istruzioni

MessaggioInviato: 2 giu 2015, 21:05
da Paolovox
L'architettura della cache e i principi del caching li ho compresi abbastanza ma mi manca sto tassello. Si la fase di fetch ossia il prelievo dell'istruzione.