差分

移動先: 案内検索

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

2,318 バイト追加, 2022年2月17日 (木) 05:07
/* 脚注 */
=== オペレーティングシステムの再確認 ===
オペレーティングシステムとは何かを、基本に戻って再確認してみましょう。オペレーティングシステムとは何かを基本に戻って再確認してみましょう。オペレーティングシステム( Operating System )は、名前の通り、コンピューを短く説明すれば、文字通りコンピュータを操作してゆくタを操作してゆく(Operating/オペレーティング)体系(System/システム)です。
オペレーティングシステムの役目を簡単に短く説明すると、「リソース(
Resource : 資源 )と、アプリケーション( Application : ユーザが使うソフ
トウェア )の間に挟まり、両者を結び付けるための糊の役目をするソフトウェ
ア群である」といえるでしょう。
オペレーティングシステムの役目は次の3つの目標を達成するためにリソース
(Resources : 資源 )
と、
アプリケーション
( Applications : ユーザが使うソフトウェア )
の間に存在し両者を結び付けるための糊の役目をするソフトウェア群であるといえます。
* リソースを効率的に利用するための
* アプリケーションが直接リソースを制御する必要をなくするためリソースを効率的に利用し、また管理をする
* アプリケーションにとってリソースをさらに抽象化するためアプリケーションが直接リソースを制御する必要をなくする
* アプリケーションにとってリソースをさらに抽象化する
<PRE> アプリケーション <--> オペレーティングシステム <--> リソース</PRE>=== リソースとは ===
リソースとは、コンピュータ上にある、処理を行なう際に必要となる資源を意味する概念的なものです。
リソースとしてハードウェアリソースとソフトウェアリソースの2つはすぐに思い浮かぶでしょう。
さらに一歩踏み込んでオペレーティングシステムはコンピュータ・システムを利用するコストをより少なくするための道具と考えるならば、
利用者や運用者などを指してヒューマンリソースとしリソースの中に含める必要が出てきます。
=== リソースとは ===
リソースとは、コンピュータ上にある、処理を行なう際に必要となる資源を意味する概念的なものです。リソースとしてハードウェアリソースとソフトウェアリソースの2つはすぐに思い浮かぶでしょう。さらに一歩踏み込んでオペレーティングシステムはコストをより少なくするための道具と考えるならば、利用者や運用者などを指してヒューマンリソースとしリソースの中に含める必要があります。ハードウェアリソース、ソフトウェアリソース、ヒューマンリソースを有効に使うための役割がオペレーティングシステムには求められます。つまりハードウェアリソース、ソフトウェアリソース、ヒューマンリソースを有効に使うための役割がオペレーティングシステムには求められます。
==== ハードウェアリソース ====
<PRE> CPU、主記憶装置、補助記憶装置、入出力装置、etc.</PRE>ハードウェアリソースにはCPU、主記憶装置(メモリ)、補助記憶装置、入出力装置、ほかがあります。
===== CPU =====
CPU( Central Processing Unit : 中央演算処理装置 ) : 命令を実行し、演算を行なうユニット部分です。少し前までは、CPUの説明といえば、プロセッサチップを示せば終だったのですが、最近の高性能のプロセッサチップは、少々複雑になっています。現在のプロセッサチップは、キャッシュ記憶ユニットという高速に記憶を取り込むための、短期間だけ記憶を保持しているような記憶装置も内蔵しています。それ以外にも多くの機能を詰め込んでいます。そこまで分割していくと話が混乱しますので、ここでのCPU はプロセッサチップという具体的な製品ではなく、命令を実行し演算を行なうユニットという抽象的な役割部分だと理解してください。以降、他のCPU説明でも同じです。
 
===== 主記憶装置 =====
主記憶装置 ( Main Memory Unit ) : いわゆるメモリのことです。CPUと直
接やりとりする記憶装置を指します。演算のための値を記憶しておく、結果を
記憶しておく、命令を記憶しておくなどといったために使われます。以前は、
単純にCPU <->主メモリという構造で説明が十分だったのですが、現在での具
体的な物理メモリの構成は、下図のように、いくつかの階層にわかれていて、
CPUと記憶をやりとりしています。わりきって一言でいうなら電気を切ったら
消えてしまう一時的な記憶装置です。
 <PRE> CPUとメモリ間のデータのやりとりの例 CPU <-> 一次キャッシュ主記憶装置 (プロセッサチップコア内Main Memory Unit ): いわゆるメモリのことです。 <-> 二次キャッシュ (SRAM / プロセッサチップコア内)CPUと直接やりとりする記憶装置を指します。 <-> 主メモリ (DRAM)演算のための値を記憶しておく、結果を記憶しておく、命令を記憶しておくなどといったために使われます。以前は、単純にCPU ←→主メモリという構造で説明が十分だったのですが、現在での具体的な物理メモリの構成は、アクセスの効率を考え何段階かの動作速度や容量が異なるキャッシュメモリを用意しておき、CPUと記憶をやりとりしています。</PRE>わりきって一言でいうなら電気を切ったら消えてしまう一時的な記憶装置だといえます。
===== 補助記憶装置 =====
 補助記憶装置 ( Auxiliary Memory Unit ) : ハードディスクや磁気テープハードディスクや磁気テープのような装置のことです。のような装置のことです。現在ではコンパクトフラッシュメモリやUSBメモリ現在ではコンパクトフラッシュメモリやUSBメモリなどもこのような区分けに入ってきます。などもこのような区分けに入ってきます。主記憶装置との違いは、CPUと直接記憶のやりとりを行なわないこと、記憶の容量が大きいこと、長期間の記憶主記憶装置との違いは、CPUと直接記憶のやりとりを行なわないこと、記憶の容量が大きいこと、長期間記憶(一言でいえば電気を切っても記憶が消えないわり切って言えば電気を切っても消えない記憶)を保持するユニットです。
===== 入出力装置 =====
入出力装置 ( Input/Output Unit ) : キーボード、マウス、ディスプレイ
といったものや、シリアルポートやパラレルポート、またあるいはネットワー
クボードといったものなどのがあげられます。
入出力装置 ( Input/Output Unit ) : キーボード、マウス、ディスプレイといったものや、シリアルポートやパラレルポート、またあるいはネットワークボードといったものなどのがあげられます。
<PRE>
ハードウェアリソースの構成
CPU CPU CPU ......
| | |
主記憶装置
|
|---+---|
| +- 補助記憶装置
|
入出力装置
</PRE>
 :'''調べてみよう''': ハードウェアリソースを構成するものとしてこの他に、どんなものがあるだろうか。 ハードウェアリソースを構成<ref>コンピュータの構成と設計 第5版 上 , ジョン・L. ヘネシー (著), デイビッド・A. パターソン (著), 成田 光彰 (翻訳), 2014/12/6, ISBN 4822298426</ref><ref>コンピュータの構成と設計 第5版 下, デイビッド・A・パターソン (著), ジョン・L・ヘネシー (著), 成田光彰 (翻訳), 2014/12/6, ISBN 4822298434</ref>するものとしてこの他に、どんなものがあるだろうか。
==== ソフトウェアリソース ====
<PRE> ライブラリ、データ、プログラム、etc.</PRE> ソフトウェアは、そのコンピュータ上で動くソフトウェアで共有し利用するようなデータ、ライブラリ、プログラムを意味します。ソフトウェアは、そのコンピュータ上で動くソフトウェアで共有し利用するようなデータ、ライブラリ、プログラムを意味します。
たとえばオペレーティングシステムの心臓部であるカーネル部分、アプリケー
ションが使うライブラリ、あるいはシステムを運用する上で必要なコマンド群
などなどがあげられます。どのソフトウェアどんな役割を担うのかの議論は後
程しましょう。
たとえばオペレーティングシステムの心臓部である[[カーネルの構造と機能|カーネル部分]]、アプリケーションが使うライブラリ、あるいはシステムを運用する上で必要なコマンド群などがあげられます。データベースを考えるとアプリケーションとしてのデータベースプログラムとその中に格納されアプリケージョンに利用されるデータから成り立ちます。この両者があってソフトウェアリソースとして提供されるデータベースとして意味をなします。多種多様なソフトウェアリソースがどのような役割を担うのかの議論は後ほどしましょう。
==== ヒューマンリソース ====
人的なリソースです。コンピュータが非常に高価だった頃は、その利用のため人的なリソースです。コンピュータが非常に高価だった頃は、その利用のために人を雇うコストの方が小さいファクタだったため、あまり大きな関心は寄せられていませんでした。に人を雇うコストの方が小さいファクタだったため、あまり大きな関心は寄せ昔の汎用機時代においては、人的コストよりもハードウェアのコストの方がはるかに高く、そのため人間が便利に使えるよりも、まずハードウェアを最も効率よく使うにはどうするべきかを優先していたのです。られていませんでした。高性能のコンピュータがコモディティ高性能のコンピュータがコモディティ(日用品)化してしまっている現在では、人的なリソースの方が高価です。人的リソースの効率的利用できるようにすることもオペレーティングシステムには求められています。昔の汎用機時代においては、人的コストよりもハードウェアのコストの方がはるかに高く、そのため人間が便利に使えるよりも、まずハードウェアを最も効率よく使うにはどうするべきかを優先していました。時代の流れでハードウェアのコストが下がるにつれ、人的コストの比率が相対的にあがってきます。このような状況では、今度は人的コストを如何に下げるかが課題となります。化してしまっている現在では、人的なリソースの方が高価です。人的リソースの効率的利用できるようにすることもオペレーティングシステムには求められています。このように時代の流れでハードウェアのコストが下がるにつれ、人的コストの比率が相対的にあがってきます。このような状況では、今度は人的コストを如何に下げるかが今日の課題となっています。
:'''調べてみよう''' : 人的なコストを低減するためにどのような工夫がなされているか調べてみよう。人的なコストを低減するためにどのような工夫がなされているのだろうか。
== オペレーティングシステムの潮流 ==
最近は、どんどんハードウェアが高性能になっていきます。例えば、デスクトッ時が立つにつれ、どんどんハードウェアが小型化し、また高性能になっていきます。プコンピュータ、いわゆるパソコンと呼ばれる機械の上位機種の計算スピードは、私がこの業界に入った1980 年半ばのスーパーコンピュータ並、あるいはそれ以上の性能をたたき出しています。例えば、2010 年のデスクトップコンピュータ、いわゆるパソコンと呼ばれる機械の上位機種の計算スピードは、私がこの業界に入った 1980 年半ばのスーパーコンピュータ並、あるいはそれ以上の性能を持っています。この文章を読んでいるこの瞬間では、2010年のデスクトップパソコンなど性能的に時代遅れになっているでしょう。
1990年当時から比較しても、エンジニアリングワークステーションと呼ばれて
いた数百万から一千万円くらいの価格だったコンピュータシステムよりも遥か
に高速です。
当然、そうなってくると、高性能なハードウェアを効率よく動かす、かつハー1990 年当時から比較しても、エンジニアリングワークステーションと呼ばれていた数百万から一千万円くらいの価格だったコンピュータシステムよりも遥かに高速です。<ref>RASPBERRY PI 2 MODEL B http://www.raspberrypi.org/products/raspberry-pi-2-model-b/ </ref><ref>Iridis-pi: a low-cost, compact demonstration cluster https://www.southampton.ac.uk/~sjc/raspberrypi/raspberry_pi_iridis_lego_supercomputer_paper_cox_Jun2013.pdf</ref>ドウェアの能力を引き出すために、かつて高価なコンピュータで使われたいたオペレーティングシステムのテクノロジーが必要になってきます。かくして、身近に高性能なオペレーティングシステム 当然、そうなってくると、高性能なハードウェアを効率よく動かす、かつハードウェアの能力を引き出すために、かつて高価なコンピュータで使われたいたオペレーティングシステムのテクノロジーが必要になってきます。かくして、身近に高性能なオペレーティングシステム が使われるようになります。 
=== 現在のオペレーティングシステムへ向かう2つの流れ ===
現在のハードウェアとオペレーティングシステムの関係をハードウェアの歴史現在のハードウェアとオペレーティングシステムの関係をハードウェアの歴史の変遷を踏まえて考えてみます。みなさんが使っているデスクトップのコンピュータに至る流れには2つの流れがあります。の変遷を踏まえて考えてみます。みなさんが使っているデスクトップのコンピュータに至る流れには2つの流れがあります。
==== 下から上への流れ ====
小さいものから、大きなものへ変化した様子を見てみましょう。
 
1971年に世界初のマイクロプロセッサIntel 4004 が出来てから、パーソナルコンピュータが作られ、どんどん性能が良くなってきた流れです。パーソナルコンピュータ、いわゆるパソコンは初めは玩具のようなものでした。
1975年に発売された世界初のパソコンMITS Altair 8080はIntel 8080 250Khz
を搭載しメモリは256byteでした。キーボードもモニターも当然ながらハード
ディスクなどありません。プログラムはフロントパネルからスイッチを操作し、
バイナリーのマシン語を入力します。
1976年ぐらいになると、Apple、Sol、Altairといった最も初期の頃のパソコンが作られてきます。この頃、Bill GatesとPaul AllenはAltair 1975年に発売された世界初のパソコンMITS Altair 8080はIntel 8080 (メモリ4KByte版)用に大型汎用機上で動いていたBASIC言語を移植しMITSへライセンスします。翌、1977年にはSteve WozniakとSteve JobsがApple Corporationを設立し、また同じくしてBill Gates とPaul Allenは正式にMicrosoft companyを設立します。250Khz を搭載しメモリは256byteでした。キーボードもモニターも当然ながらハードディスクなどありません。プログラムはフロントパネルからスイッチを操作し、バイナリーのマシン語を入力します。
Apple や Sol や Altairのような初期のパソコンが作られます。下がスミソニアン博物館にある世界初のパソコンの写真です(著者撮影)。1976年ぐらいになると、Apple、Sol、Altairといった最も初期の頃のパソコンが作られてきます。この頃、Bill GatesとPaul AllenはAltair 8080 (メモリ4KByte版)用に大型汎用機上で動いていたBASIC言語を移植しMITSへライセンスします。翌、1977年には [[Steve Wozniak]] とSteve Jobs <ref> スティーブ・ジョブズ 1 (講談社+α文庫) ISBN 4062816148 </ref>がApple Corporationを設立し、また同じくしてBill Gates とPaul Allenは正式にMicrosoft companyを設立します。
[[image:IMG_2551.JPG|thumb|Homebrew computer club ]]
[[image:IMG_2548.JPG|thumb|Apple]]や Sol や Altairのような初期のパソコンが作られます。スミソニアン博物館にある初期のパソコンたちの写真です。
[[image:IMG_2549.JPG|thumb|Sol]]
[[image:IMG_2547IMG_2551.JPG|thumb|Altair220px|Homebrew computer club ]]
[[image:IMG_2548.JPG|thumb|220px|Apple]]
1984年にIBMがIBM PCを販売開始した時が、今日のパーソナルコンピュータ隆盛の時代の本格的な幕開けだったといえるでしょう。[[image:IMG_2549.JPG|thumb|220px|Sol]]
初期の頃のパソコンにはオペレーティングシステムがありませんでした。次にCP/MやMS-DOSといった 低レベルな機能しか持たない原始的なオペレーティングシステムが現われます。[[image:IMG_2547.JPG|thumb|220px|Altair]]
:'''補足'''
: ただし、厳密にはオペレーティングシステムとは呼べずモニターと呼ぶべきものだと筆者は考えます。
:'''調べてみよう''':オペレーティングシステムの前段階ともいえるモニターとはなんだろうか。1984年にIBMがIBM PCを販売開始した時が、今日のパーソナルコンピュータ隆盛の時代の本格的な幕開けだったといえるでしょう。
これはハードウェアの能力が極めて限られているので、大型汎用機のような機
能を望むべくもなく、低レベルな機能しか持たざる得ないという限界がありま
す。1990年代ともなると、高速なCPU、大容量のメモリー、大容量のハードディ
スクなどハードウェアの能力は格段に上がります。
しかし、一方で、そのハードウェア上で動かしているソフトウェアのシステム初期の頃のパソコンにはオペレーティングシステムがありませんでした。次にCP/MやMS-DOSといった 低レベルな機能しか持たない原始的なオペレーティングシステムが現われます。構造は古い頃から手直し、手直ししてアップグレードしてきたものです。さらにパーソナルな環境ではなく、ネットワークに繋がれ、さらにはインターネットに繋がれるまでになると、玩具の箱から個人のツールとして発展してきた単純なパーソナルコンピュータのモデルではいずれ限界が来てしまいます。;補足: 機能が不十分なため厳密にはオペレーティングシステムとは呼べずモニターと呼ぶべきものだと筆者は考えます。   :'''調べてみよう''':オペレーティングシステムの前段階ともいえるモニターとはなんだろうか。  これはハードウェアの能力が極めて限られているので、大型汎用機のような機能を望むべくもなく、低レベルな機能しか持たざる得ないという限界があります。1990年代ともなると、高速なCPU、大容量のメモリー、大容量のハードディスクなどハードウェアの能力は格段に上がります。  しかし、一方で、そのハードウェア上で動かしているソフトウェアのシステム構造は古い頃から手直し、手直ししてアップグレードしてきたものです。さらにパーソナルな環境ではなく、ネットワークに繋がれ、さらにはインターネットに繋がれるまでになると、玩具の箱から個人のツールとして発展してきた単純なパーソナルコンピュータのモデルではいずれ限界が来てしまいます。 
このように下から上へ向かうトレンドが、まず1つあります。
=== 上から下への流れ ===
==== 上から下への流れ ====
コンピュータが作られた時から、今日のパーソナルコンピュータが隆盛を究め
るまでに至まで常にコンピュータのハードウェアは高価なものでした。1960年
当時初期までは、コンピュータはプログラムを走らせるために特別なセットアッ
プが必要で、色々なプログラムを走らせることが困難でした。高価なハードウェ
ア上でもっと汎用的にプログラムを動かすために作られたシステムが1964年に
作られたIBM S/360です。ここで始めて今日的なオペレーティングシステムが
作られます。汎用機という言葉は、この「汎用的にプログラムを動かすことが
できるシステム」という所から来ています。
時代は流れ大型汎用機もダウンサイジングの並に流されます。まず最初のダウコンピュータが作られた時から、今日のパーソナルコンピュータが隆盛を究めるまでに至まで常にコンピュータのハードウェアは高価なものでした。ンサイジングで成功したのはDEC社の科学技術計算用コンピュータPDPシリーズ1960年当時初期までは、コンピュータはプログラムを走らせるために特別なセットアップが必要で、色々なプログラムを走らせることが困難でした。やVAXシリーズです。これらはミニコンと呼ばれました。これは1970年代後半高価なハードウェア上でもっと汎用的にプログラムを動かすために作られたシステムが1964年に作られたIBM S/360です。ここで始めて今日的なオペレーティングシステムが作られます。から80年代後期まで成功を納めます。さらに時代は進み、今度はワークステーションの出現です。90年代に入るとDEC社のVAXが、SUN MicrosystemsのSUN ワークステーションに置き換わることになります。そのダウンサイジングに大きな役目を果たしたのがUNIXです。UNIXはワークステーションからスーパコンピュータまであらゆるサイズのコンピュータ上で使えるようになっていました。別の言い方をすれば、ワークステーションからスーパーコンピュータでも十分に満足できる今日的オペレーティングシステムの機能をUNIXは兼ね備えているというわけです。しかし、まだ業務や科学技術計算で使うコンピュータと、パーソナルで使うコンピュータには価格的にも性能的にも大きな隔たりがありました。汎用機という言葉は、この「汎用的にプログラムを動かすことができるシステム」という所から来ています。
90年代後半になるとIA-32 (Intel Architecture --- 32bit)のハードウェアに
席捲されます。2000年以降は、ダウンサイジングの到着点です。もう個人で使
うパーソナルコンピュータも、業務や科学技術計算で使うものも、ハードウェ
ア的には価格的にも、使われている技術にも、処理能力にも線引きが出来でき
ません。
2005年では、64bit CPU、デュアルプロセッサ対応、デュアルコアCPUといった最先端のテクノロジーがコモディティ市場 [[image:NASAComputerRoom7090.NARA.jpg|left|thumb|300px| 1962年にNASAで使われていた IBM 7090 の写真(一般消費者向け市場NASAサイトより) に売られている時代になりました。この傾向はこれから先も続きます。<ref>NASA の著作権ポリシー http://www.jsc.nasa.gov/policies.html#Guidelines</ref>]]
:'''考えてみよう'''
:ムーアの法則には限界があるのか、ないのか。あるとしたらなぜなのか。ないならばなぜなのか。ムーアの法則の意味は、オリジナルの意味である集積度の向上と、派生的に多く使われている性能の向上のどちらの意味で取ってもよい。
 
時代は流れ大型汎用機もダウンサイジングの並に流されます。
まず最初のダウンサイジングで成功したのは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社にヘッドハンティングされたデビット・カトラーです。   上から下がっていたオペレーティングシステムの体系に、下から上がってきたアプリケーション体系を合わせようとしても、なかなかうまくいきません。   パーソナルコンピュータでは、使っているのは一人なわけですから、なんでもオールマイティーにアクセスしても一見問題はないように見えます。一方で大きなコンピュータは一人で使っていては、あまりにも高価なので、多人数で使えるなければなりませんし、そうなれば勝手に他人のファイルや、ましてや勝手にシステムの運用に関わる設定など変えてはいけません。   なんでもアクセスできてしまうパーソナルコンピュータのソフトウェアの方がシンプルかつ簡便な操作を提供できる...と考えても不思議ではありません。しかし、便利であったはずの「なんでもアクセスできる」というのがセキュリティの面、特にコンピュータウィルスや脆弱性をついてのシステムへの侵入などクリティカルな問題へ結びつき、それが時代とともに表面化してきました。 
下からの流れがいちばん判りやすいのがMicrosoft社のセキュリティの問題で
す。その主力製品であるWindowsは1つはWindows 95/98/Meという流れがあり、
もう1つはWindows NT/2000/XPという流れがあります。前者は、パーソナルコ
ンピュータの流れ、後者は大型汎用機の流れです。ちなみにWindows NTを設計
したのはDEC でVMSの開発をしていて、Microsoft社にヘッドハンティングされ
たデビット・カトラーです。
上から下がっていたオペレーティングシステムの体系に、下から上がってきた上からと下からの矛盾が現在のWindowsの根本的な問題となっていました。アプリケーション体系を合わせようとしても、なかなかうまくいきません。Windows Vista以降では完全にユーザ権限を分離した管理体系による高いセキュリティを持つという能力を提供しています。ですが、Windows XP まで動いていたアプリケーションやドライバー類が動かずデベロッパーやユーザが不満を漏らしていたという状況も一方ではありました。
パーソナルコンピュータでは、使っているのは一人なわけですから、なんでも
オールマイティーにアクセスしても一見問題はないように見えます。一方で大
きなコンピュータは一人で使っていては、あまりにも高価なので、多人数で使
えるなければなりませんし、そうなれば勝手に他人のファイルや、ましてや勝
手にシステムの運用に関わる設定など変えてはいけません。
なんでもアクセスできてしまうパーソナルコンピュータのソフトウェアの方が
シンプルかつ簡便な操作を提供できる...と考えても不思議ではありません。
しかし、便利であったはずの「なんでもアクセスできる」というのがセキュリ
ティの面、特にコンピュータウィルスや脆弱性をついてのシステムへの侵入な
どクリティカルな問題へ結びつき、それが時代とともに表面化してきました。
上からと下からの矛盾が現在のWindowsの根本的な問題となっています。現在ではWindows Vistaになって、完全にユーザ権限を分離した管理体系による高いセキュリティを持つという能力を提供しています。ですが、一方現状ではWindows XPまで動いていたアプリケーションやドライバー類が動かずデベロッパーやユーザが不満を漏らしています。このように必要な安全性を達成するには、下から上へ上がってきたようなレガシーなソフトウェアを切り捨てなければ困難です。しかし、一方で膨大なソフトウェア資産があるわけです。この矛盾に終止符を打つのは大変長い時間がかかります。
しかしながら必要な安全性を達成するには、下から上へ上がってきたようなレ
ガシーなソフトウェアを切り捨てなければ困難でしょう。しかし、一方で膨大
なソフトウェア資産があるわけです。この矛盾に終止符を打つのは、そう簡単
なことではありません。
:'''調べてみよう'''
:1980年代のスーパーコンピュータやパソコンと呼ばれていたコンピュータの処理能力は、どの程度のものだったのだろうか。その能力の向上はどうだったのだろうか。
; 調べてみよう : 1980年代のスーパーコンピュータやパソコンと呼ばれていたコンピュータの処理能力は、どの程度のものだったのだろうか。その能力の向上はどうだったのだろうか。
== 何をさしてオペレーティングシステムと呼ぶのか ==
=== 広義と狭義の議論 ===
コンピュータ上で動いているソフトウェア(下図)のどの部分を指してオペレーティングシステムと呼ぶべきないのか、ということの定義を確認しましょう。[[File:Layer-of-System-2.png|thumb|right|400px|System Layer]]
ここでは、一番最下層をハードウェアとして、次にあるのがカーネルの層、その次が汎用に使われるシステムユーティリティの層、そして、特定目的のためにユーザが利用するアプリケーションの層と分けてみます。コンピュータ上で動いているソフトウェアのどの部分を指してオペレーティングシステムと呼ぶべきないのか、ということの定義を確認しましょう。
オペレーティングシステムと、システムユーティリティの両方を1つのまとま
りとして、システムソフトウェアと呼びます。「システムを動かすのに最低限
必要なソフトウェアセット」という広い意味で捉えたオペレーティングシステ
ムであれば、このシステムソフトウェアがオペレーティングシステムと同意語
であると言えます。
しかし「最小限必要な」という定義は、かなり曖昧な表現です。なぜならば、ここには「誰が、どのように使うか」ということが抜けているからです。この部分を拡張していけば、たとえば「ワードブロセッシングを行いたい人が使うためのコンピュータ」という場合は「バンドルされているワードプロセッサのプログラムも含めてオペレーティングシステムである」という奇妙な結論が導かれてしまいます。ここでは、一番最下層をハードウェアとして、次にあるのが[[カーネルの構造と機能|カーネルの層]]、その次が汎用に使われるシステムユーティリティの層、そして、特定目的のためにユーザが利用するアプリケーションの層というモデルを考えてみます。
しかしながら、「パッケージを購入した時にバンドルされているものが最小限
のセットであるので、これがオペレーティングシステムである」という誤解は
一般には多いようです。しかし、これではゲームのソリティアもオペレーティ
ングシステムに含まれることになるので、やはり奇妙な結論と言えます。
<PRE>オペレーティングシステムと、システムユーティリティの両方を1つのまとまりとして、システムソフトウェアと呼びます。「システムを動かすのに最低限必要なソフトウェアセット」という広い意味で捉えたオペレーティングシステムであれば、このシステムソフトウェアがオペレーティングシステムと同意語であると言えます。
<ソフトウェア階層>
ワードプロセッサ / エディタ / ゲーム / ブラウザ | etc.
============
ユーティリティ / ウィンドウシステム / シェル(コマンド・インタプリタ) / etc.
============
カーネル
============
ハードウェア
</PRE>
しかし「最小限必要な」という定義は、かなり曖昧な表現です。なぜならば、ここには「'''''誰が、どのように使うか'''''」ということが抜けているからです。
この部分を拡張していけば、たとえば「ワードブロセッシングを行いたい人が使うためのコンピュータ」という場合は「バンドルされているワードプロセッサのプログラムも含めてオペレーティングシステムである」という奇妙な結論が導かれてしまいます。
では逆に、ここは確実にオペレーティングシステムだろうと言える部分を考え
てみます。まずカーネルは当然入ります。ユーザが使うということであれば、
シェルなども必要です。なぜならシェルがないとコマンドを入力できません。
当然ユーザを認証するためのログインに関連するソフトウェアが必要です。
この「パッケージを購入した時にバンドルされているアプリケーション群が最小限のセットなので、これがオペレーティングシステムである」という誤解
<ref>
[http://ja.wikipedia.org/w/index.php?title=%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&oldid=29875236 日本語版wikipedia]ではウェブブラウザや時計などのアクセサリーも広義のオペレーティングシステムだということを書いていますが、そんなことをテストに書いて点数をくれる先生は極めて少数派でしょう。
</ref>
は一般には多いようです。
もしこれが正しいとするならば、これではゲームのソリティアもオペレーティングシステムに含まれることになるので、やはり奇妙な結論と言えます。
このような表現での「最小パッケージ」とはGNU/Linuxのディストリビューションのデフォルトイントール環境にあたるもので、このオペレーティングシステムの定義を採用するとなると、世の中にはおびただしい数のオペレーティングシステムの種類<ref> オープンソース系オペレーティングシステムののディストリビューションを紹介する https://distrowatch.com には実に様々なディストリビューションが紹介されています。</ref>が存在することになります。このような定義を用いると、このような奇妙な結果が導き出されてしまうことになります。
:'''補足'''
: カーネルとそれ以外のソフトウェアの切り分けは、実行されるプロセスの実行モードが、どの状態で動いているかで区別します。プロセスの実行モードが、カーネル・モード(UNIX以外のシステムによっては特権モード、スーパーバイザ・モード、あるいはマスタ・モードとも呼ばれる) で動作しているか、ユーザ・モード ( 非特権モード、プロブレム・モード、あるいはスレーブモードとも呼ばれる)で動作しているかどうかです。実行モードに関しては、実行とプロセスに関する話題の時に改めて説明します。
では逆に、ここは確実にオペレーティングシステムだろうと言える部分を考えてみます。まずカーネルは当然入ります。ユーザが使うということであれば、
シェルなども必要です。なぜならシェルがないとコマンドを入力できません。当然ユーザを認証するためのログインに関連するソフトウェアが必要です。
 ; 補足 : カーネルとそれ以外のソフトウェアの切り分けは、実行されるプロセスの実行モードが、どの状態で動いているかで区別します。プロセスの実行モードが、カーネル・モード(UNIX以外のシステムによっては特権モード、スーパーバイザ・モード、あるいはマスタ・モードとも呼ばれる) で動作しているか、ユーザ・モード ( 非特権モード、プロブレム・モード、あるいはスレーブモードとも呼ばれる)で動作しているかどうかです。実行モードに関しては、実行とプロセスに関する話題の時に改めて説明します。  どれくらいのものが最初に用意されるのか、Debian GNU/Linux Woodyを例にして調べてみました。6.0を例にして調べてみました。
ディレクトリ名 コマンド数
/bin 7495 /sbin 105 110 /usr/bin 275452 /usr/sbin 112107
:'''補足'''
: 2007年ではDebian GNU/Linux Etchが最新です。
このコマンド数も先に述べたようにすべてが必要であるとは限りません。最小限インストールの状態のDebian ; 補足 : 2011年時点で最新のDebian GNU/Linuxに入っているコマンド数を数えたに過ぎません。しかしながら、いくつかのコマンドとそのコマンドで利用されるライブラリ群はオペレーティングシステムには必要になるといえます。Linux 6.0 を参考にしています。
では、グラフィカルインタフェース(GUI)を提供するためのウィンドウシステ
ムはオペレーティングシステムに入るのでしょうか?
一般的なUNIXシステムでは、GUIがなくても当然動きますし、サーバシステムではGUIなどは必須ではありません。もちろん先程のDebian このコマンド数も先に述べたようにすべてが必要であるとは限りません。最小限インストールの状態のDebian GNU/Linux最小限セットの中にはX Window Systemは入っていません。逆にパーソナルコンピュータ用のオペレーティングシステムと呼ばれるものではウィンドウシステムはLinuxに入っているコマンド数を数えたに過ぎません。切り離すことができないコンポーネントとなっています。しかしながら、いくつかのコマンドとそのコマンドで利用されるライブラリ群はオペレーティングシステムには必要になるといえます。
ここまででわかったことは、まず、カーネルは確実にオペレーティングシステ
ムであること、そして、システムを動かす時に必要なソフトウェアがいくつか
あること、ただし、その必要なソフトウェアは何かの線引きは難しいというこ
とです。
下はDebian GNU/Linux では、グラフィカルインタフェース(WoodyGUI) を最小限のインストールして立ち上げてみた状態です。topコマンドを使い、メモリや実行中のプロセスが、どのような状態になっているか観察したものです。用意しているメモリは32MBですが、この状態で使われている記憶領域は約7.8MBしか使っていません。dfを使ってディスクの利用状況を見てみると、約536MBのハードディスクを用意していますが(フォーマット後の要領約500MB) 、最小のインストールでは約80MBしか使っていません。最小限のセットを考えた場合、かなり小さくて済みます。一方、どんどんその適用範囲を広げていった場合、どこまでがオペレーティングシステムと呼んでいいのか、どこからがそれ以外のアプリケーションと呼ぶかのはグラデーションのように曖昧になることでしょう。を提供するためのウィンドウシステムはオペレーティングシステムに入るのでしょうか?
<PRE>
# 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% /
</PRE>
== コンピュータを仮想化させる == 一般的なUNIXシステムでは、GUIがなくても当然動きますし、サーバシステムではGUIなどは必須ではありません。もちろん先程のDebian GNU/Linux最小限セットの中にはX Window Systemは入っていません。逆にパーソナルコンピュータ用のオペレーティングシステムと呼び販売されているタイプのものではウィンドウシステムは切り離すことができないコンポーネントとなっています。
我々が、アプリケーションプログラムを使う時、プログラムがコンピュータを占有しているように見えます。=== 揺らぐ定義 ===
<PRE>
プログラム [[File:Screenshot---- コンピュータ CPU==主記憶===入出力装置 +===補助記憶装置Oracle VM VirtualBox.png|thumb|right|450px|コンソールでTOPを実行]]
<右図は仮想マシンに[https:/PRE>/www.virtualbox.org/ VirtualBox]を使い、[https://www.debian.org/ Debian GNU/Linux] 6.0を最小限インストールし立ち上げてみた状態です。もちろんGUIはインストールしていません。なぜならGUIが存在しなくともきちんとコンピュータは動くからです。Debian GNU/Linux 6.0 はデスクトップやラップトップ、あるいはサーバに使われるディストリビューションで、組み込み用のものではありません。top コマンドを使い、メモリや実行中のプロセスが、どのような状態になっているか観察してみました。用意しているメモリは 128MB ですが、この状態で使われている記憶領域は約 26MB しか使っていません。df を使ってディスクの利用状況を見てみると、最小のインストールでは約 645MB しか使っていません。最小限のセットを考えた場合、このように小さいメモリでも動くことができます。この程度の資源でも(英文であれば、ですが)十分にテキストを編集し、スペルをチェックし、フォーマットし、さらにプリンタに出力ができます。十分に「パーソナルな」コンピュータだといえます。  このように使い方によって、あるいはユーザのニーズによって「最小限の」という言葉を使って表現している広義のオペレーティングシステムの意味は揺らぐのがわかるかと思います。しかしながら揺らぐからといって無限に定義を拡大していくような問題でもありません。そのあたりがグラデーションのようになっていて簡単には線引きないのが特徴だといえるでしょう。 == コンピュータを仮想化させる == [[File:Virtualization.png|thumb|right|450px|Virtualization]]我々が、アプリケーションプログラムを使う時、プログラムがコンピュータを占有しているように見えます。ユーザが他にどれだけのプログラムが実行されているかなど気にすることなく使うことができます。
実際は、オペレーティングシステムが、リソースを抽象化し、プログラムに使えるリソースを割り当てることをします。つまり、プログラムは、「仮想化されたコンピュータ」を割り当てられることになります。実際は、オペレーティングシステムが、リソースを抽象化し、プログラムに使えるリソースを割り当てることをします。つまり、プログラムは、「仮想化されたコンピュータ」を割り当てられることになります。ユーザに使用許可(パーミッション)が与えられている限り利用することが可能です。
UNIXでは、どのような仮想化の例があるのでしょうか? 典型的な例をいくつかあげて見ましょう。典型的な例をいくつかあげて見ましょう。
* CPUのリソースは、プログラムに対し、プロセスという単位で割り当てられます。
* 入出力装置のリソースのために、デバイスファイルという入出力装置を抽象化した入出力リソースを提供しています。
<PRE>
プログラムA --- 仮想的なコンピュータ
[プロセス(CPUの抽象化),
仮想記憶(主記憶装置の抽象化),
ファイル(補助記憶装置の抽象化),
デバイスファイル(入出力装置の抽象化) ]
プログラムB --- 仮想的なコンピュータ
[プロセス(CPUの抽象化),
仮想記憶(主記憶装置の抽象化),
ファイル(補助記憶装置の抽象化),
デバイスファイル(入出力装置の抽象化) ]
プログラムC ....
プログラムD ....
プログラムE ....
</PRE>
:'''捕捉''' さらに
:[[http://www.cl.cam.ac.uk/Research/SRG/netos/xen/ Xen]]や[[http://www.vmware.com/ VMware]、[https://www.virtualbox.org/ VirtualBox]のようにハードウェア側を抽象化し、1つのハードウェア上に複数のオペレーティングシステムを動かすバーチャルマシンのシステムもあります。
==== 抽象化の例 ====
UNIXの上で次のコマンドを実行すると端末にHelloと表示されます。これは文字列UNIXの上で次のコマンドを実行すると端末にHelloと表示されます。これは文字列"Hello"を出力し、その出力先を ファイルを出力し、その出力先をファイル/dev/tty への入力するという働きをします。ファイル(デバイスファイルと呼びます)への入力するという働きをします。ファイル(デバイスファイルと呼びます)/dev/ttyというのは、ttyというのは、自端末を抽象化したものです。端末を抽象化したものです。いくつも端末のウインドウを開いて別々のシェルで行っても、ほかの端末には表示せず、自分の端末のみに出力します。
 <PREpre class="bash">
% echo "Hello" > /dev/tty
Hello
</PREpre>
上の図で、プログラムA、B,....E、は、オペレーティングシステムから利用可
能なリソースを割り当てられ、その中で実行しています。しかし、アプリケー
ションA、B,....は、割り当てられたリソースのコントロールを意識しません。
例えば、プログラムがデータを補助記憶装置にファイルの形でデータを残そう
とした時、プログラムが、補助記憶装置に使われているハードウェアを直接的
にコントロールする必要はありません。
つまり、1つのプログラムは、1つの仮想化されたコンピュータで動いているよ上の図で、プログラムA、B,....E、は、オペレーティングシステムから利用可能なリソースを割り当てられ、その中で実行しています。しかし、アプリケーションA、B,....は、割り当てられたリソースのコントロールを意識しません。うに見えるわけです。例えば、プログラムがデータを補助記憶装置にファイルの形でデータを残そうとした時、プログラムが、補助記憶装置に使われているハードウェアを直接的にコントロールする必要はありません。つまり、1つのプログラムは、1つの仮想化されたコンピュータで動いているように見えるわけです。
<PRE> プログラム ---------- ファイルシステム ---------- ハードウェア [メモリ|HDD|etc]</PRE>==== 不完全なリソース管理 ====
もし、直接的にコントロールするはずのないリソースをユーザのアプリケーションプログラムがオペレーティングシステムを飛び越して直接的にコントロールできるようなことがあればどうなるのでしょうか?
==== 不完全なリソース管理 ====例えば、ユーザのアプリケーションプログラムにバグがあり、割り当てられたリソース以外のリソースを不用意に利用してしまうようなことを許すような不完全なリソース管理のオペレーティングシステムだとどうなるでしょうか?
もし、直接的にコントロールするはずのないリソースをユーザのアプリケーショ
ンプログラムがオペレーティングシステムを飛び越して直接的にコントロール
できるようなことがあればどうなるのか?
例えば、ユーザのアプリケーションプログラムにバグがあり、割り当てられたリソース以外のリソースを不用意に利用してしまうようなことを許すような不完全なリソース管理のオペレーティングシステムだとどうなるでしょうか?上の図で、プログラムA、B,....は、オペレーティングシステムから割り当てられたリソースを使っているわけですから、オペレーティングシステムの知らない所で、割り当てられていないリソースに勝手なことをされては、一貫性が保てません。
上の図で、プログラムA、B,....は、オペレーティングシステムから割り当て
られたリソースを使っているわけですから、オペレーティングシステムの知ら
ない所で、割り当てられていないリソースに勝手なことをされては、一貫性が
保てません。
 
つい最近までパソコンのオペレーティングシステムは、このような不完全なリ
ソース管理の能力しか持っていませんでした(そもそも、オペレーティングシ
ステムと呼ぶに値するのかが疑問ではありますが)。
90年代のパソコンのオペレーティングシステム(と呼ばれていたもの)は、このような不完全なリソース管理の能力しか持っていませんでした。これらはオペレーティングシステムと呼ぶに値するのか非常に疑問で、本来はまだオペレーティングシステムまで発展していない前段階の機能であるハードウェアを監視するモニタと呼ばれるものに分類するのが適切であるように思えます。
==== さらなる仮想化の例 ====
例えば、UNIXのMMAPと呼ぶ機能です。最近のUNIXは、mmapという機能を使って
プログラムは、ファイルを記憶空間に張り付ける (マップする) ことができま
す。主記憶、補助記憶装置のリソース区別が更に抽象化されプログラムの中で
使える記憶空間としてのリソースとなります。もちろん通常のプログラムに割
り当てられた記憶領域として、読み込み、書き込みすると、その内容がファイ
ルに反映されます。さらに、ファイルという形で、複数のプロセスから、共有
することができます。別のプログラムが、また、そのファイルをmmapを使って、
そのプログラムの記憶空間に張り付けることができます。
===== mmapとファイル =====
 
例えば、UNIXのmmapと呼ぶ機能です。最近のUNIXは、[http://uc.h2np.net/index.php/%E8%A8%98%E6%86%B6%E7%AE%A1%E7%90%86#mmap mmap]という機能を使ってプログラムは、ファイルを記憶空間に張り付ける (マップする) ことができます。主記憶、補助記憶装置のリソース区別が更に抽象化されプログラムの中で使える記憶空間としてのリソースとなります。もちろん通常のプログラムに割り当てられた記憶領域として、読み込み、書き込みすると、その内容がファイルに反映されます。さらに、ファイルという形で、複数のプロセスから、共有することができます。
 
===== VFSからデバイスドライバまで =====
[[File:Filesystem-layer-1.png|thumb|right|400px|File System Layer]]
[[ファイルシステム]] をさらに抽象化するLinuxのファイルシステムを紹介しましょう。
ファイルを書き込む説明で「ハードディスクに書き込む」という表現をみたことはないでしょうか。
目の前にあるパソコン本体のみを考えるならば、このモノに書き出すというので説明は十分なのかも知れませんが、ファイルを書き込む・読み込むというのはもっと抽象的な動作をします。
 
Linuxのファイルシステムは、上位にVFS (Virtual File System)が存在し、その下に、FAT、ext4、JFS、XFS、NFS、その他のファイルシステムをもち、さらにその下にバッファキャッシュがあり、さらに下にデバイスドライバがあるといった、何重もの層を重ねる形になっています。
プログラムは、Linuxのファイルを扱っているだけで、その下がFATのファイルシステムやJFSのファイルシステムであるか、あるいはネットワーク経由でファイルシステムを使うことができるNFSなのかを知らなくても利用することが可能です。
 
下層には、補助記憶装置との入出力効率を改善するために、バッファキャッシュというクッションをおいてあります。
さらなる下層には、ハードディスクやフラッシュメモリ (例えばUSBメモリやSDカードなど)といった記憶するためのハードウェア、あるいはNFSのようにネットワークを経由して使うためのネットワークハードウェアをコントロールするためのデバイスドライバの層があります。
ファイルの情報が最終的にハードディスクに書かれるとしても、ファイルを書き込む動作を行った時点で、まだハードディスクにかかれているわけではありません。
このようなことにより、たぶん一度や二度は経験したことがあるかも知れませんが、突然、機材の電源を停止すると永続的な情報を保持するためのエリア(ハードディスクやUSBメモリなど)にかかれていなかったファイルの情報は消えてしまうことになります。
 
<blockquote>
<pre class="bash">
% sync;sync;sync
</pre>
 
sync
<ref>
syncを三回するのは "In the name of the Father, and of the Son, and of the Holy Spirit.(父と子と精霊の御名において)"と唱えて強制的にハードウェアリセットをするためだとむかし誰かに教わった。
</ref>
はバッファキャッシュなどにある情報を含めてすべてデバイスに同期させるコマンド。
</blockquote>
ファイルシステムをさらに抽象化するLinuxのファイルシステムを紹介しましょう。Linuxの、ファイルシステムは、その下に、またMinix、MS-DOS、その他のファイルシステムをもち、さらにその下にバッファキャッシュをおき、その下にデバイスドライバをおくという、何重もの層を持ちます。プログラムは、Linuxのファイルを扱っているだけで、その下がMS-DOSのファイルシステムやMinixのファイルシステムであるかを知る必要はありません。しかも、その下には、ハードディスクやフロッピーディスクといった補助記憶装置とのやりとりをさらに改善するために、バッファキャッシュというクッションをおいてあります。その下に、装置をコントロールするためのデバイスドライバが用意されています。このように重層的な構造にすることによって、抽象化を図り、かつどの層が変化しようとも、上位の層がその違いを吸収するような形になっています。またこのような枠組みにより柔軟に機能・モジュールを追加、変更することが出来る仕組みになっています。
<PRE>== 脚注 ==
プログラム
^^^^^^^^
========[ファイル]=======
バーチャルファイルシステム (VFS) <----(+) ↑ 高
--^^----^^-----^^----------^^---- 抽象度
[ext2][msdos][minix].....[proc] ↓ 低
---^^^^^^^^^^^^^^-------
バッファキャッシュ
-------^^^^^-----------
デバイスドライバ------------->(+)
------^^^^^^^^^--------
___+____+____+_
v v V
HDD HDD HDD
ext2 --- Linuxのファイルシステム
msdos --- MSDオペレーティングシステムのファイルシステム
minix --- MINIXのファイルシステム
proc --- プログラムファイルシステム (Linux独自)
<references/>
</PRE>----[[目次]]へ
$Id[[Category: section-UNIXオペレーティングシステム|1.txt,v 1.10 2007/09/20 15:44:35 hironobu Exp hironobu $]]