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

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

を使用すると、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

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

答え2

しかし、そうではありません。仮想マシンとホストマシンは同じメモリを共有しません。だから仮想ということ機械。これまで作業してきたように、共有メモリはオペレーティングシステムレベルの概念なので、(ゲスト)オペレーティングシステムの制御範囲外のアイテムとメモリを共有するために使用することはできません。

原則として、仮想マシン技術はゲストとホスト間でメモリを共有する方法を提供できます。ただし、これにより仮想化の目的が失われます。つまり、ゲストプログラムが仮想マシンから離れることができます。

仮想マシンとそのホスト間でデータを共有するには、仮想マシンにマウントされているディレクトリ内のホスト上のファイルを使用するか(VirtualBoxのvboxsfを介して)、より一般的にファイルを使用します。どこかに両側からアクセス可能です。

答え3

私の考えでは、メモリセグメントをソートする必要があるかもしれないと思います。このソートは、VMテクノロジがアップグレードされると予告なく変更されることがあります。

Gilesが指摘したように、他の手段を使用する必要があります。 SLES11には、ホストとゲスト間で情報を共有する「良い」方法があります。つまり、ホストはRAMディスクを作成し、その内容を定期的に更新します。ゲストはこのRAMディスクROをマウントし、内容を読み取ります。デフォルトでは、ホストの状態に関する情報(使用可能なRAM、ホスト名など)をゲストに渡すために使用されます。

答え4

このLXDに興味があるかもしれません。ホストとゲスト間でディスク、メモリなどを共有できます。しかし、リソースを制御して制限することは依然として可能です。

関連情報