CPU仮想化① ー導入

CPUの仮想化の話に入る前に、プロセスの話をしなければならない。

プロセスとは、プログラムを実行した際にOSに作られる抽象物のことである。プロセスとプログラムは一対一の関係とは限らず、一つのプログラムから複数のプロセスをつくることができる。実際に我々がコンピュータを使うとき、複数のプロセスがコンピューティングソースであるCPUを譲り合いながら動いている。その譲り合いは高速で、我々の目からは、複数のプロセスが同時に動いているように見える。これをtime sharing of CPUと呼ぶ。

CPUの仮想化とは、OSによって作られた複数プロセスが、それぞれ独自のCPUを持っているように錯覚させることである。つまり、あるプロセスAが、「他のプロセスBにCPUを譲らなければいけないので、ここまで処理を終わらせたら一旦中止してCPUを譲ろう」などと考えなくて済むのである。更に計算機科学チックに言い換えると、「time sharing of CPUのロジック、複雑性を、プロセスの処理に持ち込まない」ということである。

CPUの仮想化にあたって、気をつけるべき設計上のポイントとして、「制御を保ちながらパフォーマンスを維持する」がある。制御を気にせずにCPUの仮想化を実装すると、以下のような問題が起こる。

  • あるプロセスがCPUを独占し、他のプロセスが実行できない。
  • アクセスしてはいけないメモリへのアクセス

しかし、制御を高く保とうと意識しすぎると、複数プロセス実行時のOSの介入の頻度が多くなってしまい、プロセス実行のパフォーマンスが低下する。よって、仮想化実装時には、この制御とパフォーマンスのトレードオフに気をつけなければならない。

 CPUの仮想化を実装するには二つのことを考えなくてはいけない。

  1. どのようにtime sharing of CPUを行うか?
  2. 複数あるプロセスの中でどれを優先すべきか?

これから3回に渡って、これらをそれぞれ説明する。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次