Tag List for OS

オペレーティングシステム

オペレーティングシステム(以下、OSと記載)とは、コンピュータにおいて、ハードウェアを抽象化したインターフェースをアプリケーションソフトウェアに提供するソフトウェアのことです。 つまり、ハードウェアとアプリケーションソフトを仲介するためのソフトウェアと言えるでしょう。 一部の組み込み機器を除き、今ではほぼ全ての機器にOSは当たり前のように搭載されています。 例えば、身近な家電製品である冷蔵庫やエアコンにもOSは搭載されています。 OSにも種類があり、WindowsやMax OS Xなどが有名でしょう。 最近、スマートフォンのCMなどでAndroid(アンドロイド)という言葉をよく耳にすると思いますが、AndroidもOSです。 そしてもちろん、LinuxもOSです。 ただ、「OS」という用語はかなり曖昧に使われており、確立した定義が定められていません。 少し極端な例ですが、ブラウザがOSの一部であるかないかでマイクロソフトとアメリカ司法省が裁判で争ったという話は有名です。 基本的に「OS」という用語は「広義のOS」と「狭義のOS」の2つに分けて考えることが多いです。 広義のOSには、ウィンドウシステムやデータベース管理システム (DBMS) などのミドルウェア、ファイル管理ソフトウェアやエディタ、各種設定ツールなどのユーティリティ、さらにブラウザや時計などの基本的なアプリケーションも含むことがあります。一般的に「OS」という場合はこちらを指すことが多いです。 狭義のOSは、ハードウェアを直接管理操作するなどの最も中心的な機能の部分を、特にカーネルのことを指します。

Linuxとは

Linuxは、1991年に当時まだ大学生であったLinus Torvalds(リーナス・トーバルズ)氏により開発されたOSです。 今から20年以上前に学生によって開発されたLinuxですが、日本で広く知られるようになったのは2000年に入ってからです。 その頃はWindowsが圧倒的なOSシェアを占めており、Linuxは「第2のOS」と言われていました。 しかし、Linuxがオープンソースという形式を採用していることから、世界中の技術者が協力して開発し合うことができたため、Windows一色となりかけていたOS市場の中でも、Linuxのシステム改良やソフトウェアパッケージの開発は進んでいきます。 また、LinuxはGPLというライセンスに従えば、誰でも無料で使えるというメリットが大きな要因となり、そのシェアを着実に伸ばしていきました。 そして、2012年現在、カーナビやルータなどの情報機器、冷蔵庫やオーブンといった家電機器など様々なところでLinuxが採用されており、普段の何気ない生活の中でたくさんLinuxに触れているのです。 企業のサーバシステムもそうですし、世の中の基盤となるシステムでもLinuxは使われています。 さて、上記で「LinuxはOSである」と表現しましたが、OSという用語が非常に曖昧なため、この表現も曖昧です。 正確には「Linux」という用語はカーネルだけを指しています。 Linuxの作者であるLinusTrovalds氏が開発・管理しているのもカーネルだけです。 つまり、「狭義のOS」に該当します。 しかし、「OS」という用語が「広義のOS」の意味として使われることが多いように、「Linux」という用語を「広義のOS」と捉えて、使われることの方が多いです。 ですので、会話の中で飛び交う「Linux」はカーネルを指しているのか、それともOS(広義のOS)を指しているのかを判断するために前後の脈絡を読む必要があります。 しかしそれだけでは、それまでの開発経験だったり環境だったりで、技術者によって捉え方が異なり、どんどん会話が噛み合わなくなっていくこともあります。(Linuxに限らず、コンピュータ用語は曖昧な表現が多いため、そのようなことは往々にしてあります。) そのため、明示的に「Linuxカーネル」「LinuxOS」と呼び分けている技術者も多いです。

アプリケーションとソフトウェアの違い

アプリケーションとソフトウェアを、同じ意味であると捉えている方も多いようですが、両者の意味は異なりますので、その違いを明確にしておきましょう。 ソフトウェアはコンピュータを動作させる手順・命令をコンピュータが理解できる形式で記述したもののことです。 コンピュータを構成する電子回路や周辺機器などの物理的実体をハードウェアと呼ぶのに対して、形を持たない手順や命令などをソフトウェアと呼びます。 つまり、ソフトウェアとはOSやアプリケーション全てを包括した用語です。 OSの中枢であるカーネルもソフトウェアに該当します。 それに対して、アプリケーションはワードやエクセルなど、OS上で動作するソフトウェアのことを指します。

カーネル

Linuxは正確にはカーネルのことを指すということを前回の記事で解説しました。 では、カーネルとはいったい何なのでしょう。 カーネル(kernel)とは英語で「核」を意味します。 これは文字通り、カーネルがOSの核であることから、その名が付けられています。 カーネルが行っている動作は主に下記2つです。 ・アプリケーションからの要求(システムコール)に応える ・ハードウェアからの応答をアプリケーションに伝える 実にシンプルですが、言い方を変えると、 「コンピュータを構成する全てのハードウェアとソフトウェアを管理している」 となり、最も重要な役割を担っていると言えるのです。 ではまず、コンピュータを構成するハードウェアとは何か考えてみましょう。 ・CPU ・メモリ ・ハードディスク ・グラフィックボード ・ネットワークボード ・サウンドカード 他にもありますが、一例として上記のようなものが挙げられます。 では、ソフトウェアとは何でしょう。 ・ワード ・エクセル ・アウトルック(メーラー) ・ウインドウズメディアプレイヤー など、他にもたくさんあります。 (「アプリケーション」と「ソフトウェア」という用語が乱立してしまっていますが、両者の意味は異なります。詳しくはこちら → 「アプリケーションとソフトウェアの違い」) ハードウェアはソフトウェアがないと何もできませんし、ソフトウェアはハードウェアがないとやはり何も出来ません。 持ちつ持たれつの関係が両者間であり、その両者を管理し結びつけているのがカーネルというわけです。 カーネルもプログラムであることには変わりありませんが、上記のとおりやってることが他と異なった特殊なプログラムであるということがわかると思います。

カーネルの役割

カーネルは、OSの中枢となるソフトウェアです。 システム全体のリソースを管理し、ハードウェア・ソフトウェア間のやりとりを管理します。 以前の記事でも紹介しましたが、カーネルが行っている動作は主に下記2つです。 ・アプリケーションからの要求(システムコール)に応える ・ハードウェアからの応答をアプリケーションに伝える 上図のようにカーネルはアプリケーションとハードウェアの中間に位置し、アプリケーション、およびハードウェアからの要求があれば、何らかの動作を行います。 カーネルを中間の位置に置くことによるメリットは大きいです。 もしカーネルがなければアプリケーションがハードウェアを直接制御することになります。 世の中には無数のハードウェアが市場に出回っていますので、これは非常に非現実的です。 例えば、ワープロソフトで作成したドキュメントをプリンタで印刷したい場合、プリンタメーカーはたくさんありますし、機種も様々に存在しているので、ワープロソフトがそれら全てのプリンタに対応させるのは、とんでもなく大変です。 しかし、カーネルが間に入ることで、カーネルがプリンタ機種による差を吸収してくれるので、ワープロソフトは接続されているプリンタの機種を気にする必要がなくなります。 そして何より、カーネルは「システムの保護」という観点で大いに活躍してくれています。 アプリケーションにはバグはつきものです。 バグが与える影響範囲がそのアプリケーション内で収まれば良いのですが、ほかのアプリケーションにも影響を与えたり、最悪システム全体が落ちてしまうという事態も十分に考えれられます。 カーネルは、アプリケーションのバグ、あるいは悪意のある動作からシステムを守り、全体の安全性を向上に大いに貢献してくれているというわけです。