システム環境を考えてみる
環境を考えてみる
もしubuntu、Fedora、 KNOPPIX、あるいはVine Linuxのようなデスクトップ向けLinuxを使っているのでしたら、使い勝手はいわゆるパソコンと変わらないでしょう。Webブラウザ、ワードプロセッサ、プレゼンテーション、あるいはメールを出すにしてもWindows XPやMacOS Xの上で提供されているのと同じようなアプリケーションスイートOpenOfficeがあります。
「何をさしてオペレーティングシステムと呼ぶのか」の所で説明した通り、カーネルと、その上にあるミドルウェア、そしてアプリケーションは独立した存在です。ミドルウェアにしてもアプリケーションにしてもソフトウェアは利用目的あるいは好みによって入れ換えることができます。
「UNIXはキャラクタユーザインタフェース(CUI)である」と思い込んでいる人も世の中にはたくさんいます。UNIXが生まれた1960年代には、そもそもGUI(グラフィックユーザインタフェース)などなかったわけですから、最初はCUIから出発したので当然といえば当然です。しかし、UNIXはCUIでもGUIでもありません。UNIXはCUIもGUIもどちらのインタフェースを選ぶかはユーザの判断次第です。
しかし、今まではCUIを選ぶユーザも多かったというのは事実です。なぜかというとGUIを使ってUNIXをきちんと走らせようとすると、高速で高価なハードウェアが必要だったからです。別の言い方をすると、GUIのために計算機の資源を割くといったことよりも、そのための資源を別に使っていたといえるでしょう。近年になりデスクトップパソコンレベルでもCPUの処理速度が劇的に速くなり、ハードディスクの容量も格段に大きくなり、大量のメモリを搭載したものが出回るようになって、やっとGUIを使うのが一般的になりました。今やGNU/Linux環境は他のパソコンとかわらないユーザインタフェースを提供しています。
もしエンドユーザとして使うだけであればユーザとしてパソコンを使うようにデスクトップ環境をコンシューマー向けに作っているLinuxのディストリビューションをPCハードウェアにインストールし初心者用解説書を読めばマックやウインドウズと同じようなパソコンとして使えます。2007年においては米国DELL社ではエンドユーザ向けにubuntuをインストールしたパソコンを販売しています。
PDAからスーパーコンピューターまで
GNU/Linuxは、SHARPザウルスのようなPDAからIBM @server zSeriesのようなメインフレームまで基本的には同じ構造のものが動いています。もちろん必要とされるミドルウェアやアプリケーション、カーネルのコンフィグレーションはPDAとメインフレームでは異なってくるのは当然ですが、やはりどちらもGNU/Linuxと呼ばれるものです。
- IBM メインフレーム - SHARP ザウルス - 世界のスーパーコンピュータTop500
またLinuxはたくさんのコンピュータをつないたクラスターコンピュータとしても使われています。世界のスーパーコンピュータのTop500の中にもLinuxを 使っているものがたくさんあります。
クラスターコンピュータとしての使われかたを考えてみましょう。数十台、数百台、数千台のマシンからなるクラスタシステムを想像してください。個々のシステムに対してディスクトップ環境などの環境は重要な要素ではありません。むしろ計算資源を圧迫する不必要な環境でしょう。
何が必要か、何が不必要かは常にどのような環境で使われるかで違ってきます。狭い範囲でしか使うことしか想定していないようなオペレーティングシステムでは、ここまでの柔軟性は不必要でしょう。
柔軟性を持たせると、いろいろな局面で使うことができて便利です。また、使う局面のみ考えて使えばいいので、そんなに難しいことでもありません。しかし、その全容をすべて理解しようとすると、PDAからスーパーコンピュータまで通用する基礎的な知識を一通り学習しなければいけないという世界に入り込んでしまいます。現在ではGNU/Linuxは汎用の計算システムだけではなく、携帯電話やハードディスクレコーダーなどにも組込みOSとして使われるようになってきました。これらも単一のカーネルツリーからコンパイルすることが可能です。そこが醍醐味の一つでもあるのですが、しかし、この当たりが"UNIX(Linux)は難しい"という部分につながっているのではないかと筆者は想像しています。
- 調べてみよう
- Supercomputing Top500の中でLinuxベースなシステムは、どれぐらいのパーセンテージを占めているのであろうか。
GNU/Linuxの何を学ぶべきなのか
「GNU/Linuxでもワードプロセッサのアプリケーションが動きます」というレベルで満足であれば、この先を読み進める必要はありません。なぜならこの文章はGNU/LinuxやUNIXのHOWTOではないからです。アプリケーションレベルでのハウツー本が欲しいのであればインプレス社の「できるシリーズ」などをお勧めします。このテキストをこれ以上読んでも正直、時間の無駄です。
- 補足
- ちなみに「できるシリーズ」はシリーズ累計3000万部を突破しています。
しかしコンピュータサイエンスの基本としてオペレーティングシステムを学ぶのであれば、我々は最初にUNIXが創造された時から脈脈と受け継がれるUNIX的なコンセプトを学ぶことが近道だと筆者は思います。最終的にそれがPDAに使われようが、メインフレームに使われようが、スーパーコンピュータで使われようが、学ぶための出発点は同じだからです。さて、これからこの先、何を学ぶべきかのポイントをざっくりと書き出してみます。
ざっくりリストアップしてみる
- アクセス権限モデル
- 管理者であるrootと一般ユーザとの区別され一般ユーザは限られた範囲でしか権限を持たない
- ユーザIDやグループIDの設定と利用
- 入出力の統一化
- 入出力は標準入出力とファイルに統一されている
- UNIXの長い歴史の中で不統一な所も出てきてはいる
- / から始まる階層化されたファイルの名前空間
- ディレクトリ中にファイルがあり、絶対パスや相対パスでファイルへアクセス
- プロセスの構成
- 親プロセスから子プロセス生成され、実行環境が継承される
- プロセス間での通信
- 記憶空間の共有
- ファイルを介してのデータ共有
- TCP/IPネットワーク機能
- 最小の機能構成された豊富なツール
- 小さなツール群を組み合わせて柔軟に処理を行う
- ワークベンチ
- 作業を行うために豊富なツール群を用意している
これらを実現するために内部がどうなっているのかをGNU/Linuxを取り上げて、さらに詳しく見ていきましょう。
ログイン
通常、ユーザがGNU/Linuxを使うには、まずログインするところから始まります。アカウント名とパスワードを入力します。KNOPPIXなどは自動的にログインした状態から始まりますが、このような自動的にログインしているのは例外的です。通常はディストリビューションのインストールの設定の時にインストーラが最低ひとつはユーザアカウントの作成を尋ねてくるので、その指示に従い入力すると自動的に作成されます。
ユーザアカウントが存在していない場合、まずroot権限になってユーザのアカウントを造り、パスワードを設定し、ホームディレクトリを作成します。これで始めてログインできる環境になります。アカウントはadduserコマンドを使うと簡単にできます。下はhironobuというアカウントを作る例です。
# adduser hironobu Adding user hironobu... Adding new group hironobu (1001). Adding new user hironobu (1001) with group hironobu. Creating home directory /home/hironobu. Copying files from /etc/skel Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for hironobu Enter the new value, or press return for the default Full Name []: Hironobu SUZUKI Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [y/n] y #
ログインすれば、あとは何かプログラムを起動すると、ログインしたユーザの権限でプログラムが動き始めます。ユーザの持っているユーザIDやグループID が動作時の権限となり、その情報によりファイルへのアクセス等が制限されます。