「オペレーティングシステムとは何か」の版間の差分

提供:UnixClassWiki
ナビゲーションに移動 検索に移動
74行目: 74行目:
====  ソフトウェアリソース ====
====  ソフトウェアリソース ====


ソフトウェアは、そのコンピュータ上で動くソフトウェアで共有し利用するよ
ソフトウェアは、そのコンピュータ上で動くソフトウェアで共有し利用するようなデータ、ライブラリ、プログラムを意味します。
うなデータ、ライブラリ、プログラムを意味します。


たとえばオペレーティングシステムの心臓部であるカーネル部分、アプリケー
 
ションが使うライブラリ、あるいはシステムを運用する上で必要なコマンド群
たとえばオペレーティングシステムの心臓部であるカーネル部分、アプリケーションが使うライブラリ、あるいはシステムを運用する上で必要なコマンド群などなどがあげられます。どのソフトウェアどんな役割を担うのかの議論は後程しましょう。
などなどがあげられます。どのソフトウェアどんな役割を担うのかの議論は後
程しましょう。


==== ヒューマンリソース ====
==== ヒューマンリソース ====

2010年6月9日 (水) 02:00時点における版

オペレーティングシステムとは何か

オペレーティングシステムの再確認

オペレーティングシステムとは何かを、基本に戻って再確認してみましょう。 オペレーティングシステム( Operating System )は、名前の通り、コンピュー タを操作してゆく(Operating/オペレーティング)体系(System/システム)です。

オペレーティングシステムの役目を簡単に短く説明すると、「リソース( Resource : 資源 )と、アプリケーション( Application : ユーザが使うソフ トウェア )の間に挟まり、両者を結び付けるための糊の役目をするソフトウェ ア群である」といえるでしょう。


  • リソースを効率的に利用するための
  • アプリケーションが直接リソースを制御する必要をなくするため
  • アプリケーションにとってリソースをさらに抽象化するため

リソースとは

リソースとは、コンピュータ上にある、処理を行なう際に必要となる資源を意 味する概念的なものです。リソースとしてハードウェアリソースとソフトウェ アリソースの2つはすぐに思い浮かぶでしょう。さらに一歩踏み込んでオペレー ティングシステムはコストをより少なくするための道具と考えるならば、利用 者や運用者などを指してヒューマンリソースとしリソースの中に含める必要が あります。ハードウェアリソース、ソフトウェアリソース、ヒューマンリソー スを有効に使うための役割がオペレーティングシステムには求められます。


捕捉
一口にコストといってもいろいろな場面でのコストがあります。また数値に現れるコストだけではなく、数値に現れにくく把握するのが難しいコストもあります。


以下に色々なリソースについて考えてみましょう。


ハードウェアリソース

  • CPU
  • 主記憶装置
  • 補助記憶装置
  • 入出力装置
  • etc.


CPU

CPU( Central Processing Unit : 中央演算処理装置 ) : 命令を実行し、演算を行なうユニット部分です。少し前までは、CPUの説明といえば、プロセッサチップを示せば終だったのですが、最近の高性能のプロセッサチップは、少々複雑になっています。現在のプロセッサチップは、キャッシュ記憶ユニットという高速に記憶を取り込むための、短期間だけ記憶を保持しているような記憶装置も内蔵しています。それ以外にも多くの機能を詰め込んでいます。そこまで分割していくと話が混乱しますので、ここでのCPU はプロセッサチップという具体的な製品ではなく、命令を実行し演算を行なうユニットという抽象的な役割部分だと理解してください。以降、他のCPU説明でも同じです。

主記憶装置

主記憶装置 ( Main Memory Unit ) : いわゆるメモリのことです。 CPUと直接やりとりする記憶装置を指します。 演算のための値を記憶しておく、結果を 記憶しておく、命令を記憶しておくなどといったために使われます。以前は、単純にCPU <->主メモリという構造で説明が十分だったのですが、現在での具体的な物理メモリの構成は、いくつかの階層にわかれていて、CPUと記憶をやりとりしています。 わりきって一言でいうなら電気を切ったら消えてしまう一時的な記憶装置です。

補助記憶装置

補助記憶装置 ( Auxiliary Memory Unit ) : ハードディスクや磁気テープ のような装置のことです。現在ではコンパクトフラッシュメモリやUSBメモリ などもこのような区分けに入ってきます。主記憶装置との違いは、CPUと直接 記憶のやりとりを行なわないこと、記憶の容量が大きいこと、長期間の記憶 (一言でいえば電気を切っても記憶が消えない)を保持するユニットです。

入出力装置

入出力装置 ( Input/Output Unit ) : キーボード、マウス、ディスプレイ といったものや、シリアルポートやパラレルポート、またあるいはネットワー クボードといったものなどのがあげられます。

調べてみよう
ハードウェアリソースを構成するものとしてこの他に、どんなものがあるだろうか。

ソフトウェアリソース

ソフトウェアは、そのコンピュータ上で動くソフトウェアで共有し利用するようなデータ、ライブラリ、プログラムを意味します。


たとえばオペレーティングシステムの心臓部であるカーネル部分、アプリケーションが使うライブラリ、あるいはシステムを運用する上で必要なコマンド群などなどがあげられます。どのソフトウェアどんな役割を担うのかの議論は後程しましょう。

ヒューマンリソース

人的なリソースです。コンピュータが非常に高価だった頃は、その利用のため に人を雇うコストの方が小さいファクタだったため、あまり大きな関心は寄せ られていませんでした。高性能のコンピュータがコモディティ(日用品)化して しまっている現在では、人的なリソースの方が高価です。人的リソースの効率 的利用できるようにすることもオペレーティングシステムには求められていま す。昔の汎用機時代においては、人的コストよりもハードウェアのコストの方 がはるかに高く、そのため人間が便利に使えるよりも、まずハードウェアを最 も効率よく使うにはどうするべきかを優先していました。時代の流れでハード ウェアのコストが下がるにつれ、人的コストの比率が相対的にあがってきます。 このような状況では、今度は人的コストを如何に下げるかが課題となります。


調べてみよう
人的なコストを低減するためにどのような工夫がなされているのだろうか。

オペレーティングシステムの潮流

最近は、どんどんハードウェアが高性能になっていきます。例えば、デスクトッ プコンピュータ、いわゆるパソコンと呼ばれる機械の上位機種の計算スピード は、私がこの業界に入った1980 年半ばのスーパーコンピュータ並、あるいは それ以上の性能をたたき出しています。

1990年当時から比較しても、エンジニアリングワークステーションと呼ばれて いた数百万から一千万円くらいの価格だったコンピュータシステムよりも遥か に高速です。

当然、そうなってくると、高性能なハードウェアを効率よく動かす、かつハー ドウェアの能力を引き出すために、かつて高価なコンピュータで使われたいた オペレーティングシステムのテクノロジーが必要になってきます。かくして、 身近に高性能なオペレーティングシステム が使われるようになります。

現在のオペレーティングシステムへ向かう2つの流れ

現在のハードウェアとオペレーティングシステムの関係をハードウェアの歴史 の変遷を踏まえて考えてみます。みなさんが使っているデスクトップのコン ピュータに至る流れには2つの流れがあります。

下から上への流れ

小さいものから、大きなものへ変化した様子を見てみましょう。

1971年に世界初のマイクロプロセッサIntel 4004 が出来てから、パーソナルコンピュータが作られ、どんどん性能が良くなってきた流れです。パーソナルコンピュータ、いわゆるパソコンは初めは玩具のようなものでした。

1975年に発売された世界初のパソコンMITS Altair 8080はIntel 8080 250Khz を搭載しメモリは256byteでした。キーボードもモニターも当然ながらハード ディスクなどありません。プログラムはフロントパネルからスイッチを操作し、 バイナリーのマシン語を入力します。

1976年ぐらいになると、Apple、Sol、Altairといった最も初期の頃のパソコン が作られてきます。この頃、Bill GatesとPaul AllenはAltair 8080 (メモリ 4KByte版)用に大型汎用機上で動いていたBASIC言語を移植しMITSへライセン スします。翌、1977年にはSteve WozniakとSteve JobsがApple Corporationを 設立し、また同じくしてBill Gates とPaul Allenは正式にMicrosoft company を設立します。


Apple や Sol や Altairのような初期のパソコンが作られます。下がスミソニアン 博物館にある世界初のパソコンの写真です(著者撮影)。

Homebrew computer club
Apple
Sol
Altair


1984年にIBMがIBM PCを販売開始した時が、今日のパーソナルコンピュータ隆 盛の時代の本格的な幕開けだったといえるでしょう。

初期の頃のパソコンにはオペレーティングシステムがありませんでした。次に CP/MやMS-DOSといった 低レベルな機能しか持たない原始的なオペレーティン グシステムが現われます。

補足
ただし、厳密にはオペレーティングシステムとは呼べずモニターと呼ぶべきものだと筆者は考えます。


調べてみよう
オペレーティングシステムの前段階ともいえるモニターとはなんだろうか。

これはハードウェアの能力が極めて限られているので、大型汎用機のような機 能を望むべくもなく、低レベルな機能しか持たざる得ないという限界がありま す。1990年代ともなると、高速なCPU、大容量のメモリー、大容量のハードディ スクなどハードウェアの能力は格段に上がります。

しかし、一方で、そのハードウェア上で動かしているソフトウェアのシステム 構造は古い頃から手直し、手直ししてアップグレードしてきたものです。さら にパーソナルな環境ではなく、ネットワークに繋がれ、さらにはインターネッ トに繋がれるまでになると、玩具の箱から個人のツールとして発展してきた単 純なパーソナルコンピュータのモデルではいずれ限界が来てしまいます。

このように下から上へ向かうトレンドが、まず1つあります。

上から下への流れ

コンピュータが作られた時から、今日のパーソナルコンピュータが隆盛を究め るまでに至まで常にコンピュータのハードウェアは高価なものでした。1960年 当時初期までは、コンピュータはプログラムを走らせるために特別なセットアッ プが必要で、色々なプログラムを走らせることが困難でした。高価なハードウェ ア上でもっと汎用的にプログラムを動かすために作られたシステムが1964年に 作られたIBM S/360です。ここで始めて今日的なオペレーティングシステムが 作られます。汎用機という言葉は、この「汎用的にプログラムを動かすことが できるシステム」という所から来ています。


時代は流れ大型汎用機もダウンサイジングの並に流されます。まず最初のダウ ンサイジングで成功したのはDEC社の科学技術計算用コンピュータPDPシリーズ やVAXシリーズです。これらはミニコンと呼ばれました。これは1970年代後半 から80年代後期まで成功を納めます。さらに時代は進み、今度はワークステー ションの出現です。90年代に入るとDEC社のVAXが、SUN MicrosystemsのSUN ワー クステーションに置き換わることになります。そのダウンサイジングに大きな 役目を果たしたのがUNIXです。UNIXはワークステーションからスーパコンピュー タまであらゆるサイズのコンピュータ上で使えるようになっていました。別の 言い方をすれば、ワークステーションからスーパーコンピュータでも十分に満 足できる今日的オペレーティングシステムの機能をUNIXは兼ね備えているとい うわけです。しかし、まだ業務や科学技術計算で使うコンピュータと、パーソ ナルで使うコンピュータには価格的にも性能的にも大きな隔たりがありました。


90年代後半になるとIA-32 (Intel Architecture --- 32bit)のハードウェアに 席捲されます。2000年以降は、ダウンサイジングの到着点です。もう個人で使 うパーソナルコンピュータも、業務や科学技術計算で使うものも、ハードウェ ア的には価格的にも、使われている技術にも、処理能力にも線引きが出来でき ません。


2005年では、64bit CPU、デュアルプロセッサ対応、デュアルコアCPUといった 最先端のテクノロジーがコモディティ市場 (一般消費者向け市場) に売られて いる時代になりました。この傾向はこれから先も続きます。

考えてみよう
ムーアの法則には限界があるのか、ないのか。あるとしたらなぜなのか。ないならばなぜなのか。ムーアの法則の意味は、オリジナルの意味である集積度の向上と、派生的に多く使われている性能の向上のどちらの意味で取ってもよい。

2007年現在の状況

下から上がって来た流れと、上から下がってきた流れがぶつかり、しかもそれ がうまく融合していない状態が続いていたという状況で、やっと今は、下から の流れを捨てつつ、上からの流れに追いついたといえるでしょう。


下からの流れがいちばん判りやすいのがMicrosoft社のセキュリティの問題で す。その主力製品であるWindowsは1つはWindows 95/98/Meという流れがあり、 もう1つはWindows NT/2000/XPという流れがあります。前者は、パーソナルコ ンピュータの流れ、後者は大型汎用機の流れです。ちなみにWindows NTを設計 したのはDEC でVMSの開発をしていて、Microsoft社にヘッドハンティングされ たデビット・カトラーです。


上から下がっていたオペレーティングシステムの体系に、下から上がってきた アプリケーション体系を合わせようとしても、なかなかうまくいきません。


パーソナルコンピュータでは、使っているのは一人なわけですから、なんでも オールマイティーにアクセスしても一見問題はないように見えます。一方で大 きなコンピュータは一人で使っていては、あまりにも高価なので、多人数で使 えるなければなりませんし、そうなれば勝手に他人のファイルや、ましてや勝 手にシステムの運用に関わる設定など変えてはいけません。


なんでもアクセスできてしまうパーソナルコンピュータのソフトウェアの方が シンプルかつ簡便な操作を提供できる...と考えても不思議ではありません。 しかし、便利であったはずの「なんでもアクセスできる」というのがセキュリ ティの面、特にコンピュータウィルスや脆弱性をついてのシステムへの侵入な どクリティカルな問題へ結びつき、それが時代とともに表面化してきました。


上からと下からの矛盾が現在のWindowsの根本的な問題となっています。現在 ではWindows Vistaになって、完全にユーザ権限を分離した管理体系による高 いセキュリティを持つという能力を提供しています。ですが、一方現状では Windows XPまで動いていたアプリケーションやドライバー類が動かずデベロッ パーやユーザが不満を漏らしています。


しかしながら必要な安全性を達成するには、下から上へ上がってきたようなレ ガシーなソフトウェアを切り捨てなければ困難でしょう。しかし、一方で膨大 なソフトウェア資産があるわけです。この矛盾に終止符を打つのは、そう簡単 なことではありません。

調べてみよう
1980年代のスーパーコンピュータやパソコンと呼ばれていたコンピュータの処理能力は、どの程度のものだったのだろうか。その能力の向上はどうだったのだろうか。

何をさしてオペレーティングシステムと呼ぶのか

コンピュータ上で動いているソフトウェア(下図)のどの部分を指してオペレー ティングシステムと呼ぶべきないのか、ということの定義を確認しましょう。


ここでは、一番最下層をハードウェアとして、次にあるのがカーネルの層、そ の次が汎用に使われるシステムユーティリティの層、そして、特定目的のため にユーザが利用するアプリケーションの層と分けてみます。


オペレーティングシステムと、システムユーティリティの両方を1つのまとま りとして、システムソフトウェアと呼びます。「システムを動かすのに最低限 必要なソフトウェアセット」という広い意味で捉えたオペレーティングシステ ムであれば、このシステムソフトウェアがオペレーティングシステムと同意語 であると言えます。


しかし「最小限必要な」という定義は、かなり曖昧な表現です。なぜならば、 ここには「誰が、どのように使うか」ということが抜けているからです。この 部分を拡張していけば、たとえば「ワードブロセッシングを行いたい人が使う ためのコンピュータ」という場合は「バンドルされているワードプロセッサの プログラムも含めてオペレーティングシステムである」という奇妙な結論が導 かれてしまいます。


しかしながら、「パッケージを購入した時にバンドルされているものが最小限のセットであるので、これがオペレーティングシステムである」という誤解 [1] は一般には多いようです。 しかし、これではゲームのソリティアもオペレーティングシステムに含まれることになるので、やはり奇妙な結論と言えます。



 <ソフトウェア階層>
   ワードプロセッサ / エディタ / ゲーム / ブラウザ | etc.
                             ============
   ユーティリティ / ウィンドウシステム / シェル(コマンド・インタプリタ) / etc.
                             ============
                                カーネル
                              ============
                              ハードウェア


では逆に、ここは確実にオペレーティングシステムだろうと言える部分を考えてみます。まずカーネルは当然入ります。ユーザが使うということであれば、 シェルなども必要です。なぜならシェルがないとコマンドを入力できません。当然ユーザを認証するためのログインに関連するソフトウェアが必要です。


補足
カーネルとそれ以外のソフトウェアの切り分けは、実行されるプロセスの実行モードが、どの状態で動いているかで区別します。プロセスの実行モードが、カーネル・モード(UNIX以外のシステムによっては特権モード、スーパーバイザ・モード、あるいはマスタ・モードとも呼ばれる) で動作しているか、ユーザ・モード ( 非特権モード、プロブレム・モード、あるいはスレーブモードとも呼ばれる)で動作しているかどうかです。実行モードに関しては、実行とプロセスに関する話題の時に改めて説明します。


どれくらいのものが最初に用意されるのか、Debian GNU/Linux Woodyを例にして調べてみました。

 ディレクトリ名      コマンド数
 /bin              74
 /sbin             105 
 /usr/bin          275
 /usr/sbin         112
補足
2007年ではDebian GNU/Linux Etchが最新です。

このコマンド数も先に述べたようにすべてが必要であるとは限りません。最小 限インストールの状態のDebian GNU/Linuxに入っているコマンド数を数えたに 過ぎません。しかしながら、いくつかのコマンドとそのコマンドで利用される ライブラリ群はオペレーティングシステムには必要になるといえます。


では、グラフィカルインタフェース(GUI)を提供するためのウィンドウシステ ムはオペレーティングシステムに入るのでしょうか?


一般的なUNIXシステムでは、GUIがなくても当然動きますし、サーバシステム ではGUIなどは必須ではありません。もちろん先程のDebian GNU/Linux最小限 セットの中にはX Window Systemは入っていません。逆にパーソナルコンピュー タ用のオペレーティングシステムと呼ばれるものではウィンドウシステムは 切り離すことができないコンポーネントとなっています。


ここまででわかったことは、まず、カーネルは確実にオペレーティングシステ ムであること、そして、システムを動かす時に必要なソフトウェアがいくつか あること、ただし、その必要なソフトウェアは何かの線引きは難しいというこ とです。


下はDebian GNU/Linux (Woody) を最小限のインストールして立ち上げてみた 状態です。topコマンドを使い、メモリや実行中のプロセスが、どのような状 態になっているか観察したものです。用意しているメモリは32MBですが、この 状態で使われている記憶領域は約7.8MBしか使っていません。dfを使ってディ スクの利用状況を見てみると、約536MBのハードディスクを用意していますが (フォーマット後の要領約500MB) 、最小のインストールでは約80MBしか使って いません。最小限のセットを考えた場合、かなり小さくて済みます。一方、ど んどんその適用範囲を広げていった場合、どこまでがオペレーティングシステ ムと呼んでいいのか、どこからがそれ以外のアプリケーションと呼ぶかのはグ ラデーションのように曖昧になることでしょう。


 # top
 04:09:46 up 0 min,  1 user,  load average: 0.00, 0.00, 0.00
 18 processes: 17 sleeping, 1 running, 0 zombie, 0 stopped
 CPU states:   0.0% user,   0.0% system,   0.0% nice,  100.0% idle
 Mem:     32244K total,     7844K used,    24400K free,      644K buffers
 Swap:        0K total,        0K used,        0K free,     4028K cached
  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
    1 root       8   0   484  484   424 S     0.0  1.5   0:00 init
    2 root      -2   0     0    0     0 SW    0.0  0.0   0:00 keventd
    3 root      18  19     0    0     0 SWN   0.0  0.0   0:00 ksoftirqd_CPU0
    4 root      -2   0     0    0     0 SW    0.0  0.0   0:00 kswapd
    5 root      -2   0     0    0     0 SW    0.0  0.0   0:00 bdflush
    6 root      -2   0     0    0     0 SW    0.0  0.0   0:00 kupdated
  129 root       0   0   656  656   540 S     0.0  2.0   0:00 syslogd
  132 root       0   0   500  500   380 S     0.0  1.5   0:00 klogd
  140 root       2   0   508  508   444 S     0.0  1.5   0:00 inetd
  161 daemon     2   0   580  580   504 S     0.0  1.7   0:00 atd
  164 root       2   0   684  684   564 S     0.0  2.1   0:00 cron
  167 root       0   0   468  468   408 S     0.0  1.4   0:00 getty
  168 root       2   0   468  468   408 S     0.0  1.4   0:00 getty
  169 root       2   0   468  468   408 S     0.0  1.4   0:00 getty
  170 root       2   0   468  468   408 S     0.0  1.4   0:00 getty
  171 root       6   0   468  468   408 S     0.0  1.4   0:00 getty
  172 root       8   0  1208 1208   992 S     0.0  3.7   0:00 bash
  174 root      14   0   924  924   748 R     0.0  2.8   0:00 top
 # df
 Filesystem           1k-blocks      Used Available Use% Mounted on
 /dev/ubd0               507748     80252    401282  17% /

コンピュータを仮想化させる

我々が、アプリケーションプログラムを使う時、プログラムがコンピュータ を占有しているように見えます。

実際は、オペレーティングシステムが、リソースを抽象化し、プログラムに 使えるリソースを割り当てることをします。つまり、プログラムは、「仮想化 されたコンピュータ」を割り当てられることになります。

UNIXでは、どのような仮想化の例があるのでしょうか? 典型的な例をいくつ かあげて見ましょう。

  • CPUのリソースは、プログラムに対し、プロセスという単位で割り当てられます。
  • プログラムの使う記憶空間のリソースは、仮想記憶によりコントロールされます。仮想記憶の機構により、主記憶だけではなく、補助記憶装置も使って、主記憶よりも大きい記憶空間を作ることが可能です。その中から、プログラムが必要な大きさの記憶空間リソースを割り当ています。
  • 永続的な記憶を保管しておくために、ファイルという抽象的なデータの保管メカニズムを使います。そのファイルを効率的かつ統一的に扱うために、ファイルシステムを作ります。ファイルシステムは、主記憶と補助記憶装置を使って、ファイルのリソースを提供します。
  • 入出力装置のリソースのために、デバイスファイルという入出力装置を抽象化した入出力リソースを提供しています。
 プログラムA --- 仮想的なコンピュータ
			[プロセス(CPUの抽象化), 
			 仮想記憶(主記憶装置の抽象化), 
			 ファイル(補助記憶装置の抽象化), 
			 デバイスファイル(入出力装置の抽象化) 
                         etc.]
 プログラムB --- 仮想的なコンピュータ
			[プロセス(CPUの抽象化), 
			 仮想記憶(主記憶装置の抽象化), 
			 ファイル(補助記憶装置の抽象化), 
			 デバイスファイル(入出力装置の抽象化) 
                         etc.]
 プログラムC ....
 プログラムD ....
 プログラムE ....
捕捉 さらに
[Xen]や[VMware]のようにハードウェア側を抽象化し、1つのハードウェア上に複数のオペレーティングシステムを動かすバーチャルマシンのシステムもあります。


抽象化の例

UNIXの上で次のコマンドを実行すると端末にHelloと表示されます。これは文 字列"Hello"を出力し、その出力先を ファイル/dev/tty への入力するという 働きをします。ファイル(デバイスファイルと呼びます)/dev/ttyというのは、 端末を抽象化したものです。

 % echo "Hello" > /dev/tty
 Hello

上の図で、プログラムA、B,....E、は、オペレーティングシステムから利用可 能なリソースを割り当てられ、その中で実行しています。しかし、アプリケー ションA、B,....は、割り当てられたリソースのコントロールを意識しません。 例えば、プログラムがデータを補助記憶装置にファイルの形でデータを残そう とした時、プログラムが、補助記憶装置に使われているハードウェアを直接的 にコントロールする必要はありません。

つまり、1つのプログラムは、1つの仮想化されたコンピュータで動いているよ うに見えるわけです。

不完全なリソース管理

もし、直接的にコントロールするはずのないリソースをユーザのアプリケーショ ンプログラムがオペレーティングシステムを飛び越して直接的にコントロール できるようなことがあればどうなるのでしょうか?


例えば、ユーザのアプリケーションプログラムにバグがあり、割り当てられた リソース以外のリソースを不用意に利用してしまうようなことを許すような不 完全なリソース管理のオペレーティングシステムだとどうなるでしょうか?


上の図で、プログラムA、B,....は、オペレーティングシステムから割り当て られたリソースを使っているわけですから、オペレーティングシステムの知ら ない所で、割り当てられていないリソースに勝手なことをされては、一貫性が 保てません。


つい最近までパソコンのオペレーティングシステムは、このような不完全なリ ソース管理の能力しか持っていませんでした(そもそも、オペレーティングシ ステムと呼ぶに値するのか、本来はモニタと分類すべきものではないのか、という疑問がありますが)。

さらなる仮想化の例

mmapとファイル

例えば、UNIXのMMAPと呼ぶ機能です。最近のUNIXは、mmapという機能を使ってプログラムは、 ファイルを記憶空間に張り付ける (マップする) ことができます。 主記憶、補助記憶装置のリソース区別が更に抽象化されプログラムの中で使える記憶空間としてのリソースとなります。 もちろん通常のプログラムに割り当てられた記憶領域として、読み込み、書き込みすると、その内容がファイルに反映されます。 さらに、ファイルという形で、複数のプロセスから、共有することができます。


VFSからデバイスドライバまで

ファイルシステムをさらに抽象化するLinuxのファイルシステムを紹介しましょう。 Linuxのファイルシステムは、上位にVFS (Virtual File System)が存在し、その下に、またMinix、MS-DOS、その他の ファイルシステムをもち、さらにその下にバッファキャッシュをおき、さらに下にデバイスドライバをおくという、何重もの層を 持っている形になっています。 プログラムは、Linuxのファイルを扱っているだけで、その下がMS-DOSのファイルシステムや Minix のファイルシステムであるかを知る必要はありません。 しかも、その下には、ハードディスクやフラッシュメモリ (例えばUSBメモリやSDカードなど)といった 補助記憶装置との入出力効率を改善するために、バッファキャッシュというクッションをおいてあります。 その下に、装置をコントロールするためのデバイスドライバが用意されている形になります。 このように重層的な構造にすることによって、抽象化を図っています。


		プログラム
                 ^^^^^^^^
	========[ファイル]=======
	バーチャルファイルシステム (VFS)   <----(+)  ↑ 高       
        --^^----^^-----^^----------^^----            抽象度
	[ext2][msdos][minix].....[proc]              ↓ 低
	---^^^^^^^^^^^^^^-------
           バッファキャッシュ
        -------^^^^^-----------
	   デバイスドライバ------------->(+)
        ------^^^^^^^^^--------
          ___+____+____+_
             v    v    V
	    HDD  HDD HDD
 ext2 --- Linuxのファイルシステム
 msdos --- MSDオペレーティングシステムのファイルシステム
 minix --- MINIXのファイルシステム
 proc  --- プログラムファイルシステム (Linux独自)


脚注

  1. 日本語版wikipediaではウェブブラウザや時計などのアクセサリーも広義のオペレーティングシステムだということを書いていますが、そんなことをテストに書いて点数をくれる先生は極めて少数派でしょう。

目次