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

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

2022年2月17日 (木) 05:07時点における最新版

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

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

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


オペレーティングシステムの役目は次の3つの目標を達成するためにリソース (Resources : 資源 ) と、 アプリケーション ( Applications : ユーザが使うソフトウェア ) の間に存在し両者を結び付けるための糊の役目をするソフトウェア群であるといえます。


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

リソースとは

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


つまりハードウェアリソース、ソフトウェアリソース、ヒューマンリソースを有効に使うための役割がオペレーティングシステムには求められます。


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


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


ハードウェアリソース

ハードウェアリソースにはCPU、主記憶装置(メモリ)、補助記憶装置、入出力装置、ほかがあります。

CPU

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


主記憶装置

主記憶装置 ( Main Memory Unit ) : いわゆるメモリのことです。 CPUと直接やりとりする記憶装置を指します。 演算のための値を記憶しておく、結果を記憶しておく、命令を記憶しておくなどといったために使われます。 以前は、単純にCPU ←→主メモリという構造で説明が十分だったのですが、現在での具体的な物理メモリの構成は、アクセスの効率を考え何段階かの動作速度や容量が異なるキャッシュメモリを用意しておき、CPUと記憶をやりとりしています。 わりきって一言でいうなら電気を切ったら消えてしまう一時的な記憶装置だといえます。

補助記憶装置

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

入出力装置

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


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

ソフトウェアリソース

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


たとえばオペレーティングシステムの心臓部であるカーネル部分、アプリケーションが使うライブラリ、あるいはシステムを運用する上で必要なコマンド群などがあげられます。データベースを考えるとアプリケーションとしてのデータベースプログラムとその中に格納されアプリケージョンに利用されるデータから成り立ちます。この両者があってソフトウェアリソースとして提供されるデータベースとして意味をなします。多種多様なソフトウェアリソースがどのような役割を担うのかの議論は後ほどしましょう。

ヒューマンリソース

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


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

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

時が立つにつれ、どんどんハードウェアが小型化し、また高性能になっていきます。 例えば、2010 年のデスクトップコンピュータ、いわゆるパソコンと呼ばれる機械の上位機種の計算スピードは、私がこの業界に入った 1980 年半ばのスーパーコンピュータ並、あるいはそれ以上の性能を持っています。この文章を読んでいるこの瞬間では、2010年のデスクトップパソコンなど性能的に時代遅れになっているでしょう。


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


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


現在のオペレーティングシステムへ向かう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 [5]が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です。ここで始めて今日的なオペレーティングシステムが作られます。 汎用機という言葉は、この「汎用的にプログラムを動かすことができるシステム」という所から来ています。


1962年にNASAで使われていた IBM 7090 の写真(NASAサイトより)[6]


時代は流れ大型汎用機もダウンサイジングの並に流されます。 まず最初のダウンサイジングで成功したのは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年代のスーパーコンピュータやパソコンと呼ばれていたコンピュータの処理能力は、どの程度のものだったのだろうか。その能力の向上はどうだったのだろうか。

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

広義と狭義の議論

System Layer

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


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


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


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


この「パッケージを購入した時にバンドルされているアプリケーション群が最小限のセットなので、これがオペレーティングシステムである」という誤解 [7] は一般には多いようです。 もしこれが正しいとするならば、これではゲームのソリティアもオペレーティングシステムに含まれることになるので、やはり奇妙な結論と言えます。 このような表現での「最小パッケージ」とはGNU/Linuxのディストリビューションのデフォルトイントール環境にあたるもので、このオペレーティングシステムの定義を採用するとなると、世の中にはおびただしい数のオペレーティングシステムの種類[8]が存在することになります。このような定義を用いると、このような奇妙な結果が導き出されてしまうことになります。


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


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


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

 ディレクトリ名      コマンド数
 /bin              95
 /sbin             110 
 /usr/bin          452
 /usr/sbin         107


補足 
2011年時点で最新のDebian GNU/Linux 6.0 を参考にしています。


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


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


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

揺らぐ定義

コンソールでTOPを実行

右図は仮想マシンに VirtualBox を使い、 Debian GNU/Linux 6.0 を最小限インストールし立ち上げてみた状態です。 もちろんGUIはインストールしていません。なぜならGUIが存在しなくともきちんとコンピュータは動くからです。 Debian GNU/Linux 6.0 はデスクトップやラップトップ、あるいはサーバに使われるディストリビューションで、組み込み用のものではありません。 top コマンドを使い、メモリや実行中のプロセスが、どのような状態になっているか観察してみました。 用意しているメモリは 128MB ですが、この状態で使われている記憶領域は約 26MB しか使っていません。 df を使ってディスクの利用状況を見てみると、最小のインストールでは約 645MB しか使っていません。 最小限のセットを考えた場合、このように小さいメモリでも動くことができます。 この程度の資源でも(英文であれば、ですが)十分にテキストを編集し、スペルをチェックし、フォーマットし、さらにプリンタに出力ができます。 十分に「パーソナルな」コンピュータだといえます。


このように使い方によって、あるいはユーザのニーズによって「最小限の」という言葉を使って表現している広義のオペレーティングシステムの意味は揺らぐのがわかるかと思います。 しかしながら揺らぐからといって無限に定義を拡大していくような問題でもありません。 そのあたりがグラデーションのようになっていて簡単には線引きないのが特徴だといえるでしょう。

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

Virtualization

我々が、アプリケーションプログラムを使う時、プログラムがコンピュータを占有しているように見えます。ユーザが他にどれだけのプログラムが実行されているかなど気にすることなく使うことができます。

実際は、オペレーティングシステムが、リソースを抽象化し、プログラムに使えるリソースを割り当てることをします。つまり、プログラムは、「仮想化されたコンピュータ」を割り当てられることになります。ユーザに使用許可(パーミッション)が与えられている限り利用することが可能です。

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

  • CPUのリソースは、プログラムに対し、プロセスという単位で割り当てられます。
  • プログラムの使う記憶空間のリソースは、仮想記憶によりコントロールされます。仮想記憶の機構により、主記憶だけではなく、補助記憶装置も使って、主記憶よりも大きい記憶空間を作ることが可能です。その中から、プログラムが必要な大きさの記憶空間リソースを割り当ています。
  • 永続的な記憶を保管しておくために、ファイルという抽象的なデータの保管メカニズムを使います。そのファイルを効率的かつ統一的に扱うために、ファイルシステムを作ります。ファイルシステムは、主記憶と補助記憶装置を使って、ファイルのリソースを提供します。
  • 入出力装置のリソースのために、デバイスファイルという入出力装置を抽象化した入出力リソースを提供しています。


捕捉 さらに
XenVMwareVirtualBoxのようにハードウェア側を抽象化し、1つのハードウェア上に複数のオペレーティングシステムを動かすバーチャルマシンのシステムもあります。


抽象化の例

UNIXの上で次のコマンドを実行すると端末にHelloと表示されます。これは文字列"Hello"を出力し、その出力先をファイル /dev/tty への入力するという働きをします。ファイル(デバイスファイルと呼びます) /dev/tty というのは、自端末を抽象化したものです。 いくつも端末のウインドウを開いて別々のシェルで行っても、ほかの端末には表示せず、自分の端末のみに出力します。


 % echo "Hello" > /dev/tty
 Hello


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

不完全なリソース管理

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


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


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


90年代のパソコンのオペレーティングシステム(と呼ばれていたもの)は、このような不完全なリソース管理の能力しか持っていませんでした。これらはオペレーティングシステムと呼ぶに値するのか非常に疑問で、本来はまだオペレーティングシステムまで発展していない前段階の機能であるハードウェアを監視するモニタと呼ばれるものに分類するのが適切であるように思えます。

さらなる仮想化の例

mmapとファイル

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

VFSからデバイスドライバまで
File System Layer

ファイルシステム をさらに抽象化するLinuxのファイルシステムを紹介しましょう。 ファイルを書き込む説明で「ハードディスクに書き込む」という表現をみたことはないでしょうか。 目の前にあるパソコン本体のみを考えるならば、このモノに書き出すというので説明は十分なのかも知れませんが、ファイルを書き込む・読み込むというのはもっと抽象的な動作をします。

Linuxのファイルシステムは、上位にVFS (Virtual File System)が存在し、その下に、FAT、ext4、JFS、XFS、NFS、その他のファイルシステムをもち、さらにその下にバッファキャッシュがあり、さらに下にデバイスドライバがあるといった、何重もの層を重ねる形になっています。 プログラムは、Linuxのファイルを扱っているだけで、その下がFATのファイルシステムやJFSのファイルシステムであるか、あるいはネットワーク経由でファイルシステムを使うことができるNFSなのかを知らなくても利用することが可能です。

下層には、補助記憶装置との入出力効率を改善するために、バッファキャッシュというクッションをおいてあります。 さらなる下層には、ハードディスクやフラッシュメモリ (例えばUSBメモリやSDカードなど)といった記憶するためのハードウェア、あるいはNFSのようにネットワークを経由して使うためのネットワークハードウェアをコントロールするためのデバイスドライバの層があります。 ファイルの情報が最終的にハードディスクに書かれるとしても、ファイルを書き込む動作を行った時点で、まだハードディスクにかかれているわけではありません。 このようなことにより、たぶん一度や二度は経験したことがあるかも知れませんが、突然、機材の電源を停止すると永続的な情報を保持するためのエリア(ハードディスクやUSBメモリなど)にかかれていなかったファイルの情報は消えてしまうことになります。

 % sync;sync;sync

sync [9] はバッファキャッシュなどにある情報を含めてすべてデバイスに同期させるコマンド。

このように重層的な構造にすることによって、抽象化を図り、かつどの層が変化しようとも、上位の層がその違いを吸収するような形になっています。またこのような枠組みにより柔軟に機能・モジュールを追加、変更することが出来る仕組みになっています。

脚注

  1. コンピュータの構成と設計 第5版 上 , ジョン・L. ヘネシー (著), デイビッド・A. パターソン (著), 成田 光彰 (翻訳), 2014/12/6, ISBN 4822298426
  2. コンピュータの構成と設計 第5版 下, デイビッド・A・パターソン (著), ジョン・L・ヘネシー (著), 成田光彰 (翻訳), 2014/12/6, ISBN 4822298434
  3. RASPBERRY PI 2 MODEL B http://www.raspberrypi.org/products/raspberry-pi-2-model-b/
  4. Iridis-pi: a low-cost, compact demonstration cluster https://www.southampton.ac.uk/~sjc/raspberrypi/raspberry_pi_iridis_lego_supercomputer_paper_cox_Jun2013.pdf
  5. スティーブ・ジョブズ 1 (講談社+α文庫) ISBN 4062816148
  6. NASA の著作権ポリシー http://www.jsc.nasa.gov/policies.html#Guidelines
  7. 日本語版wikipediaではウェブブラウザや時計などのアクセサリーも広義のオペレーティングシステムだということを書いていますが、そんなことをテストに書いて点数をくれる先生は極めて少数派でしょう。
  8. オープンソース系オペレーティングシステムののディストリビューションを紹介する https://distrowatch.com には実に様々なディストリビューションが紹介されています。
  9. syncを三回するのは "In the name of the Father, and of the Son, and of the Holy Spirit.(父と子と精霊の御名において)"と唱えて強制的にハードウェアリセットをするためだとむかし誰かに教わった。

目次