Возможна ли отображаемая память?

Я знаю, что возможно использовать отображенные в память файлы, то есть реальные файлы на диске, которые прозрачно отображаются в память. Насколько я понимаю (я еще не использовал их), отображение происходит немедленно, файл частично читается при первом обращении к памяти, в то время как ОС начинает «кэшировать» весь файл в фоновом режиме.

Теперь: возможно ли несколько злоупотребить этой концепцией и отобразить карту памяти в другом блоке памяти? Предполагая, что ОС обеспечивает такое перенаправление, можно создать compressed_malloc() который возвращает отображение из памяти в память. Память, возвращаемая вызывающей стороне, является простым отображаемым диапазоном памяти, который прозрачно сжимается в памяти и также в конечном итоге сохраняется в памяти. Таким образом, для больших буферов может быть возможно, что только часть из них будет распакована на лету (при доступе), в то время как остальные блоки будут сжаты.

Эта концепция технически возможна на данный момент или — если она уже реализована (в программном обеспечении) — на что стоит обратить внимание?

Обновление 1: я более или менее ищу что-то, что технически достижимо без изменения самого ядра ОС или для которого требуется платформа виртуализации.

Обновление 2: я надеюсь на что-то, что позволит мне реализовать сжатие и связанную логику в моем собственном коде пользовательского пространства. Я бы просто использовал возможности операционной системы для создания отображения памяти.

2

Решение

Даже очень. Система VM (Virtual Memory) предназначена для работы с различными видами объектов, которые могут быть отображены. На самом деле есть вызов файловой системы Cramfs это делает нечто похожее в том смысле, что он сохраняет сжатые данные в хранилище, но обеспечивает прозрачный несжатый доступ.

Вы не будете изменять ядро ​​как таковое, но вам придется работать в пространстве ядра, реализуя обработчики виртуальных машин для этого нового типа объекта отображения в памяти.

2

Другие решения

Это возможно, например.
http://pubs.vmware.com/vsphere-4-esx-vcenter/index.jsp?topic=/com.vmware.vsphere.resourcemanagement.doc_41/managing_memory_resources/c_memory_compression.html

Это неправильно реализовано в пространстве ядра в Linux, но что-то подобное может быть реализовано в пространстве пользователя.

1

По вопросам рекламы [email protected]