реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> what is MMU?, теория построения
Doka
сообщение Sep 24 2008, 06:48
Сообщение #1


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



Блок управления памятью (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 ?


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Sep 24 2008, 06:56
Сообщение #2


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(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


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 24 2008, 07:12
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Можно почитать TRM на любое ARM-ядро с MMU. Translation lookaside buffer просто позволяет процессору не обращаться при каждой операции с памятью к Translation Table, что сделало бы нормальную работу невозможной.

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

Это не MMU.
Go to the top of the page
 
+Quote Post
Doka
сообщение Sep 25 2008, 06:47
Сообщение #4


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



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

aaarrr
спасибо. как раз в TRM нашлись и картинки и недостающие подробности.


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
yes
сообщение Oct 7 2008, 13:03
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



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

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

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

основная хитрость (то что сжирает вентили и hdl код) это кеширование дескрипторов - ну то есть, если в лоб, то при трансляции адреса проц лезет на первую страницу, там берет адрес второй, лезет на вторую страницу и т.д. то есть при тормозных памятях получается беда. поэтому эти дескрипторы кэшируют - у Гейслера все это достаточно сложно сделано, я в деталях не ковырял. общий смысл - САМ память и т.п.
Go to the top of the page
 
+Quote Post
AVR
сообщение Feb 19 2009, 21:04
Сообщение #6


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Очень интересная тема. Только сейчас я кажется понял как работает MMU. Но возникает вопрос: каков объем этого буфера TLB для разных моделей процессоров? Где это можно прочитать?


--------------------
Go to the top of the page
 
+Quote Post
yes
сообщение Feb 20 2009, 10:27
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



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

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

"теорию" начать можно
http://en.wikipedia.org/wiki/Memory_management_unit
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Feb 20 2009, 23:02
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



Предположим, что у Вас обычный 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 выгружается на жесткий диск - выбор такой страницы производится по некоторому
принципу (например, выгружается страница, принадлежащая неактивному процессу и т.п.).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 09:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.02024 секунд с 7
ELECTRONIX ©2004-2016