2

シミュレーションをしようとしています。実際の場合、x86-based産業用PCはPC/104を使用してネットワークボードに接続します。ネットワークボードはI/Oデバイスとして扱われます。で実行されているコードIPCは、IN、OUTなどのアセンブリ命令を使用してI/Oポートにアクセスします。ラップトップですべてをシミュレートしたいと思います。

で実行されているc++プログラムIPCは、どちらもx86アーキテクチャに基づいているため、ラップトップに移植できます。しかし、IN / OUT命令については、実際のネットワークボードがラップトップに接続されていないため、問題が発生しました。を使用してネットワークボードのロジックをシミュレートしましたSystemC実際のハードウェアへのI/Oポートアクセス(IN / OUT)をインターセプトし、仮想化されたハードウェアのロジックに引き継がせる方法があるかどうか疑問に思っています。

私はあなたからの助けやアドバイスに感謝します。

4

1 に答える 1

1

IN / OUT命令を含むコードがユーザープログラムにある場合は、これらの命令をこの同じプログラム(おそらく、シグナルを使用して?)またはカーネルでインターセプトして処理する方法を見つける必要があります。INとOUTは特権命令であり、デフォルトではユーザーモードコードで例外(#GP)が発生し、カーネルがこの例外を処理します。この場合、独自のハンドラーが必要です。Windowsでは、これはいわゆる構造化例外処理(AKA SEH)を使用して実行できます。

コードがすでにカーネルにある場合、そこにあるIN / OUTは#GPを引き起こさないため、注意が必要です。

INとOUTを実行するルーチンを、デバイスエミュレーションコードの呼び出しを使用して、他の何かに置き換えることはできませんか?あなたはとにかくそれをエミュレートしています、それがIN/OUTか何か他のものであるかどうか誰も気にしません。

SEHでこれを行う方法をご覧ください。

于 2012-10-11T08:42:39.950 に答える