オペレーティングシステム
出典: フリー百科事典『ウィキペディア(Wikipedia)』
オペレーティングシステム (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
- Human68k
- IBM-DOS
- Lisa OS(Mac OSの前身)
- Linux ( → UNIX > Linux)
- Mach
- Mac OS
- Microsoft Windows
- MINIX
- Mona
- MS-DOS
- MSX-DOS
- MVS
- NewtonOS
- NeXT
- OpenVMS
- OSASK
- OS/2、eComStation
- OS/360
- OS-9、OS-9000
- OSF/1
- HI-OSF/1-MJ
- HI-UX/MPP
- PalmOS
- Plan9
- QNX
- Rhapsody(Mac OS X Server/ Mac OS Xの前身)
- Smalight OS
- Smalltalk(XEROX Alto用OS)
- Symbian OS
- TownsOS
- TRON
- UNIX
- AIX
- BSD
- IRIX
- Tru64 UNIX
- Linux
- Red Hat Enterprise Linux
- Fedora Core
- Debian
- Mk-Linux(MicroKernel-Linux)
- Linux-PPC(Linux for PowerPC Macintosh)
- TurboLinux
- Linspire
- Vine Linux
- LynxOS
- SystemV
- 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が複数販売された。
[編集] 関連項目
カテゴリ: ソフトウェア | オペレーティングシステム | コンピュータの仕組み