AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Page Faults

Ein Thema von Corelgott · begonnen am 6. Feb 2007 · letzter Beitrag vom 6. Feb 2007
 
Olli
(Gast)

n/a Beiträge
 
#5

Re: Page Faults

  Alt 6. Feb 2007, 14:42
Zitat von Bernhard Geyer:
Es gibt zwar die Möglichkeit bestimmte Speicherbereiche vom Paging auszunehmen aber dies sollte nur dem Betriebssystem vorbehalten sein um Kernel-Bereiche nicht auszulagen. Wenn jede x-Beliebige Anwendung dies in Mengen anfordern würde wäre das ganze Konzept der virtuellen Speicherverwaltung zur Einsparung von realen Speicher wieder ausgehebelt.
Selbst Treiber sind ja beim sog. "NonPagedPool", wie der nicht-ausgelagerte (i.e. residente) Speicher bei uns genannt wird, beschraenkt. Hier gilt insbesondere, dass wer frueh kommt auch das groesste Stueck vom Kuchen ergattern kann. Deshalb gibt es auch manche Systemtreiber, welche sich auf einen Boottreiber (der Unterschied ist der Zeitpunkt zu dem ein solcher Treiber jeweils geladen wird) verlassen, der dann schonmal fruehzeitig einen dicken Brocken Speicher reserviert hat.

Uebrigens ist - vergleicht man es mit dem gesamten Adressbereich - der NonPagedPool auf x64 ein noch kleineres Stueck vorbehalten als auf x86. Geruechteweise sind es bei 32bit weniger als ein Achtel des gesamten Adressraums, wovon man aber bei einem einzigen Allokationsversuch nur rund 60MB ergattern kann.

Aber wenn man sich dann anschaut wie das alles arbeitet, sollte man sich darum keine Sorgen machen, dass der Speicher "langsam" wird. Der Pagewriter von NT ist ausgesprochen faul, weshalb nur dann was in die Auslagerungsdatei schreibt, wenn eine Seite wirklich urst lange (<- relativ!) nicht mehr benutzt wurde. PagedPool ist also ohnehin oft genug im physikalischen Speicher, kann aber ausgelagert werden.

Gluecklicherweise gibt es keinen Weg fuer Usermode-Programme NonPagedPool zu allozieren, es sei denn durch einen Treiber. Und solange der Treiberautor sich auskennt, wird er NonPagedPool moeglichst vermeiden. Der einzige Vorteil ist naemlich, dass NonPagedPool auf IRQLs (Interrupt Request Levels - nicht verwechseln mit IRQ oder ueberhaupt mit "Interrupts") hoeher als APC_LEVEL zugegriffen werden kann (kann schon, aber dann macht das System blau mit einem freundlichen Hinweis im Textmode). PagedPool wird so verwaltet, dass es technisch unmoeglich ist ab DPC_LEVEL drauf zuzugreifen, weil der Anfordernde u.U. warten muesste bis der Speichermanager die Seite in den physikalischen Speicher geholt hat. Dummerweise ist Warten aber eine Geschichte die ab DPC_LEVEL problematisch wird (einfach ein gutes Buch ueber Treiber finden, wenn's jemanden interessiert ) weshalb ab da PagedPool tabu ist. Gluecklicherweise laeuft eine jede Usermode-Anwendung auf PASSIVE_LEVEL (kleinster IRQL), so dass sie auf solche Geschichten keine Ruecksicht nehmen muss. Es gibt Ausnahmen in Sachen APC_LEVEL, aber das wird hier wohl zu detailliert

BTW: Was sucht dieser Thread in der Sparte Delphi-Language???
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz