Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143

    Sistemi operativi: Allocazione della RAM

    Ciao, non so se la sezione sia giusta, se non lo è chiedo scusa.. Non sapevo dove postare..

    Sto studiando l'allocazione della RAM cioè il problema di distribuire la RAM tra i diversi processi. so che ci sono tre diversi modelli principali di allocazione:
    1) l'allocazione contigua
    2) paginazione
    3) segmentazione.

    L'allocazione contigua l'ho capita. Non ho capito invece la paginazione. Cosa vuol dire che la RAM è divisa in blocchi di memoria (frame) e che lo spazio degli indirizzi logici (cioè quelli creati dalla CPU) di un processo è organizzato in pagine?
    Poi si parla di tabella delle pagine ecc.. Non riesco a capire questa cosa delle pagine e dei frame.
    Io ho un processo che deve eseguire e per farlo deve essere caricato in RAM che è divisa in frame. Le pagine cosa c'entrano?
    Ho molta confusione in testa.. Qualcuno me lo spiega in modo molto semplice?

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non mi pare che un forum di programmazione sia il posto migliore per spiegare vari concetti relativi a "Sistemi Operativi" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    Ok grazie ugualmente

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Non so dove stai leggendo... comunque dai un occhio a: http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    147
    Il problema dell'alllocazione contigua e che a forza di mettere programmi su programmi può essere che poi quando vai a toglierli e ne metti altri,a forza di quest processo si creano piccoli buchi,dove non ci sta nessun programma e quindi non usata e perdi memoria. Paginazione invece il programma viene diviso in + parti anche di dimensioni variabili e viene creata dal sistema operativo una tabella che indica dove sta ogni parte. In questo modo risolvi il problema di spreco di memoria,d'altra parte sprechi memoria per tenere le varie informazioni.

  6. #6
    Dunque, la domanda è effettivamente un po' OT, ho chiesto ai piani alti e non siamo sicuri se lasciarla qui o spostarla (ma non ci sono sezioni adatte in effetti), comunque per ora terrei qui, al limite si fa sempre a tempo a spostare.

    Comunque, letto l'articolo di Wikipedia? Cosa non ti è chiaro dell'argomento?
    In generale parlando di paginazione nei sistemi operativi moderni si parla di uno schema di implementazione della memoria virtuale: ad ogni processo viene associato uno spazio di indirizzi virtuale, facendogli credere in un certo senso di avere una "ram tutta sua". In realtà questo spazio di indirizzi è diviso in tante pagine di memoria, gestite dal sistema operativo. Ogni pagina di memoria può essere tenuta effettivamente in RAM (cosa che accade quando il programma effettivamente la sta usando) oppure può essere copiata su disco quando la RAM "vera" serve per altre pagine (dello stesso o di altri programmi); il mapping tra un indirizzo nei vari spazi di indirizzi virtuali e la pagina corrispondente è gestito dal sistema operativo.
    Quando un programma cerca di accedere ad una certa locazione di memoria accade una cosa di questo genere:
    1. se l'indirizzo corrisponde ad una pagina che è già in RAM, l'indirizzo virtuale viene convertito in indirizzo fisico (in genere direttamente dal processore, grazie alla MMU) e l'accesso ai dati procede "normalmente";
    2. in caso contrario, viene richiamata una routine del memory manager del sistema operativo; questo verifica se l'indirizzo corrisponde ad una pagina effettivamente esistente (il paging consente di avere spazi di indirizzi "a buchi") ma temporaneamente copiata su disco;
    3. se la pagina non esiste (o esiste ma il programma sta tentando un accesso che non gli è consentito) viene sollevato un errore (le famose "access violation");
    4. se la pagina invece esiste ma è stata messa su disco per fare spazio ad altre pagine in RAM, il sistema operativo si occupa se necessario di fare spazio in memoria fisica (spostando altre pagine su disco) e di piazzare la pagina richiesta in RAM; si prosegue quindi come al punto 1.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    Grazie a tutti per le risposte!
    Quindi un processo è diviso in pagine in modo tale che non ci sia bisogno che esso venga caricato in RAM tutto insieme ma si possono caricare le singole pagine (se non c'è spazio in RAM si fa swapping ecc..) mentre la RAM è divisa in frame.
    Un processo usa determinati indirizzi logici prodotti dalla CPU (sono indirizzi non fissi come quelli fisici ma possono variare a seconda dell'esecuzione del processo ed è per questo che i programmi sono portabili). Questi indirizzi logici vengono poi trasformati in indirizzi fisici dall'MMU. Alla cella i-esima della page table c'è il riferimento al frame corrispondente al pagina del processo. Mi spiego meglio: la page table è formata da varie celle, ogni cella ha in indice i che indica il numero di pagina a cui faccio riferimento. Mentre nella cella i-esima della page table c'è il numero di frame corrispondente, cioè il frame che quella determinata pagina userà per esempio per caricare o prendere dati. E' più o meno giusto?

  8. #8
    L'idea è quella, poi ovviamente ci sono diversi modi specifici di implementarla.

    Per inciso, dopo lunghe discussioni si è deciso che, in mancanza di una sezione adeguata, la cosa più semplice è spostare in OT.
    Avviso ai naviganti: non mandate in vacca il thread (anche se mi sembra che sia sostanzialmente concluso).
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    Grazie, gentilissimo
    Per ora ho capito tutto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.