ARM11 Перевод Lookaside Buffer (TLB) используется? - PullRequest
8 голосов
/ 24 января 2012

Существует ли достойное руководство, объясняющее, как использовать таблицы TLB ( Translation Lookaside Buffers ) на ядре ARM1176JZF-S ?

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

Кроме того, я абсолютно не знаю, как их использовать.

  • Какую структуру имеет запись TLB? Как мне создать новые записи?
  • Как мне обработать ВМ в переключателях контекста для потоков пользовательского пространства? Как мне обеспечить, чтобы эти потоки могли обращаться только к определенным страницам, назначенным их родительским процессам ( принудительная защита памяти )? Сохранять ли состояние TLB для каждого контекста?
  • Почему есть два TLB? Для чего я могу использовать MicroTLB, если он может содержать только 10 записей? Конечно, мне нужно больше, чем 10.
  • В нем говорится, что одна из частей основного TLB является «полностью ассоциативным массивом из восьми элементов, который блокируется». Что это такое? Могу ли я получить только 8 записей для основного TLB?

Заранее спасибо. Я буду очень рад, если кто-нибудь даст объяснение, что такое TLB. В настоящее время я работаю над картографом памяти для своего ядра, и я в значительной степени зашел в тупик.

1 Ответ

16 голосов
/ 25 января 2012

Техническим справочным руководством для ARM1176JZF-S является DDI 0301. Этот документ содержит все конкретные детали для этого конкретного ядра ARM.

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

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

Чтоструктура имеет запись TLB?Как мне создать новые записи?

Сделано на оборудовании.В случае пропуска TLB MMU обходит таблицу страниц и заполняет оттуда TLB.

Как мне обрабатывать VM в переключениях контекста для потоков пользовательского пространства?

На некоторых платформах есть TLB, которые простосопоставить виртуальные адреса с физическими адресами (например, x86).На этих платформах вы должны выполнять полную очистку TLB при каждом переключении контекста.Другие платформы (MIPS, это конкретное ядро ​​ARM) сопоставляют пары (ASID, виртуальный адрес) физическим адресам.ASID - это специфичный для приложения идентификатор, т. Е. Идентификатор процесса.MMU использует регистр, чтобы знать, какой ASID использовать (я думаю, что это регистр Context ID в данном случае).Поскольку процессов может быть больше, чем ASID, иногда вам может потребоваться перезапустить ASID (назначить его другому процессу) и выполнить сброс TLB (для этого предназначена операция Invalidate TLB by ASID).

Почемуесть два TLB?Для чего я могу использовать MicroTLB, если он может содержать только 10 записей?Конечно, мне нужно больше 10.

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

Это говорит о том, что одна из частей основного TLB - это "полностьюассоциативный массив из восьми элементов, который блокируется ».Что это такое?Могу ли я получить только 8 записей для Main TLB?

Некоторые страницы памяти (например, некоторые части ядра) доступны очень часто.Имеет смысл заблокировать их, чтобы они не сбрасывались с TLB.Кроме того, в системах реального времени промах TLB или кеш может привести к нежелательной непредсказуемости.Таким образом, есть возможность заблокировать несколько записей TLB.Основной TLB имеет больше записей, но блокируются только эти 8.

...