Domanda

mi manca qualcosa, quando si tratta di capire la necessità di highmem per affrontare più di 1 GB di RAM. Qualcuno potrebbe indicare dove ho sbagliato? Grazie!

Quello che so:

  • 1 GB di memoria virtuale (regione di memoria alta) a processi è riservato per le operazioni del kernel. Lo spazio utente può utilizzare il restante 3 GB. Questo è il 3/1 diviso.

  • Le caratteristiche della memoria virtuale della VM mappa i (continui) pagine virtuali di memoria a pagine fisica (RAM).

Quello che non so:

  • Quali operazioni utilizzare la memoria virtuale del kernel? Suppongo che le cose come kmalloc (...) in kernel-space userebbero kernel della memoria virtuale.

  • Vorrei pensare che 4GB di RAM potrebbe essere utilizzato nell'ambito di questo regime. Non capisco perché il GB di spazio virtuale del kernel 1 è il fattore limitante quando si affrontano spazio fisico. Questo è dove la mia comprensione si rompe. Si prega di avvisare.

Ho letto questo ( http://kerneltrap.org/node/2450 ) , che è grandioso. Ma non abbastanza affrontare la mia domanda di mio gradimento.

È stato utile?

Soluzione

La ragione per cui lo spazio virtuale del kernel è un fattore limitante memoria fisica utilizzabile perché il kernel deve accedere a tutta la memoria fisica, e il modo in cui accede alla memoria fisica avviene attraverso indirizzi virtuali del kernel. Il kernel non utilizzare le istruzioni speciali che consentono l'accesso diretto alle locazioni di memoria fisiche -. Deve impostare le voci di tabella di pagina per le gamme di fisici che si vuole parlare con

Nel regime "vecchio stile", le cose set kernel in modo che le tabelle delle pagine di ogni processo mappati indirizzi virtuali da 0xC0000000 a 0xFFFFFFFF direttamente agli indirizzi fisici da 0x00000000 a 0x3FFFFFFF (queste pagine sono state segnate in modo che fossero accessibili solo in ring 0 - modalità kernel). Questi sono gli "indirizzi virtuali del kernel". Secondo questo sistema, il kernel potrebbe direttamente leggere e scrivere qualsiasi posizione di memoria fisica, senza dover armeggiare con la MMU per cambiare le mappature.

In base al regime highmem, le mappature da indirizzi virtuali del kernel in indirizzi fisici non sono fissate - parti di memoria fisica sono mappati in e fuori del kernel spazio di indirizzamento virtuale come il kernel deve accedere a tale memoria. Questo permette memoria fisica da utilizzare, ma a costo di dover cambiare continuamente pacchetti virtuali a fisico, che è piuttosto un'operazione costosa.

Altri suggerimenti

Mappatura 1 GB al kernel in ogni processo permette processi per passare alla modalità kernel senza anche eseguire un cambio di contesto. Risposte a chiamate di sistema come read(), mmap() e altri possono poi essere opportunamente elaborati nel processo chiamante spazio di indirizzo.

Se lo spazio per il kernel non sono state riservate in ogni processo, il passaggio alla modalità "kernel" tra l'esecuzione di codice spazio utente sarebbe più costoso, ed essere in grado di utilizzare la mappatura indirizzo virtuale attraverso la (unità di gestione della memoria) MMU hardware per il sistema di chiamate in attesa.

I sistemi che eseguono un kernel a 32 bit con più di 1 GB di memoria fisica, sono in grado di assegnare le locazioni di memoria fisiche in ZONE_HIGHMEM (circa sopra il marchio 1GB), che può richiedere il kernel fare i salti mortali per alcune operazioni di interagire con loro. L'aggiunta di PAE (estensione indirizzo fisico), estende questo problema permettendo fino a 64GB di memoria fisica, diminuendo il rapporto di memoria all'interno della memoria indirizzo fisico 1 GB, alle regioni allocati in ZONE_HIGHMEM.

  1. Ad esempio le chiamate di sistema utilizzano lo spazio del kernel.
  2. È possibile avere 64GB di RAM fisica, ma su piattaforme a 32 bit i processori può accedere solo 4 GB a causa del l'indirizzamento a 32 bit virtuale. In realtà, è possibile avere 1 GB di RAM e 3 GB di swap e di indirizzamento virtuale farà sembrare che si ha 4 GB. Sulle piattaforme a 64 bit di indirizzamento virtuale è praticamente illimitato.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top