谁能告诉我 Linux 内核是否可以访问 RAM 磁盘,如果可以,我们如何禁止它?
我想要一个 RAM 磁盘,我是唯一有权访问并可以更改信息的人,并且我想确保操作系统不会操纵它。
编辑:我知道我们可以安装 RAM 磁盘并将其用作硬盘驱动器,但是操作系统是否可以访问该 RAM 磁盘并在其进程需要额外 RAM 时操纵其内容?
有没有其他方法可以保留操作系统无法访问的内存块?
编辑2:有没有办法可以阻止RAM磁盘数据移动到交换空间?我想确保我在此 RAM 磁盘中写入的数据将始终保留在 RAM(内存)中
我还想知道内核或其他进程是否覆盖 RAM 磁盘数据?以防他们需要更多内存!
答案1
这是不可能的,因为是 Linux 内核创建和管理 RAM 磁盘。
回复您的问题的后续修改,询问如何保留操作系统无法访问的内存块。操作系统管理您对硬件的所有访问。根据定义,这就是它的用途的一部分。所以,不,如果操作系统没有为您保留内存块,就不可能保留它。
如果您已将一部分内存分配给 RAM 磁盘,则写入该 RAM 磁盘的内容不会被覆盖。您的可用内存在 RAM 磁盘和其他所有设备之间共享。
答案2
通常,您所说的 RAM 磁盘位于 Linux 上临时文件系统文件系统。今天,ramfs
已过时,所以没有理由使用ramfs
;更好地利用tmpfs
(但事实上,你已经能够在过去的购买真正的 RAM“磁盘”硬件; AFAIK 这是过时的技术;今天你最好买SSD)。
tmpfs
Linux 上的文件系统使用虚拟内存,不是内存。因此,如果您有足够的交换空间,并且 RAM 很紧张(例如,因为某些进程正在使用映射(2)与MAP_ANONYMOUS
,也许通过malloc
...)内核会将一些数据移动tmpfs
到其交换空间寻呼子系统。
另请阅读linuxatemyram。
我不明白为什么你想“保留操作系统无法访问的一块内存”。你只会浪费RAM,因为根据定义,没有任何东西能够访问该内存块(全部根据定义,内存是由操作系统)。唯一的用例是当您知道 RAM 的某些部分物理损坏时(并且您知道哪个部分和哪个部分)身体的地址)。然后你可以配置你的系统来避免它(但我忘记了细节)。或者也许您正在运行 Linux管理程序它在其他系统虚拟机中使用该 RAM - 例如运行另一个操作系统(如 FreeBSD)?
我的感觉是你不明白什么是操作系统,什么是操作系统核心,什么是系统调用, 什么是虚拟内存,什么是地址空间, A过程, 这页面缓存(所以你的问题没有多大意义!)。你需要大量阅读。从...开始高级Linux编程并点击我在这里提供的所有链接。
您可能希望tmpfs
为某些应用程序保留文件系统。您可以将chown
其中的文件树提供给专用于这些应用程序的某些用户。看凭证(7),能力(7), ....
您可能感兴趣时钟锁(2)(它将一些虚拟内存段锁定到物理RAM中),映射(2),疯狂的维斯(2),同步(2),最小核心(2), 或(处理文件内容)posix_fadvise(2)
如果您想获得一些(虚拟)内存并确保它位于 RAM 中,请使用mmap
(例如,使用,或者如果您给出文件段MAP_ANONYMOUS
,则使用 with )获取该内存范围,然后使用将该内存段锁定在物理 RAM 中(除非您使用隐式)MAP_FILE|MAP_LOCKED|MAP_SHARED
mlock
mmap
MAP_LOCKED
mlock
除非您显示一些与您的问题相关的命令和代码,否则您将不会获得任何帮助。