RAM дефрагментации / отказ OOM

Если Вы видели это в более старой системе, возможности, что она выполняла xscreensaver. Вы видите его стандартный набор; существует тот лабиринта, который похож на то, что Вы описываете.

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

11
02.08.2012, 02:24
2 ответа

Потребовалось немного времени, но я думал, что удержу отвечать, пока у меня не было ответов на все 3 из моих дополнительных вопросов.

Прежде чем я запущу, хотя, я упомяну, что правильный термин когда дело доходит до "дефрагментации" оперативной памяти отнесен в "уплотнение" оперативной памяти.

1. Разве комната не выполнилась, потому что не было достаточного количества непрерывной RAM?

Я был корректен в своем заключении - комната не выполнилась, потому что была недостаточная непрерывная RAM. Система получала RAM и фрагментировала ее, таким образом делая ее неисправимой.

2. Если так, есть ли легкий метод дефрагментации DMA - не обращаясь к системному перезапуску?

Повороты там не являются никаким способом уплотнить память, за исключением перезапуска встроенной системы. В случае MMU-меньшего-количества системы предотвращение является названием игры.

Часть меня обдумывает если его возможное для взламывания ядра Linux для эмуляции MMU в программном обеспечении. Я фигурирую, было ли это возможно, кто-то уже сделал бы это. Я не могу вообразить совершенно новым понятием ;)

3. Как я могу предотвратить его в будущем?

Для этого проекта я использовал крон для ручного инициирования программы каждый раз, когда это требовалось. Намного лучший способ сделать это должно назвать программу на запуске и затем вынудить программу спать, пока это не требуется. Таким образом, память не должна быть выделена на каждом использовании. Таким образом сокращение фрагментации.

На первом повторении проекта мы полагались на мои вызовы сценария оболочки для выполнения критических функций (таких как комната). Мы не видели потребность в изобретении велосипед, если мы не должны были.

Однако я рекомендовал бы избежать оболочки, если это возможно, для MMU-меньшего-количества системы -

(Вопрос, что происходит, если Вы выполняетесь ls -la /path/to/directory/ | grep file-i-seek?)

(Ответ: это запускает новый подпроцесс),

Если необходимо реализовать часть базовой функциональности сценария оболочки в программе C, я рекомендую проверить исходный код, используемый в BusyBox. Возможности, Вы будете использовать C в своей встроенной системе..

7
27.01.2020, 19:57
  • 1
    Спасибо за то, что заняли время, чтобы возвратиться и совместно использовать Ваши результаты. –  Caleb 25.09.2012, 13:12
  • 2
    [я понимаю, что это старо], Эмуляция MMU трудна... Без MMU каждая программа непосредственно использует физические адреса, поскольку они появляются на шине памяти. Вы могли эмулировать один, но необходимо будет прервать каждый доступ к памяти (точно так же, как фактический MMU делает). Производительность была бы ужасна. С другой стороны, Вы могли использовать косвенные указатели (как Классик Mac OS, сделал, назвав их "дескрипторами"), но затем у Вас есть абсолютно трудный API, и очень трудный перед лицом вытеснения (Классик Mac OS использовал кооперативную многозадачность). –  derobert 04.07.2013, 00:56
  • 3
    спасибо за то, что возвратились и провели время для записи того ответа. Не знал, что классик MacOS сделал это. –  OldTinfoil 14.04.2014, 19:11

По вашему вопросу 2 (дефрагментация памяти), цитата из https://www.kernel.org/doc/Documentation/sysctl/vm.txt :

compact_memory

Доступно, только если установлено CONFIG_COMPACTION. Когда в файл записывается 1, все зоны уплотнены так, что свободная память доступна в смежных блоки, где это возможно. Это может быть важно, например, при распределении огромные страницы, хотя процессы также будут напрямую сжимать память по мере необходимости.

это означает, что следующая команда (выполняемая с привилегиями root и если была включена опция ядра, упомянутая выше)

echo 1 > /proc/sys/vm/compact_memory

должна указывать ядру, что нужно попытаться максимально дефрагментировать память. Остерегайтесь, например, в некоторых версиях RHEL6 это может привести к сбою ядра ...

11
27.01.2020, 19:57

Теги

Похожие вопросы