是否可以在Linux下分配某个RAM扇区?

时间:2010-10-25 07:28:24

标签: linux memory-management

我最近得到了一个有缺陷的RAM,尽管已经找到了this我想尝试一个更容易的概念 - 编写一个程序来分配错误的RAM区域并永远不会释放它们。如果在程序运行之前分配它们可能不会很好,但是在失败时重新启动比使用补丁构建内核要容易得多。

所以问题是:

  1. 如何编写将分配给定扇区(或包含给定扇区的页面)的程序
  2. 和(如果可能)报告是否成功。

4 个答案:

答案 0 :(得分:2)

这会有问题。要了解原因,您必须了解物理和虚拟内存之间的关系。

在任何现代操作系统中,程序将为自己获得一个非常大的地址空间,其余的地址空间用于操作系统本身。其他程序根本不可见:没有找到它们的地址。这怎么可能?简单:进程使用虚拟地址。虚拟地址不直接对应物理RAM。相反,有一个由操作系统管理的地址转换表。当您的进程运行时,该表仅包含分配给您的RAM的映射。

现在,这意味着操作系统决定为您的程序分配的物理RAM。它可以(并且将会)在runtimke上改变它。例如,使用相同的机制实现交换。换出时,会将一页RAM写入磁盘,并从转换表中删除其映射。当您尝试使用虚拟地址时,操作系统会检测缺少的映射,将页面从磁盘还原到RAM,然后放回映射。您不可能返回相同的物理RAM页面,但虚拟地址在整个换出/交换期间不会改变。所以,即使您碰巧分配了一页坏内存,也无法保留它。程序没有RAM,它们拥有一个虚拟地址空间。

现在,Linux确实提供了一些特定的内核函数,它们以稍微不同的方式分配内存,但似乎你想完全绕过内核。您可以在http://lwn.net/images/pdf/LDD3/ch08.pdf

中找到更详细的说明

答案 1 :(得分:1)

查看BadRAM:它似乎完全符合您的要求。

答案 2 :(得分:0)

嗯,这不是关于如何编写程序的答案,但它修复了编译内核的问题:

使用memmap或mem参数: http://gquigs.blogspot.com/2009/01/bad-memory-howto.html

我将在运行时编辑此答案并提供详细信息。

答案 3 :(得分:0)

事情就是编写自己的内核模块,它可以分配物理地址。并使用mlock(2)进行noswap。 我从未尝试过。没有保修。