Почему у ARM большие страницы размером 64 КБ?

В руководстве пользователя ARM720T упоминаются маленькие и большие страницы. Поскольку ARM 720T требует, чтобы запись таблицы страниц размером 64 КБ дублировалась 16 раз в таблице страниц, почему бы не разместить 16 записей малых страниц (4 КБ) для имитации записи страницы размером 64 КБ вместо использования большой страницы в первую очередь?


person Revanth Kamaraj    schedule 29.05.2016    source источник
comment
Stackoverflow имеет много тегов для этой темы. Например, tlb, cpu-cache и paging также могут быть интересны читателям этого вопроса.   -  person artless noise    schedule 29.05.2016


Ответы (1)


От ARM720 TRM,

Большие страницы состоят из блоков памяти размером 64 КБ. Поддерживаются большие страницы, позволяющие отображать большую область памяти при использовании только одной записи в TLB). Дополнительные механизмы управления доступом расширены до подстраниц размером 16 КБ.

Основное преимущество заключается в том, что запись размером 64 КБ будет потреблять только один TLB (кэш записи страницы MMU). TLB составляет 64 записи, поэтому 64*4k = 256kB против 64*64k = 4MB; значительное увеличение объема памяти, для которого не требуется поиск в таблице страниц для адресации.

Есть много минусов. Например, для портативной ОС (и ее API) могут потребоваться страницы меньшего размера. Если все записи имеют размер 64 КБ, это может привести к фрагментации. Записи раздела еще лучше, поскольку каждый из них представляет фрагмент размером 1 МБ с 64 МБ, вписывающимся в TLB. Как правило, этот раздел лучше работает для виртуального==физического сопоставления.

Если вы знаете, что ваша система имеет только 4 МБ доступной памяти, то 64-килобайтные записи страниц могут привести к более надежной работе. Даже при больших объемах памяти код прерывания и данные могут использовать записи размером 64 КБ с блокировкой TLB примечание, чтобы избежать обхода таблицы страниц. Это может привести к лучшей задержке IRQ. TLB — это ограниченный ресурс, поэтому использование 4k записей для обработчика прерываний может привести к трате TLB. Использование записей раздела может привести к нерациональному использованию памяти, так как код большинства прерываний имеет размер ‹1 МБ.

Даже без блокировки более вероятно, что часто используемая запись размером 64 КБ останется в TLB. ОС с памятью для каждой задачи/процесса может потребовать изменения таблиц MMU, что может привести к очистке и аннулированию TLB и кеша. Чтобы упростить переключение контекста, все может быть аннулировано и сброшено. Таким образом, проход по столу при прерывании может быть более распространенным, чем вы подозреваете. Это мотивация для использования функциональности MMU «PID» и для очистки / аннулирования только небольших областей памяти и разрешения кода / данных ядра оставаться в системных кешах. Дополнительный код, такой как планировщик, также выиграет от сопоставления с записью 64 КБ.

Примечание. ARM720T может иметь или не иметь блокировку, но некоторые ЦП ARM имеют, и запись MMU довольно похожа между семействами ЦП. Этот ответ применим ко многим различным семействам процессоров ARM.

person artless noise    schedule 29.05.2016