2010-10-25 65 views
1

我最近得到了一个错误的RAM,尽管已经发现了this我想尝试一个更简单的概念 - 编写一个程序来分配有缺陷的RAM区域,而不会释放它们。如果它们在程序运行之前得到分配,它可能无法正常工作,但重新启动失败要比使用修补程序构建内核要容易得多。是否可以在Linux下分配某个扇区的内存?

所以,问题是:

  1. 如何编写一个程序,如果它是成功的,将给予分配部门(或页面包含给定扇区)
  2. 和(如果可能的话)的报告。
+1

RAM没有按照扇区组织;部门(和集群)是一个硬盘概念。 RAM按页面组织。 – MSalters 2010-10-25 09:34:59

回答

1

退房BadRAM:它似乎正是你想要的。

+1

你没有点击“这个”链接,是不是......;)我链接到一个现代版本的badRAM-badMEM。我已经考虑过了,认为这需要做太多的工作。这就是为什么我想创建一个非完美但可以接受的解决方案。但如果你有经验使用badRAM或badMEM与最新的内核 - 让我知道。 – naugtur 2010-10-25 08:06:29

+0

@naugtur:最近有2.6.28的补丁,我点击了“this”链接。由于它是一个与链接相关的独立项目,所以我认为我会将它链接到你......而且几乎可以肯定的是,使用已经编写的内核模块比自己的模块更容易。 – 2010-10-25 16:39:45

+0

谢谢你指出。我认为badMEM是badRAM的延续,但它只是一种分叉。我根本不想搞砸内核,但是做一个实验并编写一个应用程序,希望系统启动时不会使用坏扇区。 (我给你+1链接到badram已经) – naugtur 2010-10-26 10:35:27

2

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

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

现在,这意味着操作系统决定将什么物理RAM分配给您的程序。它可以(也将会)在runtimke中改变这一点。例如,交换使用相同的机制来实现。当交换时,一页RAM被写入磁盘,并且它的映射从转换表中被删除。当您尝试使用虚拟地址时,操作系统检测到缺失的映射,将该页面从磁盘恢复到RAM,并放回映射。您不太可能找回同一页的物理RAM,但虚拟地址在整个换出/换入期间不会改变。所以,即使你碰巧分配了一页坏记忆,你也无法保留它。程序不拥有RAM,它们拥有一个虚拟地址空间。

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

+0

谢谢。我意识到物理和虚拟内存之间的关系,但我没有考虑交换。这篇论文看起来有趣。但是看起来编译一个内核可能不太麻烦...... – naugtur 2010-10-25 12:36:26

0

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

相关问题