Как реализовать управление памятью в ядре?

Не могу до конца понять как реализовать виртуальную память и как её выделять для ядра и процессов.
Сейчас меня интересует как реализовать управление памятью на уровне ядра.

Как я себе это представляю:
1. Делим доступную оперативную память на равные блоки (фрейм) по 4КБ.
2. Затем, если мы хотим в ядре выделить некий объём памяти под переменную, то мы ищем в памяти некоторое количество блоков (фреймов) суммарный размер которых не меньше запрашиваемого объёма памяти. Затем мы вносим адрес первого блока, количества блоков в
некую таблицу и отдаём адрес первого блока под данные этому процессу.

А будет ли оптимально каждый раз проходить по всем страницам памяти в поисках свободной?
Правильно ли отдавать сразу целую страницу если требуемый объём мал?

Как всё это реализовать? И вообще в чём я ошибаюсь?
  • Вопрос задан
  • 245 просмотров
Пригласить эксперта
Ответы на вопрос 1
@none7
Процессоры x86-64 могут адресовать 256Тб виртуальной памяти. Будет ли оптимальным полный перебор всех блоков по 4к? Будет ли вообще приемлемо хранить информацию о каждом 4к блоке каждого процесса, при таком объёме виртуально памяти у каждого? Очевидно, что таблица свободных блоков проиндексированная по размеру необходима. Windows кстати во избежание разрастания этих таблиц выделяет виртуальную память блоками по 64к.
Обычно выделением виртуальной памяти под переменные занимается куча(heap), а приложению отдаёт память сколько попросят, независимо от размера блока виртуальной памяти. Естественно, что первое выделение не меньше одной страницы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы