防止RAM分页到交换区(锁定)

Are*_*ski 5 python memory ram posix

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

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

Sha*_*ger 5

对于 CPython,没有不涉及编写 Python C 扩展的好答案,因为它mlock适用于页面,而不是对象。即使您过去常常ctypes检索必要的地址并mlock通过ctypes mlock调用对它们全部进行-ed ,您也将有很长的时间来确定何时 tomlock以及何时 to munlock。您需要知道所有受保护数据类型的内存地址和大小;因为mlock网页上的作品,你必须仔细跟踪多少个对象在任何给定的网页目前(因为如果你只是mlockmunlock盲目,有一个以上的东西锁在一个页面中,首先munlock将解开所有的人;mlock/munlock是一个布尔标志,它不计算锁定和解锁的次数)。

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

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

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