Может ли обработчик ошибок страницы генерировать больше ошибок страницы? - PullRequest
2 голосов
/ 03 мая 2019

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

IIRC, ошибка страницы будет сгенерирована, когда TLB попытается отобразить мой виртуальный адрес (в пространстве пользователя) на физический адрес, и это не удастся.

Затем генерируется исключение, которое будет синхронно обрабатываться ОС.Но теперь возникает вопрос: скорее всего, адреса этого кода обработчика исключений плюс связанные с ним данные также не будут в TLB!

Получается ли это рекурсивно или диапазон адресов памяти в ядре подчиняется другим правилам (например, автоматическое сопоставление виртуальной / физической памяти, чтобы избежать необходимости использовать TLB?)

Спасибо!

Ответы [ 2 ]

5 голосов
/ 03 мая 2019

Нет, Linux не выгружает память ядра. (По этой и другим подобным причинам, например, убедитесь, что обработчик ошибок страницы не запускается до какой-либо случайной инструкции, обращающейся к памяти).

Операционным системам, выполняющим некоторую часть памяти ядра, определенно потребуется хранить обработчик ошибок страниц, таблицы страниц и код дискового ввода-вывода в памяти ...


этот код обработчика исключений плюс связанные с ним данные также не будут присутствовать в TLB!

Вы объединяете обход страниц (при промахе TLB) с ошибками страниц (вход для виртуального входа).страница недействительна или имеет недостаточные разрешения, которые могут быть получены после обхода страницы при необходимости.

На x86 и большинстве (?) других ISA обход страниц осуществляется аппаратным обеспечением.См. Что происходит после пропуска L2 TLB? .

ОС предоставляет ЦП физический адрес таблицы страниц верхнего уровня (например, mov cr3, rax).на x86), а процессор обрабатывает все остальное прозрачно.(Единственное программное управление TLB - это аннулирование записи, возможно, кэшированной после изменения записи таблицы страниц в памяти. Например, x86 invlpg)

Аппаратное управление таблицей страниц позволяет ЦП умозрительно выполнять обход TLB, когда цикл над массивом приближается к границе страницы, вместо ожидания, пока фактическая загрузка не коснется следующей страницы.И для того, чтобы задержка при просмотре страниц была частично скрыта из-за неупорядоченного выполнения и множества хороших вещей.Skylake даже имеет 2 устройства для просмотра страниц, поэтому он может параллельно работать с двумя пропусками TLB (один или оба могут быть спекулятивными или требовать).


На ISA с программным обходом страницобработчик TLB-пропадания отделен от обработчика ошибок страницы.

Например, в MIPS существует специальный диапазон адресов, которые отображаются по-другому, чем обычные виртуальные адреса ядра:

Если адрес начинается с 0b100 [старшие 3 бита], переводится в нижние 512 Мбайт физической памяти и не проходит через TLB.(кэшируется и не отображается).Называется kseg0.Используется для инструкций и данных ядра.

Обработка MIPS TLB - https://people.csail.mit.edu/rinard/teaching/osnotes/h11.html

(адреса MIPS с установленным старшим битом могут использоваться только кодом ядра, ошибками доступа к пользовательскому пространствуто есть ядро ​​ high-half запекается для MIPS.)

Это похоже на отображение огромной страницы объемом 512 МБ для памяти с низкой физической памятью, встроенной в аппаратное обеспечение.Очевидно, что ядро ​​хотело бы сохранить свою структуру данных для поиска страниц в этом диапазоне, но оно могло бы использовать любую структуру данных, которую оно хотело, например, основанную на начале / длине.

0 голосов
/ 03 мая 2019

Во-первых, вы должны выбросить из головы TLB, думая о программном обеспечении. TLB - это аппаратный компонент. Тот факт, что в TLB нет сопоставления, автоматически не вызывает ошибку страницы.

Во-вторых, на некоторых аппаратных средствах часто встречаются сбои на нескольких страницах. Это происходит, когда процессор разрешает разбиение страниц на страницы. Таким образом, вы можете получить ошибку страницы на странице и больше или больше ошибок страницы, читая таблицы страниц. Процессоры, которые поддерживают это, используют различные механизмы, чтобы обойти таблицы страниц с информацией о курице и яйце.

Затем генерируется исключение, которое будет синхронно обрабатываться ОС. Но теперь возникает вопрос: скорее всего, адреса этого кода обработчика исключений плюс связанные с ним данные также не будут в TLB!

Когда-либо операционная система должна гарантировать, что ее обработчик ошибок страницы остается в физической памяти.

Получается ли это рекурсивно или диапазон адресов памяти в ядре подчиняется другим правилам (например, автоматическое сопоставление виртуальной / физической памяти, чтобы избежать необходимости использовать TLB?)

На некоторых процессорах диапазон адресного пространства системы отображается иначе, чем пространство пользователя. Это один из способов избежать проблемы курицы и яйца на страницах с постраничными страницами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...