Техническое руководство по эксплуатации для 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) map (ASID, виртуальный адрес). ASID - это идентификатор приложения, то есть идентификатор процесса. MMU использует регистр, чтобы узнать, какой ASID использовать (я думаю, что это регистр идентификатора контекста в этом случае). Поскольку может быть больше процессов, чем ASID, иногда вам может понадобиться переработать ASID (назначить его другому процессу) и выполнить флеш TLB (это то, что для Invalidate TLB для ASID-операции).
Почему существуют два TLB? Что я могу использовать MicroTLB, если он может иметь только 10 записей? Разумеется, мне нужно больше 10.
Это по той же причине, что и инструкции и данные, у вас есть небольшие отдельные кэши уровня 1. Поскольку они являются кэшами, вы не нуждаетесь в , но нуждаетесь в более 10 (хотя иметь больше может повысить производительность).
В нем говорится, что одна из частей основного TLB является «полностью ассоциативным массивом из восьми элементов, которые можно заблокировать». Что это? У меня есть только 8 записей для основного TLB?
Некоторые страницы памяти (например, некоторые части ядра) доступны очень часто. Имеет смысл блокировать их, поэтому они не могут быть сброшены с TLB. Кроме того, в системах реального времени промах TLB или промаха в кеше может привести к некоторой нежелательной непредсказуемости. Таким образом, есть возможность заблокировать несколько записей TLB. Основной TLB имеет больше записей, но только те, которые 8 блокируются.
Вы пишете свою собственную ОС? Если вы используете существующую ОС, они позаботятся об этих деталях для вас. Возможно, вам потребуется настроить 1-2 TLB вручную во время загрузки, но после этого ядро ОС позаботится об этом. – gravitron
@gravitron Я переношу существующее ядро (Darwin) на платформу ARM. Ядро опирается на набор функций HAL, которые абстрагируют все взаимодействия с платформой (управление физической памятью, переключатели контекста, кеши, исключения и т. Д.). –
Простой ответ: ** TLB ** относится к ** MMU ** page table как ** cache ** - ** память **; То есть. ** TLB ** является ** MMU ** кешем. micro-TLB -> L1 и т. д. Интересно, что поведение кэша VIVT/PIPT и т. д., вероятно, повлияет на работу TLB, как описано * ninjalj *. –