代码之家  ›  专栏  ›  技术社区  ›  naugtur

在Linux下是否可以分配特定的RAM扇区?

  •  1
  • naugtur  · 技术社区  · 14 年前

    我最近得到了一个有问题的内存,尽管我已经发现了 this

    所以问题是:

    1. 如果可能的话,报告是否成功。
    4 回复  |  直到 14 年前
        1
  •  2
  •   MSalters    14 年前

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

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

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

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

        2
  •  1
  •   Steven Schlansker    14 年前

    退房 BadRAM

        3
  •  0
  •   naugtur    14 年前

    好吧,这不是如何编写程序的答案,但它解决了编译内核的问题:

    http://gquigs.blogspot.com/2009/01/bad-memory-howto.html

    我会在运行时编辑这个答案并给出详细信息。

        4
  •  0
  •   Denis    7 年前

    问题是编写自己的内核模块,它可以分配物理地址。用mlock做noswap(2)。