Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: what is MMU?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Doka
Блок управления памятью (MMU — memory management unit) - В настоящее время, чаще всего, упоминается в связи с организацией т. н. виртуальной памяти и, следовательно, критически важен для многих современных многозадачных ОС


по запросу "MMU theory" гугль ничего внятного не сказал, в википедии только общие слова, а интересует именно сама теория:
что такое MMU физически?

т.е. общий принцип понятен - как в том же 80286 доступ к страницам памяти по 64Кб, а переключение страниц записью в соответствующий регистр процессора, но есть еще Translation lookaside buffer (TLB) назначение и обязательность которого в составе MMU не совсем ясна..

можно конечно взять исходники того же OpenSparc/Leon и расковырять то, как там реализован этот пресловутый MMU, но я подозреваю, что это не самый короткий путь к знанию.

--------------------------------------------------

вот у Cortex-M3 к примеру имеется пресловутый MPU (Memory Protection Unit) - это тоже самое что MMU или покрывает не весь функционал, необходимый операционным системам, использующим MMU ?
Postoroniy_V
Цитата(Doka @ Sep 24 2008, 15:48) *
Блок управления памятью (MMU — memory management unit) - В настоящее время, чаще всего, упоминается в связи с организацией т. н. виртуальной памяти и, следовательно, критически важен для многих современных многозадачных ОС
по запросу "MMU theory" гугль ничего внятного не сказал, в википедии только общие слова, а интересует именно сама теория:
что такое MMU физически?

т.е. общий принцип понятен - как в том же 80286 доступ к страницам памяти по 64Кб, а переключение страниц записью в соответствующий регистр процессора, но есть еще Translation lookaside buffer (TLB) назначение и обязательность которого в составе MMU не совсем ясна..

можно конечно взять исходники того же OpenSparc/Leon и расковырять то, как там реализован этот пресловутый MMU, но я подозреваю, что это не самый короткий путь к знанию.

--------------------------------------------------

вот у Cortex-M3 к примеру имеется пресловутый MPU (Memory Protection Unit) - это тоже самое что MMU или покрывает не весь функционал, необходимый операционным системам, использующим MMU ?

я так и не понял тут смотрели или нет?
http://en.wikipedia.org/wiki/Memory_management_unit

A memory management unit (MMU), sometimes called paged memory management unit (PMMU), is a computer hardware component responsible for handling accesses to memory requested by the central processing unit (CPU)
...
How it works

Modern MMUs typically divide the virtual address space (the range of addresses used by the processor) into pages, each having a size which is a power of 2, usually a few kilobytes. The bottom n bits of the address (the offset within a page) are left unchanged. The upper address bits are the (virtual) page number. The MMU normally translates virtual page numbers to physical page numbers via an associative cache called a Translation Lookaside Buffer (TLB). When the TLB lacks a translation, a slower mechanism involving hardware-specific data structures or software assistance is used. The data found in such data structures are typically called page table entries (PTEs), and the data structure itself is typically called a page table. The physical page number is combined with the page offset to give the complete physical address.




A Translation lookaside buffer (TLB) is a CPU cache that is used by memory management hardware to improve the speed of virtual address translation.
http://en.wikipedia.org/wiki/Translation_Lookaside_Buffer
aaarrr
Можно почитать TRM на любое ARM-ядро с MMU. Translation lookaside buffer просто позволяет процессору не обращаться при каждой операции с памятью к Translation Table, что сделало бы нормальную работу невозможной.

Цитата(Doka @ Sep 24 2008, 10:48) *
вот у Cortex-M3 к примеру имеется пресловутый MPU (Memory Protection Unit) - это тоже самое что MMU или покрывает не весь функционал, необходимый операционным системам, использующим MMU ?

Это не MMU.
Doka
Postoroniy_V
смотрел.. но без картинок - тяжко(

aaarrr
спасибо. как раз в TRM нашлись и картинки и недостающие подробности.
yes
ММУ, как правило, решает две задачи : защита памяти, то есть генерация эксепшенов при "плохих" обращениях и ремапирование физической памяти в виртуальную

в BF, например, реализована только первая часть - поэтому там не Linux, a uClinux - зачем аналог так сделал - для меня загадка. наверно, не читают нашу конфу smile.gif

вместо расковыриванмя LEON рекомендую почитать с сайта Гейслера sparcv8.pdf - там описано как, может в чем-то проще будет, чем АРМ-овские. хотя один фиг - трехуровневая трансляция и т.п.

основная хитрость (то что сжирает вентили и hdl код) это кеширование дескрипторов - ну то есть, если в лоб, то при трансляции адреса проц лезет на первую страницу, там берет адрес второй, лезет на вторую страницу и т.д. то есть при тормозных памятях получается беда. поэтому эти дескрипторы кэшируют - у Гейслера все это достаточно сложно сделано, я в деталях не ковырял. общий смысл - САМ память и т.п.
AVR
Очень интересная тема. Только сейчас я кажется понял как работает MMU. Но возникает вопрос: каков объем этого буфера TLB для разных моделей процессоров? Где это можно прочитать?
yes
Цитата(AVR @ Feb 20 2009, 00:04) *
Очень интересная тема. Только сейчас я кажется понял как работает MMU. Но возникает вопрос: каков объем этого буфера TLB для разных моделей процессоров? Где это можно прочитать?

для классических или открытых архитектур - можно смотреть у "производителя" - например, ARM.COM или тот SUN.COM
для всяких интелей/амд - можно доку на проц смотреть (хотя не уверен, что для последних моделей эта инфа публикуется)

"теорию" начать можно
http://en.wikipedia.org/wiki/Memory_management_unit
yuri_t
Предположим, что у Вас обычный CPU без MMU и Вам надо прочитать
содержимое внешней ячейки RAM. Для этого Вы (или компилятор) будете,
например, использовать команду LDR. При исполнении этой команды CPU (без MMU/MPU)
выставит на внешнюю шину адреса адрес из команды LDR, RAM будет выбрана и
дата из соотв. ячейки RAM поступит в CPU - здесь все делается, что называется, в лоб.

Если же у Вас CPU с MMU, то при исполнении той же команды LDR, адрес из нее поступает
не на внешнюю шину адреса, а в некоторый "черный ящик" - MMU.

И вот тут выясняется несколько интересных вещей.

Оказывается, что адреса на шине адреса внешней RAM никак не связаны с адресом из
команды LDR. Более того, адреса во внешней RAM идут, конечно, подряд, но используются
подряд только в пределах небольших блоков памяти (скажем, 4Kb размером) - страниц.

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

Таким образом, здесь физический адрес RAM никак не связан с реальным адресом -
например, страница, соответствующая адресам из команды LDR 0x40000000..0x40000FFF,
находится по физическим адресам RAM 0x100000..0x100FFF или 0x200000..0x200FFF и т.д.,
причем этот физический адрес непостоянен - см.ниже)

Теперь для чтения внешней ячейки RAM, MMU ищет в RAM страницу, в которой находится
требуемый адрес. Если такая страница сейчас в RAM - O.K., если же нет - то генерится exception,
по которому нужная страница загружается в RAM (например, с жесткого диска, где она
временно хранится). В этом случае, если в RAM нет неиспользуемого места, то одна из страниц
из RAM выгружается на жесткий диск - выбор такой страницы производится по некоторому
принципу (например, выгружается страница, принадлежащая неактивному процессу и т.п.).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.