仮想マシンとホスト間の共有メモリ

仮想マシンとホスト間の共有メモリ

を使用すると、shmgetあるshmatプログラムに保存されているデータに別のプログラムからアクセスできます。コードの要点は次のとおりです。

key=ftok("shared.c",'c');
shmid=shmget(key,1024,0644|IPC_CREAT);
data=shmat(shmid,(void *)0,0);
printf("Enter the data");
gets(data);

同様に、別のプログラムを作成してshmatそれを使用してデータにアクセスできます。

さて、ホストOSからアクセスする方法を知りたいです。ホストメモリでは共有メモリIDが異なるためshmat動作しません。ホストから共有メモリにアクセスするには?

私たちはこれを行うことができますか?我々は、ハイパーバイザーのすべてのオペレーティングシステムに対して論理アドレスを物理アドレスにマッピングするページテーブルがあり、ハイパーバイザの物理アドレスをホスト物理アドレスの物理アドレスにマッピングするpmapテーブルがあることを知っています。 、論理ゲストアドレスをホスト物理アドレスにマッピングするシャドウページテーブルもハイパーバイザーに存在します。オペレーティングシステムに合ったシャドウページテーブルまたはページテーブルにアクセスする方法はありますか?

ベストアンサー1

実際にはそうすることができますが、組み込みソフトウェア開発の経験が必要であり、ホストとゲストが仮想PCIデバイスを使用できるようにすることによって達成される仮想マシン間通信の概念を使用できます。以下でいくつかの詳細を確認することもできます。 [アップデート]https://github.com/qemu/qemu/blob/master/docs/specs/ivshmem-spec.txt

役に立ったことを願っています!ありがとう

おすすめ記事