как информация о размере адреса /proc/cpuinfo соотносится с размером страницы памяти?

#linux #memory #procfs

#linux #память #procfs

Вопрос:

cat /proc/cpuinfo для помеченного процессора -lm выдает

 address sizes   : 36 bits physical, 48 bits virtual
 

размер страницы определяется с помощью

 #include <unistd.h>
int getpagesize(void);
 

Выдает 4096 байт.

Используя последнюю информацию, я бы подумал, что система использует наименее значимые 12 бит адреса в качестве смещения, а остальные для преобразования виртуального адреса в физический через TLB и таблицу страниц.

Как информация из cpuinfo соотносится с размером страницы?

Ответ №1:

Как информация из cpuinfo соотносится с размером страницы?

Это не связано. Размер физического адреса дает вам в основном количество адресных строк, имеющихся в процессоре (36). Размер виртуального адреса дает вам размер виртуального адресного пространства, то есть сколько памяти может адресовать одна программа (это 48 бит, что означает, что она может адресовать больше, чем объем физической памяти; это может быть, например. умножается в виртуальном адресном пространстве). Размер страницы равен 2 ^ 12, что означает, как вы отметили, что остальные биты виртуального адреса (36, которые не являются 36 в физическом адресном пространстве) обрабатываются TLB и механизмом подкачки.

Ответ №2:

Как информация из cpuinfo соотносится с размером страницы?

Это не так. Размер страницы в x86_64 может составлять 4k, 2M (или даже 1G) независимо от (физического или виртуального) «размера адреса».

В статье Википедии for x86_64 содержится некоторая информация о том, как работает виртуальное адресное пространство.

Сопоставление выполняется не так, как вы его описываете, а с помощью четырехуровневой таблицы страниц. Эта статья о LWN.net : Четырехуровневые таблицы страниц содержат краткое описание того, как это работает и зачем это нужно. (В статье больше говорится о трехуровневой карте, но четвертый уровень — это просто расширение этой схемы).

Ответ №3:

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

Современные процессоры поддерживают различные размеры страниц, и ОС устанавливает эти настройки при загрузке.

Итак, чтобы ответить на ваш вопрос: информация в cpuinfo напрямую не связана с текущим размером страницы. Используя тип процессора, вы можете узнать, какие размеры страниц поддерживаются. Например, расширение ia32 PAE допускает страницы размером 2 МБ (а также страницы размером 4k).

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

1. На какой ОС вы работаете cpuinfo ? Мне не удалось получить доступ к этой команде в Fedora 28, 29, 32, Windows 10, Ubuntu 18.04, 20.04. Возможно, вы имеете в виду lscpu ?