我正在开发 x86-64 CentOS 7 上的 Linux 驱动程序。我们有一个内核模块,可以读取和写入文件。该模块尝试获取保证连续的页面。当我尝试read/write
5 GB 或 10 GB 的较小作业时,它工作正常。我得到了正确的内核虚拟地址空间指针,0xffff 8xxx xxxx xxxx
但是如果我尝试更大的工作/数据(比如 20 到 50 GB),那么我得到的这些地址指针看起来像0x0000 00xx xxxx xxxxx
. 这些不是内核虚拟地址空间指针。
因此,我看到操作系统崩溃。但是,如果我在作业期间通过使用清除缓存频率,echo 3 > /proc/sys/vm/drop_caches
那么它工作正常,并且我得到正确的内核虚拟地址空间指针。
对于这种含糊不清的问题,我深表歉意。欢迎任何提示和建议。
谢谢