Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Prelievo istruzione nella cache delle istruzioni

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[1] Prelievo istruzione nella cache delle istruzioni

Messaggioda Foto UtentePaolovox » 28 mag 2015, 20:30

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
Avatar utente
Foto UtentePaolovox
15 3
 
Messaggi: 19
Iscritto il: 30 gen 2015, 12:24

1
voti

[2] Re: Prelievo istruzione nella cache delle istruzioni

Messaggioda Foto UtenteDanteCpp » 28 mag 2015, 20:44

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?
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

0
voti

[3] Re: Prelievo istruzione nella cache delle istruzioni

Messaggioda Foto UtentePaolovox » 28 mag 2015, 20:49

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!!!
Avatar utente
Foto UtentePaolovox
15 3
 
Messaggi: 19
Iscritto il: 30 gen 2015, 12:24

4
voti

[4] Re: Prelievo istruzione nella cache delle istruzioni

Messaggioda Foto UtenteDanteCpp » 29 mag 2015, 15:55

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
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

0
voti

[5] Re: Prelievo istruzione nella cache delle istruzioni

Messaggioda Foto UtentePaolovox » 31 mag 2015, 12:38

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
Avatar utente
Foto UtentePaolovox
15 3
 
Messaggi: 19
Iscritto il: 30 gen 2015, 12:24

0
voti

[6] Re: Prelievo istruzione nella cache delle istruzioni

Messaggioda Foto Utentefairyvilje » 31 mag 2015, 12:56

Scusate, avevo risposto al post orginale, ma non si erano caricati gli altri interventi. La risposta di DanteCpp era sicuramente più completa :mrgreen: . Saluti.
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[7] Re: Prelievo istruzione nella cache delle istruzioni

Messaggioda Foto UtenteDanteCpp » 1 giu 2015, 21:13

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...
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

0
voti

[8] Re: Prelievo istruzione nella cache delle istruzioni

Messaggioda Foto UtentePaolovox » 2 giu 2015, 20:46

Le prime istruzioni come finiscono nella cache delle istruzioni? Il PC come cambia quando eseguiamo un nuovo programma?
Allegati
WP_20150602_002.jpg
Avatar utente
Foto UtentePaolovox
15 3
 
Messaggi: 19
Iscritto il: 30 gen 2015, 12:24

0
voti

[9] Re: Prelievo istruzione nella cache delle istruzioni

Messaggioda Foto UtenteDanteCpp » 2 giu 2015, 21:00

Ma quindi a te non interessa l'architettura di cache, ma vuoi chiarire come avviene la fase di fetch?
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

0
voti

[10] Re: Prelievo istruzione nella cache delle istruzioni

Messaggioda Foto UtentePaolovox » 2 giu 2015, 21:05

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.
Avatar utente
Foto UtentePaolovox
15 3
 
Messaggi: 19
Iscritto il: 30 gen 2015, 12:24

Prossimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 62 ospiti