システムソフトウェア

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

システムソフトウェア: System Software: Systems Software)またはシステムプログラムは、コンピュータハードウェア管理や制御などを行うソフトウェア全般を指す用語。対比語はアプリケーションソフトウェア(業務プログラム)。類似の用語には基本ソフトウェアシステム制御ソフトウェアなどがある。

一般的な例には、オペレーティングシステムデバイスドライバプログラミング言語処理系などがあるが、システムや観点にもより、その境界は明確ではない。

概要[編集]

通常、各アプリケーションプログラムを稼働させるための、よりシステム(ハードウェアなど)に近い、共通的なソフトウェア・プログラムが、システムソフトウェアと呼ばれている。しかしその範囲は、時代やシステムや観点によっても異なる。

初期のコンピューターや、一部の組み込み機器、専用機器などでは、アプリケーションプログラムとシステムソフトウェアは明確に分離されていない。オペレーティングシステムが登場した後でも、当初はユーザーインターフェースマルチタスク、ネットワーク、ライブラリなどの機能は、アプリケーションプログラムの領域であった。

現在のオペレーティングシステムでも、付属するゲームなどは製品上はオペレーティングシステムの一部だが、技術的にはアプリケーションプログラムである。狭義にはオペレーティングシステムの中でもカーネルがシステムプログラムとされるが、ユーザーインターフェースである各種シェルや、ネットワーク機能なども含める場合もある。また個々のハードウェア用のドライバーは、オペレーティングシステムに付属する場合、ハードウェアまたはアプリケーションソフトウェアに付属する場合、単体販売される場合もある。更にミドルウェアが存在する場合は、オペレーティングシステムの観点からはアプリケーションプログラムの一種であるが、ミドルウェア上のアプリケーションプログラム(ユーザープログラム)の観点からはミドルウェア自体も一種のシステムプログラムである。同様に各種のユーティリティソフトウェアも、オペレーティングシステムから見れば単なるアプリケーションソフトウェアだが、ユーザー(人間)から見ればシステム制御系のものも存在している。

マイクロソフト社に対する独占禁止法訴訟では、ウェブブラウザ(Internet Explorer)がオペレーティングシステム(Microsoft Windows)の一部かどうか、分離不可能かどうかが議論となった。

システムプログラミング[編集]

システムプログラミング: System programming)は、システムソフトウェアのプログラミングを指す。以下では、オペレーティングシステムやデバイスドライバの開発におけるシステムプログラミングについて述べる。アプリケーションソフトウェアのプログラミングとの主な違いは、ハードウェアとの関わりが大きい点である。他にも以下のような特徴がある。

システムプログラミングはアプリケーションプログラミングとかなり異なるため、プログラマはそれぞれの領域に特化する傾向がある。 高い実行効率が求められるため、プログラマーにはアルゴリズムとデータ構造に関する深い知識が要求されることもあるが、資源の制約などで高度なアルゴリズムやデータ構造が使えないという縛りの下でのプログラミングが必要なこともある。

システムプログラミングでは、プログラミングに利用できる道具が制限されることが多い。ガベージコレクションは一般的ではないし、デバッグが困難な場合もある。ランタイムライブラリはあったとしても貧弱で、あまりエラーチェックをしない。このような制限があるため、モニタリングデータロギングといった技法が使われることが多い。オペレーティングシステム(特にカーネル)はそのようなロギングを多用している。

古くは、システムプログラマは例外なくアセンブリ言語を使っていた。高水準言語をシステムソフトウェアに使った初期のものとしては、バロース B5000ALGOLMulticsPL/Iがある。1960年代後半から、BLISSBCPLC言語などが使われるようになり、UNIXの普及もあって1980年代にはそれが一般化した。macOSI/O Kitドライバなどでは、Embedded C++ が使われることもある。

21世紀に入ると、セキュリティの重要性が否応にも増していることから、型システムによってより強い安全性が保証されたプログラミング言語でシステムソフトウェアを書くことも、研究レベルでは進んでいる。

オペレーティングシステムやネットワーク関連の実装ではシステムプログラミングが必要となる(例えば、仮想記憶を実装する場合やデバイスドライバを実装する場合など)。

関連項目[編集]

脚注[編集]

外部リンク[編集]