Anteprima
Vedrai una selezione di 6 pagine su 21
Riassunto architettura calcolatori Pag. 1 Riassunto architettura calcolatori Pag. 2
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Riassunto architettura calcolatori Pag. 6
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Riassunto architettura calcolatori Pag. 11
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Riassunto architettura calcolatori Pag. 16
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Riassunto architettura calcolatori Pag. 21
1 su 21
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

LOCALITà

Ogni programma deve essere protetto dagli altri e non attaccarli quindi ha degli specifici diritti di accesso ad aree di memoria.

Sia i programmi attivi sia le frazioni attive cambiano dinamicamente durante l’esecuzione.

Ogni programma deve essere compilato in uno spazio di indirizzamento indipendente da quella che sarà l’allocazione durante l’esecuzione.

La memoria virtuale traduce dallo spazio degli indirizzi proprio di un programma agli indirizzi fisici della memoria di lavoro in cui il programma viene portato il

processo di traduzione forza anche la protezione dello spazio di indirizzamento.

Il programma supera le dimensioni della ram

Fino agli anni 60 il programmatore doveva gestire i trasferimenti di dati mutuamente esclusivi escludendo la portabilità e rendendo difficile la

programmazione (overlay)

La memoria principale è chiamata fisica e così anche i suoi indirizzi

Gli indirizzi a cui fa riferimento il programma sono indirizzi virtuali.

Gli indirizzi virtuali sono quelli generati dal linker a partire dall’ indirizzo 0 e sono rilocabili.

Lo spazio di indirizzamento virtuale è definito dalla lunghezza degli indirizzi virtuali.

La dimensione iniziale è quella calcolata dal linker dopo la generazione dell’indirizzo iniziale.

Durante l’esecuzione la dimensione può variare a causa di chiamate a sottoprogrammi (modifiche stack) o gestione di memoria dinamica (heap).

La cPU lavora con indirizzi virtuali che sono tradotti in indirizzi fisici tramite combinazioni hardware software.

Gli indirizzi fisici possono essere usati per accedere alla RAM tramite una traduzione (memory mapping).

All’esecuzione si ha il caricamento del programma tramite indirizzi virtuali.

Il meccanismo di rilocazione dinamica consiste nella traduzione automatica degli indirizzi da virtuali a fisici è attivato durante l’esecuzione ed è trasparente a

linker compilatore e programmatore.

Il programmatore scrive i programmi come se avesse accesso completo allo spazio di indirizzamento virtuale indipendentemente dalle dimensioni della

memoria centrale.

Più processi possono risiedere in memoria.

La dimensione virtuale può superare quella reale ma un programma non è caricato completamente in memoria ma questo processo è comunque trasparente

al programmatore.

Se durante l’esecuzione ho un accesso a una pagina che non trova spazio nella memoria fisica si verifica una page fault.

Alto costo.

Per ammortizzare questo costo devo fare pagine di dimensione tale da ammortizzare il costo.

Necessarie istruzioni che riducano il page fallo (associativa completa) istruzioni complesse che però sono giustificate dal costo di page fault

Scrittura solo write back

Il problema di trovare pagine in memoria fisica è eseguito dalla tabella delle pagine.

Ne viene creata una per ogni processo e contiene 1 riga per pagina (che associa indirizzo virtuale e fisico)

NPV è l’indice di questa tabella.

Alcune pagine possono non trovarsi in memoria fisica quindi la riga conterrà solo l’indirizzo virtuale.

Per trovare la tabella la Cpu ha un registro che contiene l’indirizzo iniziale delle tabelle.

Tabella + PC + registri CPU=stato programma.

Programma attivo o inattivo quando attivo carico info e SP

Mmu (memory management unit).

Traduce I numeri di pagina virtuali in numeri fisici utilizzando parti delle tabelle dei processi

È una memoria molto veloce e piccola che contiene le righe più usate(quindi NPV no può essere l’indice).

Distingue le pagine di ogni processo tramite il PID

Siccome è piccola posso avere un table miss per evitarlo devo avere una mmu di dimensione simile a r (residenza pagine processi in memoria)

Pagine condivise solo 1 volta presenti.

La paginazione permette di rilevare accessi a zone di memoria non appartenenti allo spazio di indirizzamento virtuale del processo.

Questo succede se si genera un indirizzo di memoria virtuale che non è presente in tabella.

IL S.O. genera una violazione di memoria.

Posso associare ad ogni pagina virtuale alcuni bit di protezione che limitano i diritti di accesso a quella pagina e sono:

scrittura W, lettura R, esecuzione X (fondamentali associati a pagine condivise)

ci può essere anche bit di validità

quando richiedo una pagina al mmu tramite indirizzo virtuale comparo il bit di validità trovo la corrispondenza in tabella prendo indirizzo fisico sommo offset

raggiungo la parola.

Quando si verifica table miss ho due casi:

se ho bit di validità a zero la pagina non è in memoria e quindi si attende il suo caricamento.

Se il bit è a uno ma non ho in memoria mmu il segmento di tabella che mi serve ho un table miss

Se ho page fault il SO deve trovare nel disco la pagina virtuale richiesta tramite le tabelle processi complete trovare spazio in memoria per caricare la pagina

richiesta

Quest’operazione può comprendere il dover scaricare una pagina presente in memoria.

Caricare pagina richiesta

Riavviare istruzione che ha generato page fault.

Associo a ogni pagina due bit per capire che pagina sostituire

Bit di accesso (posto a zero quando carico in memoria a 1 quando si esegue un accesso alla pagina)usato per LRU.

Bit di modifica (posto a zero quando carico in memoria a 1 quando modifico la pagina)

Quando ricopio le pagine nel disco porto solo quelle con bit modifica a 1.

PAging demand

All avvio di ogni programma carico le varie pagine man mano che mi sono richieste a partire dalla situazione a –ram vuota.

VALE il SACRO principio di località

Working set

La maggior parte dei programmi accede a certe pagine con maggiore frequenza per il principio di località quindi il working set varia lentamente

Se r è grande ho poche page fault ma ci stanno pochi processi se no viceversa.

Metodi di sostituzione

LRU

Bit di accesso posto a 1 per ogni accesso e azzerato periodicamente, a ogni azzeramento il SO incrementa una variabile associata alla pagina sostituisco quindi

quella con variabile più alta.

FIFO

Ho un contatore per pagina sostituisco quella in memoria da più tempo

Nessun algoritmo gestisce bene la situazione in cui ho WS poco maggiore della memoria

Programma che genera molti errori si dice in trashing.

Quando modifico modifico solo pagine in memoria quando sostituisco in caso di errore copio solo le pagine modificate

Le istruzioni non sono mai copiate sul disco.

I dati allocati dinamicamente sono messi nello swap file del disco

Segmentazione:

ogni segmento è costituito da sequenza lineare di indirizzi ed è identificato in modo univoco da una coppia di indirizzi virtuali che ne determinano inizio e fine.

Il segmento deve contenere un numero intero di pagine.

In questo modo è possibile avere diritti di accesso differenti per ogni segmento.

I segmenti possono variare dinamicamente e indipendentemente gli uni dagli altri.

Individuando aree di memoria logica da condividere posso collegare procedure differenti.

Ho crescita stack per ogni chiamata a funzione e crescita heap per invocazione di espliciti servizi.

Architettura a bus le periferiche sono connesse direttamente al bus in realtà non è così

Le periferiche di accesso sono il collo di bottiglia del sistema

Al bus di sistema sono collegate le porte di accesso che vengono indirizzate tramite bus indirizzi e che contengono registri di stato e comandi.

Alla porta di accesso si collegano le periferiche stesse tramite interfacce proprie.

Sincronizzazione e trasferimento sono gestiti dal programma che richiede l’operazione di I/O.

Programma di gestione in particolare sincronizza CPU e periferica.

-legge il registro di stato a ripetizione finchè non trova il dato disponibile

-esegue il trasferimento

Se la periferica è di ingresso devo copiare in memoria i dati se è di out devo prelevare da memoria.

Svantaggi:

-La cpu rimane occupata per il ciclo di controllo

- non è possibile gestire eventi asincroni

La cpu è ancora l’unico master del sistema ma le periferiche inviano un interrupt quando hanno dati disponibili.

Caso dati in ingresso:

Quando l’interfaccia della periferica pone il dato nella porta di ingresso genera un segnale di interruzione per la cpu.

Se la cpu accetta finisce l’operazione in corso e poi gestisce il trasferimento alla fine riprende l’esecuzione del programma.

La gestione periferiche è quindi asincrona e sul bus transitano dati ulteriori ovvero int req e intack

L’interruzione può essere mascherata se la cpu non accetta l’intreq

Caso a1 periferica

Non serve capire chi fa la richiesta ne la sua priorità

Successione operazioni.

L’interfaccia trasferisce il dato nella porta d’accesso e pone a uno l’attivazione.

Controlla se la cpu emette il segnale intack

Manda il segnale intreq

La cpu riceve l’int req e manda intack

La periferica disattiva l’intreq e la cpu finisce le sue operazioni

L’interfaccia ferma lo stato attivo

La cpu rientra in esecuzione normale con iret.

Posso avere interruzione da più periferiche

- Soluzione piu semplice routine che controlla le periferiche e gli interrupt

- Vettore interruzione

In fase di accettazione il processore genera intaqk e legge dal bus dati senza portare indirizzi la periferica a priorità più alta partecipa al ciclo e fornisce

un numero che il processore utilizza per calcolare la routine di risposta

Per gestire la priorità di interrupt serve un meccanismo di arbitraggio

Interruzioni annidate:mentre eseguo un interruzione ne arriva un altra.

Priorità e annidamento si possono risolvere con linee separate per ogni periferica

Problema aumento delle linee all’aumento delle periferiche

Gestione contemporanea dasy chaning

Accettazione per tutte le periferche del livello è di turno però solo quella a priorità maggiore

Catena di dasy con priorità

È possibile l’annidamento ma solo se si accetta che interrupt di basso livello fermino quelli di alto livello

Risolto il problema con priorità processore vengono accettati solo processi con priorità maggiore di quella del processore

Quando ho interrupt salvo il contesto tramite hardware al rientro si ripristina il contesto.

La Cpu può disabilitare il meccanismo di interrupt salvo poi ripristinarlo alla fine per gestire le priorità.

Interrupt non mascherabile

Se ho interruzione devo cedere il controllo dell’esecuzione alla routine di risposta la quale deve gestire anche il salvataggio dei dati dell’interrotto in modo da

poter poi riprendere l’esecuzione questo non può farlo il programma stesso perché non posso prevedere quando avviene interrupt.

Devo salvare sullo stack l’indirizzo di ritorno, usare l’iret

L’hardware della CPU provvede a :

salvare il contenuto del pc cioè istruzione successiva a

Dettagli
Publisher
A.A. 2015-2016
21 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher cemba90_ di informazioni apprese con la frequenza delle lezioni di Fondamenti di architettura dei calcolatori e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Milano o del prof Sami Maria Giovanna.