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

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

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

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

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

  1. если существует такая вещь вообще (по крайней мере, на этапе исследования), или
  2. будет или быть он не приносить пользу по управлению обычной памятью, или альтернативно
  3. почему не выполнимо создать такую вещь в аппаратных средствах?
11
задан Alex B 21 June 2010 в 12:58
поделиться

6 ответов

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

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

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

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

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

5
ответ дан 3 December 2019 в 04:12
поделиться

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

1
ответ дан 3 December 2019 в 04:12
поделиться

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

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

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

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

10
ответ дан 3 December 2019 в 04:12
поделиться

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

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

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

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

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

4
ответ дан 3 December 2019 в 04:12
поделиться

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

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

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

3
ответ дан 3 December 2019 в 04:12
поделиться

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

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

2
ответ дан 3 December 2019 в 04:12
поделиться
Другие вопросы по тегам:

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