2012-02-20 13 views
3

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

PDE 0、すべてがページ0-1023のための素晴らしい作品が、私は別の物理アドレスから割り当て開始した場合、すぐPDE 1に割り当て移動すると、ページフォルトがあまりにも存在フラグのセット、そして時にはrwフラグを上げています。

cr2からフォールディングするアドレスを取得し、PDEにマップし、それが属しているページを3に設定する必要がありますか?その後、私は指示を再開する必要がありますが、どうすればいいですか?助言がありますか?

+0

私は最初の質問であなたが何を求めているのか分かりません。あなたはすでに障害の原因となっているアドレスと何をすべきかを知っているようですね?戻るとき:ページフォールトは他の割り込みと同じです - ページフォルトハンドラが呼び出される前に、EIP/RIP(この場合は*ページフォールトを引き起こした命令*を指す)がスタックに保存されます。 – pmdj

+0

ご返信ありがとうございます。ページフォルトは、誤って機能している物理フレームアロケータが、すでに割り当てられたフレームを偶発的に割り当てたために発生しました。また、ページ境界を超えたバイトのkmallocingは問題でした。しかし、すべて解決されました。ありがとう! –

答えて

2

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

ページフォルトのサービスを受けて、呼び出し元に戻る場合は、IRET命令でフォールトから復帰する必要があります。これにより、コードセグメント、eflagsレジスタ、およびEIP(および、リングが3の場合はユーザモードSSとESPが潜在的に)障害をトリガした命令に戻ります。

関連する問題