Intereting Posts
Wi-Fi работает на местном, без подключения к Интернету. Дебайн 7 Сеть lxc по умолчанию внезапно перестает работать Отключите некоторые нажатия клавиш операционной системы и действия мыши на Cinnamon Отключить системные звуки KDE 4.7 Быстрое туннелирование ssh X в локальной защищенной сети Есть ли способ сделать загрузочный Linux-диск USB с Linux-контейнера докеров? apt-get – Как жаловаться на неудачное обновление? Как вставить текст, нажав клавишу в хроме? Может ли apt запросить репо пакета для даты создания файлов пакета? Создание резервной копии базы данных cron (дамп) без раскрытия пароля в / etc / crontab Запуск x11vnc от имени пользователя без полномочий root Debian – установите необходимый компакт-диск См. Последовательный порт в качестве устройства MIDI IN Загрузить Linux из меню GRUB Как добавить новый текст после каждой строки с использованием команды оболочки?

Какова компоновка пространства ядра в 32-битном Linux?

Согласно Documentation/x86/x86_64/mm.txt , расположение пространства ядра должно быть таким же, как в 64-битном Linux:

  6 0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm 7 hole caused by [48:63] sign extension 8 ffff800000000000 - ffff80ffffffffff (=40 bits) guard hole 9 ffff880000000000 - ffffc7ffffffffff (=64 TB) direct mapping of all phys. memory 10 ffffc80000000000 - ffffc8ffffffffff (=40 bits) hole 11 ffffc90000000000 - ffffe8ffffffffff (=45 bits) vmalloc/ioremap space 12 ffffe90000000000 - ffffe9ffffffffff (=40 bits) hole 13 ffffea0000000000 - ffffeaffffffffff (=40 bits) virtual memory map (1TB) 14 ... unused hole ... 15 ffffffff80000000 - ffffffffa0000000 (=512 MB) kernel text mapping, from phys 0 16 ffffffffa0000000 - fffffffffff00000 (=1536 MB) module mapping space 

Но как выглядит расположение пространства ядра в 32-битном Linux? Какое описание, которое я могу найти, это все о ZONE_DMA, ZONE_NORMAL, ZONE_HIGHMEM, но это не говорит мне о деталях, например, где находится адрес physmap, или где это код ядра и модули ядра и т. Д. Что именно они хотели?

Спасибо за любую помощь 🙂

Ну, теперь я думаю, что могу дать себе ответ 🙂

Одним словом, в 32-битном Linux некоторые области ядра сталкиваются, чтобы предотвратить трату ограниченного виртуального адресного пространства ядра (например, модулей и vmalloc арены, образа ядра и physmap), поэтому макет пространства ядра может быть не таким ясным, как это в 64-бит.

Макет пространства ядра в 32-битном Linux на x86 должен быть таким (некоторые отличия от AArch32: http://www.arm.linux.org.uk/developer/memory.txt ):

 fixmap : 0xffc57000 - 0xfffff000 (3744 kB) pkmap : 0xff800000 - 0xffa00000 (2048 kB) vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) .init : 0xc0906000 - 0xc0973000 ( 436 kB) .data : 0xc071ae6a - 0xc08feb78 (1935 kB) .text : 0xc0400000 - 0xc071ae6a (3179 kB) 

Согласно определению ZONE в 32-битном Linux, ZONE_HIGHMEM включает область fixmap , pkmap , vmalloc (модули ядра будут использовать область vmalloc ). Область lowmem состоит из ZONE_DMA и ZONE_NORMAL. Он отображается линейно из физической памяти, и так называемая физическая карта относится именно к этой области. .init , .data , .text внутри lowmem принадлежат образ ядра, который является отдельной областью в 64-битном Linux.