2010-10-25 25 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。 我從來沒有嘗試過。沒有保修。

相關問題