質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.00%

ホストOS型仮想マシンからの実ハードウェア制御について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,144

grassfield

score 31

疑問

ホストOS型仮想化ソフト内でハードウェアを使用するとき、
ゲストOSから直接実ハードウェアを制御することを禁止(一度仮想化ソフト、ホストOSを介させる)するためゲストOSがハードウェアを使用しようとする度に例外を投げさせ、
それを仮想化ソフトウェアがキャッチして通常の手順、つまり一度ホストOSを介してハードウェアを制御する、
と理解しています。

ですが、これだとゲストOSは結局ハードウェアを使用できていないことになる気がします。
そうなると、どうして仮想マシンは通常通り稼働するのでしょうか?
ゲストOSはハードウェアが使用できないと例外を投げるのに、どうして通常通りOS以上のソフトウェアを稼働させられるのでしょうか?

そもそも認識が違うのかもしれませんが、ご回答お願いします。

一応、以下に疑問が生じた経緯を書いておきます。

疑問が生じた経緯

仮想サーバ構築に関するとあるeラーニングを受けていた(有料講座であるため内容へのリンクなどは貼れませんが)ところ、ホストOS型仮想化ソフトウェアの仮想マシンが実ハードウェアを使用するときは、以下のような処理がなされていると説明されていました。

  • まず、ソフトウェアがCPUなどのハードウェアを使うときは、OSを介して使用されている
  • OSはソフトウェアからの要求を受け、OSの特別権限でハードウェアを使用する(命令を下す)
  • このため、ゲストOSはホストOSを介さずに特別権限で実ハードウェアを直接制御できてしまう
  • 当然それは問題になるため、仮想化ソフトウェアは、ゲストOSのハードウェア使用要求を禁止する
  • するとゲストOSはハードウェアを使用しようとする度に例外を投げ、それを仮想化ソフトウェアがキャッチしてホストOSにハードウェア使用要求を投げる
  • 以上により、ゲストOSが直接実ハードウェアを制御することはなく、通常通りホストOSを介してきちんとした手順でハードウェアを使用できる

これについて、ゲストOSに直接ハードウェアを制御させないため、ゲストOSからのハードウェア使用命令を禁止して例外を投げさせ、それをもとに仮想化ソフトウェアがホストOSにハードウェア使用要求を送る、という理解でいるのですが、そうなると疑問が生じました。

生じた疑問

まず、ゲストOSはハードウェアを使用しようとしても仮想化ソフトウェアにより禁止されているため例外を投げるのであれば、ゲストOSは「CPUも使えないんじゃソフトウェアに計算結果を返せないな」という状態になっているのではないでしょうか?
すると、結局仮想マシンは一向に処理が進まず…ということになってしまう気がします。
そのあたり、何かここに書いてある以外の仕組みが働いているのでしょうか?
もしくは、僕の認識がそもそも違っているのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

「疑問が生じた経緯」に書かれている理解は概ね合っています。

ゲストOSは「CPUも使えないんじゃソフトウェアに計算結果を返せないな」という状態になっているのではないでしょうか? 

仮想マシンには、仮想CPUと仮想のメモリ(仮想記憶の意味での仮想じゃなくてVM的な意味での仮想)がありますので、その上でプログラムが稼働することは可能です。
CPUの一般命令が、物理メモリ割り当て済のメモリ上で動く分には、そのまま物理CPUと物理メモリで動きます。
I/O等の特権命令実行時や、物理メモリ割り当て範囲外へのメモリアクセスがあった時点で、VMモニタが介入して、仮想OSに見えないところで、まるでその命令実行が成功したかのごとく取り繕います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/04 16:49

    ご回答ありがとうございます。ここにお礼文を書いている途中で割り込みが入って、そのまま返信を忘れて年を越してしまっていました(笑)

    まだ完全に理解(納得)できたわけではありませんが、ホスト端末内では、基本的には仮想ハードウェアを通常通り利用(そしてそれはVMソフトウェアがとりもち)し、特権命令などのときのみVMモニタにより細かい制御が入るということでいいのでしょうか?

    講座を受けて少し気になったのでここで質問した、というだけですので、あまり詳しく理解するのはまたの機会にしたいと思いますが、ひとまずそのような理解で行こうと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる