この章では,ディスプレイの簡単な仕組みから,ウインドウシステムの仕組みを 説明する。本来,オペレーティングシステムと,ウインドウシステムは別の ソフトウエアであるが,最近では,Windows98/NT など,オペレーティングシステムと 一体化したソフトウエアが登場して来ている.UNIX 系のオペレーティングシステム では,X ウインドウシステム を使うことが多く,このウインドウシステムは, OS 上の数個のプロセスで実現されている.
ディスプレイ(display)(画面) に情報を表示するためには,通常,メモリ に書き込むだけでよい.メモリ管理の章で説明したように,画面情報として メモリにフレームバッファが割り当てられていた.
このフレームバッファは,通常の主記憶と同様にアクセスすることができる. 最近のハードウエアでは,グラフィックディスプレイコントローラ というチップが標準で装備されていることが多く,そのコントローラに コマンドを送るだけでよい.しかし,その命令の送り方は,各々異なるので 一般的に表現することは難しい. 初期の PC のために,15 年位前からそのための規格が作られているが, 最近ではさらに,複雑になっている.
実際のフレームバッファは,画面に必要な大きさより,多くのメモリ領域を 割り当てられているが,画面の大きさに合わせたフレームバッファの大きさを計算する ことができなければならない.そのためには,フレームバッファの構造を理解しなけれ ばならない.
まず,VGA で,白黒画面(2 色)を表示する縦 640×横 480 ドット (以下,640×480という)の画面を考える.
このように,白黒画面では(背景色が黒), デジタル信号の 1 が白(点を打つ),0 が黒(点を打たない)となり,それに応じた デジタル値をメモリに格納すればよい.
次に,カラー画面(8色)を考えてみよう.カラーは,白黒の画面が 何枚分必要か,でフレームバッファの大きさを計算することができる. 通常,色は光の 3 原色,赤(Red), 緑(Green),青(Blue) の3 種類の色の混合で表現できる.8 色ということは, 以下のように,赤(R),緑(G),青(B)の RGB の色が表現されているかどうかで 表すことができる.
赤(Red) | 緑(Green) | 青(Blue) | 色(Color) |
0 | 0 | 0 | 黒 |
0 | 0 | 1 | 青 |
0 | 1 | 0 | 緑 |
0 | 1 | 1 | 水色 |
1 | 0 | 0 | 赤 |
1 | 0 | 1 | 紫 |
1 | 1 | 0 | 黄 |
1 | 1 | 1 | 白 |
このように,8 色の場合は,上の白黒用のフレームバッファが 3 枚(3倍) あればよいことがわかる.簡単には,8=23 のため,3 枚あればよい. ことがわかる.
最近のデジタル機器では,8 色どころではなく,16 色,256 色とか,フルカラー といわれるカラーの種類が採用されている. 16 色は,8 色に,明度(明るさ,つまり,0 は暗い,1 は明るい)の 面を追加し,つまり,4 枚になったフレームバッファとして解釈できる.
256 色は,多少複雑で,256=28 ということで,画面のドット(点) に付き,8 ビットの色を表現することができるが,その色は, パレット(palette) といわれる色の対応を決めた表より選ぶことができるようになっている. 色は,通常 24 ビット,つまり 224 色から選び,パレットに 登録することができる.そのため,「同時に 256 色」などと注釈がつけられて いることが多い.フレームバッファの大きさは,8 ビット,つまり,8 枚分の 大きさでよい.
フルカラーは,上の 24 ビット,224色の色を表現することができる. 通常,自然界の色は,この色数で表現されるので「フルカラー」と名づけられている. フレームバッファは,24 枚分必要になる.
ウインドウシステムと言えば,マルチウインドウシステム (multi window system) といい,複数の ウインドウ(window) を一つの画面に表示するソフトウエアである.マルチウインドウシステムには, 2 種類ある.
タイル型は,タイル状にウインドウを「並べる」ウインドウシステムで, 旧来のマルチウインドウシステムである.Windows95/98 の前身,MS-Window の 初期のころ,または,アメリカの CMU がプロジェクトとしてウインドウシステムを 設計,開発していた Andrew システムなどがこれにあたる.オーバーラッピング型は, 最近では,あたり前となった複数のウインドウを「重ねる」ことができる ウインドウシステムである.
ウインドウシステムは,「ヒューマンインターフェース」という学問の中で, 人間とコンピュータの操作の使い易さの研究の一つであった.最初,コンピュータへの 命令は,「コマンド」という簡単な英単語でなされた(コマンド形式), その後,コマンドを「メニュー」として画面上に表として羅列し,人間がそれを 選択する,という形式に発展した(メニュー形式),その後,プログラミング言語 の分野で活気的な概念として「オブジェクト指向」が生まれ,それと同時に Smalltalk という言語が 1980 年に発表された.この言語は,それ以前より 「子供でも簡単に操作できるコンピュータ」を研究目標として設計開発された プログラミング言語である.この Smalltalk の処理系が「マルチウインドウシステム」 であった.そのため,コンピュータへの命令形式としては以下の流れがある.
実際の使い勝手としては,人間の個人差,こだわりなどからいろいろな意見が あるが,ウインドウ形式(マルチウインドウ)が,最も使い易いとされている.
ウインドウシステムの流れとしては,Smalltalk の後,アップル社の Lisa, Macintosh へと受け継がれ,マイクロソフト社の MS-Window,Windows95/98 など のシステム(ソフトウエア) がある. Unix 系のオペレーティングシステム上では,ネットワーク技術が早くから発達 したので,ネットワークを考慮したウインドウシステムの研究開発が行われた. その中心となる技術がサーバー/クライアントモデル(server-client model) である.
サーバ(server)は,1 台の PC の画面の描画処理を(集中的に) 担当する プロセスである.画面は一つであるので,一つのプロセスが集中的に管理する 方が,「同期処理」の観点からもよいと考えられる.クライアント は, 通常,ウインドウ一つを表示するプロセスである.もちろん,複数のウインドウを 表示することもできる.サーバ,クライアントは,共に,プロセスであるので, 「プロセス間通信」を使って,通信を行い,命令を送る.この命令を イベント(event) といい,規則に基づいた通信が処理される. 例えば,X ウインドウでは,サーバのことを 「X サーバ」といい, この規則のことを「X プロトコル」という.
そのため,各ウインドウは,イベントを使って互いに通信をすることができる. UNIX 系のオペレーティングシステムでは,プロセス間通信は,ネットワークを介して 行うことができる(ソケット通信)ので,クライアントであるプロセスは, ネットワークで繋がれた別のコンピュータでもよい.そのため, 「日本にいる人が,日本にあるコンピュータの画面上に,アメリカのコンピュータで 実行中のプロセスの様子を表示する.」といったことが可能となる. これらの技術は,ウインドウシステムのそのものの技術というよりも, ネットワーク技術(プロセス間通信)を利用した技術であるということができる.
サーバなど,ウインドウシステムの根幹をなす技術がウインドウ描画 である.基本的な,幾何学模様(線分,円,楕円など) を描画するためには,数学的な 知識だけでなく,コンピュータ特有の技術も必要であるが,この説では,まず, ウインドウ描画を説明する.
オーバーラッピング型マルチウインドウシステムでは,ウインドウが重なり 合うため,ウインドウの隠れた部分,見える部分を別に管理しなければならない. ウインドウを表示して欲しいソフトウエア(アプリケーション)は, 「ウインドウを表示しろ」という命令をウインドウシステムに命令するだけあるため, 「隠れている」,「見えている」を管理するのは,ウインドウシステムの役割である. 例えば,画面に対して,以下のような複数のウインドウが表示されているとしよう.
「ウインドウD」に注目しよう.「ウインドウD」は,「見えている部分」,
に対して,「見えていない部分」がある.
その他,「ウインドウD」全体の情報も「当然」必要であるので, 用は,
ウインドウ全体から,「見えている部分のみ抽出して」表示すればよい.よって, ウインドウ全体では,これら,「見えている部分のリスト」で表現される.
各ウインドウの形から,「見えている部分」だけを計算する処理は, フルスクリーン中のウインドウ,どのウインドウが変化しても(移動など) 行わなければならない.しかし,実際には,部分的に計算するだけでよい 場合が多い.このように,「ウインドウ描画」は,単に,一つのウインドウの 変化も,フルスクリーン全体に影響をあたえる大きな計算が必要となる.
「ウインドウ描画」だけでは,いわゆる「アイコン」,「メニュー」といった ウインドウをより抽象化したものは,表示されない.ウインドウシステムは, これらの抽象化したソフトウエア部品を管理するソフトウエアである. X ウインドウシステムをはじめとした,UNIX 系のオペレーティングシステム用の ウインドウシステムは,「ウインドウマネージャ」を独立したプロセスとして 処理し,簡単に入れ替えることができるように設計されている. 他のウインドウシステムでは,「ウインドウマネージャ」は,一体化されている.