насчет вирт памяти:
1) определись ГДЕ в виртуальной памяти будет ядро
2) в линкер скрипте сделай чтобы ядро собиралось с этим базовым адресом
3) в стартап-код ядра перед прыжком на мейн сделай создание временной директории страниц, включение пейджинга и прыжок на виртуальный адрес мейна ядра
4) теперь уже в ядре делай physical memory manager и virtual memory manager