%20auf%20einem%20Block%20immer%20die%20Zuordnungen%20zwischen%20seinem%20virtuellen%20und%20seinem%20physischen%20Speicher%20gel%C3%B6scht%3F.png)
Angenommen, wir möchten mithilfe von einen Block vom Heap zuordnen malloc
. Bei der Zuordnung eines großen Speicherbereichs erfolgt der interne malloc
Aufruf mmap
und bei der Zuordnung eines kleinen Speicherbereichs erfolgt der interne malloc
Aufruf brk
.
Beachten Sie, dass der Heap kontinuierlich ist, wenn Sie verwenden sbrk()
oderbrk()
Nehmen wir an, meine Zuteilung ist relativ mittelgroß und malloc
ruft brk
intern an.
Nehmen wir an, ich rufe anmalloc(small); malloc(medium); free(medium)
nach diesem ArtikelDie Geschichte der verwirrenden Low-Level-Methoden zur Speicherzuweisung unter Unix
Wenn Sie die richtigen Dinge freigegeben haben, um am Anfang der Unterbrechung einen Block ungenutzten Speicherplatzes zu erstellen, können malloc() und Co. eventuell aufrufen
brk()
odersbrk()
die Unterbrechung des Programms verkürzen und den Speicher an das Betriebssystem zurückgeben.
Da der freie mittlere Block der letzte ist (der kleine zugewiesene Block ist der vorletzte), wird der Speicher an das Betriebssystem zurückgegeben.
Nachfolgend meine Fragen:
Mein Verständnis der Aussage „der Speicher wird an das Betriebssystem zurückgegeben“ ist: Die Zuordnungen des freien Blocks zwischen virtuellem Speicher und physischem Speicher werden gelöscht, andere Prozesse können den physischen Speicher verwenden, der ursprünglich von diesem freien Block belegt war. Habe ich das richtig verstanden?
dieses Mal rufe ich auf:
malloc(medium); malloc(small); free(medium)
Da am Ende immer noch ein zugewiesener Block vorhanden ist, besteht die Zuordnung des freien Blocks zwischen virtuellem Speicher und physischem Speicher weiterhin? Können andere Prozesse den physischen Speicher dieses freien Blocks verwenden?
Antwort1
Es gibt andere Mechanismen, mit denen physischer Speicher für andere Zwecke wiederverwendet werden kann, in diesem Fall insbesondere Auslagerung. Wenn der Speicherdruck hoch genug ist, kann der physische Speicher eines Prozesses ausgelagert werden, um Platz für etwas anderes zu schaffen.
Heutzutage ist der Hauptvorteil der Speicherrückgabe an das Betriebssystem, dass das Betriebssystem dannweißdass der Speicher nicht wieder verwendet wird und er daher den entsprechenden physischen Speicher ohne weiteres verwerfen kann. (Siehemeine Antwort auf die zugehörige SO-Fragefür Details.)
Zuordnungen zwischen virtuellem und physischem Speicher sind einigermaßen fließend; siehe den obigen Punkt zum Swap. In Ihrem Szenario kann sich der dem Prozess zugewiesene virtuelle Adressraum nicht ändern, da die Programmunterbrechung nicht reduziert werden kann und der Kernel davon ausgehen muss, dass der ihm zugewiesene physische Speicher „wertvoll“ ist und wichtige Daten enthält. Das bedeutet jedoch nicht, dass der Kernel den physischen Speicher nicht neu verwenden kann; es bedeutet lediglich, dass er dabei sicherstellen muss, dass die dort gespeicherten Daten nicht verloren gehen.