Предоставление физического адреса непосредственно в TLB в x86-64

#operating-system #x86-64 #tlb

#операционная система #x86-64 #tlb

Вопрос:

Возможно ли предоставить физический адрес для данного виртуального адреса напрямую в TLB на архитектурах x86-64 в длительном режиме?

Например, допустим, я помещаю нули в PML4E, поэтому будет вызвано исключение ошибки страницы, потому что будет найден недопустимый адрес, во время исключения может ли процессор сообщить TLB с помощью какой-либо инструкции, что этот виртуальный адрес находится в X кадре физической страницы?

Я хочу сделать это, потому что по коду я могу легко определить, где будет находиться физический адрес, и таким образом избежать дорогостоящего обхода страниц.

Комментарии:

1. Как вы узнаете, в каком фрейме будет адрес? Разве это не случайно каждый раз?

2. Это будет дорого, только если вы будете делать это программно, а не аппаратно (TLB), тратя много циклов на сохранение и восстановление регистров процессора и управление некоторыми другими структурами данных ядра на пути к обработчику исключений и обратно.

Ответ №1:

Нет, вам нужно поместить страницу в TLB. Чтобы быть точным, вам необходимо создать / обновить соответствующий PTE (с PDE и PDPE, если необходимо). Все, что связано с управлением MMU, каким-то образом основано на таблицах страниц и TLB. Даже режим защиты пользователя / супервизора выполняется как специальный флаг отображаемой страницы.

Почему вы думаете, что «просмотр страницы» — дорогостоящая операция? Это совсем не дорого. Чтобы определить PTE, который необходимо обновить, вам нужно разыменовать только 4 указателя: PML4E -> PDPE -> PDE -> PTE. Эти записи являются просто индексами в связанных таблицах. Чтобы получить PML4E, вам нужно использовать 39-47 бит адреса, полученного во время обработки ошибок страницы, и использовать значение в качестве индекса в таблице PML4. Чтобы получить PDPE, вам нужно 30-39 бит адреса в качестве индекса в таблице PDE и так далее. Это не то, что может замедлить работу вашей системы. Я думаю, что выделение физической страницы занимает больше времени, чем это.

Комментарии:

1. Если вы храните адреса физических страниц в стеке, поиск бесплатной страницы обходится максимально дешево. Если вы сделаете одну точку PDE обратно в PD (в оригинальной схеме 80386 2-уровневой PD / PT или аналогично в более глубоко вложенных схемах, доступных на Pentium), отображение и разархивирование страницы также становится очень быстрым.

2. @Dan Kruchinin Если бы у меня был способ сообщить TLB физический адрес, я бы скопировал его напрямую из регистра DS. Это займет несколько циклов. Но разыменование 4 указателей займет около 200 нс на доступ к DRAM это приведет к удалению ваших данных из кэша. Теперь, представьте, приложение считывает страницы 4K случайным образом ….. MMU — очень неэффективный способ адресации памяти, и, как я вижу, от него невозможно избавиться….

3. @Nulik: Я не уверен, что понимаю, что вы пытаетесь сделать. В процессорах есть кэши TLB, поэтому они не постоянно разыменовывают 4 указателя. Более того, после кэширования PTE вы вообще не получаете исключения (что дорого!).). Кроме того, MMU обращается к памяти только для своей конфигурации, а не к ALU / регистрам процессора (на самом деле это далеко от них).).