Gestione della memoria

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

Memoria Virtuale in Linux
Gestione della Memoria
Gestione della memoria centrale
Fondamenti di Informatica1 Gestione della memoria I sistemi di memoria possono essere suddivisi in: –memoria interna al processore –memoria principale.
Dalla scrittura all’esecuzione
Unità D2 Archivi e file.
Gestione dei processi A. Ferrari.
TECNICA DELLE PARTIZIONI RILOCABILI
Il Sistema Operativo.
Elaboratore e Sistemi Operativo
Algoritmi e Programmazione
Gestione della Memoria
Gestione della Memoria
Time Sharing Il termine “Time Sharing” proviene dall'inglese e significa letteralmente “partizione di tempo”. Questa è una tecnica sviluppatasi negli.
Memoria virtuale Memoria virtuale – separazione della memoria logica dell’utente dalla memoria fisica. Solo alcune parti di un programma devono trovarsi.
Gestione della memoria
Realizzazione del file system
Memoria Virtuale Background Paginazione su richiesta
Gestione della memoria
INTRODUZIONE AI SISTEMI OPERATIVI
Struttura dei sistemi operativi (panoramica)
Gestione della memoria principale
Sistema Operativo Architettura degli elaboratori 1 - A. Memo La gestione dei processi stallo 9 soluzione corretta si utilizzano un semaforo per.
Software di base Il sistema operativo è un insieme di programmi che opera sul livello macchina e offre funzionalità di alto livello Es.organizzazione dei.
memoria gestita staticamente:
3. Architettura Vengono descritte le principali componenti hardware di un calcolatore.
Università di Trieste Calcolatori Elettronici a.a Omero TuzziL01, Basi 1 Sommario: 1. Concetto di bit. 2. Indirizzi di memoria. 3. Ordinamento.
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE.
Strutture dei sistemi di calcolo Funzionamento di un sistema di calcolo Struttura di I/O Struttura della memoria Gerarchia delle memorie Architetture di.
Il sistema operativo Vito Perrone
Fondamenti di Informatica1 Software di base Tra il linguaggio macchina (basso livello) e i linguaggi evoluti (alto livello) esiste uno strato di software.
STRUTTURA GENERALE DI UN ELABORATORE
La Gestione della Memoria
Architettura del calcolatore
Memoria Centrale.
Architettura Centralizzata di un DBMS Relazionale
Gestione della Memoria
Sistema Operativo (Software di base)
Memoria La memoria è un vettore di stringhe di bit (word/parole) In memoria è allocato il Sistema Operativo. In memoria sono allocati i programmi per poter.
SISITEMI MONOPROGRAMMATI E MULTI PROGRAMMATI
Il nucleo del Sistema Operativo
1 Gestione della Memoria. 2 Idealmente la memoria dovrebbe essere –grande –veloce –non volatile Gerarchia di memorie –Disco: capiente, lento, non volatile.
Foglio 1 Di cosa si occupa il gestore della memoria?
1 Sommario degli argomenti  Sistemi operativi: DOS, Unix/Linux,Windows  Word processors: Word  Fogli elettronici: Excel  Reti: TCP/IP, Internet, ftp,
Gestione della Memoria
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
1 Gestione della Memoria Capitolo Introduzione alla gestione della memoria 4.2 Swapping 4.3 Memoria virtuale 4.4 Implementazione 4.5 Algoritmi di.
1 Gestione della Memoria Capitolo Introduzione alla gestione della memoria 4.2 Swapping 4.3 Memoria virtuale 4.4 Implementazione 4.5 Algoritmi di.
1 Gestione della Memoria Capitolo Introduzione alla gestione della memoria 4.2 Swapping 4.3 Memoria virtuale 4.4 Implementazione 4.5 Algoritmi di.
1 Gestione della Memoria Capitolo Introduzione alla gestione della memoria 4.2 Swapping 4.3 Memoria virtuale 4.4 Implementazione 4.5 Algoritmi di.
Sistema operativo Il Sistema Operativo gestisce le risorse hw e sw del sistema di elaborazione Facilita l'interazione tra utente e sistema Esistono diversi.
Gestione della Memoria
L’esecuzione dei programmi
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l’ambiente e il territorio Il software di base Stefano Cagnoni e Monica Mordonini.
1 1. Introduzione alla gestione della memoria 2. Swapping 3. Memoria virtuale 4. Implementazione 5. Algoritmi di sostituzione Gestione della Memoria.
Esercizi.
Corso di Laurea in Biotecnologie corso di Informatica Paolo Mereghetti DISCo – Dipartimento di Informatica, Sistemistica e Comunicazione.
Informatica Generale Marzia Buscemi
Informatica e Informatica di Base
La gerarchia di memorie
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
INTRODUZIONE AI SISTEMI OPERATIVI. Introduzione Il software può essere diviso un due grandi classi: Il software può essere diviso un due grandi classi:
 Ogni processo che deve essere eseguito da un sistema di elaborazione, deve essere caricato e risiedere almeno parzialmente nella memoria centrale 
Gestione delle periferiche. Le periferiche sono dispositivi che permettono le operazioni di input/output.
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Il Sistema Operativo Processi e Risorse
Transcript della presentazione:

Gestione della memoria A. Ferrari

Processi e memoria Tutti i processi in esecuzione necessitano della memoria centrale per memorizzare: le istruzioni che fanno parte del codice i dati su cui operano

Indirizzi Indirizzi simbolici Indirizzi logici Indirizzi virtuali nel codice sorgente gli indirizzi sono espressi in modo simbolico etichette simboliche (label) in assembler identificatori di variabili nei linguaggi ad alto livello Indirizzi logici l'assemblatore (o il compilatore) trasforma gli indirizzi simbolici in valori binari che non rappresentano ancora però un vero indirizzo di memoria. In genere gli indirizzi logici sono calcolati a partire da un indirizzo iniziale che vale in genere zero (indirizzi binari logici relativi a zero) Indirizzi virtuali il linker completa i riferimenti ai vari moduli e genera indirizzi che non sono ancora però riferimenti fisici alla memoria

Rilocazione Indirizzi fisici Gli indirizzi virtuali possono essere finalmente tradotti in indirizzi di memoria fisica. Questa operazione di traduzione, in sostanza, costituisce uno dei compiti fondamentali del gestore della memoria. La traduzione degli indirizzi virtuali in indirizzi fisici è definita rilocazione

Rilocazione e protezione Per evitare che un processo faccia riferimento a zone di memoria appartenenti ad alti processi molti sistemi utilizzano registri speciali di protezione(registri limite) per controllare ed eventualmente inibire riferimenti non autorizzati. Questi metodi sono ottenibili con sistemi dotati di MMU e i registri base e limite ad esempio possono essere considerati elementi della MMU del sistema.

Memory Management Unit (MMU) E' un componente hardware che gestisce le richieste di accesso alla memoria generate dalla CPU Una Memory Management Unit (MMU) ha vari compiti, tra cui la traduzione degli indirizzi virtuali in indirizzi fisici, la protezione della memoria, il controllo della cache della CPU ... La MMU è integrata nei moderni microprocessori

Rilocazione statica La rilocazione statica è quel meccanismo per cui il caricatore del SO, dopo aver letto l'intero programma e prima di porlo in esecuzione, rialloca in memoria tutto il codice adattando gli indirizzi virtuali alle posizioni attualmente disponibili nella memoria fisica. Il caricatore in questo caso viene detto rilocante; dopo la rilocazione statica il programma in memoria ha assunto riferimenti di memoria fisica che non potranno più cambiare per tutta la durata dell'esecuzione.

Rilocazione dinamica Il SO rialloca il codice durante l'esecuzione del programma, utilizzando elementi di MMU. In questo caso il caricatore non riloca gli indirizzi virtuali del linker ma li carica in memoria così come il linker li ha generati nel file eseguibile: vengono quindi caricati gli indirizzi virtuali generati dal linker. Run-time ogni indirizzo viene tradotto nel corrispondente indirizzo fisico prima di accedere alla memoria. A differenza della rilocazione statica la rilocazione dinamica permette ai programmi di essere caricati in aree di memoria differenti durante l'esecuzione; sarà sufficiente modificare le informazioni contenute nel meccanismo hardware che realizza la funzione di rilocazione (meccanismo di MMU).

Allocazione Tecnica con cui il SO concede ed assegna memoria ai programmi. Allocazione statica processi caricati in memoria che sono allocati una sola volta e sono revocati dalla memoria solo al termine dell'esecuzione Allocazione dinamica processi che in esecuzione possono vedersi revocata e riallocata la memoria più volte, in genere con operazioni di swapping da e per la memoria secondaria (swap in e swap out)

Memoria e multiprocessing Più processi sono attivi contemporaneamente Ogni processo necessita di memoria per le istruzioni e i dati Il Sistema Operativo deve gestire la protezione dei dati e delle istruzioni relativi a ogni singolo processo il riutilizzo delle zone di memoria non più utilizzate dai processi

Memoria suddivisa in settori A ogni processo viene assegnato un settore di memoria compreso fra un indirizzo iniziale e uno finale Il gestore della memoria gestisce una tabella di indirizzi in cui associa ad ogni processo il suo indirizzo iniziale e finale

Settori: indirizzi Indirizzo logico (generato staticamente) Il compilatore assume che l'indirizzo di partenza per i dati e le istruzioni sia l'indirizzo 0 (zero) Indirizzo fisico (generato dinamicamente) In fase di esecuzione gli indirizzi vengono traslati sommando l'indirizzo di partenza del settore associato al processo (operazione effettuata run time dalla MMU) Un indirizzo di memoria contiene una parte che identifica un settore, e una parte che specifica l'offset entro il settore.

Settori: problemi Il problema principale è la frammentazione della memoria: quando termina un processo viene rilasciato il suo settore di memoria che può essere associato a un nuovo processo che richiede una quantità di memoria minore o uguale a quella rilasciata le parti inutilizzate dei settori portano a una progressiva frammentazione (potrebbe essere disponibile memoria sufficiente per allocare un processo ma non in un settore continuo)

Strategie di allocazione Le strategie di allocazione stabiliscono il criterio scelto per creare o scegliere le partizioni per i programmi che le richiedono. First fit Individua la prima partizione atta a contenere il programma e, quindi, tra le partizioni disponibili, viene scelta quella con indirizzi più bassi. Tale tecnica è efficiente per mantenere compattate le zone rilasciate. Best first Ricerca nella tabella la partizione più piccola atta a contenere il programma. In questo modo si vengono a creare numerose partizioni libere molto ristrette e quindi si aumenta la frammentazione. Worst fit Tra le partizioni libere atte a contenere il programma, sceglie quella più ampia, per attenuare l'effetto della frammentazione.

Compattazione In alcuni casi la riduzione della frammentazione si può ottenere con una tecnica detta di compattazione della memoria. In questo modo il SO predispone un algoritmo che periodicamente controlla lo stato della memoria e quando necessario interrompe le esecuzioni per compattare in modo contiguo tutta la memoria allocata eliminando i buchi e aggiornando la tabella della memoria.

Paginazione La memoria principale viene «vista» dal processore come un array di settori aventi tutti la stessa dimensione predefinita. Il sistema operativo assegna a ogni processo in esecuzione un numero di pagine sufficiente per contenere il codice e i dati. Le pagine non sono necessariamente contigue.

Tabella delle pagine

Organizzazione in pagine

Traslazione degli indirizzi Per la traslazione degli indirizzi ogni processo è dotato di una tabella di corrispondenza fra pagina logica e pagina fisica

MMU e paginazione Il compito della MMU è più complesso Per la traduzione da indirizzo logico a indirizzo fisico: si individua la pagina logica poi si individua la corrispondente pagina fisica

Dimensione delle pagine Se la dimensione di una pagina è una potenza di 2 gli indirizzi vengono di fatto spezzati in due: i primi bit determinano la pagina i successivi determinano l’indirizzo interno alla pagina (offset) La traslazione sostituisce i bit relativi alla pagina fisica q quelli relativi alla pagina logica e lascia inalterati i restanti bit Esempio: indirizzo logico (pagine da 8Kb) 0001 - 0001 0001 0000 (pagina 1, indirizzo 0x1110) Indirizzo fisico: 0100 – 0001 0001 0000 (pagina 4, indirizzo 0x1110)

Il compito della MMU

Frammentazione Il problema della frammentazione è risolto Al termine di un processo vengono “liberate” tutte le pagine utilizzate da questo Un nuovo processo ha a disposizione tutte le pagine rimaste “libere”

Processi in memoria

Dimensione della tabella delle pagine Gli attuali processori indirizzano memorie di grandi dimensioni e la dimensione della tabella delle pagine risulta troppo grande per essere contenuta nella MMU Per esempio con RAM da 4Gb e pagine da 4Kb (sia Windows che Linux utilizzano pagine da 4Kb) si hanno più di un milione di pagine La tabella viene quindi memorizzata nella RAM e solo una copia di una piccola parte di questa risiede nella MMU

Memoria virtuale I processi attivi in un sistema operativo multitasking sono molti ed è probabile che il numero complessivo delle pagine richieste da tutti i processi sia superiore al numero di pagine di memoria effettivamente disponibili Praticamente tutti i moderni sistemi operativi implementano la tecnica della “memoria virtuale”: il gestore della memoria mette a disposizione un numero di pagine superiore a quelle presenti nella memoria fisica Alcune pagine sono salvate temporaneamente nella memoria di massa (normalmente hard disk) La memoria di massa utilizzata a questo scopo è comunemente chiamata, in ambiente Unix-Linux, swap o spazio di swap, mentre, in ambiente Windows, è chiamata file di paging.

Pagine logiche e fisiche

Prestazioni La memoria di massa ha tempi di accesso estremamente più lenti della memoria centrale: memoria centrale 50-60 nanosecondi (circa 10-8 secondi) memoria di massa 2-4 microsecondi (circa 10-3 secondi) E’ necessario quindi ridurre al minimo le operazioni di swapping (spostamento delle pagine dallo spazio di swap alla memoria fisica)

Località del codice Normalmente un processo in ogni fase della sua esecuzione fa riferimento a istruzioni e dati contenuti in poche pagine di memoria contigue. Località delle istruzioni: l’esempio classico è un ciclo che ripete più volte istruzioni consecutive Località dei dati: la struttura più comunemente utilizzata è l’array in cui i dati sono contigui in memoria

Tabella delle pagine La MMU trasla gli indirizzi Se la pagina non è presente in memoria (page-fault) il processo viene posto in stato di wait in attesa che la pagina venga caricata in memoria Il gestore della memoria recupera la pagina, aggiorna la tabella delle pagine e riporta il processo in ready

Page-fault Ogni page fault rallenta drasticamente l’esecuzione di un processo che deve transitare dallo stato di wait e deve attendere il caricamento della pagina dalla memoria di massa Se non sono disponibili pagine libere in memoria centrale è necessario sostituire una pagina dello stesso processo (allocazione locale) o di un altro processo (allocazione globale)

Politiche per la gestione del page-fault FIFO (First In First Out) la pagina da rimuovere è la prima che è stata caricata. L’idea è che le pagine “vecchie” non vengano più utilizzate in futuro LRU (Least Recently Used) la pagina da rimuovere è quella inutilizzata da più tempo. L’idea è che se non è utilizzata da molto tempo non verrà più utilizzata LFU (Least Frequently Used) la pagina da rimuovere è quella meno utilizzata. L’idea è che se è stata poco utilizzata sarà poco utilizzata anche in futuro

Strumenti per la gestione delle politiche FIFO è sufficiente memorizzare per ogni pagina il momento del caricamento in memoria LRU deve essere memorizzato il tempo ad ogni accesso alla pagina LFU deve essere memorizzato un contatore incrementato ad ogni accesso alla pagina per semplificare la gestione si utilizza un bit che viene settato se di fa accesso a una pagina (i bit vengono periodicamente azzerati) la politica diventa quindi NRU (Not Recently Used)

Swapping Se una pagina viene eliminata dalla memoria centrale deve essere copiata sulla memoria di massa Un “dirty bit” settato se la pagina viene modificata può essere utilizzato per evitare questa fase di riscrittura su disco (molto spesso per le pagine di codice)

Codice condiviso Molti sistemi operativi prevedono l’uso di funzioni condivise fra vari processi linux – shared objects windows – DLL (Dynamic Link Library) Queste funzioni vengono caricate solo se utilizzate e in questo caso condivise fra i vari processi

Windows e Linux