Можно ли выделить определенный сектор оперативной памяти под Linux? - PullRequest
1 голос
/ 25 октября 2010

Я недавно получил неисправный ОЗУ и, несмотря на то, что уже выяснил это , я хотел бы попробовать гораздо более простую концепцию - написать программу, которая бы выделяла неисправные области ОЗУ и никогда не выпускала их. Это может не сработать, если они будут распределены до запуска программы, но было бы намного проще перезагрузиться при сбое, чем собрать ядро ​​с исправлениями.

Так что вопрос:

  1. Как написать программу, которая бы выделяла заданные сектора (или страницы, содержащие заданные сектора)
  2. и (если возможно) сообщать об успехе.

Ответы [ 4 ]

2 голосов
/ 25 октября 2010

Это будет проблематично.Чтобы понять, почему вы должны понимать связь между физической и виртуальной памятью.

В любой современной операционной системе программы получат очень большое адресное пространство для себя, а оставшаяся часть адресного пространства используется дляСама ОС.Другие программы просто невидимы: нет адреса, по которому они найдены.Как это возможно?Просто: процессы используют виртуальные адреса.Виртуальный адрес не соответствует напрямую физической памяти.Вместо этого есть таблица преобразования адресов, управляемая ОС.Когда ваш процесс выполняется, таблица содержит только сопоставления для выделенной вам оперативной памяти.

Теперь это означает, что ОС решает, какая физическая память выделена вашей программе.Это может (и будет) меняться на рунтимке.Например, обмен осуществляется с использованием того же механизма.При выгрузке страница ОЗУ записывается на диск, а ее отображение удаляется из таблицы перевода.Когда вы пытаетесь использовать виртуальный адрес, ОС обнаруживает отсутствующее сопоставление, восстанавливает страницу с диска в ОЗУ и возвращает сопоставление.Маловероятно, что вы возвращаетесь на одну и ту же страницу физической памяти, но виртуальный адрес не меняется в течение всего процесса замены / замены.Таким образом, даже если вам случится выделить страницу с плохой памятью, вы не сможете ее сохранить.Программы не владеют оперативной памятью, они владеют виртуальным адресным пространством.

Теперь Linux действительно предлагает некоторые специфические функции ядра, которые выделяют память немного другим способом, но кажется, что вы хотите полностью обойти ядро.Вы можете найти гораздо более подробное описание в http://lwn.net/images/pdf/LDD3/ch08.pdf

1 голос
/ 25 октября 2010

Check BadRAM : кажется, что он делает именно то, что вы хотите.

0 голосов
/ 13 августа 2017

Дело в том, чтобы написать собственный модуль ядра, который может выделять физический адрес.И сделайте это noswap с mlock (2).Я никогда не пробовал это.Нет гарантии.

0 голосов
/ 26 октября 2010

Ну, это не ответ о том, как написать программу, но это решает проблему без компиляции ядра:

Используйте параметры memmap или mem: http://gquigs.blogspot.com/2009/01/bad-memory-howto.html

Я буду редактироватьэтот ответ, когда я его запустил и дал подробности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...