有没有办法从Python调用the POSIX mlock
function? mlock
的作用是禁用换出某些对象。
我知道在保护加密 key 方面还有其他问题,我只想知道如何将其包含在RAM中。
最佳答案
对于CPython,没有一个不涉及编写Python C扩展的好的答案,因为mlock
在页面上而不是对象上起作用。即使您使用ctypes
来检索必要的地址并通过mlock
ctypes
调用对所有地址进行mlock
编码,也很难决定何时使用mlock
和何时使用munlock
。您需要知道所有 protected 数据类型的内存地址和大小;由于mlock
可在页面上使用,因此您必须仔细跟踪给定页面中当前有多少个对象(因为如果您只是盲目地mlock
和munlock
,并且有多个内容要锁定在页面中,则第一个munlock
会解锁所有这些; mlock/munlock
是一个 bool 标志,它不计算锁定和解锁的数量)。
即使您能做到这一点,在数据获取和mlock
之间仍然会有争夺,在此期间可以写入数据进行交换。
您可以通过谨慎地使用mmap
模块和memoryview
来部分避免这些问题(mmap
为您提供了内存页面,memoryview
引用了该内存而不复制了它,因此ctypes
可用于mlock
页面),但是您必须构建从头开始。
简而言之,Python不在乎您想要的方式进行交换或内存保护。它信任将交换文件配置为所需的安全性(例如,已禁用或加密),既不提供额外的保护,也不提供您需要添加该交换文件的信息。