Adapter geheugen in de proces adresruimte toewijzen

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 189327 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

Wanneer u een grote hoeveelheid adapter geheugen toewijzen, verschijnt een van de volgende symptomen:
  • Onbeschikbaarheid van systeem-PTE's (NO_MORE_SYSTEM_PTES).
  • Onvoldoende aaneengesloten proces adresruimte.
In dit artikel wordt beschreven:
  • waarom deze problemen
  • hoe te omzeilen
  • adapter geheugen toewijzen aan een proces adresruimte op twee manieren

Meer informatie

Inleiding in pagina tabel vermeldingen (PTE)

Elk proces dat wordt uitgevoerd op een Windows NT-systeem is een virtueel adres van 4 GB variërend van 0x00000000 op 0xFFFFFFFF voor het gebruik ervan. Hierdoor kan de bovenste 2 GB variërend van 0x8000000 tot 0xFFFFFFFF adres wordt gedeeld door alle processen uitgevoerd in het systeem en kernel of systeem adresruimte genoemd. Het onderste gebied, variërend van 0x00000000 tot 0x7FFFFFFF heet gebruikers adres ruimte.

Vanuit het perspectief proces elk element van virtuele adres conceptueel verwijst naar een byte van het fysieke geheugen. Het is de verantwoordelijkheid van de Virtueel geheugen Manager (VMM) in combinatie met processor geheugenbeheer Unit (MMU) te vertalen of elk virtueel adres worden toegewezen aan een bijbehorende fysiek adres. De VMM voert de toewijzing door het RAM-geheugen in te delen vaste grootte pagina frames, tabellen voor het opslaan van informatie over pagina maken Deze pagina frames en deze toe te wijzen. Elke PTE vertegenwoordigt een frame pagina en bevat gegevens die nodig zijn voor de VMM een pagina vinden.

Op een x86-systeem met een paginagrootte 4 KB, het maximum aantal PTE's vereist speciale 2 dat GB adresruimte is 524,288 (2 GB/4 KB). Op een typische systeem, hier wordt als volgt gebruikt:
  • Een maximum van 50000 PTE's (ongeveer 195 MB adresruimte) zijn gereserveerd voor algemeen gebruik.
  • De rest wordt gebruikt in de toewijzings systeemcache, hyperspace, wisselbaar geheugen, niet-wisselbaar geheugen, crash dump gebied, enzovoort.
Deze PTE poolgrootte wordt automatisch bij het opstarten van het systeem op basis van de hoeveelheid fysiek geheugen in het systeem bepaald. Deze groep worden gemaakt tussen wisselbaar en niet-wisselbaar geheugen, ook met de hoeveelheid fysiek geheugen in het systeem ook toeneemt.

Het systeem gebruikt deze PTE's kernel thread stacks maken, laden van apparaat stuur programma's (en hun DLL's) toegewezen systeem virtuele adres ruimte voor i/O overdrachten of MmMapIoSpace/MmMapLockedPages/MmGetSystemAddressForMdl/MmAllocateNonCachedMemory en voor andere bellers diverse doeleinden. Dit systeem-PTE groep sterk kan worden gebruikt en sterk gefragmenteerd. Dit betekent dat het stuur programma mogelijk niet ophalen onvoldoende aaneengesloten virtuele adresruimte van het systeem-PTE groep allen Gezien de tijd, zelfs als de adres ruimte die nog het totaal mogelijk voldoende zijn.

Het betekent ook dat als het stuur programma systeem-PTE pool volledig gebruikt, andere onderdelen van het systeem verslechteren zal, waardoor zelfs threads niet worden gemaakt, systeem vertragingen en onmiddellijke bug controles (omdat sommige stuur programma's Bel toewijzen-systeem geheugen met de parameter MustSucceed ingesteld).

U moet zeer voorzichtig wanneer u deze map alleen-groep. Gebruik het gedeelte van de adapter RAM echt systeem moet toegang tot vanuit de context van een proces en alleen het bedrag dat u moet toewijzen. Het gehele adapter bereik geen toewijzing als u niet echt hoeft te krijgen via systeem modus.

BELANGRIJK: De geheugen toewijzing zodra u in het kader van het rechts proces klaar bent. Anders PTE's van het systeem wordt uitgevoerd en wordt fouten controle. U kunt de standaard aantal verhogen PTE's berekend op basis van het totale systeem geheugen tot een maximum waarde door een getal (gelijk aan het aantal pagina's wordt verhoogd) om het register op:
   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
   \Memory Management\SystemPages
				
U kunt ook controleren momenteel beschikbaar "systeem pagina tabelvermeldingen vrij" met behulp van Prestatiemeter.

OPMERKING: De adapter geheugen pagina's niet worden gebruikt voor de vervangende pagina. Zij blijven toegewezen aan de proces adresruimte zelfs als het proces is niet actief of volledig verwisselde uit.

Hieronder staan de twee meest voorkomende manieren adapter geheugen toewijzen. De eerste methode geheugen kaarten rechtstreeks in het proces gebruikers ruimte en het tweede methode kaarten in proces van systeem-ruimte en eventueel in de gebruiker- ruimte. Beide methoden vereisen het fysieke geheugen moet aaneengesloten. Vanwege de beperking PTE u niet mogelijk een grote hoeveelheid toewijzen geheugen in de systeem ruimte. Maar misschien worden toegewezen aan de gebruikers- ruimte als deze niet is gefragmenteerd of gebruikt.

Sectie Object, methode

Er is een voorbeeld (MAPMEM) in de DDK voor Windows NT 4. 0 (beschikbaar via Professionele lidmaatschap van MSDN) waarmee wordt aangegeven hoe deze toewijzing uitvoert. Hier een overzicht van de techniek is:

  1. Het vertaalde fysieke adres van de adapter geheugen (HalTranslateBusAddress).
  2. Een sectie greep (ZwOpenSection) in het fysieke geheugenapparaat openen \Device\PhysicalMemory.
  3. Verwijst naar het object ingang (ObReferenceObjectByHandle) om te voorkomen dat deze worden verwijderd.
  4. Toegewezen geheugen (ZwMapViewOfSection).
Het virtuele adres u van de ZwMapViewOfSection krijgt is alleen geldig in de context van het proces dat is toegewezen. Als u toegang wilt tot het geheugen de bestuurder deferred procedure (DPC) aanroepen of interrupt service routine (ISR), die wordt uitgevoerd in een willekeurige proces context, moet u ook wijzen de geheugen in de adresruimte van het systeem (Gebruik de volgende methode). Ontkoppelen (ZwUnMapViewOfSection) het geheugen in de proces context die u toegewezen voordat het wordt afgesloten.

OPMERKING: In het algemeen kunnen worden gevaarlijk voor het gebruik van deZwMapViewOfSection\Device\PhysicalMemory gebruikt, tenzij u de fysieke pagina's al bezit. Een stuur programma dat is toegewezen de pagina's die niet de eigenaar bijna altijd veroorzaakt door beschadigd geheugen omdat de eigenaar kan de pagina ken merken wijzigen vrije pagina's en andere wijzigingen aanbrengen. Stations moeten alleen het geheugen waarvan ze eigenaar toewijzen. Ook is het strikt niet toegestaan om een fysiek adres tegelijkertijd met twee verschillende ken merken (dat wil zeggen in vs noncached vs writecombined cache). Hierdoor wordt processor TLB beschadigd en onvoorspelbare resultaten.

Windows XP, deZwMapViewOfSectionfunctie STATUS_CONFLICTING_ADDRESSES-fout als resultaat als stuur programma's gelijktijdig met de conflicterende ken merken hetzelfde fysieke adres toewijzen.

MmMapIoSpace, methode

Deze methode geeft het toewijzen van geheugen in de proces adresruimte van het systeem en in de proces adresruimte van de gebruiker.
  1. Haal het omgezette fysieke adres van de adapter geheugen (HalTranslateBusAddress).
  2. Het geheugen worden toegewezen aan niet-wisselbaar geheugen systeem adresruimte als volgt:
          SystemVirtualAddress = MmMapIoSpace(PhysicalAddress, SizeofMemory,
             CacheEnable);
    					
  3. Een Mdl toewijzen:
          Mdl = IoAllocateMdl(SystemVirtualAddress, SizeOfMemory, FALSE, FALSE,
             NULL);
  4. De MDL beschrijven de geheugen pagina's samens tellen:
          MmBuildMdlForNonPagedPool(Mdl);
  5. De geheugen kaart in het proces gebruikers ruimte via de MmMapLockedPages. Omdat er een inconsistentie in de resultaat waarde van deze functie tussen pre-SP 4 en post-SP 4-versies van Windows NT, de volgende instructie gebruiken zodat deze code compatibel met alle versies van Windows NT:
          UserVirtualAddress = (PVOID)(((ULONG)PAGE_ALIGN(MmMapLockedPages(Mdl,
             Mode))) + MmGetMdlByteOffset(Mdl));
    					
Voor meer informatie klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
199311INFO: MmMapLockedPages resulteert SP4 werkelijke virtueel adres
Het voordeel van deze methode is dat u geniet van SystemVirtualAddress, die kan worden gebruikt in de context van een proces (zoals DPC's en ISR) en een UserVirtualAddress die kunnen worden gebruikt door de toepassing voor gebruikers modus in wier context die het is toegewezen.

Als u in systeem adresruimte toewijst, moet u als volgt ontkoppelen:
MmUnmapIoSpace(SystemVirtualAddress, SizeofMemory);
				
Als u aan gebruikers adresruimte toewijzen, moet u als volgt ontkoppelen alleen tijdens de uitvoering in het kader van het proces waarin u het geheugen hebt toegewezen:
MmUnmapLockedPages(UserVirtualAddress, Mdl); 

Finally, free the MDL by calling:

IoFreeMdl(Mdl);
				

Referenties

Zie de documentatie van de DDK voor Windows NT 4. 0 of "binnen Windows NT" door Helen Custer (Microsoft Press 1993) voor meer informatie.

Eigenschappen

Artikel ID: 189327 - Laatste beoordeling: zaterdag 26 februari 2011 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Win32 Device Driver Kit voor Windows NT 4.0
Trefwoorden: 
kbhowto kbkmode kbmt KB189327 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:189327
Vrijwaring inhoud KB-artikelen over niet langer ondersteunde producten
Dit artikel heeft betrekking op producten waarvoor Microsoft geen ondersteuning meer biedt. Daarom wordt dit artikel alleen in de huidige vorm aangeboden en wordt het niet meer bijgewerkt.

Geef ons feedback

 

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