Почему аппаратная поддержка управления памятью отсутствует?

Виртуальная память хорошо поддерживается современным оборудованием, но распределение памяти на уровне приложений по-прежнему является всем реализованным программным обеспечением, будь то управление памятью кучи памяти a-la C и С++ или сборка мусора на уровне VM.

Идя дальше классического ручного управления памятью и дебатов по сборке мусора, почему нет аппаратных примитивов, которые могут помочь создать эффективные схемы управления памятью и/или сборку мусора в пользовательском пространстве (возможно, открытые или встроенные в ОС, а затем различные виртуальные машины).

Аппаратное обеспечение используется для ускорения графических операций, разгрузки различных частей сетевого стека, а криптографические алгоритмы и аудио/видео кодеки часто реализуются на аппаратных средствах, почему нельзя создавать блоки для управления памятью более высокого уровня? Кажется настолько вездесущим, но я не знаю каких-либо аппаратных решений.

Учитывая мое отсутствие аппаратных знаний, это немного мрачная область для меня, но мне интересно услышать

  • если есть такая вещь вообще (по крайней мере на стадии исследования), или
  • будет или не даст никакой пользы от обычного управления памятью или, альтернативно,
  • почему невозможно создать такую ​​вещь в аппаратном обеспечении?

Ответ 1

У нас было много этого аппаратного оборудования в 70-е и 80-е годы последнего тысячелетия. Все эти машины Lisp были довольно хороши в попытке помочь управлению памятью с косвенным и двойным косвенным доступом (требуется, если ваш GC перемещает объекты вокруг). Некоторые из нас также помнят первые дни 80286, когда люди думали, что сегменты могут быть использованы для лучшего управления памятью и неудачные в производительности.

Современное состояние мудрости до сих пор заключается в том, что гораздо лучше оптимизировать процессор для общего использования, а не добавлять специальные функции, которые требуются только время от времени.

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

Недавно я нашел потрясающий результат при использовании HP-UX. Вы можете установить размер виртуальной страницы на 256 МБ, что будет эффективно поворачивать виртуальную память. Это привело к увеличению производительности на этом процессоре на 120%. Пропуски TLB действительно серьезны даже больше, чем промахи в кэше. Это заставляет меня задуматься о старой старой архитектуре MIPS, в которой хранился идентификатор процесса в TLB, поэтому для каждого переключателя процесса не требовался полный сброс TLB.

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

Ответ 2

Вы могли бы теоретически реализовать полную Java VM, включая управление памятью, в аппаратном обеспечении, и я считаю, что есть некоторые исследовательские проекты, которые (пытаются) сделать это. Но есть несколько веских причин не внедрять аппаратные средства:

  • аппаратное обеспечение исправлено, вы не можете легко исправить ошибки или реализовать новые/улучшенные алгоритмы
  • оборудование дорогое, для сложных операций, таких как сбор мусора, вам понадобится много аппаратного обеспечения, тогда как программная реализация с использованием существующих аппаратных ресурсов для нее намного дешевле.
  • аппаратные ресурсы занимают пространство и потребляют (статическую) мощность, даже если они не используются, в то время как неиспользуемый программный код делает относительно мало вреда

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

Для управления памятью, которые, как правило, являются сложными алгоритмами, но которые не работают так часто, выигрыш будет довольно небольшим (вы можете ускорить сбор мусора на 10x, но если он займет всего 1% от исполнения время для начала, зачем беспокоиться?) Стоимость, с другой стороны, будет намного большим чипом, где большая часть площади будет потрачена впустую, потому что она неактивна большую часть времени...

Ответ 3

Да, было несколько процессоров с управлением памятью и встроенным GC. Одна из них была собственной версией процессора N320xx, которая приводила в действие рабочая станция Ceres. Он использовал 34-битную память (т.е. 32-битные данные + 2 бит дополнительно).

Существует несколько причин, по которым сегодня не хватает аппаратной поддержки для GC:

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

[EDIT] Следующее поколение процессоров общего назначения, вероятно, будет иметь программируемую область (FPGA), где вы можете определить новые "ассемблерные op-коды". Это позволит программному обеспечению изменять ЦП до его конкретных потребностей. Задача, решаемая здесь, заключается в том, чтобы ускорить загрузку FPGA, чтобы ее содержимое можно было переключать с помощью своих процессов.

Это позволит создать аппаратную поддержку для

Ответ 4

В современных процессорах, таких как pentium, есть функции, которые поддерживают управление виртуальной памятью. Но реализация этого должна выполняться ОС, потому что существует так много возможных алгоритмов управления памятью.

Какой алгоритм подходит лучше всего, зависит от того, как используется память. какие виды приложений запускаются на компьютере? Как долго они бегут? Сколько приложений запущено? И как организованы задачи.

Из-за этого вы не можете отключить эту аппаратуру. Операционная система лучше знает, как эффективно управлять памятью, поскольку она создана для специального типа компьютера (сервер и настольная ОС), а также имеет представление более высокого уровня для процессов, выполняемых на вашем компьютере.

Ответ 5

Во встроенном пространстве Ajile Systems Inc. http://www.ajile.com/ создает серию JVM для чип-продуктов, которые имеют дополнительный GC. Они также предлагают несколько функций JVM, где java-процессы выполняются независимо на собственной виртуальной машине в детерминированном графике с временным разделением с полной защитой памяти.

Кажется, они предлагают три алгоритма GC и режим off. Таким образом, не только JVM на чипе больше похожа на ОС, сорта, на чипе.

Ответ 6

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