資格道場 › レッスン一覧 › ソフトウェア
ソフトウェア・1/10・12分

ソフトウェアの階層と OS の基本機能

ゴール

ソフトウェアの階層(アプリケーション・ミドルウェア・OS・デバイスドライバ)とAPIの位置づけを説明でき、OSのタスク管理・割込み・スタックに関する科目Aの用語問題で、正しい選択肢を選べるようになる。

このあたりは「〜の説明として適切なものはどれか」という定義問題で繰り返し出ます。特に内部割込みと外部割込みの分類は本試験でも8回出ている頻出テーマで、見分け方を1つ覚えれば確実に取れます。

このレッスンで稽古する(用語チェック・過去問)

結論:ソフトウェアは4層の積み重ね

ソフトウェアは、ハードウェアに近い順に デバイスドライバ → OS → ミドルウェア → アプリケーション と積み重なっています。上の層は下の層の機能を借りて動き、その借り方の窓口が API です。

たとえるならレストランです。厨房の設備がハードウェア、設備を管理する料理長がOS、どの料理にも使う出汁やソースを仕込む係がミドルウェア、お客さんに出す一皿がアプリケーションにあたります。

flowchart TB
  A["アプリケーション(業務ソフト・ブラウザ等)"] -->|"API で機能を呼ぶ"| M["ミドルウェア(DBMS 等・共通の高機能)"]
  M -->|"API で機能を呼ぶ"| O["OS(基本ソフトウェア・カーネル)"]
  O --> D["デバイスドライバ(機器ごとの制御)"]
  D --> H["ハードウェア(CPU・メモリ・周辺機器)"]
種類 何をするか 試験での言い回し
OS(基本ソフトウェア) CPU・メモリ・入出力装置をアプリから使えるようにする 「CPU,メモリや入出力装置などを利用するための基本的な機能」
ミドルウェア OSの上で、多くの分野に共通する高水準の機能を提供する 「基本ソフトウェアの機能を利用し,多様な利用分野に共通するより高いレベルの基本機能」
デバイスドライバ 接続された周辺機器を直接制御する 「周辺機器を制御する」「ハードウェアを直接制御する」
ERP 経営資源(人・物・金)を統合管理する業務パッケージ 「経営資源を統合的に管理」
グループウェア メール・掲示板・スケジュール共有で共同作業を支援する 「共同作業の支援」

ミドルウェアの代表例は DBMS(データベース管理システム)です。「OSの上で動き、アプリに共通の便利機能を渡す」と覚えれば、OSの説明と取り違えません。

API:アプリがOSの機能を借りるための窓口

API(Application Program Interface) は、アプリケーションがOSやミドルウェアの機能を使うために用意された関数・コマンドなどの決まりごとの総称です。API設計を知っている人なら「Web APIのOS版」と考えて構いません。

ポイントは、アプリは ハードウェアを直接触らず、APIを通してOSに頼むことです。直接操作するのはOSとデバイスドライバの仕事です。

略語 正体 見分け方
API OS・ミドルウェアの機能を呼び出すインタフェース 「OSが用意する各種機能を利用するための仕組み」
CGI Webサーバが外部プログラムを動かす仕組み Web・サーバの話
GUI アイコンやウィンドウで操作する画面 見た目・操作性の話
MDI 1つの親ウィンドウ内で複数の文書を開く形式 ウィンドウの形式の話
アプリケーションAPI(機能を借りる窓口)OSデバイスドライバハードウェア直接は触らない
アプリはハードウェアを直接触らず、APIを窓口にしてOSに頼み、OSとデバイスドライバが機器を操作する。

デバイスドライバ:周辺機器ごとの通訳

デバイスドライバ は、プリンタやキーボードなどの周辺機器を、OSやアプリの要求どおりに 直接制御する ソフトウェアです。機器ごとに操作方法が違うので、その違いを吸収する通訳役です。

選択肢には「タスクを選ぶ(タスクスケジューラ)」「ウィンドウを管理する(ウィンドウマネージャ)」「コマンドを解釈する(シェル)」「ソフトを導入する(インストーラ)」「操作を自動化する(マクロ)」などの別物が並びます。周辺機器・ハードウェアを制御する と書いてあるものを選びます。

OSの仕事の分担と、マルチプログラミング

OSの仕事は、何を管理するかで分けられます。試験では「タスク管理の役割はどれか」と問われ、他の管理機能の説明がひっかけとして並びます。

管理機能 管理する対象 キーワード
タスク管理 CPU(どのタスクをいつ動かすか) マルチプログラミング制御・CPUの有効利用
記憶管理 主記憶(メモリ) 仮想記憶・実記憶の有効利用
入出力管理 入出力装置 装置を正確・効率よく動かす
ファイル(データ)管理 補助記憶上のデータ 装置に依存しない形でアクセスさせる

タスク はOSから見た仕事の単位(ほぼ「実行中のプログラム」)です。マルチプログラミング は、主記憶に複数のタスクを置き、あるタスクが入出力待ちの間に別のタスクへCPUを回す仕組みです。

料理人が煮込みを待つ間に別の皿の野菜を切るのと同じで、CPUの空き時間が減り、CPU利用率 と スループット(一定時間に処理できる仕事量)が上がります。「CPU利用率が下がる」「仮想記憶が小さくなる」という選択肢は誤りです。

1つずつ動かす場合CPU入出力A空きABAの入出力マルチプログラミングCPU入出力ABAAの入出力時間入出力待ちの空き時間にBを動かすCPU利用率・スループットが上がる
マルチプログラミングでは、Aが入出力を待つ空き時間にCPUがBを動かすので、同じ仕事が早く終わる。

マイクロカーネルとモノリシックカーネル

カーネル はOSの中心部分です。カーネルに機能をどこまで入れるかで2つの方式があります。

方式 カーネルに入れるもの 特徴
マイクロカーネル 必要最低限(タスク管理・プロセス間通信など)だけ カーネルが 小さい。他の機能は外で動くので、不具合が広がりにくい。その代わりプロセス間通信が増え、オーバヘッドが増える
モノリシックカーネル 必要な機能の全部 処理は速いが、一部の不具合が全体に響きやすい

「最低限の機能だけを持つ → カーネルが小さい」をセットで覚えます。「全部入り」「通信のオーバヘッドを抑える」はマイクロカーネルの説明ではありません。

【最頻出】内部割込みと外部割込み

割込み は、実行中の処理をいったん止めて、別の緊急処理をCPUに割り込ませる仕組みです。電話中にインターホンが鳴ったら、通話を保留して玄関に出るイメージです。

分類は 原因が、いま実行中の命令(プログラム)自身にあるか の1点で決まります。

分類 原因 代表例
内部割込み(例外・プログラム割込み) 実行中の命令そのもの ゼロ除算、オーバフロー、存在しない命令コード(不正命令)、ページフォールト、SVC(ソフトウェア割込み命令)
外部割込み 実行中のプログラムの外 タイマ(インターバルタイマ)、入出力完了、電源異常(瞬時停電)、機械チェック(メモリパリティエラーなどのハード障害)

ページフォールト は、仮想記憶で主記憶に無いページへアクセスしたときに起きる割込みです。原因は「そのページを読んだ命令」なので内部割込みです。

SVC(スーパバイザコール) は、プログラムがOSの機能を呼ぶためにわざと出す割込み命令です。自分で出すので内部割込みです。

メモリパリティエラー は、メモリの故障でデータ化けを検出したものです。「メモリ=内部」と考えがちですが、原因は命令ではなくハードウェアの障害なので外部割込み(機械チェック割込み)です。

実行中のプログラム(命令)原因がここ → 内部割込みゼロ除算オーバフロー不正命令ページフォールトSVC(自分で出す)プログラムの外が原因 → 外部割込みタイマ入出力完了電源異常機械チェック(メモリパリティエラー等)メモリの故障=ハード障害なので外部
原因が実行中の命令の内側にあれば内部割込み、プログラムの外にあれば外部割込み。

スタック:関数呼出しの戻り先メモ

スタック は、最後に入れたものを最初に取り出す(LIFO:後入れ先出し)データ構造です。皿を積み重ねて上から取るのと同じです。

関数Aが関数Bを呼び、BがさらにCを呼ぶと、戻る順番はC→B→Aの逆順になります。だから 戻り番地(呼出し元の続きの位置)や途中のデータを積んでおく場所としてスタックがぴったりです。

領域・構造 取り出し方 主な用途
スタック(領域) LIFO(プッシュで積む・ポップで取る) 戻り番地・局所変数の退避
ヒープ(領域) 順序に決まりなし 割当て・解放の順番がばらばらな動的データ
キュー FIFO(先入れ先出し) 到着順の処理待ち行列

ヒープは「スタックの予備」ではなく、プッシュ・ポップで操作するものでもありません。

関数の呼出しスタック(LIFO)関数A関数B関数C呼ぶ呼ぶ戻る戻る積む取るBへの戻り番地Aへの戻り番地最後に積んだBへの番地から先に取る
AがBを、BがCを呼ぶたびに戻り番地をスタックに積み、戻るときは最後に積んだものから取り出す。
例題 1

内部割込みに分類されるものを選ぶ手順

内部割込みに分類されるものはどれか。

ア 商用電源の瞬時停電などの電源異常による割込み
イ ゼロで除算を実行したことによる割込み
ウ 入出力が完了したことによる割込み
エ メモリパリティエラーが発生したことによる割込み

出典:平成30年度 春期 基本情報技術者試験 午前 問10

解き方と答えを見る
  1. 問われているのは「内部割込み」。判定基準は「原因が実行中の命令自身にあるか」。
  2. ア 電源異常:原因は電源というプログラムの外側 → 外部割込み。
  3. イ ゼロ除算:割り算の命令を実行した結果として起きる → 原因は命令自身 → 内部割込み。
  4. ウ 入出力完了:入出力装置からの通知 → 外部割込み。
  5. エ メモリパリティエラー:メモリというハードウェアの障害 → 外部割込み(機械チェック)。命令の誤りではない。
  6. 内部割込みに当てはまるのはイだけ。

答え:イ(ゼロ除算による割込み)

要点(試験直前に読む)

  • 層は下から「デバイスドライバ→OS→ミドルウェア→アプリ」。ミドルウェアは「OSの上で多分野に共通する高水準の機能」。
  • APIは「アプリからOSの機能を利用するための仕組み」。アプリはハードを直接操作しない。
  • タスク管理はCPU担当。マルチプログラミングでCPU利用率とスループットが上がる。
  • マイクロカーネルは最低限の機能だけなのでカーネルが小さい。
  • 割込みは「原因が実行中の命令か」で分ける。ゼロ除算・ページフォールト・SVCは内部。タイマ・入出力完了・電源異常・パリティエラーは外部。
  • 関数呼出しの戻り番地はスタック(LIFO)に退避する。

ひっかけ

  • ミドルウェアの問題で「CPU,メモリや入出力装置を利用するための基本的な機能」はOSの説明。「より高いレベルの共通機能」を選ぶ。
  • APIの問題で「ハードウェアを直接操作する」は誤り。直接操作するのはOSやデバイスドライバ。
  • メモリパリティエラーや電源異常を内部割込みにしない。命令が原因ではないハードウェア側の事象なので外部割込み。
  • ページフォールトやSVCを外部割込みにしない。どちらも実行中の命令がきっかけなので内部割込み。
  • タスク管理の問題で並ぶ「仮想記憶」(記憶管理)や「入出力装置の制御」(入出力管理)は別の管理機能。答えは「CPUの有効利用」。

用語(17)

OS Operating System(オペレーティングシステム)
CPU・メモリ・入出力装置などのハードウェアを管理し、アプリケーションが使える形で提供する基本ソフトウェア。
⚠ ミドルウェアはOSの上でさらに高水準の共通機能を出すもの。ハードの基本的な利用ならOS。
ミドルウェア みどるうぇあ
OSの機能を利用して、多くの分野のアプリに共通する高水準の機能を提供するソフトウェア(DBMSなど)。
⚠ OS(ハードを使う基本機能)、ERP(経営資源の統合管理)、グループウェア(共同作業支援)と区別する。
API Application Program Interface
アプリケーションがOSやミドルウェアの機能を呼び出すための関数・コマンドなどの決まりごとの総称。
⚠ CGIはWebサーバと外部プログラムの連携、GUIは画面操作、MDIは複数文書のウィンドウ形式。
デバイスドライバ でばいすどらいば
OSやアプリの要求に従い、接続された周辺機器を直接制御するソフトウェア。
⚠ タスクを選ぶのはスケジューラ、コマンドを解釈するのはシェル、ウィンドウ管理はウィンドウマネージャ。
カーネル かーねる
OSの中核で、タスク管理や記憶管理などの基本機能を担う部分。
マイクロカーネル まいくろかーねる
必要最低限の機能だけをカーネルに入れ、カーネルを小さくする方式。
⚠ 全機能をカーネルに入れるのはモノリシックカーネル。マイクロカーネルはプロセス間通信のオーバヘッドが増える側。
モノリシックカーネル ものりしっくかーねる
OSに必要な機能の全てをカーネル内に実装する方式。
⚠ マイクロカーネルとの取り違えに注意。「全部入り・不具合が広がりやすい」ならこちら。
タスク管理 たすくかんり
どのタスクにいつCPUを割り当てるかを制御し、CPUを有効に使うOSの機能。
⚠ 仮想記憶は記憶管理、装置の制御は入出力管理、装置に依存しないデータアクセスはファイル管理。
マルチプログラミング まるちぷろぐらみんぐ
主記憶に複数のタスクを置き、待ち時間に別のタスクへCPUを回して、CPU利用率とスループットを上げる方式。
⚠ 「CPU利用率が下がる」「仮想記憶領域が小さくなる」は誤り。
スループット するーぷっと
一定時間内に処理できる仕事の量。
⚠ ターンアラウンドタイムは1つの仕事を依頼してから結果が返るまでの時間。
割込み わりこみ
実行中の処理を一時中断して、緊急の処理をCPUに先に行わせる仕組み。
内部割込み ないぶわりこみ
ゼロ除算・オーバフロー・不正命令・ページフォールト・SVCなど、実行中の命令自身が原因で起きる割込み。
⚠ 外部割込みとの区別は「原因が実行中の命令か」で判定する。
外部割込み がいぶわりこみ
タイマ・入出力完了・電源異常・機械チェックなど、実行中のプログラムの外が原因で起きる割込み。
⚠ メモリパリティエラーはハード障害なので外部割込み(機械チェック割込み)。
ページフォールト ぺーじふぉーると
仮想記憶で、主記憶に存在しないページにアクセスしたときに発生する割込み。
⚠ 仮想記憶の話なので外部に見えるが、アクセスした命令が原因なので内部割込み。
SVC Supervisor Call(スーパバイザコール)
プログラムがOSの機能を呼び出すために、自ら割込みを起こす命令。
⚠ ソフトウェア割込みとも呼ばれ、内部割込みに分類される。
スタック すたっく
後から入れたデータを先に取り出す(LIFO)構造。関数呼出しの戻り番地や途中データの退避に使う。
⚠ キューは先入れ先出し(FIFO)。ヒープは割当て・解放の順序が決まっていない領域。
ヒープ ひーぷ
割当てと解放の順序に決まりのない動的データを置くための記憶領域。
⚠ スタックの予備領域ではなく、プッシュ・ポップで操作するものでもない。

このレッスンの過去問

このレッスンで稽古する