有没有办法从Python调用the POSIX mlock functionmlock的作用是禁用换出某些对象。

我知道在保护加密 key 方面还有其他问题,我只想知道如何将其包含在RAM中。

最佳答案

对于CPython,没有一个不涉及编写Python C扩展的好的答案,因为mlock在页面上而不是对象上起作用。即使您使用ctypes来检索必要的地址并通过mlock ctypes调用对所有地址进行mlock编码,也很难决定何时使用mlock和何时使用munlock。您需要知道所有 protected 数据类型的内存地址和大小;由于mlock可在页面上使用,因此您必须仔细跟踪给定页面中当前有多少个对象(因为如果您只是盲目地mlockmunlock,并且有多个内容要锁定在页面中,则第一个munlock会解锁所有这些; mlock/munlock是一个 bool 标志,它不计算锁定和解锁的数量)。

即使您能做到这一点,在数据获取和mlock之间仍然会有争夺,在此期间可以写入数据进行交换。

您可以通过谨慎地使用mmap模块和memoryview来部分避免这些问题(mmap为您提供了内存页面,memoryview引用了该内存而不复制了它,因此ctypes可用于mlock页面),但是您必须构建从头开始。

简而言之,Python不在乎您想要的方式进行交换或内存保护。它信任将交换文件配置为所需的安全性(例如,已禁用或加密),既不提供额外的保护,也不提供您需要添加该交换文件的信息。

10-07 18:24