замена страницы виртуальной памяти - PullRequest
0 голосов
/ 19 марта 2012

Известно, что некоторые страницы необходимо заменять по требованию подкачки, когда все кадры заполнены. Однако страницы можно использовать как текст, данные, данные, которые все вызываются из дискового ввода-вывода, но не страницы такой стек, куча программы размещаются только в памяти, нет копии на диске. Я хочу знать, участвуют ли страницы стека и кучи в замене страниц, и если да, следует ли их временно вставить в диск? В противном случае, они должны быть закреплены в памяти? Может быть, этот вопрос тесно связан с конкретной реализацией, и можно принять другую стратегию, но мне не терпится узнать обычную практику.

Ответы [ 2 ]

5 голосов
/ 19 марта 2012

Все страницы пользовательского режима могут быть удалены из оперативной памяти.Страницы, которые не модифицируются и поддерживаются реальными данными на диске (такими как исполняемые и доступные только для чтения части DLL и EXE), просто удаляются из памяти и выгружаются обратно по требованию. Все остальные страницы записываются в файл подкачки и обратно по запросу.Это включает в себя стек, кучу и память VirtualAlloc.

Стековая память, близкая к активному потоку, имеет тенденцию не выгружаться из-за недавнего обращения к ней, и, следовательно, это плохой выбор, который должен быть выгруженpaging-daemon / APC, но страницы, находящиеся далеко в стеке вызовов и в потоках, которые часто приостанавливаются , выгружаются системой и, конечно, не закреплены в памяти.

Единственное общееИсключением являются стеки ядра.Каждое ядро ​​должно иметь по крайней мере один стек ядра, который никогда не выгружается, потому что в противном случае сбой страницы вызовет тройной сбой процессора и перезагрузку ядра.

Кроме того, в Linux и Windows есть концепция«non-paged-pool» - куча памяти, которая никогда не будет выгружена.Это отличается от памяти «paged-pool», которая выгружается и выгружается демоном подкачки по мере необходимости.(Эта «невыгружаемая» память требуется для обслуживания самого демона сбоев страниц, основных системных служб и служб, которые необходимы для работы демона подкачки, таких как драйверы файловой системы, диспетчер памяти и т. Д.)

2 голосов
/ 19 марта 2012

Вот почему вам нужен файл подкачки или подкачки.Если у вас есть грязные страницы (копия в памяти была изменена), но к ним не обращались в течение длительного времени, единственный способ использовать физическую память, которую они занимают для чего-то более полезного, - это сначала записать их на диск.

Чистые страницы (которые содержат только нули, данные, которые никому не нужны, или копии файлов, хранящихся на диске) могут быть просто удалены из памяти и затем использованы для каких-то других целей.

Обычноединственными страницами, которые закреплены в памяти, являются страницы, используемые ядром, или страницы, закрепленные привилегированными процессами.Многие функции ядра временно закрепляют объекты в памяти, чтобы они могли получить к ним доступ, не опасаясь ошибки страницы.Эти страницы открепляются до того, как ядро ​​вернется в пользовательское пространство.

Это общий ответ, который в равной степени применим ко всем основным современным операционным системам общего назначения.

...