2015-04-08 3 views
3

Есть ли способ позвонить the POSIX mlock function с Python? Эффект mlock заключается в отключении замены некоторых объектов.Предотвращение ОЗУ от подкачки до области подкачки (mlock)

Я знаю, что есть еще проблемы, связанные с защитой криптографических ключей, я просто хочу знать, как их содержать в ОЗУ.

+1

Я нашел это [IBM] (http: // www.ibm.com/developerworks/library/s-data.html?ns-311) актуальный/интересный документ относительно блокировки памяти и изменчивости в Python – metasyn

+0

Очень интересно читать. Хорошо объясняется отключение дампов ядра. – ArekBulski

ответ

3

Для CPython для этого нет хорошего ответа, который не требует написания расширения Python C, поскольку mlock работает на страницах, а не на объектах. Даже если вы использовали ctypes для извлечения необходимых адресов и mlock -или их все через ctypesmlock звонки, у вас будет чертовски определенное время, когда mlock и когда до munlock. Вам нужно знать адрес и размеры памяти всех защищенных типов данных; так как mlock работает на страницах, вам нужно будет тщательно отслеживать, сколько объектов в настоящее время находится на любой заданной странице (потому что если вы только mlock и munlock слепо, и есть несколько вещей, которые нужно заблокировать на странице, первый munlock разблокирует все из них: mlock/munlock - это булевский флаг, он не учитывает количество блокировок и разблокировок).

Даже если вы справитесь с этим, у вас все еще будет гонка между сбором данных и mlock, во время которого данные могут быть записаны для обмена.

Вы могли бы частично избежать этих проблем путем тщательного использования из mmap модуля и memoryview s (mmap дает страницы памяти, memoryview ссылки указанной памяти без копирования, поэтому ctypes может быть использован для mlock страницы), но вы d придется строить все с нуля.

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