Scheda RAM nello spazio degli indirizzi del processo di mapping

Traduzione articoli Traduzione articoli
Identificativo articolo: 189327 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Quando si esegue il mapping di una grande quantitÓ di memoria della scheda, Ŕ possibile che venga visualizzato uno dei seguenti sintomi:
  • IndisponibilitÓ del sistema PTE (NO_MORE_SYSTEM_PTES).
  • Non Ŕ sufficiente spazio di indirizzi del processo contigui.
In questo articolo viene descritto:
  • perchÚ si verificano questi problemi
  • come risolvere tale problema
  • due modi per eseguire il mapping della memoria della scheda in uno spazio degli indirizzi del processo

Informazioni

Introduzione alle voci della tabella pagine (PTE)

Ogni processo viene eseguito su un sistema Windows NT dispone di un indirizzo virtuale di 4 GB compresi tra 0x00000000 e 0xFFFFFFFF per il suo utilizzo. Di questo, 2 GB superiori indirizzo compreso tra 0x8000000 e 0xFFFFFFFF Ŕ comune a tutti i processi l'esecuzione nel sistema viene definita spazio degli indirizzi del kernel o del sistema. Il area inferiore compresi tra 0x00000000 e 0x7FFFFFFF viene chiamato indirizzo utente spazio.

Dalla prospettiva del processo, ogni elemento di virtuale indirizzo concettualmente fa riferimento a un byte di memoria fisica. ╚ responsabilitÓ del Virtual Memory Manager (VMM) in combinazione con manager di processori di memoria Unit (MMU) tradurre o eseguire il mapping di ogni indirizzo virtuale in un oggetto corrispondente indirizzo fisico. VMM esegue il mapping dividendo la RAM in frame di pagina di dimensioni fisse, creazione di tabelle di pagina per archiviare le informazioni relative Questi frame ed eseguendone il mapping della pagina. Ciascuna PTE rappresenta una pagina e contiene le informazioni necessarie al VMM individuare una pagina.

In un sistema x86 che utilizza una dimensione di pagina di 4 KB, il numero massimo di PTE necessarie per eseguire il mapping di 2 GB di spazio di indirizzi Ŕ 524.288 (2 GB/4 KB). In un sistema tipico, questo spazio viene utilizzato come segue:
  • Un massimo di 50.000 PTE (circa 195 MB di indirizzo spazio) sono riservati per uso generale.
  • Il resto viene utilizzato nel mapping della cache di sistema, dell'iperspazio, pool di paging, pool non di paging, area di dettagli arresto anomalo del sistema e cosý via.
Questa dimensione del pool PTE viene determinata automaticamente all'avvio del sistema in base alla quantitÓ di memoria fisica nel sistema. Questo pool Ŕ compresso tra riserva di paging e pool di paging, aumenta anche la quantitÓ di memoria fisica nel sistema di.

Il sistema utilizza questi PTE per creare kernel stack del thread, il carico di dispositivo driver e le DLL, eseguire il mapping di sistema virtuale dello spazio di indirizzi dei / o trasferimenti o ai chiamanti di MmMapIoSpace/MmMapLockedPages/MmGetSystemAddressForMdl/MmAllocateNonCachedMemory e per altri vari scopi. Il pool delle PTE di sistema pu˛ diventare molto utilizzato e molto frammentato. Ci˛ significa che il driver potrebbe non essere in grado di ottenere spazio di indirizzi virtuali contigui sufficientemente dal pool delle PTE in qualsiasi sistema determinato momento, anche se il totale di indirizzi lo spazio ancora disponibile esso potrebbe essere sufficientemente grande.

Ci˛ significa inoltre che se il driver viene utilizzato interamente pool delle PTE di sistema, altre parti del sistema peggioreranno, anche con thread non creato, blocchi, e di verifica dei bug definitive (perchÚ alcuni driver chiamare allocare-memoria di sistema con il parametro MustSucceed impostato).

╚ necessario prestare particolare attenzione quando si utilizza questa mappa di pool. Utilizzare le parti della scheda RAM necessita sistema di accedere a qualsiasi contesto di processo e solo la quantitÓ che Ŕ necessario eseguire il mapping. Non mappare portata della scheda intero se non Ŕ realmente necessario accedervi tutti dalla modalitÓ del sistema.

Importante: annullare il mapping della memoria, non appena terminato nel contesto del processo di destra. In caso contrario, il sistema dispone di PTE e sarÓ controllo errori. ╚ possibile aumentare il numero di PTE calcolato in base a l'alto di memoria totale del sistema su un valore massimo mediante l'aggiunta di un numero (uguale a il numero di pagine necessario aumentare) il Registro di sistema in:
   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
   \Memory Management\SystemPages
				
╚ inoltre possibile monitorare attualmente disponibile "Free System Page Table Entries" utilizzo di Performance Monitor.

Nota: le pagine di memoria della scheda non vengono utilizzate per la sostituzione della pagina. Rimangono mappati allo spazio di indirizzi del processo anche se il processo Ŕ inattivo o completamente sostituito out.

Di seguito sono due modi pi¨ comuni per eseguire il mapping della memoria della scheda. Il primo metodo esegue il mapping direttamente nello spazio-del processo utente, la memoria e la secondo metodo esegue il mapping nello spazio del processo del sistema e, facoltativamente, in user- spazio. Entrambi questi metodi richiedono la memoria fisica siano contigui. A causa dei limiti di PTE, potrebbe non essere in grado di eseguire il mapping di una grande quantitÓ di memoria nello spazio di sistema. Tuttavia, Ŕ possibile eseguire il mapping a utente- spazio se non Ŕ frammentato o utilizzato.

Sezione oggetto metodo

╚ un esempio (MAPMEM) in Windows NT 4.0 DDK (disponibile tramite Appartenenza professionale MSDN) che viene illustrato come eseguire il mapping. Qui Ŕ una struttura della tecnica:

  1. Ottenere l'indirizzo fisico tradotto di memoria della scheda (HalTranslateBusAddress).
  2. Aprire un handle di sezione (ZwOpenSection) per il dispositivo di memoria fisica \Device\PhysicalMemory.
  3. L'handle dell'oggetto (ObReferenceObjectByHandle) per evitare di fare riferimento l'eliminazione.
  4. Eseguire il mapping della memoria (ZwMapViewOfSection).
L'indirizzo virtuale che dal ZwMapViewOfSection Ŕ valido solo in contesto del processo che viene eseguito il mapping. Se si desidera accedere alla memoria Nella procedura differita del driver chiamare (DPC) o interrompere la routine di servizio (ISR), contesto di processo di cui viene eseguito in un oggetto arbitrario, Ŕ necessario mappare anche il memoria nello spazio degli indirizzi di sistema (utilizzare il metodo successivo). Annullare il mapping (ZwUnMapViewOfSection) la memoria nello stesso contesto del processo che si mappata prima dell'uscita.

Nota: In generale, pu˛ essere pericoloso utilizzare la ZwMapViewOfSection con \Device\PhysicalMemory, a meno che non si dispone giÓ di pagine fisiche. Un driver che esegue il mapping di pagine che non Ŕ proprietario quasi sempre causa il danneggiamento della memoria perchÚ il proprietario pu˛ modificare gli attributi della pagina, liberare le pagine e apportare altre modifiche. UnitÓ devono essere associati solo la memoria in cui Ŕ proprietario. Inoltre, Ŕ rigorosamente valida per eseguire il mapping di un indirizzo fisico con due diversi attributi (vale a dire nella cache vs forward vs writecombined). Questa operazione provoca il danneggiamento del processore TLB e risultati imprevedibili.

In Windows XP, la funzione ZwMapViewOfSection restituisce errore STATUS_CONFLICTING_ADDRESSES se i driver tenta di associare lo stesso indirizzo fisico con attributi in conflitto.

Metodo MmMapIoSpace

Questo metodo viene illustrato come eseguire il mapping di memoria nello spazio degli indirizzi di sistema di processo e nello spazio di indirizzi del processo utente.
  1. Ottenere l'indirizzo fisico tradotto della memoria adapter (HalTranslateBusAddress).
  2. Mappare la memoria nello spazio di indirizzi non di paging del sistema come segue:
          SystemVirtualAddress = MmMapIoSpace(PhysicalAddress, SizeofMemory,
             CacheEnable);
    					
  3. Allocare un Mdl:
          Mdl = IoAllocateMdl(SystemVirtualAddress, SizeOfMemory, FALSE, FALSE,
             NULL);
  4. Compilazione MDL per descrivere le pagine di memoria:
          MmBuildMdlForNonPagedPool(Mdl);
  5. Eseguire il mapping della memoria nel processo spazio utente mediante MmMapLockedPages. PoichÚ non esiste un'incoerenza nel valore restituito della funzione tra SP4 pre e post-SP4 rilasci di Windows NT, utilizzare l'istruzione seguente per renderlo compatibile con tutte le versioni di Windows NT:
          UserVirtualAddress = (PVOID)(((ULONG)PAGE_ALIGN(MmMapLockedPages(Mdl,
             Mode))) + MmGetMdlByteOffset(Mdl));
    					
Per ulteriori informazioni, fare clic sul numero dell'articolo per visualizzare l'articolo della Microsoft Knowledge Base:
199311 INFO: MmMapLockedPages restituisce l'indirizzo virtuale effettivo in SP4
Il vantaggio di questo metodo Ŕ che si ottiene SystemVirtualAddress, che pu˛ essere utilizzato in qualsiasi contesto di processo (ad esempio le DPC e ISR) e un UserVirtualAddress pu˛ essere utilizzato per l'applicazione in modalitÓ utente in cui contesto che Ŕ mappato.

Se si esegue il mapping allo spazio di indirizzi di sistema, Ŕ necessario annullare il mapping come segue:
MmUnmapIoSpace(SystemVirtualAddress, SizeofMemory);
				
Se si esegue il mapping allo spazio di indirizzi utente, dovrebbe mappatura come indicato di seguito solo durante l'esecuzione nel contesto del processo in cui Ŕ mappato alla memoria:
MmUnmapLockedPages(UserVirtualAddress, Mdl); 

Finally, free the MDL by calling:

IoFreeMdl(Mdl);
				

Riferimenti

Per ulteriori informazioni, vedere la documentazione di Windows NT 4.0 DDK, o "all'interno di Windows NT" da Helen Custer (Microsoft Press 1993).

ProprietÓ

Identificativo articolo: 189327 - Ultima modifica: lunedý 1 luglio 2013 - Revisione: 2.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Win32 Device Driver Kit for Windows NT 4.0
Chiavi:á
kbhowto kbkmode kbmt KB189327 KbMtit
Traduzione automatica articoli
IMPORTANTE: il presente articolo Ŕ stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l?obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre Ŕ perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilitÓ per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualitÓ della traduzione.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 189327
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com