現在、上位半分のカーネルを構築しています。ブートローダーはカーネルを物理アドレス 0x100000(1M) にロードし、ID マッピングは 0 ~ 4MB に設定されています。ここで質問があります: どうすればより高い仮想アドレス (たとえば 3GB) にジャンプできますか?
私はこの質問をグーグルで検索し、2 つの方法を見つけました。1 つはアドレス スペース ワープ アラウンドを使用する方法で、もう 1 つはページ エントリを設定して 3GB ~ 3GB + 4MB を 0 ~ 4MB にマップしてから、より高いアドレスに「ジャンプ」する方法です。使用することにしました。 2番目の方法ですが、それを実装するのに十分な情報が見つかりません. カーネルを逆アセンブルしたところ、すべてのアドレスが絶対アドレスであることがわかったので、単一の「jmp」命令では不十分だと思います。私が考えることができる唯一の方法は、3GBを超える仮想アドレスに関数があり、この関数を下位スペースで呼び出し、上位スペースで実行し、この関数が返されないことです。これが正しい場合、どうすればこれを行うことができますか?