Поля линейного адреса в Linux

Следующие макросы упрощают работу с Таблицей Страниц:
— page shift —задает длину поля offset в битах. В архитектуре 80×86 возвращает число 12. Поскольку все адреса в странице должны помещаться в поле offset, размер страницы в системах 80×86 составляет 212, или знакомые нам 4096 байтов. Таким образом, значение 12 для макроса page shift можно считать логарифмом по основанию 2 от общего размера страницы. Этот макрос используется макросом page size, возвращающим размер страницы. Кроме того, макрос page mask возвращает значение и используется для маскировки всех битов поля offset;
— pmd shift — суммарная длина в битах полей offset и таЫе линейного адреса. Иными словами, это логарифм размера области, которую может отобразить средний каталог страниц;
— pmd size — вычисляет размер области, отображаемой одной записью среднего каталога страниц, т. е. Таблицей Страниц;
— pmd mask служит для маскировки всех битов полей Offset И Table.
Когда механизм расширения физических адресов выключен, макрос pmd shift возвращает значение 22 (12 для offset плюс 10 для Table), pmd size возвращает 222, или 4 Мбайт, а макрос pmd mask — значение oxffcooooo. Если же механизм рае включен, макрос pmd shift возвращает значение 22 (12 для offset плюс 12 для Table), pmd size возвращает 221, или 2 Мбайт, а макрос pmd_mask — значение oxffeooooo.
В страницах большого размера последний уровень таблиц страниц не используется. Поэтому макрос large page size, который возвращает размер большой страницы, равен pmd size, а макрос large page mask, который маскирует все биты полей offset и Table в адресе большой страницы, равен pmd_mask;
— pud shift — определяет логарифм размера области, которую может отобразить запись верхнего каталога страниц;
— pud size — вычисляет размер области, отображаемой одной записью верхнего каталога страниц;
PUD MASK служит для маскировки всех битов полей Offset, TableMiddle Dir и Upper Dir.
В архитектуре 80×86 макрос pud shift всегда равен pmd shift, а макрос pud size возвращает 4 Мбайт или 2 Мбайт;
— gdir shift — определяет логарифм размера области, которую может отобразить запись верхнего каталога страниц;
— pgdir size — вычисляет размер области, отображаемой одной записью верхнего каталога страниц;
— pgdir_ma.sk служит для маскировки всех битов полей Offset, TableMiddle Dir И Upper Dir.
Когда механизм расширения физических адресов выключен, макрос pgdir shift возвращает значение 22 (то же, что и макросы pmd shift и pudshift), макрос pgdirsize возвращает 222 (4 Мбайт), а макрос pgdir_mask — oxffcooooo. Если же механизм РАЕ включен, макрос pgdir shift возвращает значение 30 (12 для offset плюс 9 для Table плюс 9 для Middle Dir), pgdir size возвращает 230 (1 Гбайт), а макрос pgdir_mask — значение охсооооооо;
— ptrs_per_pte, ptrs_per_pmd, ptrs_per_pud и ptrs_per_pgd — вычисляют количество записей в Таблице Страниц, а также в среднем, верхнем и глобальном каталогах страниц. При выключенном механизме РАЕ возвращают, соответственно, 1024, 1, 1 и 1024, а при включенном — 512, 512, 1 и 4.