我正在尝试通过我的内核驱动程序写入用户空间内存,并且我遇到了一个问题,即我写入该内存的字节最终被保存到磁盘中(而且我不想要它们)。 为了解决这个问题,我清除了我写的页面的脏点。
disable WP @ CR0
copy_to_user(some_user_addr, some_kernel_addr, some size);
enable WP @ CR0
get_user_pages(...);
ClearPageDirty(page);
现在发生了什么:
如果我关闭该用户程序并查看其Elf文件内容,似乎我写的东西实际上仍然存在 - 看起来脏位清除不起作用。
但是,当我重新启动计算机时,似乎我写的东西不存在! - 看起来脏位清除确实有效。
我的假设是,还有一个级别的存储/缓存/什么 这意味着当内容实际需要写入磁盘时,它没有,因为我清除了该页面的脏位。但是那个脏位清除并不影响在该存储级别写入文件的当前“实例”。
所以,底线是:
我如何实现目标?如何强制操作系统根本不更改原始文件(在我通过内核驱动程序写入之后)?