Web教材一覧ハードウェアとソフトウェアOS

ソフトウェアの体系とOS

キーワード

システムソフトウェア、基本ソフトウェア、OS、制御プログラム、カーネル、シェル、デバイスドライバ、ミドルウェア、応用ソフトウェア、ユーティリティプログラム、プラグインソフトウェア、ブートストラップ、BIOS、ブートローダ、起動ドライブ、UEFI、マルチブート、VM、仮想マシン


ソフトウェアの体系

ソフトウェアを区分するのには多様な観点がありますが,ハードウェアに密着しているか,それとも人間の利用分野に近いかにより区分すると次のようになります。また,これらの体系も厳密なものではなく,人により解釈も異なりますし,どちらにも属するようなソフトウェアもあります。

 ソフトウェア
 ├ システムソフトウェア
 │ ├ 基本ソフトウェア
 │ │ │(オペレーティングシステム:OS)
 │ │ ├ 制御プログラム(カーネル)
 │ │ │  └ デバイスドライバ(周辺機器メーカー提供)
 │ │ ├ 言語プロセッサ
 │ │ └ ユーティリティプログラム
 │ │
 │ └ ミドルウェア
 │
 └ 応用ソフトウェア(アプリケーションプログラム)
   ├ 共通応用ソフトウェア(いわゆる市販アプリ)
   │ └ プラグインソフトウェア
   │ 
   └ 個別応用ソフトウェア(通常は自社特有のシステム)

この体系の境界はあいまいな点があります。OSは、汎用コンピュータ時代に確立した概念です。当時はIBMが圧倒的な立場にあり、IBMによる概念やプロトコルが業界標準として受け入れられていたので、比較的明確だったのですが、現在では多数の企業や団体が林立しています。そのため、ユーティリティプログラムと応用ソフトウェアの区分は分からなってきました。OSの分野まで関係しているミドルウェアもあります。

OS(オペレーティングシステム)

現在の代表的なOSには Windows、MacOS、UNIX、Linux などがあります。汎用コンピュータのOSではMVSやVSE(いずれもIBM)などがあります。
 その他、スマートフォン用、組込みシステム用など限定した分野に特化したOSがありますが、ここでは対象外とします。

OSは人間社会での執事や番頭(古い!)のような役割です。主人の指示を一元的に聞いて、いくつかの仕事に分解し、それぞれに適した部下に適切な指示を与えて実行させて監視し、その状況や結果をまとめて主人に報告します。また、主人の意向に適切に応えられるように、部下の訓練や適切な設備や器具、体制の整備などを行います。
すなわち、OSとは利用者とコンピュータとの間にあって、コンピュータシステム全体を統括するソフトウェアです。

OSの目的として、次のようなことがあげられます。

OSには広義と狭義の解釈があります。広義には基本ソフトウエアとしての解釈で、制御プログラム、言語プロセッサ、ユーティリティプログラムを含みます。狭義には制御プログラムのことです。

言語プロセッサ
言語プロセッサとは、C言語やJavaなどのプログラミング言語で記述したソースプログラムをコンピュータが処理できる機械語に翻訳することです。
汎用コンピュータ時代ではOSの機能でしたが、現在では言語開発者が個別に提供していることがむしろ通常になっています。しかし、機械語(命令セット)はOSにより異なるので、それに準拠した言語プロセッサしか利用できません。
プログラム翻訳機能
ユーティリティプログラム(サービスプログラム)
応用プログラムのように特定業務を処理するのではなく、テキストエディタや媒体間でのデータ交換など基本的かつ共通な処理を目的とした単独で使用可能なプログラムのことです。
汎用コンピュータ時代では、OSに標準搭載して提供されていました、近年ではOSと分離した有料・無料のアプリとして提供されることが多くなっています。

カーネルとシェル

制御プログラムは、中核な部分でありカーネル(kernel)といいます。
 応用ソフトウェアやミドルウェアとOSの間の連絡は、直接カーネルが対応できますが、人間からの指示はGUIやコマンドプロンプトなどで行われるので、それをカーネルに伝えるには通訳(インターフェース)が必要になります。そのインターフェースをするプログラムのことをシェル(shell)といいます。

OS以外のソフトウェア

応用ソフトウェア(アプリケーションプログラム)

共通応用プログラムとは、オフィスツール、Webブラウザ、給与計算パッケージなどのように、不特定の個人や企業を対象にしたプログラムです。市販アプリ(無料のものもある)といわれるものです。
それに対して個別応用ソフトウェアとは、自作か外注かに関係なく、個人や企業が自己利用を前提として作成したプログラムです。

API(Application Programming Interface)

APIとは、応用ソフトウェアなどからOS機能を使うときの呼び出し手順や、記述方法を定めた仕様のことです。
 OS機能を呼び出すにはシステムコールがありますが、APIのよりシステムコール以外の機能を利用することができます。

プログラムからOS機能を利用する記述方法を標準化したことで、プログラムの開発が容易になりました。また、APIの仕様が同じならば、同じプログラムを異なるOSでも動作します。
APIは発展して、応用ソフトウェアがそれを利用するためにインターフェースを公開して、他の応用ソフトウェアから使える機能になっています。

プラグインソフトウェア(アドオンソフトウェア)

WebブラウザやPDFなど広く使われている応用ソフトウェアの機能を追加する小さなプログラムです。単独では動作せず,応用プログラムに組み込むことによって動作します。

プラグインソフトウェアが充実していることが、元ソフトウェアの付加価値を高めます。また、第三者提供のプラグインソフトウェアでは、元ソフトウェアは人気の高い定番ソフトです。
 例えば、PDFファイルは、アドビシステムズが開発したファイルフォーマットですが、それを取り扱うAcrobatに豊富なプラグインソフトウェアが提供され普及したため、このファイル仕様がISO規格になりました。  近年は、OSS(オープンソースソフトウェア)が注目されています。ソースコードを公開しているので、アドオンソフトの開発が容易です。むしろ、著名なOSS(Linux Firefoxなど)は、プラグインソフトウェアに支えられて広く使われるようになったともいえます。

プラグインソフトウェアは、元ソフトウェア作成者から提供されるものと第三者が作成提供するものがあります。前者の場合は、元ソフトウェアの拡張版として、バージョンアップなどの際に選択してインストールするのが通常です。後者の場合は、オンラインソフトや雑誌の付録DVDなどで提供されるのが通常です。

第三者提供のプラグインソフトウェアを利用する場合、ウイルスなどの悪意コードが含まれていることがありますので、定番になっているソフトを信頼のあるサイトから入手することが肝要です。
 また、あまりにも多くのプラグインソフトウェアをインストールすると、元ソフトウェアの動作が重くなることがあります。状況に応じて削除するなど管理する必要があります。

インストーラ

アプリケーションプログラムをパソコンに導入して使えるようにするソフトウェアです。
 OSにある汎用のインストーラでインストールできるアプリケーションプログラムもありますが、そうでない場合は、個別のインストーラがアプリケーションパッケージに付属する実行可能ファイルなどの形で提供されます。
 通常は、インストーラを起動すると、ウィザード(wizard)という対話方式の画面が表示され、関係するファイルをコピーするストレージ内の位置、導入するソフトウエアや機能の選択、既存のシステム設定の変更内容などを行います。

なお、インストールしたアプリケーションを削除して、システム設定などをインストール前の状態に戻すソフトウェアをアンインストーラといいます。インストーラと対になって提供されます。

ミドルウェア

OSと応用ソフトウェアの間で機能し、共通したインタフェース利用方法や統一的なコンピュータ機能の利用を応用ソフトウェアの要求に従って提供するソフトウェアです。

異なる機種や応用ソフトウェアの違いを吸収し、移植性や相互接続性を高めることにより、OSの基本機能を広く共通して使えるようにしたものです。
通信制御やデータベース管理など多様な局面で、OSS(オープンソースソフトウェア)のミドルウェアが提供されています。

デバイスドライバ

PCに接続された周辺装置と,OSやアプリケーションソフトを仲介して,周辺装置を直接に制御・操作するソフトウェアです。

周辺装置は製品ごとに特徴があります。OSは標準的な制御方式を提供しますが、製品ごとの機能をOSに持たせることはできません。それで、OSと周辺機器の間に、それぞれの機器専用の制御ソフトウェア(デバイスドライバ)が必要になります。
デバイスドライバは、一般に周辺機器メーカーから提供され,最初にその機器を接続するときにインストールします。なお、普及している機器については、事前にOSにデバイスドライバが登録されています。OSがもつデバイスマネージャがデバイスドライバの登録/管理をしています。

デバイスドライバは個々の機器に対応しています。同一機種が複数台あるとき、どちらも同じデバイスドライバなのですが、別々にインストールする必要があります。
 通常は、機器に一意のシリアルナンバーが割り当てられており、OSは別機器だと認識するので、通常の手続きでインストールできますし、自動的にデバイスドライバをコピーすることもあります。
 また、プリンタが機種に関係なく複数台ある場合は、印刷オプションで機器選択画面が表示されます。これはデバイスドライバとOSの連携によるものです。

デバイスドライバは、OSが提供する標準インタフェースであるAPIを介して連携します。OS配下で一種のプラグインソフトウェアとして動作するので、OSの大きなバージョンアップや異なるOSへの移行をしたとき(APIの仕様が変わるとき)は、従来のデバイスドライバでは周辺機器の動作は保証できません。新OSに合致するデバイスドライバをインストールする必要があります。通常は、メーカのWebサイトに対応OSのリストがあり、ダウンロードできます。
 逆に、周辺機器メーカーがデバイスドライバのバージョンアップをしても、現OSのAPIに準拠することをメーカーが保証しているのですから、OSを修正する必要はありません。

(補)ファームウェア

ファームウェアとは、ハードウェアに内蔵されたROM回路で、ハードウェアを制御するものです。

ハードウェアですから書き換えることはできません。また、電源を切っても出荷時の状態が保持されています。その特徴から、電源を入れたときにすぐ起動する処理に向いています。本章の関係では、BIOSやUEFIがファームウェアです。


OSの制御プログラム(カーネル)

カーネルは多様な管理機能をもっています。これらの分類や名称はOSにより異なりますし、なかにはOSとしてはもっていないものもあります。
 これらの機能を全てOS自体が実現するのではありません。大部分はそれに特化した多数のプログラムが行い、OSはそれらの基本となる要素機能を提供する位置づけになります。
 本節では各管理機能の概要を示し、それらの詳細は「参照」で示す各ページで記述します。

ジョブ管理、タスク管理

主として、スケジュールに関する分野の管理です。

ジョブ管理
ジョブとは人間から見たコンピュータが行う一つのまとまった仕事の単位です。
ジョブは、いくつかの処理(プログラム)を連続して実行しますが、その個々の処理をジョブステップといいます。
  • コンピュータには多数のジョブが投入されます。それをマルチジョブといいます。ジョブのなかには、先行・後続の順序関係のるジョブ、優先度の高いジョブ、完了時間が指定されているジョブもあります。ジョブの受付け、スケジューリング、ジョブの起動などを行ないます。
タスク管理(プロセス管理)
タスク(プロセス)とはコンピュータから見た処理単位です。
コンピュータの観点からは、ジョブ(ジョブステップ)は、CPU処理や入出力処理に細分化できます。その細分化した処理をタスクといいます。
参照:「ジョブとタスク」
  • タスクは「実行可能状態」「実行状態」「実行待ち状態」の状態を繰り返しながら実行されます。
    参照:状態遷移図
  • 多数のジョブを効率的に行うには、あるジョブが入出力処理をしている間に、他のジョブのCPU処理を行うなどの工夫が必要になります。
    ジョブ管理に関係しますが、複数のタスクから実行すべきタスクの選択(スケジューリング)が重要です。
    あるタスクが長時間CPUを占有すると他のタスクの開始が遅れるので、CPU処理時間を細切れにするなどの工夫が必要です。 参照:タスク管理
  • 同時に複数のタスクが同一データを更新しようとすると正しい結果にならない(一貫性が保たれない)ので、一方のタスク実行を遅らせる排他制御が必要になります。
    参照:排他制御

データ管理、記憶管理

データ管理(ファイル管理)
大きくファイルのレベルでの管理とファイルを構成するレコードや項目のレベルでの管理がありますが、前者が中心になります。
補助記憶装置へのアクセスを装置に依存しないインタフェースで応用プログラムに提供することが主目的になります。
  • 多数のファイルをまとめてフォルダにしますが、このような論理的な構成をディレクトリといいます。それにはファイル名、サイズ、識別子なども入っています。
    参照:ディレクトリ
  • 個々のファイルが存在する媒体(補助記憶装置)とそこでの格納位置(物理的位置)とディレクトリとの対応を管理します。
  • それにより、応用プログラムからは媒体の違いに関係なくファイル名を指定するだけで同じアクセス方法で読んだり書いたりできます。
    また、ファイルの参照・更新・削除などの設定によるファイル保護機能もあります。
    参照:ファイル管理システム
  • 順編成や直接編成などファイルの構造やアクセス方法などを提供します。
    参照:ファイル編成
  • ファイルを構成するレコードには固定長と可変長があります。
    レコードはさらにいくつかの項目(フィールド)からなっています。
記憶管理
実記憶(メモリ)の管理は、実記憶の管理、実記憶とCPUとの関係、実記憶と補助記憶との関係(仮想記憶方式)などがあります。
  • 実記憶(メモリ)の記憶領域管理方式(固定区画方式,可変区画方式など)
  • タスクの実行に際して、メモリ領域の確保、OSや他タスクのメモリ領域保護などのメモリ領域管理
  • 主記憶の効率を高めるためのデフラグメンテーションやガベッジコレクション
    参照:メモリの確保と解放
  • 演算装置からアクセスするデータの実記憶格納場所を指定するアドレッシング
    参照:アドレス指定方式
  • CPUでの演算速度とCPUと実記憶の間の転送速度のギャップを解消するキャッシュメモリ
    参照:記憶階層とキャッシュメモリ
  • 実記憶容量の制約を解消するための仮想記憶方式
    参照:仮想記憶方式

入出力管理、通信管理

入出力管理(デバイス管理)
データ管理の指示により、物理的に周辺装置との入出力を行うための管理です。
  • 入出力終了時にタスク管理のスケジューラに割込みをします。
  • 周辺装置の特性に合致したチャネル制御などの入出力制御方式があります。
  • データ転送の効率化のために、バッファリングを行います。
    プリンタ印刷などにはスプールをします。
参照:入出力制御方式
通信管理(ネットワーク制御)
入出力管理が入出力装置を管理するように、ネットワーク制御はネットワークアダプタやLANカードなどのネットワーク用の装置を制御します。
  • LAN、TCP/IPなどのプロトコルの構築に必要な機能を提供します。
  • ネットワークOS、リアルタイムOSなど、用途に特化したOSがあります。

その他の管理

運用管理、ユーザ管理、障害管理、セキュリティ管理がありますが、これらは互いに密接な関連があり、その境界は必ずしも明確ではありません。また、これらの機能の多くは、それに特化した標準的なプロトコルで規定され、それらとOSの制御プログラムとの境界も明確ではありません。

運用管理
システムの運用に関する容易性や柔軟性を実現する機能です。他の3機能の統合機能だともいえます。
運用管理特有なものとして、次のようなものあります。
  • OSの起動と終了、OSの異常検出と再起動、OSのバージョンアップなど
  • コンピュータの動作状況の確認、省電力モードの設定などコンピュータ本体の管理
  • 周辺機器の動作確認
ユーザ管理
コンピュータ利用の権限に関する分野です。
  • ユーザはアカウントで認識されます。アカウントには、OSの全機能を使える管理者権限をもつ特権ユーザ(スーパユーザ)と、それ以外の一般ユーザに分けられます。
  • アカウントの作成,パスワードの設定や変更の方法とその一元管理(ディレクトリサービス)を行います。
  • ユーザのファイルアクセス権限管理(データ管理やセキュリティ管理と関連)
障害管理
障害の検出と自動訂正、障害回復と再構成などの分野とシステムの多重化やファイルのバックアップなどの分野なdがあります。
  • 基本的な機能は、ユーティリティプログラムとして提供されます。
    OSの異常検出と再起動、ディスクのスキャンなどメモリの
  • ハードウェアの多重化、ソフトウェアのバックアップなどの機能は、OSというより、それぞれの管理システムで実現します。
セキュリティ管理
アクセス制御やファイル保護などユーザ管理や障害管理と密接に関係しています。セキュリティ管理に特有な分野に不正侵入防止や暗号化・認証がありますが、OSの機能ではなく、ファイアウォールやPKIとして実装されます。

ブートストラップ(OSの起動)

パソコンの電源を入れてから、OSが起動して利用可能になるまでの処理をブートストラップ(bootstrap)またはブートといいます。
 「電源投入」→「BIOS(注)」→「ブートローダ」→「OS」の順序でブートストラップが行われます。

(注)これまでBIOS(Basic Input Output System)が広く使われていたのですが、最近は、代わりUEFI(Basic Input Output System)によるUEFI・BIOSが主流になっています。ここでは、BIOSによるブートストラップを対象にしますが、このような基本動作はUEFI・BIOSでもほぼ同じです。

電源投入

パソコンに電源を入れると、マザーボードのコネクタがそれをキャッチして、パソコンの電源ユニットであるATX(Advanced Technology eXtended)電源に信号が送られます。
 ATX電源は、パソコンの各部に給電を開始します。それが安定するとクロックが動き出し、CPUが稼働状態になります。
 CPUは、すぐにBIOSを実行します。

BIOS(Basic Input Output System)

BIOSのプログラムは、電源が切れても内容が消えない(非揮発性)の半導体メモリROMあるいはフラッシュメモリに記録されたファームウエアで、マザーボードに配置されています。パソコンに電源が入ると、このプログラムが自動的に起動します。

BIOSは、主に次の処理を行います。

接続機器の確認

接続されている周辺機器(ディスプレイ、キーボード、メモリ、マウス、HDDなど) をチェックして、正常にパソコンが起動できることを確認し初期化します。これをPOST(Power On Self Test)といいます。
 最初に確認するのはディスプレイです。これは利用者がOSが起動するまでのパソコンの動作を表示するためです。パソコンにトラブルが起こったとき、OS起動前に特定のキーを押して設定状況を調べるとか、OSをセーフモードで起動するなどに必要です。

起動ドライブの確認

ブートローダはソフトウェアで、それを格納しているドライブ(通常はCドライブ)を起動ドライブ(ブートドライブ)といいます。
 パソコンやOSを購入したとき、まず起動用のファイルをUSBメモリなどに作成するよう求められます(あるいはCR-ROMが同梱されている)が、後日OSが移動しないトラブルが発生したときの対策のためです。

各デバイス(ドライブ)の先頭セクタをMBR(Master Boot Record)といいます。起動ドライブにはMBRにブートローダをもっていることが記録されています。

BIOSは、各ドライブを順に調べ、最初にブートローダが見つかったドライブを起動ドライブとします。
 確認順序は、一般的には光ディスクやUSBメモリ>HDDの順ですが、この順序はパソコン起動時に変更できます(注)。
 ブートローダは、通常は内蔵HDDのCドライブにあります。あえて後にしている理由は、トラブル発生時にはあらかじめブートローダ(起動用のファイル)を保存しておいた復旧用のUSBメモリなどを起動ドライブにするため、それを先に確認させたいからです。

(注)BIOSはROMですので、外部から変更はできません。厳密には、CMOSという揮発性素子による回路がマザーボードにあり、電源投入時にBIOSの確認情報などがCMOSにコピーされます。そして、BIOSはCMOSから順序情報を受け取り確認作業を行います。そのCMOSの情報を外部から一時的に変更できるということです。
 

ブートローダの起動

BIOSは、起動ドライブのMBR(先頭セクタ)をメモリの固定位置にロードし起動します。
 ここからは、ブートローダに制御が移ります。

ブートローダ

BIOSにより起動されたブートローダは、次の2つのステップにより、OSを起動するための各種処理を実行します。

ブートローダの読込

MBRは1セクタしかないので、すべての処理プログラムを入れることができません。プライマリ部分(Boot Strap Loader)であるだけが格納されており、それからブートローダ本体をメモリに読み込まれます。

IPLの実行

ブートローダの主要な内容はIPL(Initial Program Loader)です。これがOSを呼び出します。
 OSにはプロセッサーの動作モードの決定、ルートディレクトリの設定、デバイスドライバの読込など多様な処理プログラムからなっていますが、それらが定められた順序にしたがってロードされ実行されます。
 主要な処理プログラムが実行された状態が「OSが起動した」ことになります。ディスプレイに初期画面が表示されます。

UEFI(Unified Extensible Firmware Interface)

近年は、BIOSからUEFIへと移行してきました。UEFIとは厳密にはBIOSとOS間のソフトウェアインタフェースを定義したもので、そのBIOSをUEFI・BIOSといいますが、通常はUEFIと略しています。また、UEFIのブートローダをEFI(Extensible Firmware Interface)ブートローダといいます。
 現在では多くのパソコンがUEFIを標準にしています。

旧BIOSと比較してUEFIには次のような利点がありますが、上述の基本的な動作に関してはほぼ同じです。また旧BIOSとの互換性があります。

OS起動エラー

電源を入れてもOSのデスクトップ初期画面が表示されないことがあります。Windows10 を例にします。
 原因とチェック事項を列挙しますが、必ずしも網羅していないし最善策でもありません。ディスプレイとの接続は正常だとします。

 

マルチOS

1台のコンピュータに複数のOSをおき、必要に応じて使い分けることができます。WindowsマシンでLinuxを使うなどです。
 アプリケーションのなかには特定のOSだけを想定して作成されたものがあります。そのためだけにパソコンを追加するのは不経済です。複数のOSを1台のパソコンに搭載することにり回避できます。
 データファイルは双方のOSからアクセス可能です。ファイル形式が双方のOSでサポートされているならば、一方のOSで作成したデータファイルを他方のOSで使うことができます。操作性の向上にも役立ちます。

マルチブート

1台のPCに、WindowsとLinuxなど複数のOSをインストールしておき、PCを起動するときに、どちらのOSからでも起動できるように設定する仕組みです。OSが2種類のときをデュアルブートともいいます。

マルチブート環境を実現するには、それに対応するブートローダとそれを管理するブートマネージャが必要ですが、現在のOSでは標準装備されています。
 既存のOS環境で、他のOSをインストールするときに、ブートマネージャがブートローダに複数のOSが存在することを設定します。

この環境でパソコンの電源をいれると、OSが立ち上がる前に、ブートマネージャが利用できるOSのリストを表示します。それを選択することにより、ブートローダは選択されたOSを起動します。

このような方法ですので、同時に複数のOSを立ち上げることはできません。また、他のOSに切り替えるには再起動が必要です。
 また、VHD(Virtual Hard Disk)という仮想ディスク機能により、単一の物理パーティション上にもマルチブート環境を構築できるようになっています。

VM(Virtual Machine;仮想マシン)

マルチブートは、手軽に構築でき、処理速度は単独OSのときと同じ速度になりますが、OSを変えるたびに再起動が必要なので、頻繁にOSを変える環境では不適切です。
 それに対してVMでは、複数のOSが同時に動作可能な状況になっており、OSの切り替えが容易にできます。一つのパソコン(物理マシン)の中に、複数のOSがそれぞれ仮想的な領域を持つことから仮想マシンといいます。

(注)サーバではWebサーバやデータサーバなど多様な用途のサーバがあります。複数の用途のサーバ機能を1台の物理サーバに搭載したものを仮想サーバといいますが、それも含めて仮想マシンということもあります。

ホスト型VM

ホストOS(Windows)のなかにゲストOS(Linux)をおき、ホストOSからゲストOSを動かすような環境にしたものです。
 ホスト型VMでは、ゲストOSをを動かすにはホストOSの処理も必要になるので処理速度が遅くなります。

パソコンのディスクをパーティションに分割し、ドライブCにはホストOS、ドライブDにはゲストOSをおくことでマルチOS環境になります。このドライブDが仮想マシンです。

パーティション分割、ゲストOSのインストール、ホストOSからのゲストOSの稼働、アプリケーションプログラムやファイルの共有化などを管理するシステムを仮想化ソフトといいます。代表的な仮想化ソフトにVMwareがあります。

ハイパーバイザー型VM

ハイパーバイザという仮想化ソフトウェアが複数のゲストOSを切り分けるという方式です。この方式では、ホストOSは存在しません。

ゲストOSの動作にはホストOSではなくハイパーバイザが関与しますが、ハイパーバイザは専用化しているので、ホスト型より高速になります。マルチブート方式より遅いですが、同時に多数のOSが使えます。
 このような特徴により、サーバに広く採用されています。VMwareにはこれに相当する製品もあります。