読み込み中...オペレーティングシステム (Operating System, OS) は、コンピュータにおいて、ハードウェアを抽象化したインターフェースをアプリケーションソフトウェアに提供するソフトウェアであり、基本ソフトウェアの一種である。なお、OSのGUIフロントエンドであるオペレーティング環境についてもここで扱う。
広義のOSには、ウィンドウシステムやデータベース管理システム (DBMS) などのミドルウェア、ファイル管理ソフトウェアやエディタや各種設定ツールなどのユーティリティ(これらはいずれも基本ソフトウェア)、基本的なアプリケーションソフトウェア(ウェブブラウザや時計などのアクセサリ)を含むことがある。一般的に「オペレーティングシステム」という場合はこちらを指すことが多い。
現在に至る統合環境と平易なユーザインタフェースを意識する傾向は、Mac OSやMicrosoft Windowsの登場で鮮明となった。このため、Mac OS以降の近年のOSとMS-DOSなどの初期のOSは分けて扱われることが多い。
OSの中で、ハードウェアを直接管理操作するなどの最も中心的な機能の部分を、特にカーネルと呼んで分けることもある。この場合、カーネル以外の部分(シェルなど)はユーザーランドと呼ばれる。また、カーネルとユーザーランドではCPUモードやアドレス空間が異なっている。
ちなみにオペレーティングシステムは完全な一般名詞だが、“OS”は本来IBMの商標である。
OSの主な目的は3つある。すなわち、ハードウェアの抽象化、リソースの管理、そしてコンピュータ利用効率の向上である。
OSはアプリケーションソフトウェアを動作させるのが第一の目的である。このためのインターフェースがAPI(アプリケーションプログラミング・インタフェース)とABI(アプリケーションバイナリ・インタフェース)である。カーネルはシステムコールによってアプリケーションにサービスを提供する。さらに基本ライブラリも含めた形でアプリケーションに対してAPI/ABIを提供する。アプリケーションによってはOS上のミドルウェアやアプリケーションフレームワークなどをAPIとして使用する場合もある。
APIはプログラミングのためのインターフェースであり、プログラムを作成する際の規則を構成する。例えば、C言語での関数やFORTRAN/Pascalなどのライブラリ呼び出しといったものがそれにあたる。
一方、ABIはコンパイルされたソフトウェアがOSの機能を呼び出す際のインタフェースであり、プロセスが動作する際の規則を構成する。例えば、UNIX系のOSはAPIがほとんど共通だが、ABIはOSによって異なるOSの垣根を越えたABIもいくつか存在する。例えば、OCMP (Open Computing Environment for MIPS Platform) というMIPS系チップを使用したUNIX機によるバイナリ共通インタフェースが日本電気やソニー、住友電気工業、日本タンデム・コンピュータなどにより定義され、その定義に沿ったUNIX-OSが複数販売された。。従って、同じCPUを使ったシステムであっても、ABIが異なれば実行ファイルが異なる。ABIには、エンディアン、実行ファイルの形式、システムコールの具体的な方法、コールスタックの使い方などが含まれる。
コンピュータ上の各動作はバックグラウンドであっても一般のアプリケーションであっても、内部的にはプロセスとして動作する。DOSのような古いOSは一度に1つのプロセスしか実行できない。最近のOSは一度に複数のプロセスを動作させることができる(マルチタスク)。プロセス管理は複数のプロセスを実行するためにOSが行う処理である。プロセッサを1つだけ持つ一般的なコンピュータでは、マルチタスクは高速にプロセスからプロセスへ切り替えを行うことで実現される。ユーザーがより多くのプロセスを実行すれば、個々のプロセスに割り当てられる時間は少なくなっていく。多くのシステムでは、これが音声の途切れやマウスカーソルの奇妙な動作などを引き起こす。一般的なプロセス管理は、プロセスごとに優先度を与え、それによって配分される時間を決めている。
パーキンソンの法則によると、「メモリを拡張するとプログラムはそれに伴って拡大する」という。プログラマーは無限の容量と無限の速度のメモリを理想としている。コンピュータのメモリは階層構造になっていて、最も高速なレジスタから、キャッシュメモリ、RAM、最も低速なディスク装置がある。OS内のメモリ管理部はこのようなメモリを管理するもので、利用可能な部分、割り当てと解放、主記憶と二次記憶との間でのスワップなどを制御する。
OSはその歴史や用途に応じて様々のファイルシステムを備えている。
現在主流のOSにおいては、ほとんど全てのファイルシステムはディレクトリによる階層構造を持つ。これは、Multicsを起源とするものであり、メインフレームのOSではディレクトリを持たないものもある。また、ディレクトリ名とファイル名の区切り記号、ファイルの命名規則などはシステムによって異なる。
Linuxを元プラットフォームとして開発されたものにはext2、ext3、ReiserFSなどがある。また、他のプラットフォームからXFS、JFS、FATファイルシステムなどが移植され、NTFSも不十分ながら読み書きが可能である。
Macintoshではまず最初にMacintosh File System (MFS) が実装されたが、ディレクトリ機能を備えていなかったためファイルブラウザFinderでフォルダをエミュレーションしていた。その後Hierarchical File System (HFS) でディレクトリ機能を実装し、現在は改良を加えたHFS+が採用されている。現在Mac OS Xで読み書きが可能なものはHFS、HFS+、UNIX File System (UFS)、FATとなる。なおUFSの使用は一般でなく、FATへの対応は他プラットフォームとのデータ交換に用いられる。NTFSは読み込みのみが可能であり、書き込みについてはCommon Internet File System (CIFS) によるネットワークを介したものに限られる。
Windowsが標準で扱えるファイルシステムは、FAT、FAT32、NTFSNT系のWindowsではNT3.51まではOS/2標準のHPFSにアクセス可能であった。である。現在Windows上ではNTFSが最も信頼性と効率が高いものとして一般的に利用される。FATはMS-DOSから採用される古いファイルシステムであるが、パーティションやファイルサイズに制限があり、大容量化したハードディスクではあまり用いられない。
MacintoshからWindows等へファイルを転送すると、転送先のWindows側に本体とは別のファイルが出現することがある。これはHFSやHFS+のみがサポートするリソースフォークと呼ばれるデータ構造によるもので、Macintoshではそれらを一元的に管理を行うため一つの書類に見える。このように幾つものフォークを一つのデータに格納することをマルチフォークと呼び、もとのデータを改変することなくOS独自の管理情報を容易に付与できる機能だが、実質的にMacintoshでしか利用できない。
ジャーナルファイルシステムが最もよく採用される機構であり、その他にもZFSのように書き込み操作をトランザクションとして扱うものもある。これらを用いることで、障害復旧時のチェックを大幅に短縮する、または完全に不要にする。一方これらの機構を持たないファイルシステムでは、ファイルシステムの整合性を保つためストレージ全体を検査する必要がある。
多くのOSはTCP/IPプロトコルをサポートしている。歴史的に見れば、初期のコンピュータネットワークはモデムを使って電話回線で行われていた(BSC手順など)。その後、パケット通信が使われるようになり、IBMのSNAなどの各社独自のネットワークアーキテクチャが登場した。現在では、TCP/IPを中心とした通信が主流となっている。
通信プロトコルは、トランスポート層まではカーネル内モジュールとして実装し、プレゼンテーション層より上はシステムプロセスとして実装されるのが一般的である。セッション層の実装はシステムによって異なる。
最近のOSは一般に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でもドライバだけ置き換えればハードウェアを制御可能となる。
1950年代、OSという概念が登場し始めた。初期のコンピュータはOSを持たなかった。しかし、システム管理用ソフトウェアツールやハードウェアの使用を簡素化するツールはすぐに出現し、徐々にその利用範囲を拡大していった。最初のOSは、IBM 701用にゼネラルモーターズが開発したもの、IBM 704用にゼネラルモーターズとノースアメリカン航空が共同開発したもの等、多くの候補があるが、どういった機能が搭載された時点でOSと呼ぶかによる。この時代のものをOSとは呼ばない場合もある。
当時は、パンチカード等から入力されたプログラムを磁気テープに一旦保存し、その磁気テープを大型コンピュータに接続後、プログラムをロードして実行していた。そのため、入出力装置のドライバに当たるものが作成されていた。また、アセンブラやコンパイラが登場し始めた時代なので、コンパイラをロードしてからプログラムをロードし、コンパイル結果として出力されたアセンブリ言語をアセンブルするために、さらにアセンブラをロードするといった手続きが必要だった。こうした作業を自動化するバッチ処理がOSの機能として実現されていた。また、プロセスの状態を監視するモニタも実装されていた。
1960年代前半、OS機能の増強が進められた。スプール、ジョブ管理、記憶保護、マルチプログラミング、タイムシェアリングシステム、そして、仮想記憶の概念が登場し始めた。これらの概念を複数搭載するOSも登場していた。また、マルチプロセッシングシステムに対応するOSもあった。
1964年に発売されたIBM System/360シリーズに搭載されたOS/360の登場を皮切りとして、1960年代後半、OSは著しい進化を遂げていった。IBMのメインフレームであるシステム/360シリーズは非常に幅広い性能/容量と価格帯をカバーするもので、それを単一のOSであるOS/360でカバーするよう設計されていた(従来は機種ごとに専用の制御ソフトが付属し、機種ごとのプログラミングを必要とした)。このような全製品ラインを一つのOSでまかなうというコンセプトは、システム/360の成功を決定づけた。実際、現在のIBMのメインフレーム上のOS(z/OSなど)は、そのオリジナルのOSの系統を受け継いでおり、OS/360向けのアプリケーションは最新のマシンでもバイナリー上位互換で動作する。OS/360は他にもハードディスクドライブの登場という、重要な進歩に対応していた。この頃のもうひとつの重要な進歩としてタイムシェアリングシステムの本格的な実用化がある。コンピュータの資源を複数のユーザーが並行的に使えるようにすることで、システムを有効利用するものである。タイムシェアリングは、各ユーザーに高価なマシンを独占しているかのような幻想を抱かせた。Multicsのタイムシェアリングシステムはその種のシステムの中でも特に有名である。さらに、後続のIBM System/370シリーズに搭載されたOS/VSでは、仮想記憶等の機能が実用機として初めて本格的に実現された。
Multics は1970年代の様々なOS、特にUNIXに影響を与えた。もうひとつのミニコンピュータ用OSとしてVMSが有名である。
初期のマイクロコンピュータはメインフレームやミニコンピュータのような精巧なOSを必要としていなかったし、それを搭載するだけの容量もなかった。そこで、必要最小限のOSが開発された。初期の特筆すべきOSとしてCP/Mがある。これは8ビットのマイクロコンピュータではよく使われ、その大雑把なクローンとしてMS-DOSが生まれた。MS-DOSはIBM PCのOSとして採用されたため、広く使われるようになった(IBM版は IBM-DOS または PC-DOSである)。その後継OSによってマイクロソフトは世界有数のソフトウェア企業となった。1980年代の他の流れとして、アップルコンピュータのMac OSがある。
1990年代までにパーソナルコンピュータのような小型のコンピュータは、拡張性の高いGUIとともに、メインフレーム用途のようなより大きなコンピュータ向けのOSが備える堅牢性と柔軟性が求められるようになっていた。1990年代には、パーソナルコンピュータがこのような要請に応えられるだけの性能に進化した。マイクロソフトはこの恩恵を享受できる製品の一つとしてWindows NTを開発した。Windows NTは1999年以降のマイクロソフト社の全OS製品のベースとなった。アップルは2001年、UNIXをベースとしたMac OS Xを新たにリリースした。
オープンソースの流れでは、GNUがUNIX向けのツール群を開発し、これらをLinuxカーネルと組み合わせたOSとしてのLinuxはUNIX系OSの主流となった。BSD系OSもUNIX系OSのシェアの一部を占めている。
組み込みシステムにより複雑な機能が求められるようになり、組み込みオペレーティングシステムの利用が盛んになっている。
オペレーティング環境とはOS上で動作するGUIフロントエンドのことである。主なオペレーティング環境にはMS-DOSから実行するMicrosoft Windows(バージョン3.0まで)やDR-DOS上で動作するGEM 、UNIX と Linux で使われる GNOME や KDE がある。
読み込み中...