Memory page - virtuale o fisica e relazione all'allocazione dei tipi di dati?

0

Sto cercando una definizione comprensibile di pagine di memoria. Per favore aiutami a chiarire le seguenti domande:

  • Una "pagina di memoria" è sempre correlata solo a una porzione di dati della memoria virtuale?
  • Anche gli indirizzi fisici della RAM sono suddivisi in pagine?
  • In che modo una definizione di una "pagina di memoria" come the smallest unit of data for memory management in a virtual memory operating system si adatta al fatto che è possibile allocare un tipo di dati char che di solito è un byte (rispetto al 4Kb della solita dimensione della pagina)?
posta TheMeaningfulEngineer 24.07.2015 - 12:29
fonte

2 risposte

1

Is a "memory page" always related only to a data chunk of virtual memory?

In un certo senso. Il kernel ha pagine utilizzate internamente per DMA, buffer di I / O, cache di blocchi e inode, ecc. Queste sono tutte pagine di memoria fisica, ma non sono visibili come tali a nessun processo utente a meno che non siano stampate.

Are physical RAM addresses also split into pages?

Sì, i due devono essere equivalenti per il paging per funzionare in modo sano

[paraphrase] is a page really the smallest unit if you can allocate a char

Una pagina è l'unità più piccola del sistema kernel VM . I processi utente richiedono memoria dal kernel in pagine intere.

Il tuo processo userspace avrà quindi un meccanismo interno per la gestione degli oggetti allocati all'interno di queste pagine.

Nota che anche se pensi di aver assegnato un char , non lo hai fatto - l'allocatore aggiungerà un sovraccarico per tenere traccia del blocco assegnato.

Si noti inoltre che questa discussione sugli allocatori di pagine secondarie si applica anche all'interno del kernel (nelle parti che stanno utilizzando, piuttosto che gestire, la memoria).

I motivi per cui il kernel non tratta in unità più piccole sono:

  1. sono inefficienti per gli scopi del file di paging (qualsiasi cosa più piccola di un blocco del disco sarà praticamente inutile), e
  2. ogni allocazione comporta un overhead di gestione fisso: più piccolo è il blocco, maggiore è la quantità di memoria che è necessario prenotare per il monitoraggio di molti piccoli oggetti.

    Il tuo esempio di allocazione 1-char probabilmente ha 4-8 byte di overhead di gestione; se stai allocando molti di questi, forse solo 1/9 della tua memoria è effettivamente utile (in modo equivalente, l'utilizzo della memoria è appena aumentato di un fattore 9 per una data quantità di dati). Gli stessi 8 byte per una pagina 4Kb rappresentano un overhead piuttosto basso.

risposta data 24.07.2015 - 13:55
fonte
1

Le pagine sono i pezzi di memoria che possono essere scambiati tra RAM e il disco rigido per supportare la memoria virtuale.

Esempio: supponiamo di avere 1 MB di pagine, 2 MB di RAM fisica e molta più RAM virtuale. Si esegue l'applicazione A che richiede 1 MB. Ottiene una pagina virtuale di memoria, che viene mappata su una delle pagine fisiche. Quindi esegui l'applicazione B che richiede 2 MB. La memoria dell'applicazione B sarà distribuita su due pagine virtuali. Quando iniziamo ad eseguire l'applicazione B, dobbiamo spostare la pagina dell'applicazione A sul disco in modo da poter avere entrambe le pagine di B nella RAM, oppure dobbiamo scambiare tra le due pagine di B costantemente mentre la eseguiamo. Spero sia sufficiente per dare l'idea.

Quindi le risposte dirette alle tue domande sono:

  • Sì. Una pagina di RAM fisica corrisponde sempre a una pagina di RAM virtuale. Gli indirizzi virtuali sono ciò su cui effettivamente operano i tuoi programmi, quindi qualsiasi indirizzo fisico che non fosse mappato a uno virtuale sarebbe completamente inaccessibile alle applicazioni (incluso il sistema operativo, credo).

  • Sì, il paging è una mappatura dei blocchi di memoria fisica in blocchi di memoria virtuale, quindi gli indirizzi fisici sono sicuramente coinvolti.

  • Quella frase si riferisce solo al codice del sistema operativo che gestisce l'implementazione della memoria virtuale (ad esempio lo scambio delle pagine). Non si riferisce al codice del sistema operativo che alloca la memoria per te.

risposta data 24.07.2015 - 12:37
fonte

Leggi altre domande sui tag