防止 RAM 分页到交换区域 (mlock)

Prevent RAM from paging to swap area (mlock)

提问人:ArekBulski 提问时间:4/9/2015 最后编辑:bignoseArekBulski 更新时间:9/29/2015 访问量:2107

问:

有没有办法从 Python 调用 POSIX mlock 函数?的作用是禁用交换某些对象。mlock

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

python 内存 posix ram

评论

1赞 metasyn 4/9/2015
我发现这个 IBM 文档与 Python 中的内存锁定和可变性相关/有趣
0赞 ArekBulski 4/9/2015
非常有趣的阅读。禁用核心转储得到了很好的解释。

答:

6赞 ShadowRanger 9/29/2015 #1

对于 CPython,没有一个好的答案,不涉及编写 Python C 扩展,因为工作在页面上,而不是对象上。即使您曾经检索过必要的地址并通过调用将它们全部编辑,您也会有一段地狱般的时间来确定何时和何时。您需要知道所有受保护数据类型的内存地址和大小;由于适用于页面,因此您必须仔细跟踪任何给定页面中当前有多少对象(因为如果您只是盲目地,并且页面中有多个内容要锁定,那么第一个内容将解锁所有对象; 是一个布尔标志,它不计算锁定和解锁的数量)。mlockctypesmlockctypesmlockmlockmunlockmlockmlockmunlockmunlockmlock/munlock

即使你做到了这一点,你仍然会在数据采集和数据之间进行竞争,在此期间数据可以被写入交换。mlock

你可以通过谨慎使用模块和 s 来部分避免这些问题(给你内存页面,引用所述内存而不复制它,所以可以用于页面),但你必须从头开始构建它。mmapmemoryviewmmapmemoryviewctypesmlock

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