3

私はCでオペレーティングシステムを開発していて、ページングに苦労しています。メモリを割り当て、物理ページと仮想ページの割り当てを処理する低レベルのメモリ割り当て出力を出力することで、カーネルヒープをループでテストしています。

の場合PDE 0、すべてがページに対して正常に機能します0-1023が、割り当てがに移動するとすぐにPDE 1、現在のフラグが設定された状態でページフォールトが発生しrw、別の物理アドレスから割り当てを開始するとフラグも発生することがあります。

障害のあるアドレスを取得して、それが属するページにcr2マップし直してから、アドレスを3に設定する必要がありますか?PDEその後、命令を再開する必要がありますが、どうすればよいですか?助言がありますか?

4

1 に答える 1

3

ページ フォールトはフォールト例外です。つまり、割り込みが発生したかのように、ページ フォールト ハンドラーがプロセッサによって直接呼び出されます。

ページ フォールトを処理した後、呼び出し元に戻りたい場合は、IRET 命令を使用してフォールトから戻る必要があります。これにより、コード セグメント、eflags レジスタ、および EIP (および、障害がリング 3 から発生した場合はユーザー モードの SS および ESP) が、障害をトリガーした命令に戻されます。

于 2012-05-15T20:46:31.330 に答える