Подтвердить что ты не робот

Могут ли многоядерные процессоры использовать MMU и таблицы страниц?

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

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

4b9b3361

Ответ 1

Взгляните на эту схему. Это высокий уровень зрения всего, что есть в одном ядре на процессоре Corei7. Фотография взята из Computer Systems: перспектива программиста, Брайант и Халларон. Вы можете получить доступ к диаграммам в здесь, раздел 9.21.

Computer Systems: A Programmer's Perspective, 2/E (CS:APP2e)Randal E. Bryant and David R. O'Hallaron, Carnegie Mellon University

Ответ 2

Извините за предыдущий ответ. Удалил ответ.

TI PandaBoard работает на процессоре OMAP4430 Dual Cortex A9. Он имеет один MMU на ядро. Он имеет 2 MMU для 2 ядер.

http://forums.arm.com/index.php?/topic/15240-omap4430-panda-board-armcortex-a9-mp-core-mmu/

В приведенном выше потоке содержится информация.

В дополнение, еще одна информация о ARM v7

Каждое ядро ​​имеет следующие функции:

  • Процессор ARM v7 с частотой 600 МГц
  • 32 КБ инструкции L1 CACHE с проверкой четности -
  • 32 КБ данных L1 CACHE с проверкой четности
  • Встроенный FPU для точных и точных операций с плавающей запятой для одиночных и двойных данных
  • Блок управления памятью (MMU)
  • Поддержка набора инструкций ARM, Thumb2 и Thumb2-EE
  • TrustZone © расширение безопасности
  • Программа Trace Macrocell и компонент CoreSight © для отладки программного обеспечения
  • Интерфейс JTAG
  • AMBA © 3 64-разрядный интерфейс AXI
  • 32-разрядный таймер с 8-битным предделителем
  • Внутренний сторожевой таймер (работает также как таймер)

Двухъядерная конфигурация завершается общим набором компонентов:

  • Блок управления Snoop (SCU) для управления межпроцессорной связью, кэшем-2-кешем и передача системной памяти, когерентность кэша
  • Единое устройство управления прерываниями (GIC), настроенное для поддержки 128 независимых прерываний источники с программным обеспечением настраиваемого приоритета и маршрутизация между двумя ядрами
  • 64-разрядный глобальный таймер с 8-разрядным предделителем
  • Порт когерентности асинхронного ускорителя (ACP)
  • Поддержка четности для обнаружения сбоев внутренней памяти во время работы
  • 512 КБ унифицированного 8-полосного набора ассоциативного кэша L2 с поддержкой проверки на четность и ECC
  • Контроллер L2 Cache на основе PL310 IP, выпущенного ARM
  • Двойной 64-разрядный интерфейс AMBA 3 AXI с возможностью фильтрации на втором, чтобы использовать один порт для доступа к памяти DDR

Хотя все это для ARM, оно предоставит общую идею.

Ответ 3

TL; DR - Отдельный MMU на процессор, но MMU обычно имеет несколько УРОВНЕЙ таблиц страниц, и они могут быть разделены.

Например, в ARM верхний уровень ( PGD или имя глобального каталога страницы, используемое в Linux) охватывает 1 МБ адресного пространства. В простых системах вы можете отображать в разделах 1MB. Однако это обычно указывает на таблицу второго уровня ( PTE или запись в таблице страниц).

Одним из способов эффективного использования многопроцессорного процессора является наличие отдельного верхнего уровня PGD для каждого процессора. Код ОС и данные будут согласованы между ядрами. Каждое ядро ​​будет иметь собственный TLB и L1-кеш; Кассы L2/L3 могут быть разделены или могут отсутствовать. Обслуживание кэшей данных/кода зависит от того, являются ли они VIVT или VIPT, но это побочная проблема и не должна влиять на использование MMU и многоядерных процессоров.

Часть процесса или пользователя таблиц страниц второго уровня остается одинаковой для каждого процесса; в противном случае у них будет другая память, или вам потребуется синхронизировать избыточные таблицы. У отдельных ядер могут быть разные наборы таблиц страниц второго уровня (разные указатели таблицы верхнего уровня), когда они запускают разные процессы. Если он многопоточен и работает на двух CPU, тогда таблица верхнего уровня может содержать те же записи таблицы страниц второго уровня для процесса. Фактически, вся таблица страниц верхнего уровня может быть идентичной (но различной памятью), когда два процессора запускают один и тот же процесс. Если локальные данные потока реализованы с MMU, одна запись может отличаться. Однако локальные данные потоков обычно реализуются другими способами из-за проблемы с TLB и кешем (flushing/coherency).

Может помочь изображение ниже. Записи CPU, PGD и PTE на диаграмме являются вроде указателей.

Multi-cpu MMU

Пунктирная линия - это единственная разница между запуском различных процессов и тех же процессов (многопоточность) с MMU; это чередуется с сплошной линией, идущей от CPU2 PGD, к таблице B процесса B или на странице 2-го уровня. Ядро всегда является многопоточным программным приложением.

Когда виртуальный адрес переводится, разные части бит являются индексами в каждой таблице. Если виртуальный адрес отсутствует в TLB, тогда ЦП должен выполнить столовую прогулку (и получить другую память таблицы). Таким образом, одно чтение памяти процесса приведет к трем обращениям к памяти (если TLB не присутствовал).

Разрешение на доступ к коду/данным ядра явно отличается. На самом деле, вероятно, будут другие проблемы, такие как память устройства и т.д. Однако, я думаю, что диаграмма должна ясно показать, как MMU удается сохранить многопоточную память одинаково.

Вполне возможно, что запись в таблице 2-го уровня может быть разной для каждого потока. Тем не менее, это будет стоить при переключении потоков на одном CPU, поэтому обычно отображаются данные для всех "локаторов потоков", и используется другой способ выбора данных. Обычно локальные данные потока обнаруживаются через указатель или индексный регистр (специальный для каждого CPU), который отображается/указывает на данные внутри "процесса" или пользовательской памяти. "локальные данные потока" не изолированы от других потоков, поэтому, если вы перезаписываете память в одном потоке, вы можете убить другие данные потоков.

Ответ 4

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

Обратите внимание, что в наши дни TLB является сложным зверем с несколькими уровнями кеширования. Как и обычные тайники RAM (L1-L3) центрального процессора, вы не обязательно будете ожидать, что в любой момент времени он будет содержать информацию исключительно о текущем запущенном процессе, но для этого нужно перемещать по частям по требованию; см. раздел Контекстный коммутатор на странице wikipedia.

В SMP все TLB всех процессоров должны постоянно следить за таблицей системных страниц. См. Например этот раздел книги ядра Linux для одного из способов его обработки.

Ответ 5

AFAIK существует один MMU на физический процессор, по крайней мере в SMP-системах, поэтому все ядра имеют один MMU.

В системах NUMA каждое ядро ​​имеет отдельный MMU, потому что каждое ядро ​​имеет свою собственную частную память.

Ответ 6

По вопросу о MMU на процессор может быть несколько. Предполагается, что каждый MMU добавит дополнительную пропускную способность памяти. Если память DDR3-12800 позволяет 1600 мегапереходов в секунду на процессоре с одним MMU, то один с четырьмя теоретически разрешит 6400. Обеспечение пропускной способности доступным ядрам, вероятно, довольно подвиг. Объявленная полоса пропускания будет немного уменьшена в процессе.

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

Edit

Возможно, я запутываю MMU с каналами?