スポンサードリンク

Linuxに入れ替えるには?



Linuxに入れ替えるには?

Linuxに入れ替えるには?

「Linux」は、どんなOSでしょうか。
学校のパソコン40万台をリナックスに入れ替えると言っていました。検索すると、ボランティアのプログラマーのみなさんが、善意で改良して行った、すばらしいOSです。

初心者の個人でも、手に入れられるでしょうか?
簡単に、XPと、入れ替えられるでしょうか?


Microsoft、Intelみたいに、銭儲けしか、考えていない企業は、大嫌いです。
vistaに、誘導したいみたいです。

<Linuxは他のOSに比べ、低い性能のコンピュータでも軽快に動作する。また、ネットワーク機能やセキュリティーに優れ、また非常に安定しているという特長を持つ。いらない機能を削ぎ落とし、必要な機能だけを選んでOSを再構築することができるという点も他の多くのOSには見られない特徴である。>

「Windowsが起動しくなってしまった。データ救出できないか。」

「KNOPPIX Edu5」フリーウエア。
(edu5.0.1-20060724.iso)
FAQページもあります。

インストールの仕方は。
インストール自体は。
自分にでも出来るくらい簡単なものですが、一瞬で終る訳ではないのでしばらく待ちましょう。

インストール中。
何のアクションもなくなる様な事がありますが「ん?おわった?」と思い込んで早々にCDを抜き取り再起動をかけるとデュアルブート画面が出てきて「KNOPPIX Edu5」を選択できる所まで行きますが
当然起動はしません。。
その時は。
今一度やり直しましょう。

インストールがめでたく成功し再起動(電源を投入)すると、XpかKNOPPIXか選択する画面が出て来ますので30秒以内に↑↓キーで選択してEnterキーを押しましょう。

ま。
その前に。
この「KNOPPIX Edu5」は1CDでboot可能なOSです。

まずは。
CDbootでお試しになったほうがいいような気もします。
OSは全てメモリ上に展開されるだけでデフォルトでは既存HDDに何の変更も加えられません。
ですので。
気軽に試す事ができます。

自分の場合。
あまり使わなくなったXp機でCDbootさせていたのですが、だんだん面倒になりそのディスクを使ってインストールして使用させていただいています。

ダウンロードはもちろん可能です。

しかし、XPの代わりに利用できるかどうかは別問題です。
基本的にサポートはなくなりますので、自力で問題を切り分け解決することになります。
わからないことは、FAQを参照したり、掲示板で質問するなど、ある程度の助言をもらうことは可能ですが、設定をあれこれ試したり、別のモジュールと入れ替えるなど、自分で積極的に問題に取り組む必要があり、商用製品のような手厚いサポートを受けるためには、今まで以上の費用がかかります。

また、Windowsでしか利用できないアプリケーションも多数あるので、いきなり乗り換えるより、サブマシンやデュアルブートなどで導入してみてはいかがでしょうか。

簡単とは言えませんね。最低でもWindowsをインストールできる(リカバリではない)ぐらいの知識は必要です。
また、わからないことは安易に人に聞くのではなく、
自力で調べるというスタンスでないと使うのは難しいと思います。
手に入れること自体は簡単です。

で、とりあえずどんなものか試してみてはどうでしょうか?
CDかDVDから起動できるLinuxがあります。
これならダウンロードしたファイルをCDかDVDに書き込んで
それをドライブに入れたら再起動するだけでLinuxが使えます。
現在入っているWindows自体やその他のソフトやデータには一切影響ありません。
気軽に試せますよ。
こういったLinixは
KNOPPIX
が代表的ですね。
これを起動できないならあきらめた方がいいかもしれません…


メーリングリストへのお誘い

-----------------------------------------------------
Infoseek メーリングリストからの招待状!
-----------------------------------------------------

post-linux-linux-linux@blog.seesaa.jp さんへ

あなたは
namu@ml.infoseek.co.jp
メーリングリスト管理人の
namu-owner@ml.infoseek.co.jp 様
から、メーリングリストに招待されています。



■ 参加する
-----------------------------------------------------
下記URLにアクセスすると登録処理が完了します。

https://ml.infoseek.rakuten.co.jp/free/index.phtml?action=MemberRealRegisterResult&i=673383&v=3d9be111ff60676e2122fa909a045d94

もしうまくクリックできない場合は、上記と全く同じURL
をブラウザに打ち込めば登録できます。

こちらのメールが送信された日より2週間以上経過いたしますと、
認証期限切れになり、登録処理が行えません。
お手数ですが、メーリングリスト管理人の
namu-owner@ml.infoseek.co.jp 様
に再送の依頼をしてください。

□ 参加を希望しない
-----------------------------------------------------
このメーリングリストへの参加を希望されない場合は、
お手数ですがこちらのメールを破棄してください。

-----------------------------------------------------
もしも、ご質問・不具合などありましたら
https://ml.infoseek.rakuten.co.jp/?action=SupportForm
までお気軽にお問い合わせください。

::::::::::::::::::::::::::::::::::::::::::::::::::::
 30秒で誰でもカンタン!メーリングリスト開設!
  『Infoseekメーリングリストサービス』
  http://ml.infoseek.rakuten.co.jp/
::::::::::::::::::::::::::::::::::::::::::::::::::::

Linuxクラスター



Linuxクラスターは、Linuxマシンをコンピュータ・クラスター化し、ひとつの処理を複数のコンピュータ上で処理させる方法である。疎結合クラスターの一種であり、対称型マルチプロセッシング (SMP) が、CPUとメモリをより密に繋いでいるのに比べると、クラスターは疎な繋がり(結合)である。クラスターの各要素は、完全に独立したコンピュータとして動作しており、高速なLANなどを利用してお互いに接続されている。

要素となるLinuxマシンはGNU/Linuxオペレーティングシステムを搭載したコンピュータである。

Linuxを動作させるために必要なハードウェアは、ごく一般的なパーソナルコンピュータでよいため、手軽にスーパーコンピュータを作り始められることが特徴である。また、Linuxはスケーラビリティに優れ、高速のコンピュータ上でも動いている。このため、低速な環境でシステムを構築してから、徐々に高速なコンピュータ環境に向かって進化させることが出来る。

また、各コンピュータを繋ぐのには標準的なLANを使っているため、接続のハードウェアや技術、ソフトウェアは、従来の物を使うことが出来る。ハードウェアの製作やメンテナンスに特別な部品や技術を使う必要はない。

Linuxは、オペレーティングシステム (OS) のソースコードを始め全ての必要なソフトウェアをソースコードも含めて無料で手にいれることができる。そのため、利用者や研究者が必要に応じてあらゆる部分に手を加えることが出来るのが大きな特徴である。また、使用に当たってコンピュータ毎に支払うOSのライセンス料もない。したがって投資に必要なのはハードウェアなどの物理的な資源と人件費だけということになる。



クラスターの目的
Linuxクラスターを作る目的としては、

高速な計算処理
大量の処理要求への対応
安定性や信頼性
などの場合があり、目的に応じて使われる技法も異なる。


高速な計算処理を目的とする場合
ごく普通のパーソナルコンピュータを多数(場合によっては数百から数千)、高速のネットワークで繋いで、いわゆるスーパーコンピュータとしての性能を出せることから、場合によっては通常のスーパーコンピュータの性能を10分の1以下の予算で作ることができる。また、研究者が自分達でも作れることから結構流行した。

マイクロプロセッサの進歩により高速のコンピュータが作られ、高速のイーサネットによりごく一般的なネットワークの手法でコンピュータ間を接続できることが、Linuxクラスターをもたらした。また、高速のイーサネットを更に複数並行して接続し更に高速なLANを構築する技法も完成されている。現状では転送速度がギガビット/秒のイーサネットが使われることが多い。

非常に高速な処理をする専用のクラスターを構成する場合は、以下の例で示す Beowulf の技法を使って実現されることが多い。

要素になるコンピュータを個人用のデスクトップや他の目的のサーバーにも使い、その余剰の計算能力をお互いにわかちあうような場合には、以下の例で示す MOSIX を使う場合がある。


大量の要求への対応を目的とする場合
ウェブサーバーなど、インターネット全体から大量の要求が同時に発生し、秒のオーダーで結果を返す必要がある。

このための技法には多くの例がある。以下の例で述べる MOSIX もその目的で使うことが出来る。

ちなみに、世界最大のコンピュータ・クラスターを保有すると言われているインターネットの検索エンジンのグーグル[1]は、Linuxクラスターでできている。


安定性や信頼性を目的とする場合
この場合は、複数のコンピュータが同じ処理をして、結果を比較しあって異常な結果が出ることを防いだり、通常は別の処理をしているコンピュータの集合から一台が異常になっても、自動的に他の残りのコンピュータが処理を補うような場合である。



Linuxクラスターの作り方
普通のパーソナルコンピュータで作ることができ、必要なソフトウェアはソースコードも含めて全て無料で手に入り、作るのに必要な情報はほとんどウェブ上で即座に無料で手にいれることが出来るフリーソフトウェアまたはコピーレフトのソフトウェアである。

実際にハードウェアを使って作る場合と、クラスター用ソフトウェアの構築や開発のために仮想コンピュータ上に構築する場合がある。


実ハードウェア上の構築


仮想コンピュータ上の構築
単にソフトウェアの構築の実験や開発をするだけなら、Linux用の仮想コンピュータを利用できる。仮想コンピュータは一台の実際に存在するコンピュータを使って、その中に複数のコンピュータを作り出すことが出来る。利用する側から見ると(感じると)全く複数のコンピュータが存在するように見える。実際のコンピュータの資源が許す限り何台でも仮想コンピュータを作ることが出来る。

また、特にi386系のLinuxに限るならば、Linux上で複数の仮想のLinuxマシンを作り出すためのソフトウェアがカーネルの一部を含め、ユーザーモードLinux (UML - User Mode Linux)として提供されている。UMLの一部は既に一般のLinuxに含まれて配付されているため、UMLのソフトウェアを手にいれたら手間を必要とせずに即座に複数の仮想Linuxマシンを用意することが出来る。UMLもやはり無料でソースコードを手にいれることができる。

また、VMWareなど商用の仮想コンピュータソフトウェアも用意されている。

構成するのに必要なソフトウェアや手順が紹介されているので、UML上でクラスターの構築の実験が出来る


使用するソフトウェアや技法の例
Beowulf(方式)
Linuxを使ったコンピュータ・クラスターとして有名。Linux以外のカーネルのソースコードが公開されているフリーのUNIXでも作られる。クラスターを構成するコンピュータはクラスターとしての処理だけに使われる。各コンピュータは高速の専用のネットワークで接続される。"Beowulf"と呼ばれるソフトウェアパッケージはなく、Beowulfを構成するに当たってそれぞれ使うソフトウェアは異なり特に必要な要素となるソフトウエアの部品はない。[2]
bproc (Beowulf Distributed Process Space)[3]Beowulfクラスター上でリモートプロセスを起動するためのツール群。マスターノード上で起動されたプロセスがVMADumpによりスレーブノードにコピーされる。スレーブノードはカーネルと必要最小限のライブラリのみをブート時にダウンロードするディスクレス構成。NASAのBeowulfプロジェクトで開発され、現在はロスアラモス国立研究所のクラスターPink(2048CPU)[4]にも採用されている。
SCore(方式/ソフトウェア)
BeowulfがアメリカのNASA主導で策定され、検証された方式/プロジェクトであった様に、1992年から通産省主導による新情報処理開発機構(RWCP)にて開発されたクラスター計算機用超並列プログラム実行環境を含むクラスター方式。
MOSIX(ソフトウェアパッケージ)
Beowulfクラスターではない。一般のデスクトップコンピュータも時間を制限してクラスターの一部として参加させることが出来る。プロセス単位で走る通常のLinux用ソフトウェアを改造なしてクラスター上で処理させることが出来る。参加するコンピュータはi86系のCPUを使っていれば、まちまちの仕様のコンピュータでも構わない。スレッドレベルの処理はサポートしていない。[5]
グリッド・コンピューティング
インターネットなどの広域で共有されたネットワーク上でコンピュータ資源(処理能力、記憶能力)を共有する仕組み。模索中であるが、商用のサービスが行われ始めている。Globusツールキットが事実上の標準になりつつある。特にLinuxとは限定していない。

参照
スーパーコンピュータ - とにかく速いコンピュータを作りたくて仕方なかったセイモア・クレイが クレイ・ワン(Cray-1)を作ったのが始まり。当時の高速な大規模のコンピュータ(メインフレーム)が、一般的な処理のために作られているのに対して、特に科学・工学の分野で必要となる数値計算、特にベクトルや行列の計算を速く計算するために作られた。
並列コンピュータ
コンピュータ・クラスター

Linuxマシン (リナックス マシン)



Linuxマシン (リナックス マシン)とは、Linuxカーネルや、Linuxカーネルを含めたGNU/Linuxオペレーティングシステムを直接走らせているコンピュータを指していう。ソフトウェアだけではなく、ハードウェアも含めている。Linuxボックスと呼ぶこともある。英語では Linux box が普通の呼び名。

Linuxは多くの種類のコンピュータ(CPUアーキテクチャ、コンピュータ・アーキテクチャ)で利用可能なオペレーティングシステムで、Linuxマシンと呼んでも、通常のパーソナル・コンピュータを始め、マッチ箱程度のサイズから、大きなものはメインフレームと呼ばれる大型のコンピュータまで、世界に存在するコンピュータと呼べる多くの物の上で動作している。そのため、Linuxマシンと呼んでも、どんな風な外観をしているかを定義することは出来ない。しかし、Linuxマシンと言ったとき、多くの場合はパーソナルコンピュータ、サーバーコンピュータでLinuxが動作しているものを指す。

Linuxマシンを作ることが出来るコンピュータのタイプ(CPUアーキテクチャ)はLinuxカーネルを参照のこと。

Linuxマシンと言った場合、ネットワーク上で独立した単位のコンピュータを指す場合が多く、複数のLinuxマシンが何らかのネットワークで接続され、処理を複数のコンピュータで処理し、利用者からひとつのコンピュータの塊に見えるような場合は、Linuxクラスター(またはコンピュータ・クラスター)と呼ぶ。

また、Linuxクラスターの一種であるが、クラスターがインターネット上に作られているような場合は、Linuxグリッドと呼ぶ。グリッドの場合、特に複数のOSが参加できるようにしている場合が多い。




Linuxマシンの使われ方

Linuxマシンの分類
ルーター
マッチ箱程度からVHSビデオテープ大のもので、ルーターとして使われているもの。
ブレードサーバー
ウェブサーバー、データベースサーバーを稼働させている。
デスクトップコンピュータ
狭義のLinuxボックスで、Microsoft Windows用のインテルアーキテクチャのデスクトップコンピュータ。
様々なディストリビューションが利用できる。
クラスター
ブレードサーバーを集めたもの。データセンター内で稼働している。

Linuxボックスの作り方

関連記事
Linuxディストリビューション

Linuxディストリビューション



Linuxディストリビューションとは、Linuxカーネルを中心に構成されたGNU/Linuxオペレーティングシステムを、専門家ではなくとも導入(インストール)したり、利用できる形にまとめ上げたもの(頒布形態)。

通常知られているものは、一般利用者がサーバやデスクトップとして利用可能なソフトウェアを集めてインストーラをつけたもの。代表的なLinuxディストリビューションとして Debian GNU/Linux、Mandriva Linux、Red Hat Enterprise Linux、Slackware、SUSE LINUX 等がある。

ディストリビューションは、自由に配付、利用の出来るソフトウェア(フリーソフトウェア)だけを集め、ディストリビューション自体も無料で提供されるものと、利用に料金を払う必要のある商用ソフトウエアを含んだ有料のディストリビューションに分けられる。大抵の場合、前者はFTPなどで公開されており、後者はユーザー数などに制限のあるライセンス契約によって提供される。どちらの場合も、CD-ROM等によって入手することができる。Linuxディストリビュータによっては、両方のディストリビューションを用意しているところもある。


構成要素
カーネルは資源の管理やハードウェアへのインターフェースしか提供しないので、通常のアプリケーションを利用するためにはカーネル以外の各種ソフトウエアが必要である。Linuxオペレーティングシステムがブートするには少なくともカーネルとinit、シェルが必要。コンソールベースとして有効に使うためには、最低でも、基本ライブラリ(GNU libc ライブラリ)、ファイル操作用プログラム群(多くの場合GNU版)が必要となる。

さらに通常のシステムとして利用するために、以下のようなソフトウェアを同梱している。そのため、自由に配付の出来るディストリビューションだけを使って、追加のソフトウエアなしでも日常的な目的(個人/家庭向け、ビジネス向け)で、デスクトップ/サーバシステムとして使うことが出来る構成になっている。

各種の設定を行うソフト
各種のインタープリタ(スクリプト言語)
GUI
X11のフリーな実装であるXFree86、XOrg
デスクトップ環境としてGNOME、KDE、XFce
ウィンドウマネージャ
デスクトップ向けアプリケーション
ウェブブラウザ
メーラー
テキストエディタ
オフィススイート
マルチメディア
ゲーム
サーバ向けアプリケーション
メールサーバ
ウェブサーバ
データベースサーバ
ソフトウエア開発向けアプリケーション
多数のコンピュータ言語開発環境

主要 Linuxディストリビューション一覧
RPM系
Asianux : MIRACLE LINUX - Asianux Inside のベース。無償配布。
CentOS : Red Hat Enterprise Linuxのクローン
Desktop/LX : Windows に似たユーザーインタフェース
Fedora : Red Hat Linux 後継のコミュニティ指向型開発プロジェクト
Haansoft Linux : 2006 Workstation は Asianuxベースのディストリビューション。
HOLON Linux
Mandriva Linux : 旧名称は、Mandrakelinux。商用版と無料版がある。
MIRACLE LINUX : 商用、Oracle対応、Asianux採用
Momonga Linux : Kondara MNU/Linuxの後継
OpenLinux : 商用
PS2 Linux : プレイステーション2上で動作する。Kondara MNU/Linuxベース
Red Flag Linux : 紅旗Linux中国製ディストリビューション、Asianux採用
Red Hat Linux
Red Hat Enterprise Linux : 商用
Scientific Linux (旧 Fermi Linux) : Red Hat Enterprise Linuxのクローン
StartCom Linux : Red Hat Enterprise LinuxベースのLinux。
SUSE LINUX : 商用、ヨーロッパで強い。v10.0からオープンソース版がある。SuSE社は、ノベル社に買収された。
Turbolinux : 商用
Vine Linux : 個人用サーバー、クライアント向け
White Box Enterprise Linux : Red Hat Enterprise Linuxのクローン
Yellow Dog Linux : PowerPC搭載機専用
Debian系
ARMA aka Omoikane GNU/Linux
Debian GNU/Linux 100%フリーソフトウェアであることが理念、コミュニティベース
gnUserLinux : Debianベースの企業向けデスクトップ用Linux
KANOTIX : DebianベースでCDブート/HDDインストール共可能
KNOPPIX : DebianをベースにCDブートで利用できるようにしたLinux
Linspire (旧称 Lindows) : Windowsのような使い勝手を実現
MEPIS : 主にデスクトップ向け、UbuntuベースでCDブート/HDDインストール共可能
Progeny Debian : Red Hat の Anacondaインストーラを移植したLinux
sidux : Debian sidベースでCDブート/HDDインストール共可能 日本語版
Ubuntu : Debianベースで6ヶ月ごとのリリースと商用サポートを掲げる
巫女 GNYO/Linux
Slackware系
Plamo Linux : Slackwareを日本語化し、プラモのようにいじれることを念頭に置いて開発されている
Slackware
SLAX : 日本語化されたSLAX-jaも存在する。SLAX-ja
その他
Gentoo Linux : BSD系OSのportに似たPortageと呼ばれるパッケージ管理
IPnuts : ルータ・ファイアウォール構築に使用
Nature's Linux : 無料の開発版とOS監視サポート付きの有料版がある。FreeBSDのjailに似た仮想ファイルシステム、jailを利用したバックアップとリカバリ機能、ファイル改ざん検出機能などを持つ。
Omaemona 2ch/Linux : Linux from Scratchベース
開発が事実上終了したもの
Kondara MNU/Linux
LASER5 Linux : 商用・個人(7.2exp以降開発停止。現在サポート終了)
LinuxPPC : PowerPC搭載機専用
MkLinux : PowerPC搭載機専用、Machベース
Red Hat Linux : 商用および個人用
SLS
Stataboware : Alpha搭載機専用
非ディストリビューション
Linux from Scratch

関連項目
Linux
en:Comparison of Linux distributions (各ディストリビューション比較表 -英語)
Linuxクラスター
Embedded Linux

カーネル(英:Kernel)



カーネル(英:Kernel)とは、階層型に設計されたオペレーティングシステムの中核となる部分である。システムのリソースを管理し、ハードウェアとソフトウェアコンポーネントのやりとりを管理する。

オペレーティングシステムの基本コンポーネントとして、カーネルはメモリ、CPU、入出力を中心としたハードウェアを抽象化し、ハードウェアとソフトウェアがやり取りできるようにする。また、ユーザープログラムのための機能として、プロセスの抽象化、プロセス間通信、システムコールなどを提供する。

これらのタスクはカーネルによって方式が異なり、設計も実装も異なる。モノリシックカーネルは全てを一つの仮想アドレス空間に格納されたコードで実行して性能を向上させようとする。マイクロカーネルはサービスの大部分をユーザ空間で実行し、コードの保守性とモジュール性を向上させようとする[1]。多くのカーネルはこの二つのカテゴリのいずれか(あるいは中間)である。




概要
全てではないが、多くのオペレーティングシステムはカーネルを内包する。ハードウェア/ソフトウェア間の通信を管理するソフトウェアとしてのカーネルは、性能、メモリ効率、セキュリティ、プロセッサのアーキテクチャなどが複雑に絡んだ問題への妥協的解答である。

多くの場合、ブートローダーがカーネルを特権モードのプロセスとして起動する[2]。しかし、初期化が完了すると、カーネルはいわゆるプロセスとしては存在せず、ディスクアクセスなどの高い特権レベルを必要とする処理を必要としたときにユーザプログラムから呼び出される機能の集合体として存在することになる。カーネルの処理の流れはユーザープロセスの処理の流れの延長上にあり、システムコールによってカーネルに処理が渡り、終了するとユーザーに戻っていく。初期化時のカーネルの処理の流れは「アイドルプロセス」とか「collects」と呼ばれ、プロセッサが何もしていないときに実行される。

カーネル開発はプログラミングの中でも最も複雑で難しいタスクのひとつと考えられる。オペレーティングシステムの中核部であるということは、高い性能を要求される最重要なソフトウェアであり、正しく設計し実装することは難しい。カーネルはユーザプログラムの互換性や移植性を考慮する必要などから、設計が制限されることもあり、そのことがさらに開発を難しくしている。


カーネルの機能
カーネルの仕事はコンピュータのリソースを管理し、他のプログラムがそれらのリソースを使って動作できるようにすることである。コンピュータの最も基本となる部品はCPUまたはマイクロプロセッサであり、それらが実際に様々なプログラムをカーネルの管理下で実行する。他の重要なリソースはコンピュータのメモリであり、実行すべきプログラムがそこにロードされ、プログラムが使用するデータも格納される[3][4]。さらにデバイスへのアクセスを可能とするため、カーネルはマザーボードの入出力も管理しなければならない[5]。最終的にカーネルはそれらのサービスにユーザープログラムがアクセスする手段を提供しなければならない。


プロセス管理


OSカーネルの主な仕事はアプリケーションの実行を許可し、ハードウェア抽象化などの機能によってそれをサポートすることである。アプリケーションを実行するため、カーネルはアプリケーションのコードを含むファイルをメモリにロードし(場合によってはそのための仮想空間を設定する)、プログラムのためのコールスタックを設定し、そのプログラムの所定の位置に制御を渡すことで実行を開始する。

マルチタスク可能なカーネルは、ユーザーから見て実際にそのコンピュータが同時実行できるプロセス数よりも多数のプロセスが同時並行して実行されているかのように見せかける。一般に、システムが同時並行して実行できるプロセス数はそのシステムの持つCPU数に等しい。

マルチタスクシステムでは、カーネルは各プログラムにタイムスライス(そのプログラムがCPU上で実行される連続時間)を与え、プロセスからプロセスへと高速に切り換えていくので、ユーザーから見ればそれらのプロセスが同時並行して実行されているように見えるのである。カーネルは次に実行すべきプロセスを決定し、タイムスライスの長さを決定するスケジューリングアルゴリズムを持つ。一般にプロセスには優先度が設定される。カーネルはそれらのプロセス間の通信手段も提供する。これはプロセス間通信(IPC)と呼ばれ、パイプ、共有メモリ、ソフトウェア割り込みなどがある。

OSはマルチプロセッシング(SMPやNUMA)をサポートすることもある。この場合、複数のプログラムやスレッドが複数のプロセッサ上で動作する。そのようなシステムでカーネルを動作させる場合、「リエントラント(再入可能)」あるいは「割り込み可能」になるよう大幅な改造が必要となる。これはつまり、何か処理をしている最中に他からも要求を受け付けるということである。この改造ができれば、異なるプロセッサ上で動作するプログラムが同時にカーネルを呼び出しても大丈夫になる。カーネルは複数のプロセッサからのメモリアクセスを同期させる方法も提供しなければならない。これはメモリ管理とプロセス管理にまたがる問題である。


メモリ管理


カーネルはシステムの全メモリへの無制限のアクセスが可能で、ユーザープログラムの要求に応じて安全なメモリアクセスを提供しなければならない。このための第一歩はページング方式やセグメント方式による仮想アドレッシングである。仮想記憶方式では、カーネルは物理アドレスを別のアドレス、つまり仮想アドレスに変換する。これにより、各プログラムは(カーネル以外では)仮想空間上唯一のコードに見え、プログラムが互いに他のプログラムを破壊することを防止する。

仮想アドレッシング方式では、仮想空間をカーネル用の部分(カーネル空間)とアプリケーション用の部分(ユーザー空間)に分けることが出来る。この根本的な分離は多くの汎用カーネルで実際に使われている。

複数のプログラムを同時並行的に動作させるため、OSはそのシステムのメモリ容量以上のメモリを必要とすることがある。その一般的解決策は仮想記憶である。仮想記憶では、カーネルがメモリの一部を他(例えばハードディスク上のスワップファイルなど)に移し、必要に応じてメモリに復帰させる。

メモリ管理のもうひとつの機能として、カーネル内の各モジュールやデバイスドライバが使用するメモリの割り当てがある(動的メモリアロケーション)。


デバイス管理
実際に何らかの作業をするには、OSはコンピュータに接続された周辺機器にアクセスする必要があり、周辺機器はその開発元などが書いたデバイスドライバを通して制御される。例えば、ユーザーが何かを画面に表示したいなら、文字やピクセルを表示させるためにカーネルを通してモニターのドライバ(VGAとかVESA)を使用する。

デバイス管理は最初に様々なバス(PCIやUSB)上をスキャンして実装されたデバイスを検出し、対応するドライバを探す。デバイス管理は各OS固有の部分であり、カーネルの設計によってドライバの扱い方は異なるが、一般にカーネルはドライバが物理的にデバイスにアクセスするための入出力ポートやメモリ空間を用意する必要がある。デバイスへのアクセスはコンテキストスイッチを引き起こしたり、CPUを無駄に浪費したりすることになり易く、性能オーバヘッドの元となるため、デバイス管理の設計は重要である。

直接的なデバイス管理の上にファイルシステムや通信プロトコルが実装される。


システムコール


意味のある作業を実行するには、ユーザープログラムはカーネルの提供する全サービスにアクセスできなければならない。これはカーネルによって実装が異なるが、多くは標準CライブラリやAPIが提供され、そこから対応するカーネル機能が呼び出される。カーネル機能を呼び出す方法は主にCPUがどのような機能を提供しているかに依存するが、ユーザーモードからカーネルモードに移行させる専用命令を使ったり、何らかのプロセス間通信機能を使ったり、例外処理や割り込みを明示的に発生する命令(トラップ命令、ソフトウェア割り込み)を使ったりする。


カーネル設計手法
上述の機能は様々な設計や実装が考えられる。モノリシックカーネルではそれらを全てひとつのアドレス空間(カーネル空間)に配置し、システムの性能を向上させようとする。マイクロカーネルはサービスの大部分をユーザー空間で動作させ、コードの保守性とモジュール性を向上させようとする[1]。多くのカーネルは明確にどちらかに分類できるわけではなく、その中間の実装とも言うべきハイブリッドカーネルになっている。さらに特殊な設計としてナノカーネルや exokernel が研究されているが、広く使われるまでには至っていない。


モノリシックカーネル


モノリシックカーネルでは、全OSサービスはひとつのカーネル空間内に存在し、カーネルスレッド上で実行される。この手法は強力なハードウェアアクセスを提供する。モノリシックなシステムは設計と実装が比較的容易で、うまく書けば非常に効率がよいものになる。主な欠点はシステム構成要素間の依存関係の複雑さである。例えば、デバイスドライバにバグがあっただけでシステム全体がクラッシュするし、大きなカーネルは保守が非常に困難である。


マイクロカーネル


マイクロカーネルでは、ハードウェアの単純な抽象化と最小のプリミティブ(システムコール)で最小のOSサービスを実装する(メモリ管理、マルチタスク、プロセス間通信など)。他の全てのサービス(ネットワークなど)は「サーバ」としてユーザー空間に実装される。マイクロカーネルはモノリシックカーネルよりも保守が容易だが、システムコール回数やコンテキストスイッチ回数が増大するために性能が低下する傾向がある。

この問題はその後、L4プロジェクトでのプロセス間通信のチューニングなど、マイクロカーネル高速化技法の進展により解決に向かったが、マイクロカーネルにより簡略化されるはずが、高速化のために実装がより複雑になるというトレードオフも生み出した。

マイクロカーネルを採用したOSの代表的なものに、Mach、OSF/1、NeXTSTEP、Mac OS X、TRON、amoeba、chorus、Windows NT、BeOS などがある。ただし、NeXTSTEP やその後継である MacOS X、Windows NT 4.0以降については、パフォーマンス上の理由から一部のサブシステムをカーネル空間に取り込む実利的な実装を優先したため、両者とも理想的な構造のマイクロカーネルというわけではない。


モノリシックカーネルとマイクロカーネル
カーネルが巨大化するにつれて、様々な問題が明らかになってきた。最も明らかな問題はカーネルの大きさ(メモリ使用量)の増大である。これは仮想記憶をカーネル空間にも適用することである程度まで和らげられるが、全てのコンピュータ・アーキテクチャが仮想記憶をサポートできるわけではない[6]。カーネルのサイズを削減するため、不要なコードを削除するなどの改善が必要となるが、これはカーネルの各モジュール間の明らかにされていない依存関係があるために非常に困難である[7]

モノリシックカーネルが提起した問題により、1990年代の初期までにモノリシックカーネルは時代遅れと考えられるに至った。結果としてLinuxがモノリシックカーネルを採用したことでリーナス・トーバルズとアンドリュー・タネンバウムの間で有名な論争が発生した[8]。この議論では、両者の言い分にそれぞれメリットがある。

モノリシックカーネルは設計が容易で、マイクロカーネルよりも迅速に成長することが期待できる。しかし、モノリシックカーネル内のバグは一般にシステムクラッシュを引き起こすのに対して、マイクロカーネルでは一部のサーバに問題が限定される。モノリシックカーネルの支持者は、不正なコードがカーネルに無ければマイクロカーネルの利点はほとんどないと論じる。どちらの側にも成功例がある。マイクロカーネルはロボットや医療用システムで使われており、各コンポーネントが別々の保護されたメモリ空間で動作する。これは最新のモジュールロード方式であってもモノリシックカーネルには不可能であろう。モノリシックカーネルは共有型カーネルメモリを使用するよう最適化されていて、マイクロカーネルのような低速なメッセージ渡しとは異なる。


ハイブリッドカーネル
ハイブリッドカーネルは本質的にモノリシックカーネル手法とマイクロカーネルシステムの間の妥協案である。マイクロカーネルの性能オーバヘッドを削減するため一部のサービス(通信プロトコルスタックやファイルシステム)をカーネル空間で動作させるが、一部のカーネルコード(デバイスドライバなど)はサーバとしてユーザ空間で実行する。


ナノカーネル
ナノカーネルは全てのサービスをデバイスドライバとして分離する。これには例えば最も基本的な割り込みコントローラやタイマーの制御も含まれる。これによりカーネルメモリはマイクロカーネルよりもさらに小さくなる。

Exokernel
Exokernel はハードウェアを理論モデルに抽象化しないカーネルである。Exokernelは物理ハードウェア資源(プロセッサ時間、メモリページ、ディスクブロック)をプログラムに割り当てる。Exokernel上で動作するプログラムは既知のOSの抽象化を実現する「Library Operating System」をリンクして使用したり、アプリケーション固有の抽象化を行って性能を最適化することができる。

他の設計
上述した分類に当てはまらないカーネルの設計や実装もある。AmigaOSのカーネル Exec はマイクロカーネル風である。Unununiumはカーネルを持たないOSである[9]。


カーネル開発史

初期のOSカーネル
厳密に言えば、オペレーティングシステム(とカーネル)はコンピュータを動作させるのに必須ではない。プログラムはマシン上に直接ロードされ実行されることも可能であり、そのようなプログラムはOSのサービスや抽象化なしで記述しなければならない。多くの初期のコンピュータではそのような手法が一般的であり、プログラムを入れ替えるときにリセットとリロードが必要だった。その後、プログラムローダーやデバッガといった補助的な小さなプログラムがメモリに常駐したり、ROMからロードされるようになった。これらが初期のオペレーティングシステムのカーネルの元となった。直接実行の手法は今日でもゲーム機や組み込みシステムで使われているが、一般に最近のコンピュータではオペレーティングシステムとカーネルが使われている。


タイムシェアリングOS


UNIX以前の10年間、コンピュータは劇的に能力を向上させ、マシンの未使用時間を使う手法が求められた。この期間の主な開発のひとつがタイムシェアリングシステム(TSS)である。TSSは何人かのユーザーがCPUのタイムスライスをそれぞれ割り当てられる。

タイムシェアリングシステムの開発は多くの問題を発生させた。ひとつの問題は大学のユーザーはCPU時間が欲しいというよりもシステムをハックしたがっているという点である。このためセキュリティやアクセス制御がMulticsプロジェクトの重要な課題となった[10]。もうひとつの問題は計算リソースの正しい扱い方である。ユーザーは計算リソースを使わずに画面を凝視することにほとんどの時間を費やしており、タイムシェアリング方式ではそのようなCPU時間を他のユーザーに与えるべきと考えられた。最終的に、メモリ階層の多層化が進み、リソースの分割が仮想記憶システムの開発へと繋がっていったのである。


UNIX


UNIXは数十年間のオペレーティングシステム開発の最高点を示している。設計段階では、全ての高レベルのデバイスがファイルとして抽象化されていた。何故ならUNIX設計者は情報処理の目的をデータの変換であると考えていたからである。例えば、プリンタもファイルとして抽象化され、データをそのファイルにコピーすると印字が行われる。他のシステムでは同様の機能を提供するにあたって、デバイスを低レベルに抽象化する傾向があった。デバイスもファイルも何らかの低レベルの概念の実体化である。システムをファイルのレベルで抽象化したことにより、ユーザーは既存のファイル管理機能と概念で全てを扱うことができるようになり、操作が大幅に簡略化された。同じパラダイムを拡張して、UNIXはファイルを複数の小さなプログラムで操作するパイプの概念を可能とした。最終的な結果は同じであっても、このような小さなプログラム群を使うことで柔軟性が劇的に向上しただけでなく、開発も利用も容易になった。

UNIXでは、オペレーティングシステムは2つの部分で構成される。様々な操作を実行するユーティリティプログラム群とカーネルである。プログラミングの観点から見ると両者の違いは小さい。カーネルは特権モードで動作するプログラムであり[2]、プログラムローダーとしての役割とシステムの残りの部分を構成するユーティリティプログラム群を監督する役割を持つ。そして、それらプログラムにロックと入出力サービスを提供する。つまり、カーネルはあらゆる場面に介在しているわけではなかった。

その後、計算モデルが変化し、UNIXの何でもファイルで表す手法が常に適用可能な方法ではなくなってきた。端末はファイルで表せるが(どちらも文字列を読み書きできる)、GUIはそのように扱うことはできない。コンピュータネットワークは別の問題を提起した。ネットワーク経由の通信はファイルアクセスに対応させることができるが、低レベルのパケット指向アーキテクチャはファイルというよりも離散的なデータの塊として扱う必要がある。コンピュータの機能が拡大するにつれ、UNIXのコードは増大していった。初期のカーネルのソースは10万行ほどだったが、Linuxなどでは450万行にもなっている[11]。

モノリシックカーネルの最大の問題は全体の大きさであった。コードがあまりにも膨大であるため、それを保守したり改造することは困難で時間がかかる作業となったのである。


マイクロカーネルの開発
汎用マイクロカーネルとしてはMachが有名だが、特定用途向けにもいくつかのマイクロカーネルが開発された。L4はマイクロカーネルの性能が悪くないことを実証するために作られた。ここから派生した新たな実装の Fiasco や Pistachio はLinuxをその上で動作させることができる[12][13]。

QNXはマイクロカーネル設計を採用したリアルタイムオペレーティングシステムであり、1980年代初期に開発され、Machよりも遥かに成功している[14]。ソフトウェアが不正動作することが致命的な状況で使われることが多く、スペースシャトルのロボットアームの制御とかガラスを精密に磨く機械の制御で使われている。


脚注
^ a b An overview of Monolithic and Micro Kernels, by K.J.
^ a b 最上位の特権レベルは、スーパーバイザーモード、カーネルモード、CPL0、リング0など様々な呼称がある。
^ Bona Fide OS Development - Bran's Kernel Development Tutorial, by Brandon Friesen
^ CPU時間は理論上無限だが、メモリ容量とそのアクセス速度は有限であることに注意すべきである。
^ デバイスドライバをカーネルの一部と見なさない考え方もあるが、例えばリアルタイムクロックなどはカーネル自身が管理する。
^ 仮想アドレッシングは通常、メモリ管理ユニットに内蔵された機能を使用して実現される。
^ そもそも何故カーネルが大きくなるとまずいのか? 一般にOSはある程度のハードウェアシリーズで動作するが、その最小メモリサイズは最も安価なハードウェアの最小構成まで考慮する必要があり、そのようなメモリ容量でもある程度の機能が動作しなければならない。このため、少なくとも一般的な構成のカーネルがその最小メモリ容量内に収まって、アプリケーションをそれなりの性能で実行できるだけの空きメモリ容量を確保しなければならないという事情があった。最近ではメモリチップの急速な大容量化によって、このような問題は減りつつある。
^ ここや ここやここに議論の記録がある
^ Unununium OS :: Introduction
^ Introduction and Overview of the Multics System, by F. J. Corbató and V. A. Vissotsky.
^ Linux Kernel 2.6: It's Worth More!, by David A. Wheeler, 2004年10月12日。
^ The Fiasco microkernel - Overview
^ L4Ka - The L4 microkernel family and friends
^ QNX Realtime Operating System Overview

関連項目
オペレーティングシステム
メモリ管理
Random Access Memory
仮想記憶
ページング方式, セグメント方式
アドレス空間(カーネル空間、ユーザ空間)
メモリ管理ユニット
プロセス管理
マルチタスク
プロセス
スレッド
スケジューリング
タイムシェアリングシステム
コンテキストスイッチ
プロセス間通信
割り込み, IRQ
入出力
デバイスドライバ

GNU/Linuxシステム(GNU/Linuxオペレーティングシステム、略してGNU/Linux)



GNU/Linuxシステム(GNU/Linuxオペレーティングシステム、略してGNU/Linux)は、Linuxカーネルを中心にそのほかのソフトウェアを追加して一般のOS(オペレーティングシステム)としての機能を持たせたもの。

OSとしての機能の全てが一枚のフロッピーディスクに入るものから、数GBを超える容量を持つものなど各種ある。Linuxカーネルが中核として使われている。Linuxカーネルを搭載しているため、一部分、もしくは全部がフリーソフトウェアとして提供される。

単にLinuxと呼ぶ場合もあるが、普通Linuxを使用する場合、「GNUプロジェクトが開発しているオペレーティングシステムのうち、カーネルとしてLinuxを採用したもの」を使用する。そのためこれを「GNU/Linuxシステム」と呼ぶべきだとGNUプロジェクトは主張している。(同時に、Linux開発者のリーナス・トーバルズも、その定義に該当するものをGNU/Linuxと呼称している。)

GNU/Linuxシステムを、専門家でなくても 容易にインストールできる形にまとめ上げたものは、特にLinuxディストリビューションと呼ばれる。


Linuxカーネル



LinuxカーネルはGNU/Linuxオペレーティングシステムを構成する基本要素となるカーネルを取り上げて言うときに使われる語である。 Linuxカーネルは、BSD系のUNIXなどと異なり、元のUNIXのソースコードを一切利用せずにゼロから開発された。

コピーレフトのライセンスGPLに従って配布されており、ライセンスを変更せずソースコードの公開とコピーの自由を保証すれば、自由にコピー/配付/改変して構わない。配付に際して料金を要求することも自由である。その事がLinuxを共有の物として開発することを推進させた。Linuxの開発とインターネットの発展が時期的に一致したことも、Linux の回りに開発コミュニティを形成するのに幸いした。

また、開発に際してよりオープンな開発体制をとり、現在バザール方式と呼ばれている、誰でもLinux Kernel Mailing ListへのBug報告や修正、機能拡張パッチを公開でき、その中から最終的にリーナス・トーバルズと彼が任命したメインテナーがコーディネータとなって、公式版のLinuxカーネルの質を保っている。通常、Linuxカーネルと呼んだとき、リーナスが公開している公式版のカーネルを指す。Linuxディストリビューションで使用されているカーネルは、リーナスの公開したカーネルを元にベンダーが独自の修正や、変更を加えているため、基本的にはその変更を加えたベンダーがサポートするものとして、Linux Kernel Mailing List などでは扱われない。

Linuxは初めはPC/AT互換機上で動いていたが、対応ハードウェアは次々追加され、Intel386以上のパソコン(NEC PC-9800シリーズ、富士通FM TOWNSなど)の他、PowerPCや68000、Sun SPARC、さらにはIBMのメインフレーム等でも動くようになっている。なお、PC-9800シリーズの非公式ソースは一時期公式版のソースに取り込まれつつあったが、メンテナンスされていないと言う理由により、バージョン2.6からPC-9800依存部分は全て外された。


動作しているCPUアーキテクチャ
CPUアーキテクチャとは、機械語などを共通とするコンピュータの基礎的な種類であり、各種のCPUアーキテクチャ上で Linuxカーネルは動作している。カーネルはC言語やアセンブリ言語で書かれており、それらのソースコードをコンパイル(翻訳)するためのコンパイラにはGCC(Gnu Compiler Collection)を使用している。このため、GCCがそのCPUアーキテクチャをサポートしていることがほとんどの場合前提となる。

Linuxカーネルは、CPUアーキテクチャから独立していて各アーキテクチャで共有されている部分は多いので、CPUアーキテクチャに依存した部分(比較的まとめられている)を変更すれば良いようになっている。Linuxカーネルが新しいCPUアーキテクチャで動作すると、その他のソフトウェアを移植してGNU/Linuxオペレーティングシステムとして動作させるのは比較的たやすくなる。

i386 (IA-32)
x86-64 (Intel 64/AMD64)
IA-64
SPARC
Alpha
MC68000
PowerPC
PowerPC (64bit)
ARM
MIPS
PA-RISC
S370
SuperH
その他

関連項目
GNU/Linuxオペレーティングシステム - Linuxカーネルにそのほかのソフトウェアを追加して、UNIXと同等のオペレーティングシステムと呼べる機能を持たせたもの。オペレーティングシステムとしての全ての機能が一枚のフロッピーディスク (1.44MB) に入るものから、1GB(フロッピーディスクの約千倍の規模)を超える容量を持つものなど各種ある。基本はLinuxカーネルを中心に使っていること。単にLinuxオペレーティングシステムと呼ぶ場合もある。
Linuxマシン - GNU/Linuxオペレーティング・システムを搭載しているコンピュータを、一般にLinuxマシン、Linuxボックスと呼ぶ。(英語では Linux box と呼ぶことが多い)
Linuxディストリビューション - GNU/Linuxオペレーティングシステムを誰でもが使える形でまとめ、インストールなどが容易にできるようになっている配付。CDROMやネットワークなどで配付。ディストリビューションは、「配付」の意味。
Linuxクラスター - 複数のLinuxで動作するコンピュータをひとつのコンピュータのように使う手法(コンピュータ・クラスター、並列コンピュータ)。大規模なものは数千のLinuxマシンにより構成されスーパーコンピュータの性能を持つ。Linuxカーネルを中心に特殊なソフトウェアを適用し、GNU/Linuxオペレーティングシステムとして実現する。

コンピュータ (computer)



コンピュータ (computer) は、広義には計算機、狭義には計算開始後は人手を介さずに計算終了まで動作する計算機。純理論的には、チューリングマシンと等価なものを指す。日常的にはパーソナルコンピュータ(パソコン)を指して「コンピュータ」と呼ぶことも多い。

なお、日本の法律上での呼称は「電子計算機」(でんしけいさんき、略称・電算機)とされている。「電子頭脳」(でんしずのう、略称・電脳)という通称でも呼ばれる(人間の頭脳のアナロジーとして、またロボットの頭脳として捉えられる事による)。

ハードウェアの構造からデジタルコンピュータとアナログコンピュータに大別されるが、現在使われているほとんどのコンピュータはデジタルコンピュータであり、単にコンピュータという場合はこちらを指すことが多い。

デジタルコンピュータは、おもに半導体素子を用いて作られた論理回路の組み合わせによって構成される。演算の対象は通常2進数によって表され、桁数を増やしていけば原理的にいくらでも計算精度を上げられるが、ほとんどの演算では、桁数が多くなれば必要な計算が増えて遅くなる。

対してアナログコンピュータは、加減算や微積分などを行うアナログ電子回路を演算増幅器によって構成し、それらを組み合わせて所望の演算を行う。演算の対象は電圧によって表され、演算結果はオシロスコープやペンレコーダなどに出力される。入力の変化に対してほぼリアルタイムで出力が得られる特徴があり、各種シミュレーションなどに利用されたが、演算内容を変更するためには回路を変更する必要があり、得られる精度にも限界があるので、デジタルコンピュータの高速化に伴ってその役割を終えた。

古くはチャールズ・バベッジによって開発された階差機関などがデジタルコンピュータの元祖であった。現在のデジタルコンピュータは、ストアードプログラム方式で逐次処理をして駆動するノイマン型コンピュータがほとんどであるが、量子コンピュータやDNAコンピュータなどのノイマン型でないコンピュータも研究され、1990年代後半から画像解析分野などで実用化されている。例を挙げるならば、地球観測プラットフォーム技術衛星の映像解析など地球自然環境調査などの分野で利用されている。




語源
computer という語は元々は算術計算を行う人を指す言葉だった。この用法は(アメリカやイギリスでは非常に稀になりつつあるが)今でも有効である。オックスフォード英語辞典第2版 (OED2) では、この語が機械的な計算装置を指す言葉として使われた最初の年を1897年と記している。1946年までには、異なるタイプの計算機を区別するために、OED2によってcomputerに付く修飾語句がいくつか導入されている。これらの修飾語の中には analogue、digital、electronicといった語が含まれている。しかし様々な引用文から、1946年以前にこれらの語が既に使われていたことは明らかである。




コンピュータの仕組み
1940年に最初の電子式汎用計算機が登場して以来、コンピュータに使われる技術は劇的に変化してきたが、ほとんどのコンピュータは今なおノイマン型アーキテクチャを採用している。

ノイマン型コンピュータの機能は原理的には非常に素直なものである。典型的には、クロックサイクルごとにコンピュータは命令とデータをメモリから取り出す (fetch)。取り出した命令を実行し、結果を格納し、次の命令を取り出す。「停止」の命令に遭遇するまでこの手順が繰り返される。

フォン・ノイマン型アーキテクチャではコンピュータは次の4つの主要な部分からなるとされる。すなわち、算術論理ユニット (Arithmetic and Logic Unit, ALU)、制御回路、記憶装置(メモリ)、入出力装置(まとめて I/O と呼ぶ)である。これらの部分はバスと呼ばれる導線の束で相互に接続され、通常はタイマまたはクロックによって動作する(別のイベントが制御回路を動作させる場合もある)。


命令


コンピュータの命令は人間の言語に比べるとずっと貧弱である。コンピュータは限られた数の明確で単純な命令しか持っていないが、曖昧さは全くない。多くのコンピュータで使われている命令の典型的な例としては、「5番地のメモリの中身をコピーしてそのコピーを10番地に書け」とか「7番地の中身を13番地の中身に加算して結果を20番地に書け」とか「999番地の中身が0なら次の命令は30番地にある」といったものである。

コンピュータの内部では命令は二進コード、つまり2を底とする計数法で表現される。例えば、インテル系のマイクロプロセッサで使われるあるコピー命令のコードは10110000である。ある特定のコンピュータがサポートする特定の命令セットをそのコンピュータの機械語 (machine language) と呼ぶ。

実際には、人間がコンピュータへの命令を機械語で直接書くことは通常はなく、高水準のプログラミング言語を使う。プログラミング言語で書かれた命令が、インタープリタやコンパイラと呼ばれる特別なコンピュータプログラムによって自動的に機械語に翻訳されて実行される。プログラミング言語の中にはアセンブリ言語(低水準言語)のように、機械語に非常に近いレベルで対応付けられるものもある。逆に Prolog のような高水準言語は計算機の実際の演算の詳細とは完全に切り分けるという絶対原理に基づいている。


記憶装置(メモリ)


メモリは番地を付けられたセルの列で、各々のセルには小さな量の情報が格納される。この情報はある場合にはコンピュータに何をすべきかを教える命令である。また、セルにはコンピュータが命令を実行する対象となるデータも格納される。全てのセルはこのどちらかを格納し、ある時はデータを、またある時は命令を格納する。

一般的には、メモリセルの中身はいつでも書き換えられる。すなわち石板というよりは落書き帳に近い。

各セルのサイズとセルの数はコンピュータごとに大きく異なる。また、メモリを実装する技術も時代とともに大きく変化してきた。最初は電磁リレーが、続いて水銀の入った管(水銀遅延線)やバネに音波を通す方法が使われた。次には永久磁石の配列(磁気コアメモリ)やトランジスタが使われた。現在では1つの半導体チップの上に数百万個のコンデンサとトランジスタを集積した集積回路(DRAM)が主に使われている。


演算処理(プロセッサ)


算術論理演算ユニット (ALU) は算術演算(加算・減算など)のような基本的な演算やAND、OR、NOTといった論理演算、比較演算(2つのバイトの中身が等しいかどうかの比較など)、シフト演算などを行う装置である。コンピュータの中で真の仕事(情報処理)を行う部分と言える。


制御


制御ユニットはメモリの中でどのバイトがコンピュータが現在実行中の命令を格納しているかを追いかけ、どの命令を実行すべきかを ALU に教え、実行に必要な情報をメモリから受け取り、実行結果を適切なメモリ位置に運ぶといった仕事をする。一度これらの仕事を終えると、制御ユニットは次の命令に飛ぶ。(次の命令は普通、次のメモリ番地に位置しているが、命令がジャンプ命令の場合には別の場所にある。)

メモリを参照する際に、現在の命令はメモリ内で関連する番地を指定するために様々なアドレッシングモードを使う場合がある。コンピュータのマザーボードの中には2つまたはそれ以上のプロセッサをサポートするものもある。コンピュータサーバでは2つまたは複数のプロセッサを使うのが一般的である。


入出力


入出力(Input/Outputを略してI/Oとも言う)はコンピュータが外の世界から情報を得たり、計算結果を外に送り返したりすることを可能にするためのものである。外部から見て、コンピュータに情報を送ることを入力、逆にコンピュータから情報を得ることを出力という。

入出力には、入出力インターフェースを介して、入出力装置(I/O装置)が接続される。入出力装置としては例えば、キーボード、マウス、スキャナ、モニタやプリンタ、磁気ディスク装置、光学ドライブ装置などといった馴染み深いものから、3次元ディスプレイやデータグローブといったものまで、幅広いものが存在する。

入出力装置は、主として入力を得るためのもの(キーボード、スキャナなど)、出力するためのもの(モニタ、プリンタなど)、入力と出力を兼ね備え情報を蓄積して後からそれを読み出すことのできるもの(磁気ディスク装置など)に大別することができる。


アーキテクチャ


現代のコンピュータではALUと制御ユニットを中央処理装置 (CPU ;central processing unit) と呼ばれる一つの集積回路にまとめている。典型的には、コンピュータのメモリは数個の小さな集積回路の形で CPU の近くに配置する。コンピュータの質量の圧倒的大部分を占めているのは電源装置のような付属システムかあるいは入出力装置である。

大型のコンピュータでは、上記のようなモデルとは違って複数のCPUと制御ユニットが同時に動いているものもある。さらに、主に研究用途や科学計算に使われるコンピュータでは上に書いたモデルとは大きく異なっている。しかしこういったタイプのコンピュータはプログラミングの方式が標準化されていないため、商用目的の機種にはほとんど見られない。


プログラム


コンピュータプログラムは単にコンピュータに実行させる命令の大きなリストである。場合によってはデータの表が付属することもある。現在でも1行〜数1000行程度のプログラムが用いられているが、ワープロソフトやOSなどのコンピュータプログラムは数百万行の命令からなる。これらの命令の多くは繰り返し実行される。2003年時点での典型的なPCは1秒間に20〜30億個の命令を実行できる。コンピュータのこのような並外れた能力は、複雑な命令を実行できる能力に由来するものではない。むしろ、コンピュータはプログラマと呼ばれる人々によって組まれた何百万もの単純な命令を実行しているのである。プログラムごとに全てを新規に書き下すことは効率が悪いため、画面に点を描くといったよく使われる仕事を行う命令のセット(ライブラリ)が多数用意されている。

今日では、ほとんどのコンピュータは同時にいくつものプログラムを実行するように見える。これは通常、マルチタスクと呼ばれている。実際には、CPUはあるプログラムの命令を実行した後、短い時間の後でもう一つのプログラムに切り替えてその命令を実行している。この短い時間の区切りをタイムスライスと呼ぶ。これによって、複数のプログラムがCPU時間を共有して同時に実行されるように見える。これは動画が実は静止画のフレームの短い連続で作られているのと似ている。このタイムシェアリングは通常、オペレーティングシステムというプログラムで制御されている。


オペレーティングシステム (OS)


具体的に処理すべき作業の有無によらず、コンピュータに自らの演算資源を管理し「ユーザーの指示を待つ」という動作を取らせるためにさえ、ある種のプログラムを必要とする。典型的なコンピュータでは、このプログラムはオペレーティングシステム (Operating System = OS) と呼ばれている。コンピュータが動作するための最も基本となるプログラムであることから、「基本ソフト(基本ソフトウェア)」と翻訳されることもある。

コンピュータを動作するためオペレーティングシステムは、ユーザー、もしくは他のプログラムからの要求に応じてプログラム (この意味では、アプリケーションソフトウェアもしくは単にアプリケーションという用語も使用される。ソフトウェアという用語も似た意味合いだが、これはプログラム一般を指すより広い概念である。)をメモリー上にロードし、プログラムからの要求に応じていつ、どのリソース(メモリやI/O)をそのプログラムに割り当てるかを決定する。

オペレーティングシステムはハードウェアを抽象化した層を提供し、他のプログラムがハードウェアにアクセスできるようにする。例えばデバイスドライバと呼ばれるコードがその例である。これによってプログラマは、コンピュータに接続された全ての電子装置について、その奥深い詳細を知る必要なくそれらの機械を使うプログラムを書くことができる。また、ライブラリと呼ばれる再利用可能な多くのプログラム群を備え、プログラマは自ら全てのプログラムを書くことなく、自らのプログラムに様々な機能を組み込むことができる。

ハードウェアの抽象化層を持つ現在のオペレーティングシステムの多くは、何らかの標準化されたユーザインターフェイスを兼ね備えている。かつてはキャラクターユーザインターフェースのみが提供されていたが、1970年代にアラン・ケイらがDynabook構想を提唱、暫定Dynabookと呼ばれるaltoとsmalltalkによるグラフィカルユーザインターフェース環境を実現した。残念ながら暫定Dynabookは当時のゼロックスの首脳陣の判断により製品化されなかった(ゼロックスより発売されたGUI搭載のシステムXerox Starは暫定Dynabookとは別系統のプロジェクトに由来する)が、この影響を受け開発されたアップルコンピューター社の LisaやMacintosh、マイクロソフト社のWindowsの発売、普及により、グラフィカルユーザインターフェースが一般的にも普及することとなった。

現在、デスクトップコンピュータ用として最も普及しているOSはマイクロソフト社のWindowsである。

世間に普及するコンピュータを台数を基準として見た場合、そのほとんどはデスクトップコンピュータとして存在しておらず、携帯電話や炊飯器などの電気製品、各種の測定機器、乗用車や工作機械などの装置に組み込まれた、非常に小さく安価なコンピュータとして実装されている。これらを組み込みシステムと呼ぶ。一般に組み込みOS (embedded OS) と呼ばれる専用のOSを用いる。TRONプロジェクトのITRON、米WindRiver社のVxWorks、米Symbian社のSymbian OS、米LinuxWorks社のLynxOSなどが利用されている。ただし、近年は開発期間の短縮などの目的で、WindowsやLinuxといったデスクトップコンピュータで使われているOSと同系統のOSを搭載する場合もある。また、小規模な組み込みシステムのなかには、明確なOSを内蔵していないものも多い。


コンピュータの歴史
紀元前3000年頃に古代バビロニアで数字が誕生し10進法が定められる。
紀元前2000年頃に古代バビロニアでコンピュータの元となるそろばんが発明される。そして、そろばんが世界各国に伝わって行く。
古代ギリシアでは紀元前300年頃に伝わって来たと確定されている
日本では西暦1500年頃の室町時代に明から伝わって来る。
1623年頃、ウィルヘルム・シッカートが、ネピアの骨を応用した、乗算と加減算を行なえる、歯車式の計算機を作った。加減算に関しては繰り上がりが出来たが、乗算に関しては繰り上がりが出来なかった。
1642年 ブレーズ・パスカルがピン歯車式計算機(加算機)であるパスカリーヌを開発。約50台が作成された。
1664年 ゴットフリート・ライプニッツがパスカルの加算機をもとに乗算機を作成。その後の60年間に約1500台が販売された。
1698年 ライプニッツが二進法を発見。
1822年 解析機関の設計者チャールズ・バベッジが第1階差機関の実験モデルを作成。
1823年 バベッジによる階差機関の開発開始。

バベッジの階差機関は彼の死後に完成した1833年 追加予算が打ち切られ、階差機関の開発が中止となる。
1843年 シュウツ親子による階差機関の完成。
1854年 ジョージ・ブールがブール代数を発見する。
1871年 バベッジが実現を見ぬまま死去。解析機関のオペレータであるエイダ・ラブレスは世界最初のプログラマとされる。
1889年 ホレリスがパンチカード方式の自動集計機を実現。
パンチカード穿孔機1905年 ジョン・フレミングが二極真空管(後のダイオード)を発明。
1906年 リー・ド・フォレストが三極真空管を発明。
1936年 アラン・チューリングが万能計算機械(チューリングマシン)の論文を発表。
1938年 ドイツのコンラッド・ツーゼが、自宅で機械式の計算機V1(のちにZ1と改名)を作成。
1939年 ツーゼが、Z1をベースに、演算部がリレー、記憶部が機械式のテスト用の計算機、Z2を作成。
1940年 ツーゼが、Z2をベースに、全リレー式の、Z3を作成。Z3はプログラム可能な最初の計算機である。
1942年 アタナソフとベリーが電子素子を使って演算処理をする世界初の機械 ABCを作成。
1943年 ローレンツSZ42暗号機によるドイツ軍の暗号を解読するため、イギリスでColossusが発明される。
1944年 ツーゼがZ4を作成。メモリ部分は機械式に戻る。
1945年 フォン・ノイマンがストアードプログラム方式を提唱。
1946年 ペンシルバニア大学でENIACが完成。
17468本の真空管を使って作られたENIAC1947年 AT&Tベル研究所のウォルター・ブラッテン、ジョン・バーディーン、ウィリアム・ショックレーらがトランジスタを発明。
1948年 マンチェスター大学のウィリアムスとキルバーンが、初のプログラム内蔵式のコンピュータThe Babyを発明。
1951年 レミントンランド社が初めてUNIVAC Iを商品化。
1952年
米IBM社が初の商用のプログラム内蔵式コンピュータIBM 701を発売。
日本初のデジタル式リレー計算機「ETL Mark I」を通産省工業技術院電気試験所(現:産業技術総合研究所)が開発。
1956年
初の高級プログラミング言語FORTRANが誕生。
日本初の電子計算機「FUJIC」を富士フイルム社が開発。レンズの設計用であった。
アメリカ合衆国ブルックヘブン国立研究所のウィリアム・ヒギンボーサムが、アナログ演算機とオシロスコープを用いた『Tennis for Two』を開発。
米IBM社が初のハードディスクドライブを発売。5MBであった。
1958年 米Texas Instruments社のキルビーが集積回路 (IC) を発明。
1960年 米ディジタル・イクイップメント社が、世界初のミニコンピュータPDP-1を発売。
1962年 PDP-1上で稼動するデモンストレーションプログラムとして、世界初のシューティングゲームとされている「スペースウォー!」が開発される。
1964年 IBM社が、汎用コンピュータであるシステム/360を発売。
1967年 IBM社がフロッピーディスクを開発。
1968年 ダグラス・エンゲルバートが、マウスやウインドウの概念を発表。
1969年 後にインターネットの母体となるアーパネットが運用開始。UNIXオペレーティングシステムの開発が始まる。
1971年 3月、米Intel社が世界最初の4bitのマイクロプロセッサi4004を開発。
1972年 アタリ社、業務用ゲーム機「PONG」(ポン)を発売。続いて家庭用ゲーム機「ODYSSEY」(オデッセイ)も発売される
1973年
米Xeroxのパロ・アルト研究所において、チャック・サッカーが Altoを製作。アラン・ケイらはこれを用い、世界初の本格的GUIを装備した暫定Dynabook環境を構築。
11月にケン・トンプソンとデニス・リッチーがパデュー大学で行なわれたthe Symposium on Operating Systems PrinciplesでUNIXに関する最初の論文を発表。
1974年
4月、米国intel社が8bitのマイクロプロセッサi8080を発表。10 月に発売されたビジコンの電卓141-PFに搭載される。
ゲイリー・キルドールが8ビットCPU(8080)用のディスクオペレーティングシステム、CP/Mを開発。
1975年
4月、ビル・ゲイツがMicrosoft社を設立。同年9月にi8080用のBASICインタプリタ発売。
クレイ・リサーチ社、Cray-1を発表。初期のスーパーコンピュータとして最も良く知られる。
米MITS社が、世界初の一般消費者向けマイクロコンピュータAltair 8800を発売。主に組み立てキットとして販売された。
1977年
ビル・ジョイが開発した1BSDが初めて配布される。
アップルコンピュータ社が、パーソナルコンピュータApple II を発売。
1978年 シャープが日本で初めての国産マイコンキットMZ-80K を発売。
1980年 CERNのティム・バーナーズ=リーが、WorldWideWebの元となるEnquireを開発。
1981年
IBM社がPC-DOSを搭載したパーソナルコンピュータIBM-PCを発売。
1981年 NEC社がPC-9801を発売。
1982年 米サン・マイクロシステムズ社がTCP/IPを採用したワークステーションを発売。
1983年
リチャード・ストールマンがGNUプロジェクトを開始。
任天堂、ファミリーコンピュータ発売。
1984年
アップルコンピュータ社がMacintoshを発売。
IBM社がPC/ATを発売。ATバス、VGAなどの技術がパソコンの世界標準規格の基礎となる。
坂村健によってTRONが提唱される。
1985年
アップルコンピュータ、LaserWriterを発売。ページ記述言語としてPostScriptを採用したレーザープリンタで、ページレイアウトソフト「PageMaker」とともに、DTPの時代を切開く。
マイクロソフト社が最初のWindows製品であるWindows1.0を発売。
1986年 東芝が世界初のラップトップパソコンJ-3100を開発・商品化。
1987年 3月、シャープがX68000を発売。
1988年
ネクスト・コンピュータ社がNEXTSTEPを搭載したNeXTキューブを発売。
日本電気ホームエレクトロニクス、CD-ROM²を発売。世界で初めてCD-ROMを搭載したコンピュータ(ゲーム機)用周辺機器であった。
1989年 東芝が世界初のノートパソコンDynaBookを発売。
1991年
リーナス・トーバルズがスクラッチビルドによるUNIXライクなOSカーネルLinuxを発表。
最初のWebサイトがCERNによって開設される。
アップルコンピュータ社がPowerBookを発売。
1993年
NetBSD・FreeBSDが発表。
Webブラウザ・NCSA Mosaic公開。インターネットの普及が始まる。
1994年 ソニー・コンピュータエンタテインメント、プレイステーションを発売。
1995年 マイクロソフト社がWindows 95を発売。
1996年 サン・マイクロシステムズ社により、Java言語の開発環境を公式にリリースされる。
1997年 チェス専用スーパーコンピュータディープ・ブルーがチェス世界チャンピオンガルリ・カスパロフに勝利した。
1998年
アップルコンピュータ社がiMacを発売。
マイクロソフト社がWindows 98を発売。
2000年
ソニー・コンピュータエンタテインメント、プレイステーション2を発売。DVDの普及が本格的に始まる。
マイクロソフト社がWindows 2000、Windows Meを発売。
2001年
4月、アップルコンピュータ社がMac OS Xを発売。10月にはiPodを発表。
マイクロソフト社がWindows XPを発売。
2006年
ソニー・コンピュータエンタテインメントがBlu-ray Discドライブを搭載したプレイステーション3を発売。
マイクロソフトがMicrosoft Windows Vistaを発売。ただし一般消費者向けには2007年のリリースとなる。

コンピュータの種類
スーパーコンピュータ(スパコン)
メインフレーム(大型汎用機、汎用機)
ミニコンピュータ(ミニコン)
オフィスコンピュータ(オフコン)
ワークステーション
マイクロコンピュータ(マイコン)
パーソナルコンピュータ(パソコン)
PDA
グリッドコンピュータ
組み込みシステム
マイクロコントローラ(組み込み用コンピュータ)
電卓
ポケットコンピュータ
ニューロコンピュータ
生体コンピュータ
DNAコンピュータ
量子コンピュータ

関連項目

コンピュータに関する人物一覧
コンピュータ用語一覧、コンピュータ略語一覧
プログラミング用語一覧、プログラミング用語 (分野別)
ソフトウェアに関する項目
ファームウェア、プログラミング (コンピュータ)
オペレーティングシステム (OS)
ハードウェアに関する項目
情報機器
研究に関する項目
計算機科学
情報工学
計算機工学
人工知能 (AI)
社会・諸問題に関する項目
コンピュータと社会
コンピュータ・リテラシー
ネットワークに関する項目
コンピュータ・ネットワーク
オンライン
データ通信
LAN

インターネット、World Wide Web

オペレーティングシステム (Operating System,OS)



オペレーティングシステム (Operating System,OS) は、コンピュータにおいて、ハードウェアへのインターフェースを抽象化してアプリケーションソフトウェアに提供するソフトウェアである。「基本ソフトウェア」とも呼ばれる。なお、オペレーティングシステムのGUIフロントエンドであるオペレーティング環境についてもここで扱う。

広義のOSには、基本的なアプリケーションソフトウェア(ウィンドウシステム、ファイル管理ソフトウェア、ウェブブラウザ、エディタ、時計などのアクセサリ、簡単なデータベースシステム、各種設定ツールなど)を含むことがある。一般的に「オペレーティングシステム」という場合はこちらを指していることが多い。

統合環境と平易なユーザーインターフェースをうたったMac OS及びMicrosoft Windowsの登場によりその傾向は更に強まり、MS-DOSなど初期のOSとMac OS以降の近年のOSとは、分けて扱われることが多い。

OSの中で、ハードウェアを直接管理操作するレベルの最も基本的な部分を、特にカーネルと呼んで分けることもある。その場合、カーネル以外の部分(シェルなど)はユーザーランドと呼ばれる。また、カーネルとユーザーランドではCPUモードやアドレス空間が異なっている。

ちなみにオペレーティングシステムは完全な一般名詞だが、“OS”は本来IBMの商標である。





OSの目的
OSの主な目的は3つある。すなわち、ハードウェアの抽象化、資源の管理、そしてコンピュータ利用効率の向上である。

ハードウェアの抽象化
ハードウェアへの煩雑な命令やハードウェア構成の差違などを吸収し、OS上で動作するアプリケーションプログラムの開発を容易にする。
資源の管理
複数のアプリケーションソフトウェアを同時に利用する場合でも、資源要求の競合が起きない限りは互いに独立して動作することができるように資源を管理する。競合が起きた場合には適切に処理する(待たせる、エラーを返すなど)。
コンピュータの利用効率の向上
複数のタスクを同時に実行する場合に、資源割り当ての順番や時間を工夫することで、全体のスループットを向上させることができるようになる。これはデスクトップ環境ではあまり恩恵を感じることはないが、ウェブサーバやデータベースなど大量のアクセスをこなす用途などでは重要になる。

OSの機能

APIとABI


OSはアプリケーションソフトウェアを動作させるのが第一の目的である。このためのインターフェイスがAPI(アプリケーションプログラミング・インタフェース)とABI(アプリケーションバイナリ・インタフェース)である。カーネルはシステムコールによってアプリケーションにサービスを提供する。さらに基本ライブラリも含めた形でアプリケーションに対してAPI/ABIを提供する。アプリケーションによってはOS上のミドルウェアやアプリケーションフレームワークなどをAPIとして使用する場合もある。

APIはプログラミングのためのインターフェイスであり、プログラムを作成する際の規則を構成する。例えば、C言語での関数やFORTRAN/Pascalなどのライブラリ呼び出しといったものがそれにあたる。

一方、ABIはコンパイルされたソフトウェアがOSの機能を呼び出す際のインターフェイスであり、プロセスが動作する際の規則を構成する。例えば、UNIX系のOSはAPIがほとんど共通だが、ABIはOSによって異なる[1]。従って、同じCPUを使ったシステムであってもABIが異なれば実行ファイルが異なる。ABIには、エンディアン、実行ファイルの形式、システムコールの具体的な方法、コールスタックの使い方などが含まれる。


プロセス管理


コンピュータ上の各動作はバックグラウンドであっても一般のアプリケーションであっても、内部的にはプロセスとして動作する。DOSのような古いOSは一度に一つのプロセスしか実行できない。最近のオペレーティングシステムは一度に複数のプロセスを動作させることができる(マルチタスク)。プロセス管理は複数のプロセスを実行するためにオペレーティングシステムが行う処理である。プロセッサをひとつだけ持つ一般的なコンピュータでは、マルチタスクは高速にプロセスからプロセスへ切り替えを行うことで実現される。ユーザーがより多くのプロセスを実行すれば、個々のプロセスに割り当てられる時間は小さくなっていく。多くのシステムでは、これが音声の途切れとかマウスカーソルの奇妙な動作などを引き起こす。一般的なプロセス管理は、プロセスごとに優先度を与え、それによって配分される時間を決めている。


メモリ管理


パーキンソンの法則によると、「メモリを拡張するとプログラムはそれに伴って拡大する」という。プログラマーは無限の容量と無限の速度のメモリを理想としている。コンピュータのメモリは階層構造になっていて、最も高速なレジスタから、キャッシュメモリ、RAM、最も低速なディスク装置がある。OS内のメモリ管理部はこのようなメモリを管理するもので、利用可能な部分、割り当てと解放、主記憶と二次記憶との間でのスワップなどを制御する。


ファイルシステム


アップルコンピュータ、マイクロソフトなどの商用オペレーティングシステム、UNIXライクなLinuxや、はたまたUNIXの流れを汲む枯れたオペレーティングシステムまで、有象無象のオペレーティングシステムには様々な固有のファイルシステムがある。(こう書くとアップルコンピュータのMac OS XはUNIX系OSではないようだが、Mac OS XはNEXTSTEPからのOPENSTEP、FreeBSDの流れを汲む歴としたUNIX系OSで、下記のUNIXベースとはこのことからであり、また、v.10.5からはThe Open Groupに認証され公式にUNIXとなる。)

Linuxのファイルシステムは種類が多く、ext2、ext3、ReiserFS、Reiser4、GFS、OCFS、NILFS、Google File Systemなどがある。LinuxはFATファイルシステムやXFS、JFSも完全サポートし、NTFSを読むことも出来る。MacではMFS(Macintosh File System)が実装されたが、『ディレクトリをもたない』構造だったためファイル数が増えるにつれファイルブラウザFinderレベルでのエミュレーションで補うには限界が、問題が生じた。そのために1985年に開発・発表されたのがHFS(Hierarchical File System)である。現在は改良を加えたHFS+が採用されていて、Mac OS 8.1より最新のMac OS Xまでが取り扱うファイルシステムはHFS、HFS+、UFS(Unix File System)、FATシステム、となっている。UFSは、サポートはされているが一般に使用されず、FATシステムへの対応はデバイスの互換性の問題からである。詳しくはHFSの項目を参照されたい。NTFSにはSambaでアクセス可能である。Windowsが扱えるファイルシステムは限られており、FAT12、FAT16、FAT32、NTFSのみである。Windows上では NTFS が最も信頼性と効率が高いファイルシステムである。FATファイルシステムは、NTFSが登場したNT系のWindowsよりも古いオペレーティングシステムであるMS-DOSから採用されていたが、パーティションやファイルのサイズに制限があるため、様々な問題を生んだ。長所短所の紆余曲折はFATの項目を参照されたい。

MacからWindows等へ書類を転送すると、正体不明の書類が出現することがあるが、これはHFSやHFS+のみがサポートするリソースフォークと呼ばれるMac特有のデータ構造の産物で、HFSが特殊な一元的管理を行っている為にMac上では一つの書類に見える。このように幾つもの(※HFS+はリソース以外にもフォークは利用できるが互換性のため活用されていない)フォークを一つのデータに格納することをマルチフォークと呼び、もとのデータを改変することなくOS独自の管理情報を容易に付与できる優れた機能だが、事実上Macでしか使えない。このような発想はQuickTime、movコンテナのトラックと呼ばれるレイヤー構造にも散見される。

各OSでのファイルシステムの実装には、ジャーナル可能かどうかという違いがある(ジャーナルファイルシステム)。ジャーナル可能なものはシステムのリカバリがより安全という利点がある。システムが突然の故障などで停止した場合、ジャーナルされていないファイルシステムはチェックユーティリティを使って検査する必要があるが、ジャーナルファイルシステムではリカバリは自動的に行われる。MacintoshのHFS+(Mac OS X v.10.2.3より追加導入された)、Windows の NTFS や Linux の多くのファイルシステムはジャーナル可能である(ext2を除く)。

現在主流のOSにおいては、ほとんど全てのファイルシステムはディレクトリによる階層構造を持つ。これは、Multicsを起源とするものであり、メインフレームのOSではディレクトリを持たないものもある。また、ディレクトリ名とファイル名の区切り記号、ファイルの命名規則などはシステムによって異なる。


ネットワーク


多くのオペレーティングシステムはTCP/IPプロトコルをサポートしている。歴史的に見れば、初期のコンピュータネットワークはモデムを使って電話回線で行われていた(BSC手順など)。その後、パケット通信が使われるようになり、IBMのSNAなどの各社独自のネットワークアーキテクチャが登場した。現在では、TCP/IPを中心とした通信が主流となっている。

通信プロトコルは、トランスポート層まではカーネル内モジュールとして実装し、プレゼンテーション層より上はシステムプロセスとして実装されるのが一般的である。セッション層の実装はシステムによって異なる。


セキュリティ


オペレーティングシステムが関係するセキュリティは、ユーザーをアクセスに先駆けて認証し、そのユーザーのアクセスレベルを決定し、管理者の方針に基づいてアクセスを制限することである。一般にOSは他のネットワーク上のコンピュータやユーザーに対して様々なサービスを提供している。これらのサービスはポートなどの番号付きのアクセスポイントを通して提供される。ファイル共有、プリントサービス、電子メール、ウェブサイト、ファイル転送などが一般的なサービスである。

セキュリティに特化した機器(あるいはソフトウェア)としてファイアーウォールがある。OSレベルでも各種のファイアーウォール・ソフトウェアがある。ソフトウェアによるファイアーウォールはOS上で提供されているサービスへのトラフィックを許すか許さないかと設定できる。従って、安全でないサービス(telnetやftp)をインストールして使おうとしても、そのポートへのトラフィックをファイアーウォールが許可していなければ、セキュリティ問題は発生しない。


グラフィカルユーザーインターフェース (GUI)


最近のオペレーティングシステムはGUIを持っている。多くのプロプライエタリなシステム(Windows やMac OS)はカーネルとGUIが密接に関係している。他のOSではユーザーインターフェイスはモジュール化されていて、任意のGUIをインストールしたり、新たなGUIを作成したりできる(Linux、FreeBSD、OpenSolaris)。

Windowsでは新たなバージョンが登場する度にGUIを変更してきた。初期のWindowsからWindows Vistaまでを比べてみると、その変化は大きい。

Macでは初期からSystem 6.0.xまでが白黒のGUIであったが、System 7以降はカラー化されたのみでMac OS 8でプラチナアピアランスが採用されてもMac OS 9.2.2までは、基本要素はほぼ変わっていない。一方、Mac OS Xになって大幅に変更され、AquaベースのGUIになり、Mac OS X v10.3以降ではメタルアピアランスが導入されている。また、X11も用意されている。

Mac OS Xの前身のNEXTSTEPは様々な独創的なGUI要素で知られ、他のOSに大きな影響を与えた。白黒のシステムであったころよりアルファチャンネルを備えていたのは特筆すべき点である。

LinuxにはいくつかのGUIが存在する。Linuxで使えるGUIとして有名なものは、GNOMEとKDEがある。


デバイスドライバ


デバイスドライバはハードウェア機器とのやり取りをするためのソフトウェアである。一般に機器との通信を行うインターフェイスを持ち、機器の接続される何らかの通信サブシステムやバスを経由して通信を行う。コマンドを機器に送り、データの送受信を行う。また、一方でOSやアプリケーションに対するインターフェイスも提供する。ハードウェアに強く依存するプログラムであり、OSにも依存している。これによって、OSやアプリケーションが機器を使って動作することが可能となっている。ハードウェアの非同期的な割り込みの処理もデバイスドライバの役割である。

デバイスドライバの主たる設計目標は抽象化である。ハードウェアは同種のものであってもそれぞれ異なる。新たな機能や性能を提供する機器が登場したとき、それらは従来とは異なった制御方式を採用していることが多い。オペレーティングシステムを将来にわたってあらゆる機器を制御できるように設計するのは困難である。従って、個別の機器の制御をOSから切り離す必要がある。デバイスドライバはOSとのインターフェイス(関数呼び出し)をデバイス固有の処理に変換することが主たる機能となる。理論的には、新たな制御方法の新しいデバイスは対応するドライバが適切に機能すれば古いOSで制御可能となる。OSから見れば、新たなドライバによって新たなデバイスが利用可能になる。


OSの歴史

第1世代
1950年代、OSという概念が登場し始めた時代。初期のコンピュータはオペレーティングシステムを持たなかった。しかし、システム管理用ソフトウェアツールやハードウェアの使用を簡素化するツールはすぐに出現し、徐々にその範囲を拡大していった。最初のOSは、IBM 701用にゼネラルモーターズが開発したもの、IBM 704用にゼネラルモーターズとノースアメリカン航空が共同開発したもの等、多くの候補があるが、どういった機能が搭載された時点でOSと呼ぶかによる。(この時代のものをOSとは呼ばない場合もある。)

当時は、パンチカード等から入力されたプログラムを磁気テープに一旦保存し、その磁気テープを大型コンピュータに接続後、プログラムをロードして実行していた。そのため、入出力装置のドライバにあたるものが作成されていた。また、アセンブラやコンパイラが登場し始めた時代なので、一旦、コンパイラをロードしてからプログラムをロードし、コンパイラが出力したアセンブリ言語をアセンブルするために、アセンブラをロードするといった手続きが必要だった。こうした作業を自動化するバッチ処理がOSの機能として実現されていた。また、プロセスの状態を監視するモニタも実装されていた。


第2世代
1960年代前半、OSの機能が増強された時代。スプール、ジョブ管理、記憶保護、マルチプログラミング、タイムシェアリングシステム、そして、仮想記憶の概念が登場し始めた。これらの概念を複数搭載するOSも登場していた。また、マルチプロセッシングシステムに対応するOSもあった。


第3世代
1960年代後半、OSが著しい進化を遂げた時代。正確には、1964年に発売されたIBM System/360に搭載されていたOS/360登場以後の時代。IBMのメインフレームであるシステム/360シリーズは非常に幅広い性能/容量と価格帯をカバーするもので、それを単一のオペレーティングシステムOS/360でカバーするよう計画されていた(従来は機種ごとにツールが開発されていた)。このような全製品ラインを一つのOSでまかなうというコンセプトはシステム/360の成功を決定づけた。実際、現在のIBMのメインフレーム上のオペレーティングシステムは、そのオリジナルのOSの系統を受け継いでおり、OS/360向けのアプリケーションは最新のマシンでも動作する。OS/360は他にも重要な進歩に対応していた。それはハードディスクドライブへの対応である。もうひとつの重要な概念としてタイムシェアリングシステムがある。高価なコンピュータの資源を複数のユーザーが同時並行的にリアルタイムでシステムを使うことで有効利用するものである。タイムシェアリングは、各ユーザーにマシンを独占しているかのような幻想を抱かせた。Multicsのタイムシェアリングシステムはその種のシステムの中でも特に有名である。

タイムシェアリングシステムや仮想記憶等の機能が、本格的に実現された。


第4世代
Multics は1970年代の様々なオペレーティングシステム、特にUNIXに影響を与えた。もうひとつのミニコンピュータ用オペレーティングシステムとしてVMSが有名である。

初期のマイクロコンピュータはメインフレームやミニコンピュータのような精巧なOSを必要としていなかったし、それを搭載するだけの容量もなかった。そこで、必要最小限のオペレーティングシステムが開発された。初期の特筆すべきオペレーティングシステムとしてCP/Mがある。これは8ビットのマイクロコンピュータではよく使われ、その大雑把なクローンとしてMS-DOSが生まれた。MS-DOSはIBM PCのオペレーティングシステムとして採用されたため、広く使われるようになった(IBM版は IBM-DOS または PC-DOSである)。その後継OSによってマイクロソフト社は世界有数のソフトウェア企業となったのである。1980年代の他の流れとして、アップル・コンピュータ社のMac OSがある。


第5世代
1990年代には、パーソナルコンピュータがGUI機能や頑健性と柔軟性を備えたオペレーティングシステムを搭載できるまでに進化した。マイクロソフト社はこのためにWindows NTを開発した。Windows NT は1999年以降のマイクロソフト社の全OS製品のベースとなった。アップル社は2001年、UNIXをベースとしたMac OS Xを新たにリリースした。また、オープンソースの流れでは、GNUプロジェクトがUNIX向けのツール群を開発し、Linuxがカーネルとして主流となった。BSDもUNIX市場の一部を占めている。 1990年代までに、マイクロコンピュータは、広いGUIの施設と同様に、より大きなコンピュータのオペレーティング・システムの頑強性と柔軟性がますます望ましくなったポイントに発展した。

組み込みシステムの複雑さが高まると、組み込みオペレーティングシステムの利用が拡大していった。


オペレーティングシステムの分類

タスク管理の特徴
マルチタスク
シングルタスク
リアルタイムオペレーティングシステム

応用分野
汎用
組み込み

主要オペレーティングシステム (OS)
ACOS
AmigaOS
Amoeba
BeOS
Zeta
Haiku
CP/M
DOS
Domain/OS
eCos
Garnet OS(Palm OS)
Human68k
IBM-DOS
INTEGRITY
velOSity
u-velOSity
Lisa OS(Mac OSの前身)
Linux ( → UNIX > Linux)
Mach
Hurd
OSF/1Ver2.0カーネル
Mac OS
Mac OS X
Mac OS(System7.5までの日本語版は漢字Talk)
Microsoft Windows
ReactOS、FreeWin、INtime
MINIX
Mona
MS-DOS
MSX-DOS
MVS
NewtonOS
NeXT
NeXTSTEP
OPENSTEP(NeXTSTEP3.3以降はOPENSTEP)
OpenVMS
OSASK
OS/2、eComStation
OS/360
OS-9、OS-9000
OSF/1
HI-OSF/1-MJ
HI-UX/MPP
Plan9
QNX
Rhapsody(Mac OS X Server/ Mac OS Xの前身)
Smalight OS
Smalltalk(XEROX Alto用OS)
Symbian OS
ThreadX
TownsOS
TRON
ITRON、μITRON
BTRON
CTRON
T-Kernel
UNIX
AIX
BSD
FreeBSD
NetBSD
OpenBSD
386BSD
BSD/OS (BSD/386)
Darwin、OpenDarwin、Mac OS X
SunOS
NEWS-OS
SUPER-UX
IRIX
Tru64 UNIX
Linux
Red Hat Enterprise Linux
Fedora
Debian
Mk-Linux(MicroKernel-Linux)
Linux-PPC(Linux for PowerPC Macintosh)
TurboLinux
Linspire
Vine Linux
LynxOS
SystemV
Solaris
A/UX(Apple製NetworkServer用OS)
EWS-UX/UP-UX(UX/4800)
VAX-VMS
VM
VOS0
VOS1
VOS2
VOS3
VOSK
VSE
VxWorks
z/OS

オペレーティング環境
オペレーティング環境とはオペレーティングシステム上で動作するGUIフロントエンドのことである。主なオペレーティング環境にはMS-DOSから実行するMicrosoft Windows(バージョン3.0まで)や UNIX と Linux で使われる GNOME や KDE がある。




脚注
[ヘルプ]^ OSの垣根を越えたABIもいくつか存在する。例えば、OCMP(Open Computing Environment for MIPS Platform)というMIPS系チップを使用したUNIX機によるバイナリ共通インタフェースがNECやSONY,住友電工,日本タンデムコンピュータなどにより定義され、その定義に沿ったUNIX-OSが複数販売された。

関連項目
CPU
メモリ管理
仮想記憶
MMU
アドレス空間
ファイルシステム
ファイル編成法
プロセス管理
スケジューリング
ジョブ管理
プロセス間通信
排他制御
架空のコンピュータプログラム#OS
OSたん

UNIX® (ユニックス)



UNIX® (ユニックス) とは、マルチタスク、マルチユーザ機能を有するオペレーティングシステム (OS) の一種、またはこれから派生した一連のOSの総称である。





概説
主に企業や教育機関における研究で、または安定性や高い情報セキュリティが要求されるサーバを提供する目的で使われる。

ミニコンピュータ(ミニコン)やワークステーション用のOSとして広く採用され、メインフレームの一部やスーパーコンピュータにも用いられている。1990年代の80386発売以降、Linux、FreeBSDなどの『PC-UNIX』の公開によって最近では個人レベルで使用されることも多くなった。

現役のOSとしては比較的長い歴史を持ち、優れたパフォーマンス、堅牢性を持つ。

UNIXの中核を成すカーネルは大部分がC言語で記述されている。その結果、異なるプラットフォームに対する移植性が高いこと、また、可読性が高いため、機能の改変を行なうことが比較的容易なことで知られている。


歴史

UNIX黎明期

Multicsの失敗
1960年代に、マサチューセッツ工科大学、ゼネラル・エレクトリック(GE) 及び、当時AT&Tグループに属していたベル研究所により、GE-645上で動作することを目的としたオペレーティングシステム、Multics (Multiplexed Information and Computing System) の開発がなされた。しかしMulticsは製品版として完成したが、巨大で複雑になりすぎたためにパフォーマンスが大変悪かった。その結果、AT&TはMultics開発プロジェクトから撤退することになった。


UNIXの開発始まる
一方ベル研究所の研究員であり、Multics開発プロジェクトの一員であったケン・トンプソンは、Multics開発に携わりながら、世界で初めて不特定多数の人に遊ばれたテレビゲーム「スペースウォー!」をGE-645上に移植すべく、Space Travelというゲームを開発していた。しかしこのゲームはGE-645上で動作させるにはコストが高く、実際にパフォーマンスもあまり良くなかった。

そのためケン・トンプソンは、同じベル研究所に所属していたデニス・リッチーの力を借りて、ベル研究所ですでに使用されなくなっていたDEC社製のシステムPDP-7上にアセンブリ言語を用いてこのゲームを移植した。

このゲームの移植の経験とMulticsの開発経験が結びつき、ケン・トンプソンは新しいオペレーティングシステムの開発プロジェクトを開始する。このプロジェクトの名前はUNICS (Uniplexed Information and Computing System) であり、後に、UNIXプロジェクトと改称された。Multicsでの失敗に基づき、UNIXの開発はシンプルで独立したモジュール群で構成することを目標としていた。この事は、Multicsのmulti(複)に対してuni(単)という意味がUNIXの名称に込められていることからもわかる。

この時点ではまだベル研究所からの資金的な援助はなかったが、ベル研究所のComputer Science Research GroupがPDP-7より大きいシステムでのUNIXの動作を望んだため、ケン・トンプソンとデニス・リッチーはテキスト出力能力を持つUNIXをPDP-11/20上で実現することを約束し、これらのプロジェクトはベル研究所から資金的な援助を得ることとなった。


UNIX完成
そして1970年代最初にUNIXオペレーティングシステムはPDP-11/20上で動作するようになり、また、テキストエディタedと、テキスト出力用ソフトウェアroffがアセンブリ言語で実装された。roffはその後troffとして発展し、またこれらプログラムを用い、The UNIX Programmer's Manualが1971年3月に出版された。

現在ではオペレーティングシステムの多くがC言語で記述されることが多いが、この当時はオペレーティングシステム、特にオペレーティングシステムの中核をなすカーネルはアセンブリ言語でかかれることが一般的であった。ハードウェアメーカーがオペレーティングシステムを提供しており、ハードウェアの能力を最大限に生かすには、アセンブリ言語を利用する必要があったためである。しかしアセンブリ言語は可読性、移植性等が欠けているため、1973年にはUNIXはC言語に移植された。


UNIXの普及と展開
ベル研究所の当時の親会社AT&Tは、独占禁止法によりコンピュータ産業への進出を禁止されていた。このため、UNIXはソースコードと共にメディアのコピー代だけで配付された。このような要因から、UNIXはアメリカ国内の企業、大学、政府機関で急速に普及し、またさまざまな改変がUNIXに加えられることとなった。その結果、UNIXにはオープンな文化が育まれ、また、これら創生期に生まれた設計思想、開発手法等はUNIX哲学として発展し、現在のUNIX系オペレーティングシステムの開発に多大な影響をあたえている。

その後、ベル研究所のUNIXは順調に発展を遂げ、1975年に至るまでにV4、V5、V6がリリースされた。その過程においてパイプ機能が実装され、いっそうのモジュール化がなされている。1978年には、UNIXは600台以上のシステムで稼動していたとされる。

1980年代の始め、AT&Tにアメリカ合衆国の独占禁止法が適用され、地域系部門が分離、独立されることとなるが、一方で、AT&Tは通信業務以外の分野への参入が認められた。これに伴い、AT&TはUNIXを用いたライセンスビジネスを開始し、UNIXのライセンスを受けた会社は、UNIXに様々な機能追加を施し、自社の商品として独自UNIXを搭載した機器を売り出した。これらの機器に搭載されたUNIXにはソースコードが付属していなかったことや、ライセンスが大変厳しかったことから、UNIXを自由に改変したり、またその改変した機能を公開できなくなった。その結果、UNIXは一時期、閉じた世界のものとなったとされる。


BSD系UNIX
カリフォルニア大学バークレー校は同校で開発されたUNIX用のPASCALコンパイラやエディタなどの配布活動を行っていた。これが、BSD (Berkeley Software Distribution) の始まりである。

1980年ごろ、DECのスーパーミニコンVAX-11のリリースにより、ミニコンは32ビットの時代に突入した。LISPやリレーショナルデータベースなど大規模アプリケーションのため32ビット仮想記憶対応のUNIXが求められていたが、AT&Tから提供された UNIX 32VはV7を32ビット対応にしただけのもので仮想記憶機能を持っていなかった。そこで、カリフォルニア大学バークレー校ではV7と32Vをベースに仮想記憶機能の追加を行い、バークレー版のUNIXを開発した。これによりBSDはUNIXオペレーティングシステムそのものを含む大規模なものとなった。 さらに同校はDARPAよりUNIXにTCP/IPネットワーキング機能を追加する研究プロジェクトを受託し、BSD UNIXは、TCP/IPネットワーク機能を持つことになった。特にTCP/IPがBSD UNIXに標準採用されたことは、インターネットの創生期の発展に大きく寄与した。

BSD UNIXはAT&Tから公式に配布許可を得たUNIXのバリエーションであり、入手のためにはまずAT&T UNIXのソースライセンスを得た上でバークレー校とのあいだでライセンス契約を結ぶ必要があった。当時はUNIXのライセンス費が教育機関向けには非常に安く、また同校のライセンス費も実費程度であったのでBSD UNIXは広く普及した。BSDベースの商用UNIXも登場したが、これはAT&Tからバイナリ再配布ライセンスを得て販売されていたのであり、ソースコードは付属しておらず、カーネル再構成用にリロケータブルオブジェクトファイル(.oファイル)が添付されていた。

なお、BSD開発の中心となったのが、後にサン・マイクロシステムズの設立メンバーとなるビル・ジョイである。その後、1995年まで同校のCSRG (Computer Systems Research Group) でBSD版UNIXの開発が続けられた。4.3BSDの出荷後、CSRGではAT&T由来のソースコードの分別と除去を推し進め、AT&T UNIX由来ではないソースコードを無償公開した。これがNetwork Release 1 (NET/1) やNET/2である。特にNET/2ではカーネルのソースのほぼ全てが含まれており、欠落した数個のファイルを開発することにより動作するカーネルを作ることができた。 しかしUNIXのソースコード、特許等のライセンスを管理してきたAT&Tは、BSDに対して快く思わなかった。特に、BSDiがNET/2を商用化してソースコードを販売したことがきっかけとなり、USL(当時UNIXを保有していたAT&Tの子会社)はBSDi及び、BSDを開発したカルフォルニアバークレイ校に対し、BSDによるAT&Tが保有する特許及び、著作権の侵害に対して訴訟を起こす。この訴訟の和解の結果、1994年には、NET/2の公開を取りやめることととなったが、4.4BSDからAT&TUNIXに依存した部分を取り除いた4.4BSD-Liteを同校が公開できることになった。しかし、裁判の間BSD系のオペレーティングシステムは急激に開発のスピードが落ちたとされる。

最後に出荷されたBSDは4.4BSD encumberd(フリーではない)と、そのフリーなソースコードだけを抜き出して作られた4.4BSD-Lite2である。こうしてAT&Tとのライセンス問題を回避したBSDは後に述べるオープンソースUNIXへとつながっていく。


V7系UNIX
商用UNIXには、V7→32V→4.xBSD→SunOS(サン・マイクロシステムズ)という流れと、V7(→32V)→System-III→System-V (AT&T) という流れがある。なお、System-IVは開発に失敗して出荷されなかった。その後、AT&Tとサン・マイクロシステムズによって、BSD系の機能を追加した統合UNIXが System-V Release4 (SVR4) として開発された。

その後、AT&TはSVR4をノベルに売却した。なお、ノベルはこれを基礎にUNIXwareを開発し、マイクロソフトのWindows NTに対抗しようとした。

1994年にノベルはUNIXの標準規格を確立するために設立されたX/OpenコンソーシアムへUNIXの商標を売却した。その後、X/OpenコンソーシアムとはOSF/1(SVR4との競合規格)は統一化され、この規格の管理を目的としてOpen Groupが設立された。

V7系UNIXの系譜はUNIX V8につながる。UNIX V8は一般に公開されることはなく、ベル研究所内で研究用途にのみ使われた。

ベル研究所ではUNIXを開発した同じチームによって、UNIXの思想を受け継ぎ、分散環境上におけるUNIXの問題点を解消したPlan 9が作られ、2004年現在も開発が続けられている。なお、Plan9は組込み向けに再構成されインフェルノ (Inferno) として通信機器に使われている。


オープンソース系UNIX
UNIXが商用の「閉じた」OSとなっていく中で、現在につながるフリーソフトウェア/オープンソースのムーブメントが勃興し、UNIX同様の操作性と機能を提供するフリーなOSが生み出された。以下に挙げるOSは、ライセンスなどの問題からUNIXとは公称しない。


GNU/Linux
1983年にリチャード・ストールマンはFSF(Free Software Foundation/フリーソフトウェア財団)を設立し、GNU(Gnu's Not Unix)プロジェクトを開始した。このプロジェクトの目的は、再配布自由・改変自由なUNIXクローンのOSを作成することであった。このプロジェクトにより、多くのUNIXシステム上で動作するソフトウェア、例えばemacsやgcc等が作成され、これらソフトウェアは多くのUNIXシステムで使用されるようになった。しかしながら、OSの中核をなす“Hurd”の完成に手間取った(Hurdは2006年現在も開発中)。

1991年にリーナス・トーバルズがLinuxのカーネルを開発した。Linuxカーネルの特徴として、POSIXに準拠するように設計されたこと、GNUプロジェクトによって開発された様々なツールが動作するように作成されたこと、またライセンスにGPLが採用されたこと等が挙げられる。その結果、GNUプロジェクトの開発したソフトウェア等と共に、完全フリーのUNIXクローンとして利用されるようになった。有名な商用ディストリビューションとして、かつて Red Hat Linux が存在し、現在では Red Hat Enterprise Linux や SUSE Linux等がある。

なおLinuxという名称は本来カーネルのみの名称にすぎず、OSとして完成させるための他のシステムの多くはGNUプロジェクトの産物である。そのためFSF側ではOSとしての名称は「GNU/Linux」とすべきだと主張しており、この名称を採用した最も有名かつ完全無料なディストリビューションのひとつとして「Debian GNU/Linux」がある。


オープンソース系BSD
4.3BSD Network Release 2 (Net/2)に起源を持つのがFreeBSD・NetBSD・OpenBSD・DragonFly BSD・PC-BSDのいわゆるBSD系UNIXである。FreeBSDは安定性重視、NetBSDは新機能対応と移植性に優れ、OpenBSDはセキュリティを重視し、DragonFly BSDはマルチCPU構成での高性能という特徴を有し、PC-BSDはカジュアルユーザにおいて簡単に導入して使えることを目指しており、特にFreeBSDはウェブ・ホスティングなどで標準的に使用されている。

USLとの和解以降これらBSD系UNIXはライセンス問題を排除した4.4BSD-Lite2をベースに移行し、いずれもフリーなOSとなっている。


UNIXの商標
UNIXの商標とソースコードの権利はAT&Tから子会社のUSL(Unix Systems Laboratory)、Novellなどの間で転売が繰り返された。現在ではUNIXのソースコードはSCOが持っている。登録商標としてのUNIXはThe Open groupが保有している。日本における電子計算機関連の「unix」という商標は複数の区分で登録されており、アメリカン テレフォン アンド テレグラム カムパニ―やエックス/オープン・カンパニー・リミテッドが保有している。

日本では、日本マランツ(現在は合併してディーアンドエムホールディングス)が、電気機器分野でUNIXという名前で先行して商標登録を行なっていた。そのため、日本ではOSの商標として使えない時があった。現在は音響機器用に「unix」を日本マランツが利用している。 また、東京・神奈川・埼玉には『UNIX』という美容室が存在し、日本における商標権の意識について物議を醸している。[1]この件については、訴訟になる要素も多く、日本の各権限の侵害例としても目立つものとなっている。


UNIXの定義
現実には、UNIXは以下に示す四種類の条件をひとつでも満たすOSを指す言葉として使われている。

UNIXの商標を管理する団体The Open Groupより、同団体が定義したUNIXの定義(Single UNIX Specification)を満たすことの認証を受けたOS。
ベル研究所で開発されたオリジナルのUNIX及び、オリジナルのUNIXの派生OSとしてベルの認可を得た過去のOS。
オリジナルのUNIXを起源にもつOS。
POSIXなどのUNIXに関連する規格をみたす、UNIX互換なOS。
しかしながら現在、UNIXの公式な定義は、1のみである。アメリカや日本を含む多くの国においては、UNIXはThe Open Groupの登録商標であり、1を満たすOSのみがUNIXを名乗ることができる。かつてAT&TがUNIXという言葉の使用に細かい制限をかけたために、Un*xなどといったよびかえがされることもある。Linuxは4のみに当てはまる。


主なUNIX系OS

フリーなもの
386BSD
FreeBSD
NetBSD
OpenBSD
DragonFly BSD
Darwin
GNU/Linux
GNU/Hurd
Solaris
サン・マイクロシステムズ のOS。現在、最新版のSolaris 10が提供されているが、以前の版も最終リリースのものがダウンロード可能である(Solaris 8, Solaris 9)。もともとは有償版しかなかったが、SPARC版が無償化され、ついでx86も(一度有償に戻ったが)無償化された。また、カーネル等の主要コンポーネントをオープンソース化したOpenSolarisもリリースされている。
Uzi
Uzix
LUnix
ELKS
Minix
IBM PCでも動作すること目的に開発された教育用UNIX風OS。80386の仮想記憶には対応していなかったため、Linuxが開発されるきっかけとなった事でも有名。なお、当初はフリーではないライセンスでリリースされていたが、2000年にバージョン 2.0.2 が BSDライセンスのもとでリリースされ、フリーな OS となった。

フリーではないもの
Domain/OS
アポロコンピュータが開発したワークステーションに搭載されたUNIXの機能ももつ独自OS。ヒューレット・パッカード (HP) に買収されたその後は市場から姿を消した。
Ultrix
DECが同社のVAXやDECstation向けに出していた4.2BSD/4.3BSDベースのOS。初の64ビット実装を行ったUNIXとしても知られている
Tru64 UNIX
DECが開発した、Alphaアーキテクチャのサーバ/ワークステーション用のOS。当初は「OSF/1」と呼ばれていた。DECの買収とともに、コンパック、ヒューレット・パッカード (HP) へと引き継がれ、現在も販売されている。
DG/UX
DataGeneralのサーバ/ワークステーション用のOS製品の商標。System-V系をベースにしているが、一部BSD系の機能を付加
HP-UX
ヒューレット・パッカード (HP) のPA-RISCアーキテクチャによるサーバ/ワークステーション用のOS製品の商標。OSF/1への移行を前提にSVR3系をベースに実装されたが、そのまま発展したOS。HP-UX V10以降はSVR4ベースとなる。2002年リリースのHP-UX 11i v1.6では業界で初めてインテルItaniumプロセッサに対応する商用OSを提供した
SCO Unix
SCOがマイクロソフトから引き継いだXENIXを発展させたIBM PC用のUNIX。一時期はPC用UNIXのトップシェアを誇っていた。
Microsoft Windows NT
Windows NT はPOSIX準拠のUNIX OSであるが、あまりこの事実は知られていない。Windows2000以降はInterixサブシステムを導入することで、UNIX環境を構築することができる。なお、WindowsXPからPOSIXサブシステムが削除された。
Mac OS X
独自改良のMachマイクロカーネルとFreeBSDのユーザランドによって実現されたOS (Darwin) 上にCarbonなどを実装したMacintosh用OS。上記の定義のうち3と4が当てはまる。なお、2007年に出荷が予定されているMac OS X Server v10.5はThe Open Groupの認証を受けたUNIXである。
A/UX
アップルコンピュータが開発した、SVR2ベースのMacintosh用OS。X11やコンソールのほかに、Mac OSによく似たインターフェイスのウィンドウシステムを備えていた。当時のMacintoshはMac OS以外をブートできないため、いったんSystem7が起動する。
MachTen
MachマイクロカーネルとFreeBSDをベースとした、Mac OS内で起動するOS。
BSD/OS
初期BSDから分岐し商業プロダクトとなったUNIX。BSDiが開発、後に組込み系でリアルタイム制御に対応したUNIX互換OS「LINX」を開発・販売していたWind Riverがソフトウェア部門ごと買収。当初の名前はBSD/386
XENIX
マイクロソフトがSVR2をベースに開発・販売していたIBM PC向けUNIX。仮想メモリをもたない8086とFDで動作するシンプルなシステム。教育用および安価なUNIX環境として高いインストールベースを誇った。1983年、SCOから販売されていたが、マイクロソフトがサーバOS戦略を独自路線(OS/2 → Windows NT)へ切り替えたため、後にSCOへ売却された。
PANIX
エー・アイ・ソフトが、SVR4をPC/AT互換機・PC-9800シリーズに移植して発売していたもの
UnixWare
USLの純正SVR4がノベルに売却され、ノベルの技術(Netwareのサポートなど)を取り入れられたUNIX。その後SCOへ売却される。
AIX
IBMの、SVR4とBSD4.4をベースとしたUNIX。大型汎用機からWSまでのスケーラビリティを持つ
ACIS
IBMが6100RT/PCシリーズ用に提供していた4.2BSDベースのOS。アカデミック分野の顧客にのみ提供された。AT&T UNIXとBSDのライセンスを持つ顧客にはソースコードも提供された。
AOS
IBMが6100RT/PCシリーズ用に4.3BSDを移植したもの。アカデミック分野の顧客にのみ提供された。AT&T UNIXとBSDのライセンスを持つ顧客にはソースコードも提供された。
IRIX
シリコン・グラフィックス (SGI) のUNIX。GUIに優れる。映像製作分野でのシェアが高い。SVR4.2系
NeXTSTEP/OPENSTEP
NeXT ComputerのOS。当初は同社のワークステーション専用のOSで、Machに4.3BSD相当の機能を搭載したものであった。後にAT互換機などで動作するOSとして単体販売もされた。
COHERENT
Marc Williams製。UNIXライクなOS。
CONSENSYS
ESIX
UNICOS
Crayのスーパーコンピュータ用のUNIX。
INTERACTIVE UNIX
RISC/os
ミップス・コンピュータシステムズのUNIXワークステーション/サーバ専用のUNIX。日本ではクボタコンピュータ(株)が代理店をしていた。
Σ
通産省主導の国策プロジェクトとして開発されたOS。開発当初はBSD系だったが後にSystem V (Release2) 系に路線変更。プロジェクト的には失敗に終わったとされ、また、その後も少なからず他の国策プロジェクトに悪影響を与えたとされる。
HI-UX
日立製作所のワークステーション、サーバで動作する。HP-UXをベースとした独自OS。
NEWS-OS
ソニー製のNEWSワークステーション専用のUNIX。当初は4.2BSDベースであったが、後に4.3BSDベースとなる。終末期にはSVR4.2ベースとなった(NEWS-OS6.x)。
OA/UX
シャープ製のOAシリーズ、IXシリーズのオフコン/ワークステーション専用のUNIX。当初はSystemIIIベースであったが、後にSystemVベースとなる。コンソール画面での漢字表示、オンボードの辞書ROMを用いたかな漢変換など独自の日本語化が行われていた。
UniOS-U/UniOS-B/UniOS-Σ
オムロンが開発・販売していたLUNAワークステーションのうちMC68030を用いたモデル専用のUNIX。SystemV系、BSD系、Σ準拠の3種類が供給された。MC88000を搭載したLUNA88k-WSのOSはMachマイクロカーネル(ユーザカーネルは4.xBSD)であった。
EWS-UX(UX/4800)
日本電気 (NEC) 製のEWS4800ワークステーション専用のUNIX。SVR3系のCISC版とSVR4(当初は、SVR4.0,後にSVR4.2、4.2MP)系のRISC版が存在する。その後、UP-UXをOSとするUP4800サーバ・シリーズが発売になり、これらが統合されてUX/4800に名前が変更となった。CPUをR10000シリーズ(64ビット)としたモデルの発売に伴い、32ビット版と64ビット版が提供されている。
PC/UX
NEC製PC-9800シリーズ(80286ベースのもの)専用のUNIX。SVR2ベース。
SUPER-UX
NEC製SXスーパーコンピュータ向けのUNIX。なお、地球シミュレータ向けには、このOSを地球シミュレータ向けに拡張したものが利用されている。
SX/A
富士通製ワークステーションのAシリーズ(A30など)・Σ-Station(Σプロジェクトとは無関係)シリーズ専用のUNIX。純正SVR3をベースに4.2BSDのTCP/IP機能を盛り込まれていた。
UXP/DS
富士通DS/90・GP7000Dシリーズ専用のUNIX、USL純正のSVR4をベースに開発された。
UXP/M
富士通製汎用機(FACOM後継機であるMシリーズ、GS (Gloval Server) シリーズ)で動作するSVR4互換のUNIX。他の富士通汎用機のOS (MSP/VSP) と同様に、VM上で稼動する。
RTU
MASSCOMP製リアルタイムUNIX、世界で初めてUNIXをリアルタイム化したUNIX。SVR3系カーネルをベースに4.2BSDのTCP/IPを利用していた。コンカレントに買収後名前は消えるが、機能性は現在も継承されている。
CX/UX
ハリスコンピュータ製NHxxxxシリーズで動作する、SVR3系リアルタイムUNIX。SVR3系カーネルをベースに4.2BSDのTCP/IPを利用していた。コンカレントに買収後名前は消えるが、機能性は現在も継承されている。
PowerMAX/OS
コンカレントコンピュータ製PowerHawk、NightHawk、TurboHawkシリーズで動作する。SVR4ES/MP純正カーネル(USLのカーネルベース)にPOSIX1003.1b(リアルタイム)、POSIX1003.1c(スレッド)の拡張を行い、XPG4の認定も受けている。事実上、最後の商用UNIXにおけるリアルタイムUNIXである。(2005年現在、販売中)
NCR UNIX
NCRの発売するUNIX。

UNIX環境を提供するソフトウェア
OSではないが、UNIXに相当する環境を提供するソフトウェア。

BSD on Windows
Cygwin
Interix (Services for UNIX)

関連項目
POSIX
Mach
C言語
Talk

Linux(リナックス、リーヌークス、リヌックス、リヌクス、ライナックス、リーナクス)



Linux(リナックス、リーヌークス、リヌックス、リヌクス、ライナックス、リーナクス)とは、UNIXライクな(UNIXに似た)コンピュータ用オペレーティングシステム (OS) である。

現在では、パーソナルコンピュータに限らず、携帯電話のような組み込みシステムからメインフレームやスーパーコンピュータまで、幅広く利用されている。



概要
Linuxとは本来、OSの基盤となる中核ソフトウェア「カーネル」のみを指す呼称であるが、今日ではこのLinuxカーネルにGNU ProjectのソフトウェアやX Window Systemなど、別のプロジェクトやライセンスのもとで開発が行われたソフトウェア製品群をパッケージ化し、Linuxカーネルと同時に配布するLinuxディストリビューションを指して、単にLinuxと呼ぶこともある。

Linuxカーネルはその名の通り、OSの根幹としてコンピュータのシステム資源を統括するカーネルであり、これを用いて具体的な応用を可能とするオペレーティングシステムを構成する場合には、他の多数のソフトウェアの助力を必要とする。各種のライブラリやサブシステムを抜きにしてこれらを構成することは不可能であり、さらに具体的な作業や業務に応用する際には、各種サーバやアプリケーション等のソフトウェアも必要となる。GNU Projectではこうしたソフトウェアをフリーで開発・提供しており、実際に大多数のLinuxディストリビューションではライブラリ環境(glibc、GNU Cライブラリ)やツール環境(GNU bintuilsやfile utils等)をGNUのプロダクトに依存しているという事実、またGNU自身のプロダクトではないものの、Linuxカーネルを含め多くのソフトウェアがGNUが提唱するパブリックライセンス(GPL、乃至はLGPL等)に則って開発・提供され、これらのソフトウェアが事実上相互依存している点などからも、Linuxカーネルを用いてUNIXと同等のシステムを構成する場合には、そうしたシステムは「GNU/Linux」などと呼ぶべきとする者もいる(リチャード・ストールマン、またリーナス・トーバルズ自身もGNU/Linuxと呼称している)。

Linuxカーネルを用いて構築されたOS環境は、一般的にはUNIX系OS、UNIX互換OS等として分類される。ただし厳密には、UNIXの標準的なAPIなどを定めた仕様であるPOSIXをおおむね満たしているものの、UNIXの商標を取得していない(商標UNIXではない)こと、たとえ実質的にPOSIXを満たしていたとしてもほとんどのディストリビューションがPOSIX自体を取得していない(独 Unifix Linux 2.0のように、POSIX認定を取得した例外的ディストリビューションも存在する。)こと、既存のUNIXからのforkやソースコードの流用等も行われていない(血統上のUNIXでもない)ことなどから、本来のUNIXと混同して扱うことは適切ではない。

後付けではあるが、LinuxをLinux Is Not UniXの略としたり(GNU's Not UNIX)、LINus UniXの略としたりする者もいる。

Linux初心者のことをタコというが、蔑称ではなく愛称である。


歴史

リーナス・トーバルズLinuxカーネルは、1991年に当時フィンランドのヘルシンキ大学在学中であったリーナス・トーバルズ (Linus Torvalds) が個人で開発を開始した。最初はアセンブリ言語で記述されたターミナルエミュレータであったが、その後、Minixよりも優れたMinixを作るために拡張された。

当時はIntelの80386 CPUベースの32bit PC/AT互換パーソナルコンピュータが登場し、それまで32ビット環境を扱うために要求されたワークステーションやミニコンピュータ等と比較すれば遥かに安価に、しかも個人でも入手が可能なものとなりつつあったため、リーナス・トーバルズはこれを使ってUNIX互換の機能を持つOSを動作させてみたいと考えていた。しかし商用UNIXは高価であり、UNIXを模して実装されたMinixもまた教育的な動機から大幅に簡略化されていたために構造的ないくつもの問題を備えており、いずれもトーバルズの目的を果たすことは困難であった。このためトーバルズは自らOSカーネルの開発に着手し、既に使用していた自作のターミナルエミュレータを改造、ファイ