Верхняя память (пространство пользователя) и highmem (пространство ядра)

Верхняя память (пространство пользователя) и highmem (пространство ядра)

Каждый процесс имеет 2 области памяти: пространство пользователя (верхняя память) и пространство ядра (нижняя память). В пространстве ядра первые 896 МБ используются для отображения кода ядра (не полностью 1 ГБ)? Это означает, что когда приложение пользовательского пространства выполняет системный вызов или что-либо, связанное с ядром, ядро ​​будет ссылаться на пространство ядра для выполнения системного вызова, не так ли?

Зарезервированные 128 МБ в пространстве ядра (для доступа к верхней памяти (пользовательскому пространству)), это все ссылки на область памяти пользовательского пространства? Таким образом, процесс ядра может получить доступ к любому пользовательскому пространству, ссылаясь на эту область, это правда?

Вот почему эта область в пространстве ядра называется highmem, не так ли?

решение1

«Верхняя память» и «нижняя память» не относятся к виртуальному адресному пространству процессов, а касаются физической памяти.

В виртуальном адресном пространстве процесса пространство пользователя занимает первые 3 ГБ, а пространство ядра — четвертый ГБ этого линейного адресного пространства.

Первые 896 МБ пространства ядра (не только код ядра, но и его данные) «напрямую» отображаются на первые 896 МБ физической памяти. Это «напрямую» в том смысле, что всегда есть смещение 0xc0000000 между любым линейным адресом этой части 896 МБ виртуального пространства ядра и соответствующим ему адресом в физической памяти (однако следует отметить, что MMU включен и для этого фактически используются записи таблицы страниц).

Последняя часть виртуального пространства ядра размером 128 МБ — это место, куда отображаются некоторые фрагменты физической «верхней памяти» (> 896 МБ): таким образом, за один раз можно отобразить не более 128 МБ «верхней памяти».

Ссылка: «Понимание ядра Linux», третье издание — разделы «8.1.3. Зоны памяти» и «8.1.6. Сопоставление страниц памяти в ядре».

решение2

Примечание:-Разделение памяти происходит только в старых системах Linux (32-битный) Более подробную информацию смотрите в комментариях ниже.

Высокая и низкая память:

  • Мало памяти :Память, для которой существуют логические адреса в пространстве ядра. Почти в каждой системе, с которой вы, вероятно, столкнетесь, вся память — это низкая память.
  • Высокая память:Память, для которой не существует логических адресов, поскольку она выходит за пределы диапазона адресов, отведенного для виртуальных адресов ядра. Это означает, что ядру необходимо начать использовать временные отображения участков физической памяти, к которым оно хочет получить доступ.

Ядро разделяет виртуальный адрес на две частипользовательадресное пространство иядроАдресное пространство. Код ядра и структуры данных должны вписываться в это пространство, но наибольшим потребителем адресного пространства ядра являются виртуальные отображения для физической памяти. Таким образом, ядру нужен собственный виртуальный адрес для любой памяти, с которой оно должно напрямую соприкасаться. Таким образом, максимальный объем физической памяти, который может быть обработан ядром, был объемом, который может быть отображен в часть виртуального адресного пространства ядра, за вычетом пространства, используемого кодом ядра.

введите описание изображения здесь

Связанный контент