В настоящее время я собираю ядро старшей половины, мой загрузчик загружает ядро по физическому адресу 0x100000 (1M), а сопоставление идентификаторов установлено на 0-4 МБ. Вот вопрос: как я могу перейти на более высокий виртуальный адрес (3 ГБ, например).
Я погуглил этот вопрос и нашел два способа: один - использовать деформацию адресного пространства, а второй - настроить записи страниц для сопоставления 3 ГБ ~ 3 ГБ + 4 МБ с 0-4 МБ, а затем «перейти» на более высокий адрес. Я решил использовать второй способ, но не могу найти достаточно информации для его реализации. Я разобрал свое ядро и обнаружил, что все адреса абсолютны, поэтому я считаю, что одной инструкции «jmp» будет недостаточно. Единственный способ, о котором я могу думать, это то, что есть функция с виртуальным адресом выше 3 ГБ, и мы вызываем эту функцию в более низком пространстве, тогда мы будем выполняться в высоком пространстве, и эта функция никогда не должна возвращаться. Если это правда, как я могу это сделать?