仮想という考え方

総合科目「ネットワーク社会を支える情報技術入門 II」、2009年09月28日

                                       筑波大学システム情報工学研究科/電子・情報工学系
                                       新城 靖
                                       <yas @ cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.softlab.cs.tsukuba.ac.jp/~yas/gen/it-2009-09-28
あるいは、次のページから手繰っていくこともできます。
http://www.softlab.cs.tsukuba.ac.jp/~yas/gen/
http://www.cs.tsukuba.ac.jp/~yas/

印刷配布資料 http://www.softlab.cs.tsukuba.ac.jp/~yas/gen/it-2009-09-28 /it-2009-09-28 .pdf

■今日の重要な話

◆仮想という考え方を身につける意義

■仮想とは

◆コンピュータ由来の「仮想」の意味

英語では、virtual。

類語:抽象(abstract)、論理(logical) (←→物理(physical))

反語:実(real)

◆英語のvirtualの説明

virtual (adjective)
almost or nearly as described, but not completely or according to strict definition : the virtual absence of border controls.
Thesaurus (類語)
  1. a virtual guarantee effective, in effect, near, near enough, essential, practical, to all intents and purposes.
  2. a virtual shopping environment simulated, artificial, imitation, make-believe; computer-generated, online, virtual reality.

MacOSX付属 New Oxford American Dictionary, New Oxford Writers Thesaurus より。

◆英和辞典

virtual (形容詞)
《表面的にはまたは名目上はそうでないが》事実上の, 実質上の, 実際(上)の; 仮想の, バーチャルな;
リーダーズ英和辞典第2版より。

◆日本語の辞書に現れる「仮想」

この講義で中心的に扱う「仮想の考え方」とは、適合しない。 virtual の訳語に「仮想」を当てたのは、失敗だった。 「事実上の」

仮想 (広辞苑)
仮に考えること。仮に想定すること。例:仮想敵国。
仮想敵国の英語は、{hypothetical、imagined、potential} enemy。virtual enemy とは言わない。

■仮想記憶(virtual storage,仮想メモリ,virtual memory)

◆(物理的な)メモリ

メモリ(メインメモリ)、RAM(Random Access Memory)
実行中のプログラムを保持する。加工するデータを一時的に保持する。 IC(Integrated Circuit、シリコンという元素による半導 体で作られた電気回路)で作られているので、速い。 容量は、ハードディスクよりは小さい。値段が高い。 (揮発的(電源を切ると消えてしまう)。)
ハード・ディスク (HD(Hard Disk), HDD(Hard Disk Drive))
プログラムやデータをデータを保持する。 容量は、メモリより大きい。値段が安い。 (永続的である(電源を切っても残っている)。)

メモリには、数字で番地(アドレス)が付いている。番地を指定して、データ を保存する。番地を指定すると、データが取り出せる。

◆仮想記憶(仮想メモリ)

仮想記憶(仮想メモリ、virtual memory)とは、オペレーティングシステム(後述)の働きにより、実際に備えているメ モリ容量よりも大きなプログラムを動かすための仕組みである。

主記憶、6ページ、ハードディスク、15ページ、ページイン、ページアウト

図 仮想記憶による主記憶容量の拡大。主記憶よりも、「事実上」多くのメモリがあるように見せかける。

主記憶 (main memory, primary storage)
RAM で作る。小容量、高価。
二次記憶(secondary storage)
ハードディスクで作る。大容量、高価。
ページ
主記憶と二次記憶(ハードディスク)を固定長のブロックに分けたもの。 大きさは、4Kバイト-8Kバイトが一般的。
ページアウト
主記憶にある(当分使いそうにない)ページを、二次記憶へコピーする。
ページイン
二次記憶にある(現在必要とされている)ページを、主記憶へコピーする。

仮想記憶の基本的なアイディアは、高価な RAM の容量を、 安価なハードディスクを使って、「事実上」拡大する。 すぐに使うところだけを速いメモリ(IC)に、当分使わない所を、遅いハー ドディスクに置き、ディスクとメモリの内容を入れ替えながら仕事を進める。 この時、速いメモリを主記憶、遅いハードディスクを二次記憶とう。

仮想記憶を使うと、メモリが100Mバイトしかないコンピュータで、200 Mバイトのメモリを使うプログラムを実行することができるようになる。

もともとは、1つのプログラムで実際のメモリ容量以上のものを使うための仕 組みである。最近では、複数のプログラムが使うメモリの総量で考えることも ある。

◆ページ置き換えアルゴリズム

主記憶が足りなくなった時に、どのページを犠牲にして、空きを確保するか。

一番よいアルゴリズムは、OPTアルゴリズムだが、実現不可能である。未来の情報を使うので。 LRU は、過去の情報を使って未来を予測する方法。

野口悠紀雄(のぐち ゆきお)の 「超整理法」の押し出しファイルは、LRUアルゴリズム。

アルゴリズム(手法、算法)とは、問題を解くためのあらかじめ記述された定義 の明確な規則、あるいは、指示の集まり。日本語などで書くこともできる。直 接的にはコンピュータでは実行できない。なんらかの方法で実行できるように なったものは、プログラムである。

◆仮想記憶の実現

仮想記憶は、メモリ管理ユニット(Memory Management Unit) というハードウェ アの働きにより実現されている。

CPU>アドレスメモリ

図 CPUによるメモリアクセス

MMUがないコンピュータの場合

CPU>仮想アドレス>MMU>物理アドレス>メモリ

図 MMUによる仮想アドレスと物理アドレスの変換

MMUがあるコンピュータの場合 メモリアクセスの度に、毎回毎回、メモリから設定を読み出していると遅い。 (2倍遅い。) MMUの中には、変換を高速に行うための小容量(8〜数1000)の連想メモリがある。
通常のメモリ
アドレスを指定して値を取り出す
連想メモリ
値(仮想アドレス)を指定して値(物理アドレス)を取り出す
MMU に含まれる連想メモリは、Translation Lookaside Buffer (TLB) とも呼 ばれる。

◆配列と連想配列

配列は、プログラミング言語で、メインメモリを抽象化したもの。連続した番 地におかれた一様なデータ。数の添字でアクセスする。 連想配列では、数の添字ではなくて、文字列等でアクセスする。
もの 指すもの 内容
メインメモリ 番地(数) 1バイト(8ビット)のデータ
(通常の)配列 添字(index)(数) 任意のデータ
連想配列 値(数以外のもの、文字列等) 任意のデータ
連想配列のことを、プログラミング言語によっては、ハッシュ表(Hash table) ということもある。

◆配列の例

(大量の)一連のデータの処理が得意。

[ruby-array.rb]

#!/usr/bin/ruby

a = Array.new(12);
a[0] = 31; a[1] = 28; a[2] = 31; a[3] = 30; a[4]  = 31; a[5]  = 30; 
a[6] = 31; a[7] = 31; a[8] = 30; a[9] = 31; a[10] = 30; a[11] = 31; 

i=0; sum=0;
while( i<=11 )
    sum += a[i]
    i += 1
end
printf("sum == %d\n", sum );
実行例:
% ./ruby-array.rb [←]
sum == 365
% []

◆連想配列の例

[ruby-assoc.rb]

#!/usr/bin/ruby

a = Hash.new();

a["January"]   = 31; a["February"] = 28; a["March"]    = 31; a["April"]    = 30; 
a["May"]       = 31; a["June"]     = 30; a["July"]     = 31; a["August"]   = 31; 
a["September"] = 30; a["October"]  = 31; a["November"] = 30; a["December"] = 31;

month="September";
printf("%s has %d days.\n", month,a[month])

month="October";
printf("%s has %d days.\n", month,a[month])
実行例:
% ./ruby-assoc.rb [←]
September has 30 days.
October has 31 days.
% []
ハッシュ表は、連想メモリの高速な実装方法の1つ。 うまく実装すると、要素数が増えても検索速度は一定で変わらない。 ハッシュ表では、決して先頭から順に探しているのではない。

MMU で使われている連想メモリは、ハードウェアで複数同時に探す。あまり大 容量のものは作れない。

◆仮換地

「仮換地」は、不動産用語。区画整理中の土地を管理するための考え方。土地 の区画整理には時間がかかるので、途中段階で使う。区画整理終了時には、無 くなる。
従前地
物理アドレスで指すような土地。
仮換地
仮想アドレスで指すような土地。
建物の位置を把握したり、税金を課す時に区画整理で国土(メモリ)が増えた り減ったりすることはない。事務手続きで、従前値と仮換地の対応表(仮換地 証明)が必要になることがある。

■仮想計算機(virtual machine)

あるいは、仮想マシン、仮想コンピュータ。 計算機(専門用語)とは、コンピュータのこと。電卓ではない。

◆計算機とは

計算機(machine)とは、インタプリタ(interpreter)の一種。 プログラミング言語で記述されたソース・プログラムを解釈しながら実行する もの。普通は、それ自体もまたプログラムの一種。 両者ともインタフェースが明確。

図? ハードウェア、OS、実行時プログラム、アプリケーション

図? 計算機とは

◆システム仮想計算機とプロセス仮想計算機

システム仮想計算機
ハードウェアの代わりに、 オペレーティング・システムが動作可能な 完全なシステム環境を提供する。
プロセス仮想計算機
1つのプロセス(後述)を実行するためのプラットフォーム。

図? システム仮想計算機、プロセス仮想計算機

図? 2種類の仮想計算機

仮想計算機モニタ(virtual machine monitor, VMM)
システム仮想計算機を実現するための小さなソフトウェア。仮想計算機 モニタが動作することで、仮想計算機が作られる。仮想計算機モニタは1個で も、複数の仮想計算機を作ることができる。
ハイパーバイザ(hypervisor)
仮想計算機モニタと同義。
スーパーバイザ(supervisor)
オペレーティング・システムと同義。

◆システム仮想計算機の利用方法

◆コンピュータの集約

コンピュータの高速化で、性能が余ってきた。もともとハードウェアn台でやっ ていた仕事を、ハードウェアとしては1台に集約する。並列処理の逆。

図? サーバ3台、OS3種類、アプリケーションそれぞれ2つ

図? 仮想計算機によるサーバの集約(集約前)

図? ハードウェア1台、OS3種類、アプリケーションそれぞれ2つ

図? 仮想計算機によるサーバの集約(集約後)

◆さまざまな仮想計算機

IBM メインフレーム用 (1970年代)。
1台のハードウェアで数種類のOSを動かす。
Virtial PC, Real PC, VMware, Parallels Workstation
Windows PC のハードウェアと同じような動きをする。Macintosh や Linux で Windows 用のプログラムを実行するために使う。
vMac (Virtual Macintosh)
Unix, Windows 等で(古い)Macintosh 用のプログラムを動かす。
VirtualGameStation
Macintosh 上で Playstation のプログラムを動かす。

◆x86の仮想化

x86 は、Intel 社の CPU 製品で、8086 に由来するものの総称。 当初の x86 は、仮想計算機を動作させることに適していない。最近、仮想計 算機を動作させるために適した機能や命令を備えたものが出荷されるようになっ てきた。

◆エミュレータとシミュレータ

エミュレータ: 別のシステムで、本物のシステムと同じ動きを真似するソフト ウェア。本物は、必ずしもコンピュータ全体(計算機)でなくてもよい。 シミュレータ: 現実世界の予測に使うもの。数式でモデル化して計算で予測 する。実際にやるとコストがかかるもの、取り返しがつかないものをコンピュー タの中で実行する。現実の代わりにはならない。(エミュレータは、本物の代 わりに使える。シミュレータは、本物の代わりには使えない。)
(文字)端末
1台の(高価な)中央のコンピュータを、複数人で TSS (Time Sharing System)で使う時に使う (安価な)コンピュータ。キーボードから打ち込まれた文字を中央のコンピュー タに送る機能と、中央のコンピュータから送られてきた文字を画面に表示する 機能がある。

◆セキュアVM/BitVisor

日本政府が決定した「セキュア・ジャパン2006」の項目の1つ。内閣官房情報 セキュリティセンターが推進する。文部科学省平成18年度科学技術振興調整費 「高セキュリティ機能を実現する次世代OS環境の開発」による支援を受ける。 筑波大学がとりまとめ。電気通信大学、東京工業大学、慶應義塾大学、奈良先 端科学技術大学院大学、豊田高専、富士通、NEC、日立製作所、NTT、N TTデータ、ソフトイーサの技術者が参加。インテルが技術協力。 2009年3月開発プロジェクト終了。

目標

このために、仮想計算機(モニタ)で、セキュリティ機能を追加する。

図? PC、ICカード、画面に PIN

図? BitVisor の機能

図? PC、ICカード、画面に PIN

図? BitVisor の起動画面

http://www.securevm.org/

◆Java仮想計算機

分類としては、プロセス仮想計算機。 Java 言語で書かれたプログラム(バイトコードと呼ばれる機械語に変換され たもの)を実行する。

Java仮想計算機を使うと、さまざまな種類ハードウェア(CPU)やオペレーティ ング・システムで共通にバイトコードという機械語が使えるようになる。 バイト・コードに変換されたアプリケーションは、どの CPUやオペレーティング・システムでも動作する。

図? Pengium,Linux,PowrPC,MacOSX,Pentium,Windows,SPARC,Solaris

図? 共通のバイトコードが使える

■仮想記憶、仮想計算機以外の仮想

◆仮想回線(virtual circuit)

インターネットで通信しあう2つのプログラムは、それらが動作している2台 のコンピュータがあたかも物理的な回線で直結されているかのように見える。

実際には、間に何台ものルータと呼ばれる機器がある。

◆VPN(Virtual Private Network)

本当は、インターネットという、誰もがアクセスできるネットワークを通って いるが、あたかも 専用線(private network) で結ばれているように見せかけ る。

例:

◆仮想LAN(Virtual LAN, vLAN)

1本の物理的な媒体上に、独立した複数の LAN (Local Area Network) を構築する。 物理的に切れている LAN と LAN を接続する。

通常の LAN で使うアドレスの前に vLAN タグという、vLAN を区別するアドレ スを付ける。

VPN と vLAN の違いは、本質的にはあまりないが、実際問題として、vLAN は、 「vLANタグ」を使うもの、間にルータが入らないものの意味で使われる。

◆仮想ディスク(virtual disk)

1つの大きなファイルを、1つのハードディスクと同じように扱えるようにし たもの。仮想ディスクを使うと、次のようなことができる。

◆ユーザ・レベル・オペレーティング・システム

オペレーティング・システムは、本来ならハードウェア上 で動作するものである。 それを、一般のアプリケーションと同じように、他のオペレーティング・シス テム上で実行したものを、ユーザ・レベル・オペレーティング・システムとい う。

◆仮想ホスト(virtual host)

ネットワークに接続されたコンピュータをホストという。ホストは、サービス を提供するプログラム(サーバ)を動作とせるという意味もある。

仮想ホストは、本来なら複数のコンピュータが必要であったものを、1台に集 約する。ただし、ネットワークを超えて向こう側で見た時には、1台に集約さ れていることには気がつかせない。

仮想ホストの実現方法

◆仮想現実感(virtual reality)

高度なコンピュータ・グラフィックスやサウンドの技術を使って、実在しない ものを(コンピュータの中に)実在しているかのごとく見せかける。

人間が働き掛けると、現実と同じように応答する。感覚のフィードバックがある。

◆世俗的な「仮想」

最近の日本語では、コンピュータによる原義を離れて、「現実には存在しない」 という意味が使われることがある。 以前は、空間(と時間)の制約で実現できなかったことが、コンピュータとネッ トワークの発達により、現実に近いレベルにまで達してきた(部分的に現実の ものと置き換え可能になってきた)という意味も生じてきている。

■オペレーティング・システム

◆オペレーティング・システム(Operating System,OS)とは

◆オペレーティング・システムのメモリへの読込みと実行

徒然草(つれづれぐさ)。八になりし年。最初の仏問題。

OSは、他のプログラムを実行するプログラムである。 他のプログラムは、OSの力を借りてはじめて実行される。

ではOSは、誰が実行するか?

ブート・ストラップ(Boot strap,靴ひも)。 ほら吹き男爵は、底なし沼に落ちた時に、自力で脱出するために、自分の靴ひ もにつかまって脱出した。

BIOSがブートローダをメモリに読み込み、ブートローダを実行する。

ブートローダがOSをメモリに読み込み、OSを実行する。

BIOS(Basic Input Output System)、ROM Monitor。OSをハードディスクから メモリにコピーして、OSに制御を渡すプログラム。ROM (Read-Only Memory) という、少容量の不揮発的なメモリに入っている。古いシステムでは、(フロッ ピ・ディスクへの)基本的な入出力の機能が含まれていた。

◆オペレーティング・システムの種類

ソフトウェアを買う時、自分のパソコンのOSで動作するものを買う。 (CPU の種類も大事。同じ OS でも CPU の種類がプログラムは違うと動作しない。)

自分が使いたいソフトウェアが動作するようなOSとCPUを積んだパソコン を買う。

◆歴史

「パーソナル・コンピュータ」の考え方は、比較的新しい。昔は、コンピュー タが高価だったので、1台のコンピュータを複数人(時には数百人)で同時に 使うことが一般的だった。

TSS (Time Sharing System)では、1台のコンピュータを大勢の人で同時に使 う、一人ひとりは、自分で占有しているかのように見える。

◆プロセス

プログラムとプロセス。

プロセスとは、オペレーティング・システムの働きにより、二次記憶に保存さ れていたプログラムがメモリ(主記憶)に読み込まれ、実行可能になったもの。

単にファイル(ハードディスク)に入っていも、プログラムはプログラムであ る。 1つのプログラムを同時に2個動かすことを考えると、プログラムとプロセス の違いがわかる。

メモリ、CPU、I/O、単一プログラム、複数プログラム/プロセス

図? オペレーティング・システムの構成要素

1つのプロセスから見ると、普段は自分一人で全部のコンピュータのハードウェ アを利用しているように見える。コンピュータの仮想化の最初。

プロセスは、時々、他のプロセスからデータを受け取る(プロセス間通信)。


Last updated: 2009/09/23 17:19:21
Yasushi Shinjo / <yas @ cs.tsukuba.ac.jp>