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

 
 
 
Reply to this topicStart new topic
> Как работает TLB с разными размерами страниц?
ataradov
сообщение Feb 26 2013, 06:24
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



Не нашел более подходящего под-форума, тут есть шанс, что кто-то знает sm.gif

Рассмотрм работу MMU в 32-х разрядной системе. Допустим размер страницы 1кБ (10 бит). Пусть TLB содержит 64 записи (6 бит).

Тогда таблица TLB будет иметь 64 записи следующего вида: | Tag (16) | PhysAddr (22) |

Для преобразования VA -> PA разбиваем VA: | Tag (16) | Index (6) | Offset (10) |. По индексу находим запись в TLB и сравниваем тэги, если совпало, то формируем PA как | PhysAddr (22) | Offset (10) |.

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

Похоже на бред, так как от таких страниц ничего не выигрывается. Что я упускаю? Как транслировать более грубые страницы без значительного усложнения логики TLB?

Go to the top of the page
 
+Quote Post
jks
сообщение Feb 26 2013, 17:31
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 3-04-11
Из: .
Пользователь №: 64 084



Цитата(Taradov Alexander @ Feb 26 2013, 10:24) *
Что я упускаю? Как транслировать более грубые страницы без значительного усложнения логики TLB?


У Интела в х86 преобразование в плоском режиме (Flat addressing) выполняется в два этапа.
Сначала привлекается селектор сегмента, у которого есть теневой регистр с битом гранулярности.
Этот бит определяет размер страниц при трансляции. А потом через каталог таблицы страниц.

А в вашем случае расширить поле тега и загружать бит гранулярности из дескрипторов каталога страниц.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Feb 26 2013, 17:48
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



Но это не отменит того, что первый бит поля Index (6) всегда будет содержать 0 для адресов из первой половины большой страницы и 1 для второй половины.

По-хорошему VA нужно разбивать так | Tag (15) | Index (6) | Offset (11) |, но заранее неизвестно в большой или маленькой странице адрес.

Как происходит заполнение TLB из памяти понятно, но не ясно как поможет дополнительный бит в теге если запись из TLB уже выбрали по "маленькому" индексу.
Go to the top of the page
 
+Quote Post
jks
сообщение Feb 26 2013, 19:03
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 3-04-11
Из: .
Пользователь №: 64 084



Цитата(Taradov Alexander @ Feb 26 2013, 21:48) *
Но это не отменит того, что первый бит поля Index (6) всегда будет содержать 0 для адресов из первой половины большой страницы и 1 для второй половины.

По-хорошему VA нужно разбивать так | Tag (15) | Index (6) | Offset (11) |, но заранее неизвестно в большой или маленькой странице адрес.

Как происходит заполнение TLB из памяти понятно, но не ясно как поможет дополнительный бит в теге если запись из TLB уже выбрали по "маленькому" индексу.


Ну все правильно.
Но кроме Tag [14:0] есть еще скрытый бит поля Tag [15], который будет определять какого размера будут поля Index и Offset.
А загружаться этот бит будет из дескриптора каталога страниц первого уровня по индексу Tag [14:0] .
Если в дескрипторе по данному индексу будет поле указывающее размер страниц 0 - обычная, 1 - большая, то при загрузке кэша TLB загрузится и скрытый
бит Tag [15], который будет управлять размером индексов страничного преобразования.
Если бит 0 то Index (6) | Offset (11) определяют 64 страницы по 2048,
Если бит 1 то Index (5) | Offset (12) определяют 32 страницы по 4096.

Go to the top of the page
 
+Quote Post
ataradov
сообщение Feb 26 2013, 21:21
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



Index всегда 6 бит - это определяется размером TLB. Число страниц определяется как 2^(32-10) или 2^(32-11). При увеличении размера страницы уменьшается размер тэга.

Если бы выбор из TLB происходил пробеганием по всем записям, то вопросов нет, но выбор происходит прямым обращением по индексу, после чего уже не важно какой размер страницы - мы его определили самим положением индексных бит в адресе.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Feb 27 2013, 06:09
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



И так, хорошего универсального решения нет, есть набор костылей различной кривоты: http://semipublic.comp-arch.net/wiki/TLB_S...iple_Page_Sizes
Go to the top of the page
 
+Quote Post
jks
сообщение Feb 28 2013, 09:54
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 3-04-11
Из: .
Пользователь №: 64 084



http://www.google.com/patents/US5717885
http://www.google.com/patents/US5526504
Прикрепленный файл  US5526504.pdf ( 271.26 килобайт ) Кол-во скачиваний: 152
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 18:53
Рейтинг@Mail.ru


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