Linux,FreeBSD など UNIX 系のオペレーティングシステムや,Windows98/NT など, また,別の形体をしたオペレーティングシステムがあることは,理解できたであろう. しかし,これらの OS は,「無償」,「有償」である点など,決定的な違いが あるが,技術的な機能としては,単一のコンピュータでの OS という点で 大きな差異はない.
この章では,さらに,複数の CPU を搭載した マルチプロセッシングシステム(multi processing system) および, 「ネットワーク技術」をオペレーティングシステムの核にまで 利用した分散オペレーティングシステム(distributed operating system) について説明する.このような OS は,「UNIX の次にくるOS」として考えられてい るが,現状では,UNIX 系の OS の付加的な機能として開発され, 実際に利用されていることが多い.もちろん, 「分散オペレーティングシステム」といわれる OS も多く開発されているが, 研究段階であったり,商用として幅広く使われている OS は,ほとんどない.
「分散オペレーティングシステム」について説明する前に,複数のプロセッサから なるコンピュータとは,どのようなコンピュータかを説明しよう.
コンピュータは,CPUと,主記憶が非常に大きな役割を果たすことは, 最初に説明した.各々「バス」によって結ばれている.単純な拡張として, 同一バスに,CPU を複数接続したり,記憶装置を複数接続したりすることが 考えられる.以下の 3 通りの形式が考案されている.
SISD(Single Instruction Single Data) 形式は,最も単純な形式である. 各プロセッサは,同一の処理をするために,同一の プログラムを実行する.そして,対応するデータ(主記憶)にアクセスする.
SIMD(Single Instruction Single Data) 形式は,シムドともいい, 最近のプロセッサでよく使われる形式である. 各CPU は,同一のプログラムを処理するが,複数のデータをアクセスする方式である. コンピュータグラフィックスなどの画像処理では,画像の点を一つ一つ計算する 場合,同じ処理を独立に処理するアルゴリズムを用いることができ,この方式 のマルチプロセッサシステムに向いていると考えることができる.
最近の Pentium などでは,単一CPU でも,複数の命令を同時に処理することが でき,同時に処理する命令は同一で,アクセスするデータのみ異なる方式である. そのような形式も,シムド(SIMD)とよばれる.
MIMD(Multiple Instruction Multiple Data) 形式は,最も汎用的な形式である. 各CPU は,別々のプログラムを実行し,複数のデータにアクセスすることができる.
以上のような異なった形式が存在する理由は,MIMD 形式のように,複雑に なればなるほど,一般に高価かつ,複雑な機構が必要になる点がある.
SISD 形式が最も安価であると考えられるが,最近では, 画像処理の要求が高まったためもあり,中間的な,SIMD 形式に注目が集まっている. さらに,単一 CPU 内の命令処理方式として,同時に複数の命令を処理する方式が 考案され,Pentium を始めとして多くの CPU で採用されている.この形式は, SIMD 形式である.
複数のプロセッサを搭載した,マルチプロセッシングシステムは,単一バス 上で多くのデータを高速にやり取りするための,複雑な機構が必要となる.そのため 非常に高価なシステムとなる.さらに,プロセッサの数も,16 個,128 個 多くても,1024 個程度が高速に処理するための限界で,価格も,数千万, 数億円となるコンピュータとなってしまう.
そこで,1995 年頃より,PC 一台の価格が非常に下がり,複数の PC をネットワーク 技術を使って,簡単に接続し,全体として単一コンピュータとして扱うことができ るようにオペレーティングシステムとなるソフトウエアが設計され,実現されるように なった.このソフトウエアを使った計算システムがPC クラスタ(PC cluster) である.
どのような高速なネットワークを使って接続しても,パスに直結された 複数の CPU よりは,低速となることは明らかであるが,コンピュータの数としては, 数千,数万台とつなぐことができる.さらに,通常使われているコンピュータと 変わりないコンピュータを使って計算することができるため, コンピュータが使われていない時間を見計らって計算させることも可能となる.
PC クラスタの技術は,1980 年代後半より考案された 分散オペレーティングシステム の技術を多く用いている. 分散オペレーティングシステムは, 以下のように,単一コンピュータではなく,複数のコンピュータをネットワークに 接続し,全体として効率よく計算を処理することを促すオペレーティングシステム である.ここでの問題点は,大きく分けて以下の 2 点である.
複数のコンピュータを分散させて,並列計算をする意味は,全体として 一つの計算を効率よく処理することである.つまり,比較的負荷の少ない (あまり計算をしていない) コンピュータには,さらに負荷を与え,負荷の多い (すでに計算をしている) コンピュータには,負荷を減らすことにより, 全体として,負荷を均一化させることが必要である. この処理を負荷分散という. 負荷分散には,動的負荷分散 と,静的負荷分散 がある.
動的負荷分散は,プログラムの実行中に,各コンピュータの負荷を計測し, 負荷の少ないコンピュータに,さらに,計算を割り当て,負荷の多いコンピュータは, 一部の計算を他のコンピュータに割り当て,全体として負荷を均一化する処理を 示す.静的負荷分散は,計算を実行する前に,プログラムの性質などから, 負荷の少ない処理,さらにプログラムを実行するコンピュータをを予測し, できるだけ処理を均一化するために,処理を割り当てる処理を示す.
必ずしも,動的分散の方がよい処理とは限らないことに注意しよう. 動的分散は,動的に各コンピュータの負荷を計測する必要があるので, 例えば,コンピュータの数が少ない場合は,全体としてプログラムの処理効率が 上がるとは限らない.さらに,対象となる問題によっても,どちらの負荷分散の 手法がよいかが異なる.
分散オペレーティングシステムでは,情報処理の単位となるプロセスを 分散させるのが,目的の一つである.さらに,データ自身も分散させる. プロセスや,データを分散させるためには,前提として,プロセス,データが, 分散オペレーティングシステムが管理するコンピュータで,処理可能でなければ意味 がない.通常は,「負荷分散」をするために,分散オペレーティングシステムが 「自律的に」プロセス,データを他のコンピュータに移動する.この移動を マイグレーション という.
以上のプロセス,データが各コンピュータで実行可能であり, 他のコンピュータへ移動しても構わない状態を,位置透過 という. 「位置透過」を実現するためには,プログラムを実行する方式を, 仮想機械方式(virtual machine) にしたり,分散オペレーティングシステム で管理するコンピュータの CPU を同一にする方法が考えられる.
しかし,分散オペレーティングシステムを設計する場合は,各コンピュータが 異種であることが前提として(一部は,同種であることを前提としてよい), 設計しなければならない.この異種であることをヘテロ という.
「ホモ」か,「ヘテロ」であることは,オペレーティングシステムを設計する 上で重要な問題の一つである.