Какие структуры данных используют 128 МБ из 1 ГБ пространства ядра Linux?

Почти во всех книгах и статьях, которые я читал о HIGHMEM в ядре Linux, говорится, что при использовании разделения 3 :1 не весь 1 ГБ доступен ядру для отображения. И обычно это 896 МБ или около того, а остальное используется для структур данных ядра, карт памяти, таблиц страниц и тому подобного.

Мой вопрос в том, что именно представляют собой эти структуры данных? Доступ к таблицам страниц обычно осуществляется через регистр адреса таблицы страниц, верно? А базовый адрес таблицы страниц обычно хранится как физический адрес. Зачем же нужно резервировать виртуальное адресное пространство для всей таблицы?

Точно так же я читал о том, что сам код ядра занимает место. Какое это имеет отношение к виртуальному адресному пространству? Разве это не физическая память, которая будет потребляться для хранения кода?

И, наконец, эти структуры данных, почему они должны резервировать 128 МБ? Почему их нельзя использовать из всего адресного пространства размером 1 Гб, как это делают любые другие обычные структуры данных в ядре?

Я прошел LDD3, профессиональную архитектуру ядра Linux и несколько сообщений здесь, в стеке -переполнении (, например:Почему Linux Kernel ZONE _NORMAL ограничен 896 МБ?)и более старую статью LWN , но не нашел конкретной информации о том же.

5
задан Community 23 May 2017 в 10:32
поделиться