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

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

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

  

Как я себе это представляю:  

1. Делим доступную оперативную память на равные блоки (фрейм) по 4КБ.  

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

некую таблицу и отдаём адрес первого блока под данные этому процессу.  

  

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

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

  

Как всё это реализовать? И вообще в чём я ошибаюсь? 

 Процессоры x86-64 могут адресовать 256Тб виртуальной памяти. Будет ли оптимальным полный перебор всех блоков по 4к? Будет ли вообще приемлемо хранить информацию о каждом 4к блоке каждого процесса, при таком объёме виртуально памяти у каждого? Очевидно, что таблица свободных блоков проиндексированная по размеру необходима. Windows кстати во избежание разрастания этих таблиц выделяет виртуальную память блоками по 64к.  

Обычно выделением виртуальной памяти под переменные занимается куча(heap), а приложению отдаёт память сколько попросят, независимо от размера блока виртуальной памяти. Естественно, что первое выделение не меньше одной страницы.