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

出典: フリー百科事典『ウィキペディア(Wikipedia)』

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

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

現在に至る統合環境と平易なユーザインタフェースを意識する傾向は、Mac OSMicrosoft Windowsの登場で鮮明となった。このため、Mac OS以降の近年のOSとMS-DOSなどの初期のOSは分けて扱われることが多い。

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

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

目次

OSの目的

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

ハードウェアの抽象化
コンピュータごとに目的は同じでも製造元が異なるなどで、動作に微妙に差異があるハードウェアが搭載されていることが多い。そのようなハードウェアの統一的で単純化された利用方法を提供することで、アプリケーションソフトウェアの開発を容易にする。
リソースの管理
複数のアプリケーション・ソフトウェアを同時に利用する際に、互いに独立して動作できるように資源を管理する。プログラムからの資源要求に競合が起きた場合には、待たせる、エラーを返すなど、適切に対処する。
コンピュータの利用効率の向上
複数のタスクを同時に実行する際に、資源割り当ての順番や処理の割り当て時間を工夫することで、全体のスループットを向上させる。これはデスクトップ環境ではあまり恩恵を感じることはないが、ウェブサーバデータベースなど大量のアクセスをこなす用途などでは重要になる。

OSの機能

APIとABI

詳細は「Application Programming Interface」、「Application Binary Interface」をそれぞれ参照

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

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

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

プロセス管理

詳細は「プロセス管理」を参照

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

メモリ管理

詳細は「メモリ管理」を参照

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

ファイル・システム

詳細は「ファイルシステム」を参照

OSはその歴史や用途に応じて様々のファイルシステムを備えている。

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

代表例

Linuxを元プラットフォームとして開発されたものにはext2ext3ReiserFSなどがある。また、他のプラットフォームからXFSJFSFATファイルシステムなどが移植され、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、NTFS[2]である。現在Windows上ではNTFSが最も信頼性と効率が高いものとして一般的に利用される。FATはMS-DOSから採用される古いファイルシステムであるが、パーティションやファイルサイズに制限があり、大容量化したハードディスクではあまり用いられない。

プラットフォーム間の差異

FATはその仕様の制限から大容量のハードディスクには向かないが、その一方構造が単純でデジタルカメラ携帯電話などの組み込みシステム向けを含むさまざまなOSで読み書き可能なことから、各種メモリカードUSBメモリなどプラットフォームを跨ぐ用途においては主流である。なお、それらフラッシュディスクの大容量化に対応するため、マイクロソフトはFATを拡張したexFATというファイルシステムを発表している。[3]

MacintoshからWindows等へファイルを転送すると、転送先のWindows側に本体とは別のファイルが出現することがある。これはHFSやHFS+のみがサポートするリソースフォークと呼ばれるデータ構造によるもので、Macintoshではそれらを一元的に管理を行うため一つの書類に見える。このように幾つものフォークを一つのデータに格納することをマルチフォークと呼び、もとのデータを改変することなくOS独自の管理情報を容易に付与できる機能だが、実質的にMacintoshでしか利用できない。

障害への対応

ファイルシステムには、急な電源切断などによる障害へ対応する機構を持つものがある。 ジャーナルファイルシステムが最もよく採用される機構であり、その他にもZFSのように書き込み操作をトランザクションとして扱うものもある。これらを用いることで、障害復旧時のチェックを大幅に短縮する、または完全に不要にする。一方これらの機構を持たないファイルシステムでは、ファイルシステムの整合性を保つためストレージ全体を検査する必要がある。

ネットワーク

詳細は「コンピュータネットワーク」を参照

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

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

セキュリティ

詳細は「コンピュータセキュリティ」を参照

OSが関係するセキュリティ機能は、ユーザーがリソースへの何らかのアクセスを行う際に前もって認証し、そのユーザーのアクセスレベルを決定し、管理者の方針に基づいてアクセスを制限することである。


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

詳細は「グラフィカルユーザインタフェース」を参照

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

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以降ではメタルアピアランスが導入され、その後もバージョンアップのたびに少しずつ手が加えられている。また、Aquaとは別にX11も用意されている。

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

Linuxでは、GUIを提供するデスクトップ環境がいくつか存在する。Linuxで使えるGUIとして有名なものは、GNOMEKDEがある。

デバイスドライバ

詳細は「デバイスドライバ」を参照

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

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

OSの歴史

1950年代

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

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

1960年代

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

1960年代後半には、OSは著しい進化を遂げた。現在のOSの概念や基本部分(カーネル)の技術の大半は、この時期に完成された。

1964年のIBM System/360シリーズに搭載されたOS/360は世界初の商用OSとされ、単一のOSシリーズで幅広いモデル(性能、容量、価格帯)と周辺機器を稼働させ、更にハード・ディスク・ドライブをサポートし、本格的な(プリエンプティブな)マルチタスクを実現した。「オペレーティング・システム」という用語が一般化したのもOS/360からである。従来は機種ごとに専用の制御ソフトが付属し「機種が変わればプログラムは書き直し、周辺機器は買い直し」が常識であったが、OSがアプリケーションに一貫した上位互換のAPIを提供する事で、OS/360用に書かれたプログラムは40年以上経過した現在のz/OS上でもバイナリー互換で動作する。

この頃のもう1つの重要な進歩としてタイムシェアリングシステムの本格的な実用化がある。コンピュータの資源を複数のユーザーが並行的に使えるようにすることで、システムを有効利用するものである。タイムシェアリングは、各ユーザーに高価なマシンを独占しているかのような幻想を抱かせた。1965年のMulticsのタイムシェアリングシステムは特に有名である。更に1967年にはSystem/360用に、商用初の仮想化OS(仮想機械)であるCP-40とCP-67が登場し、1台のコンピュータで同時に複数のOSを稼働できるようになったが、これもタイムシェアリングの応用である。

また仮想記憶は1961年のバロース B5000が商用初とされ、1970年のIBM System/370シリーズ用のOS/VSで広く普及した。コンピュータの利用形態としてオンライントランザクション処理データベース処理が普及したのもこの頃である。

1970年代-1980年代前半

1970年代~1980年代前半は、多種多様な分散システムが普及した。ミニコンピュータ用OSとしてはVMSが有名である。Multicsは1970年代の様々なOS、UNIXなどに影響を与えた。UNIXはオープンシステムと呼ばれミニコンピュータからメインフレームまで広く普及した。

また1970年代には低価格なマイクロプロセッサが登場したが、初期のマイクロコンピュータはメインフレームやミニコンピュータのような大規模なOSを搭載する容量もなかったため、ディスク管理程度の必要最低限の機能しか持たないOSが開発された。初期の特筆すべきOSとしてCP/Mがあり、8ビットのマイクロコンピュータで良く使われた。その大雑把なクローン(複製)として16ビットIBM PC用にPC DOSが生まれ、そのOEM版であるMS-DOSが普及した。これらはOSの提供する機能が少なく、画面制御など多くの機能はアプリケーションが直接ハードウェアを操作する必要があったため、同じCPUを使用していてもハードウェア(機種)が異なると互換性も失われた。このMS-DOSと後継のMicrosoft Windowsによって、マイクロソフトは世界有数のソフトウェア企業となった。

なお1980年代の別の流れとして、GUIを標準装備したアップルコンピュータMacintoshがある。MacintoshのOS(Mac OS)は、当時の性能的制約から多くの部分がファームウェアの状態でハードウェアに組み込まれてはいたが、現在でいうウィジェット・ツールキットを含むToolboxと呼ばれるAPI群を持ち、アプリケーションのGUIのデザイン開発をある程度まで標準化した。

マイクロプロセッサの高性能化が進むと、業務用途のシステムでは、高機能な端末を大量に用意することが可能になり、UNIXをベースとしたクライアントサーバモデルが普及した。クライアント機であるワークステーションのOSとしてSunOSIBM AIXIRIXなどのUNIX系OSが用いられた。しかし、UNIX系OSはBSDSystem Vという2陣営に別れ、さらにUNIXの標準規格を巡ってUNIX戦争が勃発し、UNIX市場は大きなダメージを受けた。

1980年代後半-2000年代初頭

1980年代後半には、パソコンにも32ビット時代が到来し、1990年代に入ると、低価格なAT互換機でもメモリを十分に搭載すればPC-UNIXの利用が可能になりはじめた。当時のパソコンではOSとして最低限の機能しか持たないDOSが依然として使われており、GUIやネットワーク、マルチメディアに対応させるため、ベンダがDOSを様々な形で拡張したシステムソフトウェアウィンドウシステムを搭載するようにもなったが、これは互換性や信頼性など様々な点で問題を発生させていた。こうした問題を解決するため、堅牢な(プリエンプティブな)マルチタスク機能、オブジェクト指向API、GUIによるデスクトップ環境、ネットワーク機能の標準装備など従来のUNIX(互換)ワークステーション並みの機能がパソコンにも求められるようになってきた。こうしたOSは「次世代OS」「モダンOS」などと呼ばれた。

1987年にはIBMマイクロソフトが、パーソナルコンピュータ用に堅牢なマルチタスク機能、GUI(同年末の1.1より)、ネットワーク機能(拡張版)を装備したOS/2を発表した(32ビット対応は1992年の2.0より)。1988年に登場したNEXTSTEPは、業務用途に耐える堅牢性とオブジェクト指向による柔軟性、高度なグラフィックス機能と一貫したGUIといった、新世代のデスクトップOSで求められる機能を全て実現した。しかしこれらは当時のハードウェア性能では負荷が大きかったため広くは普及せず、代わりに軽量だが堅牢なマルチタスク機能は持たないMac OSやWindows3.x などのGUI環境が徐々に普及した。これらは当時の限られたハードウェアでも快適に動作したが、安定性や機能には劣るものであった。

1994年には、Windowsとしては初めて、32ビットに本格対応(カーネルの32ビット化)し、堅牢なマルチタスク機能を備えたWindows NTが登場したが、負荷や互換性の問題などから個人用途にはあまり普及せず、Windows3.xを拡張して次世代OSの機能を限定的に取り入れたWindows 9x系との並存が続いた。WindowsがWindows NTベースに一本化されたのは2001年Windows XPからであった。またアップルも同年、NEXTSTEPを発展させたMac OS Xを新たにリリース、従来のMac OSの後継となった。このころには低価格なパーソナルコンピュータでも、これらのOSの負荷を問題としないほどに高性能化し、オープンで低価格な分散コンピューティングを広めた(ダウンサイジング)。

2000年代中盤以降

2003年にはパソコンにも64ビット時代が到来、OSも64ビット化が進んだが、16ビット化や32ビット化の際と比較すると、OSの機能や役割に大きな変化はなかった。商用のパソコンOSを二分するWindowsとMac OS Xのいずれも、徐々に64ビットへの移行を進めている。Windowsは同一バージョンのOSで32ビット版と64ビット版の双方を提供しており、Mac OS Xは32ビットカーネルを維持したまま、一般プロセスに64ビット機能を持たせる道を選んだ。

オープンソースの流れでは、従来よりGNUUNIX向けのツール群を開発していたが、これらをLinuxカーネルと組み合わせたGNU/Linuxシステムが2000年頃よりUNIX系OSの主流となった。またBSD系OSもUNIX系OSのシェアの大きな部分を占めている。

一方、組み込みシステムにもより複雑な機能が求められるようになり、汎用OSをベースとした組み込みオペレーティング・システムが従来主流だったリアルタイムOSを置き換えつつある。BSDおよびLinuxやWindows、Symbian OSなどが幅広い用途に使われている。

1990年代以降のダウンサイジングの流れにより、業務用途でもオープンシステムやWindowsが主流となったが、信頼性・可用性を重視する用途には、現在でも専用OS(z/OSMSP/XSPVOS3ACOSなど)を搭載したメインフレームも使い分けられている。

OSの分類

タスク管理の特徴

応用分野

主要OS

詳細は「オペレーティングシステムの一覧」を参照

オペレーティング環境

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

デスクトップ環境」も参照

脚注

[ヘルプ]
  1. ^ OSの垣根を越えたABIもいくつか存在する。例えば、OCMP (Open Computing Environment for MIPS Platform) というMIPS系チップを使用したUNIX機によるバイナリ共通インタフェースが日本電気ソニー住友電気工業日本タンデム・コンピュータなどにより定義され、その定義に沿ったUNIX-OSが複数販売された。
  2. ^ NT系のWindowsではNT3.51まではOS/2標準のHPFSにアクセス可能であった。
  3. ^ Microsoft Corporation. "Extended FAT File System". 2007年10月20日 閲覧。

関連項目

今日は何の日(8月21日

もっと見る

「オペレーティング・システム」のQ&A