1.テクノロジ

【SC試験・午前1】ソフトウェアとハードウェアを攻略!タスク管理・仮想記憶・論理回路の頻出パターン完全ガイド

「タスクの状態遷移は覚えた。でも、実行状態から実行可能状態に戻るのはどんなときだったか」

情報処理安全確保支援士(SC)試験の午前1(科目A-1)で、ソフトウェアとハードウェアは前回までの3分野に比べて「暗記の比率が高い」テーマです。ただし、暗記といっても丸暗記は必要ありません。OSがなぜその動きをするのかという理由を1つ押さえると、状態遷移も割込みもスケジューリングも同じ理屈で説明できてしまいます。論理回路にいたっては、真理値表を書けるかどうかだけで勝負が決まります。

なお、IPAの発表によると、2026年度から試験区分の名称が変更される予定です。SC試験では午前Ⅰが科目A-1、午前Ⅱが科目A-2、午後が科目Bという呼び方になり、あわせてCBT方式へ移行する予定とされています(出題範囲・出題数・試験時間に変更はないとされています)。制度変更の詳細は「【2026年度版】情報処理安全確保支援士試験のCBT化で何が変わる?科目A/科目Bの新名称と対策の変え方」で解説しているので、そちらを参照してください。いずれも現時点では予定であり確定情報ではありません。本記事では検索でたどり着きやすい「午前1」の呼称を主軸にしつつ、新名称を併記して進めます。

筆者は1999年、オンプレミス全盛期にインフラエンジニアとして仕事を始め、その後CIOとしてIT投資の判断を担い、のちに新卒エンジニアへインフラ基盤を教える立場も経験しました。顧客のサーバーを構築するとき、CPU・メモリ・ハードディスク容量の選定は非常に重要な要素でした。とりわけメモリは、足りなければディスクへの退避が発生して体感速度が落ちる。この記事で扱う仮想記憶やスラッシングは、当時のサイジング作業そのものです。試験の用語は、現場の判断に名前を付けたものにすぎません。

本シリーズの全体戦略は導入記事「元CIOが実践するスタミナ温存術!「コスパ極振り」最短エスケープルート・完全版ロードマップ」に、第2回のコンピュータ構成要素は「コンピュータ構成要素を攻略!CPUとキャッシュメモリの計算問題・頻出パターン完全ガイド」、前回のシステム構成要素は「システム構成要素の稼働率計算を攻略!直列・並列・RAIDの頻出パターン完全ガイド」にまとめています。本記事はテクノロジ系の第4回にあたります。

この記事で学べること

  • 午前1のソフトウェア・ハードウェア分野で「取る問題」と「捨てる問題」の線引き
  • タスクの3状態と遷移の条件を、ディスパッチ・プリエンプションの語で正確に説明する方法
  • ラウンドロビンと優先度方式の違いを、ターンアラウンドタイムの計算まで含めて理解する方法
  • 内部割込みと外部割込みを一瞬で切り分ける基準
  • ページングの仕組みと、FIFO・LRUによるページフォールト数の数え方
  • 排他制御、セマフォ、デッドロックの4条件と発生を防ぐ実務上の鉄則
  • 論理回路の真理値表、ド・モルガンの法則、半加算器と全加算器の読み方

午前1のソフトウェアとハードウェアは「状態遷移と論理回路」で取り切る

この分野は範囲が広く見えますが、午前1で問われる形は驚くほど限定されています。まず投資先を決めてしまいましょう。

午前1は30問中18問で通過する試験

午前1は50分・30問、基準点は60点です。18問正解すれば通過であり、12問は落としてよい。この前提を常に置いてください。テクノロジ系は30問中17問前後を占め、最大の得点源になります。

その中でソフトウェア(OS)とハードウェア(論理回路)は、あわせて1問から2問が出題される安定枠です。どちらも問われる型が固定されているため、準備した分がそのまま得点になります。

取る問題:状態遷移、ページング、真理値表

このテーマで最優先に投資すべきなのは、次の4つです。

  • タスクの状態遷移(実行状態・実行可能状態・待機状態と、遷移のきっかけ)
  • 割込みの分類(内部割込みか外部割込みか)
  • ページング方式とページ置換アルゴリズム(FIFO・LRU)の動作
  • 論理回路の真理値表と、半加算器・全加算器の構成

いずれも公式や手順が短く、書き出せばほぼ機械的に答えが出ます。特に論理回路は、選択肢の回路をそのまま真理値表に落とせば必ず正解にたどり着ける、午前1で最も裏切らない問題です。

捨てる問題:OSの実装細部とカルノー図の応用

一方で、次の領域は深追いしないと決めてよいでしょう。

  • 特定OSのAPIやシステムコールの名称
  • リアルタイムOSのスケジューリング理論(レート単調方式など)の詳細
  • カルノー図を使った複雑な論理式の簡単化
  • フリップフロップの種類ごとの動作表(JK、T、Dの詳細)

これらは応用情報以上の高度な出題でまれに顔を出しますが、午前1での出現頻度に対して学習コストが高すぎます。見かけたら選択肢を2つに絞って次へ進む。それも戦略です。

メモリが高価だった時代のサイジング

筆者がインフラエンジニアだった頃、サーバー調達で悩ましいのはいつもメモリでした。CPU・メモリ・ハードディスク容量は選定上の重要な要素で、なかでもメモリは足りないと目に見えて遅くなります。仮想記憶があるから動くには動くのですが、動くことと快適に動くことは別物です。この記事の後半で扱うスラッシングは、まさにその「動いてはいるが遅い」状態に付いた名前です。

FREE PDF
SC午後記述
テンプレート集
登録特典
メール講座 登録で無料プレゼント
「知っているのに書けない」を、型で解消するPDF
設問の文末から解答の「型」を割り出し、そのまま当てはめて書く。SC午後の記述で手が止まらなくなる1冊です。
設問6タイプ分類頻出7テーマ減点10パターン時間配分&見直し
無料でPDFを受け取る →

+おまけ:毎日1通の無料メール講座つき。登録した日が「1日目」、図解と論理で16週間かけて基礎も固まります。

登録無料·いつでも配信停止

OSの役割とタスク管理:状態遷移を1枚の図で覚える

OSが何をしているかを1行で言えるようになると、この分野の暗記量は一気に減ります。

OSの役割は資源の管理と抽象化

OS(オペレーティングシステム)の役割は、大きく2つに整理できます。1つは資源の管理です。CPU時間、主記憶、入出力装置、ファイルといった有限の資源を、複数のプログラムに公平かつ効率的に割り当てます。もう1つは抽象化です。アプリケーションがハードウェアの型番ごとの違いを意識せずに動けるよう、共通のインタフェースを提供します。

この2つの役割から、タスク管理・記憶管理・入出力管理・ファイル管理という機能の分類が導かれます。午前1で問われるのは、ほぼタスク管理と記憶管理です。

タスク・プロセス・スレッドの関係

用語の整理をしておきます。タスク(task)はOSから見た仕事の単位で、プロセス(process)とほぼ同義に使われます。試験でも両者はほぼ同じ意味で登場します。

スレッド(thread)は、1つのプロセスの中で並行して動く、より小さな実行の単位です。同じプロセス内のスレッドは主記憶空間を共有するため、スレッド間の切り替えはプロセス間の切り替えより軽くなります。一方で、共有しているからこそ、次の章で扱う排他制御が必要になります。

実行状態・実行可能状態・待機状態の3状態

タスクは次の3つの状態を行き来します。

  • 実行状態(running):CPUを割り当てられて、いま実際に処理されている状態
  • 実行可能状態(ready):CPUさえもらえればすぐ動ける状態。順番待ちの行列にいる
  • 待機状態(waiting/blocked):入出力の完了など、外部の出来事を待っている状態。CPUをもらっても動けない

大事なのは、状態そのものではなく遷移のきっかけです。

  • 実行可能状態 → 実行状態:ディスパッチ(CPUの割り当て)
  • 実行状態 → 実行可能状態:プリエンプション(タイムクウォンタム満了や、より優先度の高いタスクの登場によるCPUの取り上げ)
  • 実行状態 → 待機状態:入出力要求などの発生
  • 待機状態 → 実行可能状態:入出力の完了(実行状態へ直接は戻らない)
タスクの3状態(実行状態・実行可能状態・待機状態)を三角形に配置し、ディスパッチ・プリエンプション・入出力要求・入出力完了の4本の矢印で遷移を示す状態遷移図。待機状態から実行状態へ直接戻る矢印が存在しないことを示す

学び始めの人が最も間違えるのはここです。待機状態から実行状態へ直接戻る遷移は存在しません。入出力が終わったタスクは、いったん実行可能状態の行列の末尾に並び直します。午前1では、この「存在しない遷移」を選ばせる選択肢が定番の引っかけです。

多重プログラミングとCPUの利用率

なぜこんな仕組みが必要なのでしょうか。入出力はCPUに比べて桁違いに遅いためです。あるタスクがディスクの応答を待っている間、CPUを遊ばせておくのはもったいない。そこで待機中は別のタスクにCPUを渡します。これが多重プログラミング(マルチプログラミング)であり、CPUの利用率を上げるための基本的な考え方です。

複数のCPU(コア)が実際に同時に処理を進めるのが並列処理、1つのCPUが高速に切り替えて同時に動いているように見せるのが並行処理です。用語問題で区別を問われることがあります。

スケジューリング方式:次にCPUを渡す相手をどう決めるか

実行可能状態の行列から、どのタスクを次に実行するかを決めるのがスケジューリングです。方式ごとの向き不向きを押さえます。

到着順方式(FCFS:First Come, First Served)

到着した順に処理する最も単純な方式です。実装は簡単ですが、先頭に処理時間の長いタスクが来ると、後続の短いタスクがすべて待たされます。バッチ処理には向きますが、対話型処理には不向きです。

ラウンドロビン方式

各タスクにタイムクウォンタム(タイムスライス)と呼ばれる一定のCPU時間を順番に割り当て、使い切ったら次のタスクへ回す方式です。使い切ったタスクは実行可能状態に戻り、行列の末尾に並びます。

TSS(時分割システム)や対話型処理で使われる代表的な方式で、どのタスクも一定間隔でCPUをもらえるため、応答時間が安定します。タイムクウォンタムを短くするほど応答性は上がりますが、切り替え(コンテキストスイッチ)のオーバーヘッドが増えます。このトレードオフは頻出の論点です。

優先度方式とエージング

タスクごとに優先度を設定し、優先度の高いものから実行する方式です。実行中のタスクより優先度の高いタスクが現れたときにCPUを取り上げるプリエンプティブ方式と、取り上げないノンプリエンプティブ方式があります。

優先度方式の弱点は、優先度の低いタスクがいつまでも実行されないスタベーション(飢餓状態)です。対策として、待たされている時間に応じて優先度を少しずつ上げるエージングという手法があります。

もう1つ、SC試験の観点で押さえておきたいのが優先度の逆転(プライオリティインバージョン)です。優先度の低いタスクが資源をロックしたまま、中程度の優先度のタスクにCPUを奪われ続けると、その資源を待っている最優先タスクが動けなくなります。可用性に直結する現象です。

処理時間順方式

残りの処理時間が短いタスクを優先する方式です。平均ターンアラウンドタイムを最小にできますが、各タスクの処理時間を事前に知る必要があり、また長いタスクが後回しにされ続ける問題があります。

計算例:方式によってターンアラウンドタイムはどう変わるか

具体的に見てみましょう。時刻0にタスクA(CPU時間4)、B(3)、C(2)がA・B・Cの順で到着したとします。切り替えのオーバーヘッドは0とします。

到着順方式の場合

  • A:0〜4で終了、ターンアラウンドタイム4
  • B:4〜7で終了、7
  • C:7〜9で終了、9

平均ターンアラウンドタイムは (4+7+9) ÷ 3 = 20 ÷ 3 ≒ 6.7 です。

ラウンドロビン方式(タイムクウォンタム=2)の場合

A→B→C→A→Bの順に回ります。

  • 0〜2:A(残り2)/2〜4:B(残り1)/4〜6:C(終了、ターンアラウンドタイム6)
  • 6〜8:A(終了、8)/8〜9:B(終了、9)

平均は (8+9+6) ÷ 3 = 23 ÷ 3 ≒ 7.7 です。

到着順方式とラウンドロビン方式(タイムクウォンタム2)のタイムチャート比較図。到着順方式ではA(0〜4)B(4〜7)C(7〜9)の順に連続実行し、ラウンドロビン方式ではA(0〜2)B(2〜4)C(4〜6)A(6〜8)B(8〜9)と2単位ずつ交互に実行することを示す

平均値だけ見ると到着順のほうが良く見えます。しかし注目すべきはCです。到着順では9まで待たされたCが、ラウンドロビンでは6で終わっています。ラウンドロビンは平均を犠牲にしてでも、短いタスクを待たせない。対話型システムで採用される理由がここにあります。試験では「どの方式が応答時間の公平性に優れるか」という形で問われます。

割込み:内部か外部かを一瞬で切り分ける

割込みは、CPUが実行中の処理を中断して別の処理へ制御を移す仕組みです。分類さえ押さえれば確実に得点できます。

割込み発生時の処理の流れ

割込みが発生すると、CPUは実行中のタスクの状態(プログラムカウンタやレジスタの内容)を退避し、割込みの原因に応じた処理ルーチンへ制御を移します。処理が終わると退避した状態を復元し、中断した箇所から実行を再開します。この一連の退避と復元がコンテキストスイッチであり、切り替えのオーバーヘッドの正体です。

内部割込み:原因は実行中のプログラムの中にある

内部割込みは、実行中のプログラムそのものが原因で発生する割込みです。

  • プログラム割込み:ゼロ除算、桁あふれ(オーバフロー)、不正命令の実行、記憶保護違反
  • ページフォールト:アクセスしたページが主記憶上に存在しない
  • SVC割込み(スーパバイザコール):プログラムが自らOSの機能を呼び出す

外部割込み:原因はCPUの外側にある

外部割込みは、実行中のプログラムとは無関係な、外部の要因で発生します。

  • 入出力割込み:入出力動作の完了や異常
  • タイマ割込み(インターバルタイマ):一定時間の経過。ラウンドロビンのタイムクウォンタム管理に使われる
  • 機械チェック割込み:ハードウェアの異常、電源異常
  • コンソール割込み:オペレータによる介入
 割込みの分類図。中央に「原因は実行中のプログラムの中か外か」という判断基準を示し、左に内部割込み(プログラム割込み・ページフォールト・SVC割込み)、右に外部割込み(入出力割込み・タイマ割込み・機械チェック割込み・コンソール割込み)を並べた図

つまずきポイント:SVCとページフォールトは内部

判断基準は1つだけです。「原因が実行中のプログラムの中にあるか」。ゼロ除算はプログラムが割った結果なので内部、電源異常はプログラムと無関係なので外部です。

間違えやすいのはSVC割込みとページフォールトです。SVCは「OSを呼ぶ=外部とやり取りする」というイメージから外部と答えたくなりますが、割込みを引き起こしたのは実行中のプログラム自身の命令なので内部割込みです。ページフォールトも同様で、そのプログラムがアクセスした結果なので内部割込みに分類されます。この2つは午前1の定番の引っかけです。

主記憶管理と仮想記憶:ページングとスラッシング

限られた主記憶に、それより大きなプログラムをどう載せるか。この工夫の歴史がそのまま出題範囲になっています。

実記憶管理とフラグメンテーション

主記憶を固定長の区画に分ける固定区画方式は管理が簡単ですが、区画より小さいプログラムを載せると余りが無駄になります。可変長で割り当てる可変区画方式はこの無駄を減らせますが、確保と解放を繰り返すうちに、使われていない小さな領域が飛び飛びに残るフラグメンテーション(断片化)が起きます。

合計すれば十分な空きがあるのに、連続した領域が取れずにプログラムを載せられない。これを解消するため、使用中の領域を前へ詰めて空き領域を1か所にまとめる操作がコンパクションです。記憶管理の文脈ではガベージコレクションと呼ばれることもありますが、プログラミング言語ランタイムのGC(不要になったオブジェクトを自動回収する仕組み)とは目的が異なります。

スワッピングとオーバーレイ

主記憶が足りないとき、優先度の低いタスクの内容をまるごと補助記憶へ退避し、必要になったら書き戻すのがスワッピングです。退避がスワップアウト、書き戻しがスワップインです。

オーバーレイは、プログラムをセグメントに分割し、そのときに必要なセグメントだけを同じ主記憶領域に上書きしながら実行する方式です。主記憶がきわめて小さかった時代の手法で、現在は仮想記憶に置き換わっています。

仮想記憶とページング方式

仮想記憶は、補助記憶を使って主記憶より大きな記憶空間があるように見せる仕組みです。プログラムが扱う論理アドレス(仮想アドレス)を、実際の主記憶上の物理アドレス(実アドレス)へ変換して動作します。

現在主流のページング方式では、仮想記憶空間をページという固定長のブロックに分割し、主記憶側も同じ大きさのページフレームに分割します。どの仮想ページがどの物理フレームに対応しているかを記録したものがページテーブル(ページ表)で、アドレス変換のたびに参照されます。変換を高速化するための専用キャッシュがTLB(Translation Lookaside Buffer)です。

一方、プログラムの論理的なまとまり(手続き、データなど)ごとに可変長で分割するのがセグメント方式です。両者を組み合わせたセグメンテーションページング方式もあります。

ページングによるアドレス変換の流れ図。論理アドレス(ページ番号+ページ内変位)がページテーブルで物理アドレス(フレーム番号+変位)へ変換される様子と、対象ページが主記憶に無い場合にページフォールトが発生し補助記憶からページインする分岐を示す図

ページフォールトとページ置換アルゴリズム

アクセスしようとしたページが主記憶上に無いとき、ページフォールト(内部割込み)が発生します。OSは補助記憶からそのページを読み込み(ページイン)、主記憶に空きが無ければどれかのページを追い出します(ページアウト)。必要になった時点で初めて読み込む方式をデマンドページングと呼びます。

どのページを追い出すかを決めるのが置換アルゴリズムです。

  • FIFO(First In First Out):最も古く読み込まれたページを追い出す。実装は簡単だが、よく使われているページも追い出してしまう
  • LRU(Least Recently Used):最後に参照されてから最も時間が経ったページを追い出す。局所性を利用しており、実用上の性能が良い
  • LFU(Least Frequently Used):参照された回数が最も少ないページを追い出す

計算例:ページフレームが3つ、ページの参照順序が 1→2→3→2→1→4→1 のとき、LRUでのページフォールト回数を数えます。

  1. ページ1:フォールト(フレーム=1)
  2. ページ2:フォールト(1, 2)
  3. ページ3:フォールト(1, 2, 3)
  4. ページ2:ヒット(最終参照順は 1→3→2)
  5. ページ1:ヒット(3→2→1)
  6. ページ4:フォールト。最後に参照されてから最も時間が経った3を追い出す(2, 1, 4)
  7. ページ1:ヒット

ページフォールトは4回です。数え方のコツは、フレームの中身と一緒に「最後に使った順番」をメモしておくこと。頭の中だけで処理しようとすると必ずずれます。

なお、FIFOにはベイラディの異常(Belady's Anomaly)と呼ばれる現象があり、ページフレームを増やしたのにページフォールトが増える参照パターンが存在します。LRUではこの現象は起きません。「フレームを増やせば必ず速くなる」とは限らない、という形で問われることがあります。

スラッシングは「動いているのに進まない」状態

多重度を上げすぎて主記憶が不足すると、ページインとページアウトが頻発し、CPUが本来の処理よりページの入れ替えに時間を費やすようになります。これがスラッシングです。CPU使用率は下がるのにディスクアクセスだけが増え、システム全体のスループットが急激に落ちます。

対処は、多重度(同時に走らせるタスク数)を下げるか、主記憶を増設するかです。ここで多重度を上げてしまうと、さらに悪化するという直感に反する動きをします。冒頭で触れたサイジングの話は、まさにこの状態を起こさないための見積もりでした。

なお、あるタスクが一定時間内に参照するページの集合をワーキングセットと呼び、これが主記憶に収まるようフレームを割り当てるのがスラッシング防止の基本的な考え方です。

排他制御とデッドロック:同時アクセスをどう捌くか

複数のタスクが同じ資源を使うとき、何もしなければデータが壊れます。その対策と、対策が生む新たな問題を扱います。

クリティカルセクションとセマフォ

複数のタスクが同時に実行してはいけない処理の区間をクリティカルセクション(危険領域)と呼びます。ここへ同時に入らせないための仕組みが排他制御です。

代表的な手段がセマフォです。使用可能な資源の数を表すカウンタを用意し、資源を要求するときにカウンタを減らす操作(P操作、wait)、解放するときに増やす操作(V操作、signal)を行います。カウンタが0のときにP操作を行ったタスクは待機状態に入ります。カウンタの値を0か1に限定したものがバイナリセマフォで、実質的にミューテックス(相互排除)として働きます。

セキュリティの観点では、排他制御の不備がレースコンディション(競合状態)を生み、TOCTOU(Time of Check to Time of Use)型の脆弱性につながります。チェックした時点と使用する時点の間に状態を書き換えられる、という攻撃です。SC試験の午前2や午後でも問われる論点なので、午前1の段階で土台を作っておくと後が楽になります。

デッドロックの4条件

複数のタスクが互いに相手の持つ資源を待ち合い、どちらも進めなくなる状態がデッドロックです。次の4条件がすべて同時に成立したときに発生します。

  • 相互排除:資源を同時に使えるタスクは1つだけ
  • 保持と待機:資源を保持したまま、別の資源を要求する
  • 横取り不可:他タスクが保持する資源を強制的に取り上げられない
  • 循環待ち:資源を待つ関係が輪になっている

裏を返せば、どれか1つを崩せばデッドロックは起きません。

デッドロックの発生と予防を対比した図。左側はタスクAが資源1を保持したまま資源2を要求し、タスクBが資源2を保持したまま資源1を要求する循環待ちを4本の矢印の輪で示し、右側は資源1→資源2の順に要求を統一することで輪が切れる様子を示す

実務での鉄則は「ロックの順序を統一する」

最も現実的な対策は、すべてのタスクが資源を同じ順序で要求するというルールです。資源1→資源2の順に必ず取ると決めておけば、循環待ちの輪は構造的にできません。データベースのトランザクション設計でテーブルのアクセス順を揃えるのも同じ理由です。

このほか、資源の割り当て前に安全性を確認する銀行家のアルゴリズムによる回避、資源の待ち関係をグラフで監視して輪を検出する検出と回復(一方のタスクをロールバックする)といった手法があります。午前1では4条件と、順序統一による予防が問われる程度で十分です。

プログラムの4つの属性

排他制御と関連して、プログラムの性質を表す用語群も出題されます。

  • 再入可能(リエントラント):複数のタスクから同時に呼び出されても正しく動作する。手続き部分が実行中に変更されず、データは呼び出し側ごとに持つ
  • 再使用可能(リユーザブル):一度実行した後、再ロードせずに繰り返し実行できる
  • 再帰的(リカーシブ):実行中に自分自身を呼び出せる
  • 再配置可能(リロケータブル):主記憶上のどの位置に置いても実行できる

「同時に呼ばれても大丈夫」が再入可能、「もう一度呼んでも大丈夫」が再使用可能、と区別します。

論理回路:真理値表さえ書ければ確実に取れる

ハードウェア側の頻出テーマです。暗記量は少なく、手順は完全に機械的です。

基本ゲートと真理値表

押さえるべきゲートは6つです。入力をA、Bとしたときの出力は次のとおりです。

  • AND(論理積):両方が1のときだけ1
  • OR(論理和):どちらか一方でも1なら1
  • NOT(否定):入力を反転する
  • NAND:ANDの否定。両方が1のときだけ0
  • NOR:ORの否定。両方が0のときだけ1
  • XOR(排他的論理和):入力が異なるときだけ1

XORの「入力が異なるときだけ1」という性質は、値の一致判定やパリティ計算、ストリーム暗号の演算など、セキュリティ分野でも繰り返し登場します。

AND・OR・NOT・NAND・NOR・XORの6つのMIL記号と、入力A・B(00/01/10/11)に対する出力を1行の文字列で示した真理値表を6パネルに並べた一覧図

なお、NANDだけ、あるいはNORだけを組み合わせれば、他のすべての論理回路を構成できます。この性質を機能的完全性(論理的完全性)と呼び、NANDとNORが「万能ゲート」と呼ばれる理由でもあります。セキュリティ分野の「完全性(インテグリティ)」とは別の概念なので、混同しないよう注意してください。

ド・モルガンの法則

論理式の変形で必ず使う法則です。

  • NOT(A AND B) = (NOT A) OR (NOT B)
  • NOT(A OR B) = (NOT A) AND (NOT B)

言葉にすれば「否定を中に入れると、ANDとORが入れ替わる」となります。式だけではピンと来ない場合は、第1回の「基礎理論の壁を越える!離散数学とアルゴリズムの頻出パターン・完全攻略ガイド」でベン図を使った視覚的な証明を扱っているので、そちらを先に見ておくと定着が早くなります。これに加えて、A AND A = A(べき等則)、A OR (A AND B) = A(吸収則)、A AND (B OR C) = (A AND B) OR (A AND C)(分配則)を知っていれば、午前1の論理式の問題は足ります。

そして最強の解法は、法則を覚えることではなく真理値表を書くことです。入力が2つなら4行、3つなら8行。選択肢の式をすべて真理値表に落として、問題文の表と一致するものを選べば、変形の途中でミスをする余地がありません。時間は多少かかりますが、確実性は段違いです。

半加算器と全加算器

2進数の足し算を行う回路です。

半加算器(Half Adder)は、1桁の2進数AとBを足し、和S(Sum)と桁上げC(Carry)を出力します。

  • S = A XOR B
  • C = A AND B

0+0=0、0+1=1、1+0=1、1+1=10(S=0、C=1)という結果を並べると、和がXOR、桁上げがANDになっていることが確認できます。

全加算器(Full Adder)は、下位からの桁上げ入力Cinを加えた3入力を扱います。半加算器を2つとOR回路1つで構成でき、多桁の加算はこれを桁数分つなげて実現します。

半加算器と全加算器の回路構成の比較図。半加算器はXORとANDの2素子で和Sと桁上げCを出力し、全加算器は半加算器2つとOR1つで構成され、下位からの桁上げCinを含む3入力を扱うことを示す

午前1では「この回路の出力は何か」「半加算器のC出力にあたるゲートはどれか」といった形で問われます。回路図を見たら、入力の組み合わせを4通り(または8通り)すべて代入する。これだけで解けます。

フリップフロップとカルノー図の扱い

フリップフロップは1ビットの情報を保持する順序回路で、レジスタやSRAMの構成要素です。「1ビットを記憶する回路」という理解があれば午前1では十分で、JK型やD型の動作表まで踏み込む必要はありません。

カルノー図は論理式を簡単化する手法ですが、午前1での出現頻度を考えると、真理値表で押し切るほうが費用対効果は高いと判断してよいでしょう。

ソフトウェアの種類とOSSのライセンス

暗記中心ですが、問われる範囲は狭く、SC試験の他分野とも接続します。

ソフトウェアの分類

  • 基本ソフトウェア(広義のOS):制御プログラム(狭義のOS)、言語処理プログラム、サービスプログラム
  • ミドルウェア:OSとアプリケーションの中間で共通機能を提供する。データベース管理システム(DBMS)、Webアプリケーションサーバー、通信管理など
  • 応用ソフトウェア:業務アプリケーションなど
  • ファームウェア:ハードウェアに組み込まれた制御用ソフトウェア。BIOS/UEFIなど

ファームウェアはSC試験でも重要です。BIOS/UEFIの改ざんによるブートキット、UEFIセキュアブートによる起動時の署名検証といった論点は、午前2や午後で扱われます。

OSSの定義とライセンスの3類型

OSS(Open Source Software)は、単にソースコードが公開されているソフトウェアではありません。OSI(Open Source Initiative)が定めるオープンソースの定義(OSD)では、再頒布の自由、ソースコードの入手可能性、派生物の作成と再頒布の許可、利用する分野・人・グループに対する差別の禁止などが要件とされています。「営利目的での利用を禁止する」条件が付いていればOSSとは呼べません。ここは用語問題の定番です。

ライセンスは大きく3つに分類できます。

  • コピーレフト型(GPLなど):改変・再配布したソフトウェアにも同じライセンスの適用を求める
  • 準コピーレフト型(MPLなど):改変した部分にのみ同じライセンスの適用を求める
  • 非コピーレフト型(MIT、BSD、Apache Licenseなど):著作権表示などの条件を守れば、派生物のライセンスは自由

自社製品にGPLのコードを組み込むと、製品全体のソースコード開示義務が生じ得るため、企業では利用可否の確認が必須になります。使用しているOSSコンポーネントを一覧化するSBOM(Software Bill of Materials)は、この管理と脆弱性管理の両面で近年重視されています。

SC試験での出題パターンと対策

実際にどう問われ、どう時間を使うかを整理します。

午前1で狙われる論点

過去の午前1では、この分野から次のような形で繰り返し出題されています。具体的な年度の特定は避けますが、型としては安定しています。

  • タスクの状態遷移で、遷移のきっかけや存在しない遷移を問う問題
  • ラウンドロビン方式や優先度方式の特徴、タイムクウォンタムとオーバーヘッドの関係
  • 内部割込みと外部割込みの分類
  • ページング方式の動作、ページフォールト回数の計算、スラッシングの説明
  • デッドロックの発生条件と防止策
  • 論理回路の出力を真理値表から特定する問題、半加算器・全加算器の構成
  • 再入可能・再使用可能などプログラムの属性の定義
  • OSSライセンスとコピーレフトの考え方

学び始めの人がつまずく3つのポイント

  1. 待機状態から実行状態へ直接戻ると思い込む:入出力が完了したタスクは実行可能状態の行列に並び直します。「待機の出口は実行可能状態だけ」と覚えてください
  2. SVC割込みとページフォールトを外部割込みに分類する:どちらも実行中のプログラムが引き起こしたものなので内部割込みです。判断基準は「原因がプログラムの中か外か」の一点です
  3. 論理式を頭の中で変形しようとする:ド・モルガンの法則を暗算で適用すると符号を落とします。入力2つなら4行、3つなら8行の真理値表を書き出すのが最短ルートです

時間配分:論理回路は書けば必ず解ける

午前1は50分で30問、単純計算で1問100秒です。状態遷移や割込みの分類は知っているか否かの一発勝負なので、20秒で判断して次へ進みます。ここで浮いた時間を、論理回路とページフォールトの数え上げに回してください。

論理回路は、真理値表を書けば時間はかかるものの正解率が跳ね上がる問題です。100秒フルに使う価値があります。逆に、カルノー図やフリップフロップの動作表が必要な問題に出会ったら、その場で捨てる判断をしてください。

SC試験本体(午前2・午後)への接続

午前1のこの分野は、SC試験の本体にもつながっています。排他制御の不備が生むレースコンディションとTOCTOU、記憶保護違反の延長にあるバッファオーバーフロー、OSの権限管理と最小権限の原則、ファームウェア改ざんとセキュアブート。いずれも、OSがどう資源を管理しているかを知っていることが前提の話です。午前1のための暗記だと思って通り過ぎず、後半戦の土台として押さえておくと投資効率が上がります。

【演習】ソフトウェアとハードウェア 理解度チェック(全10問)

午前1(科目A-1)では、タスクの状態遷移や割込みの分類、OSSライセンスといった用語問題と、ページフォールト回数や論理回路の出力を求める計算・作図問題が組み合わせて出題されます。定番のひっかけは、待機状態から実行状態へ直接戻る遷移を正解に見せる選択肢、SVC割込みやページフォールトを外部割込みに分類させる選択肢、半加算器の和と桁上げでXORとANDを入れ替える形、そしてスラッシングの対策として多重度を上げさせる形です。以下の練習問題で本記事の理解度を確認してみましょう。

【練習問題】ソフトウェアとハードウェア(全10問)

まとめ:OSの仕事は「限られた資源を誰にどう配るか」

ソフトウェアとハードウェアの分野は、暗記項目が多いように見えて、根っこは1つです。有限の資源を、複数の仕事にどう配るか。CPU時間の配り方がスケジューリング、主記憶の配り方が記憶管理と仮想記憶、資源の取り合いを整理するのが排他制御です。この視点で並べ直すと、個別の用語がつながって見えてきます。

持ち帰るべきものを整理します。待機状態の出口は実行可能状態だけ。割込みは原因がプログラムの中なら内部、外なら外部。ページフォールトは参照順のメモを取りながら数える。スラッシングの対策は多重度を下げるか主記憶を増やすか。デッドロックは資源の要求順序を全タスクで統一すれば構造的に防げる。論理回路は真理値表を書けば必ず解ける。半加算器は和がXOR、桁上げがAND。この程度の分量で、この分野の出題の大半は拾えます。

そして、ここで学ぶ内容は試験だけの知識ではありません。CIOとして投資判断をしていた頃、サーバーの増設要求が上がってきたときに最初に確認したのは、それが本当にメモリ不足なのか、それとも別の要因なのか、という切り分けでした。ページイン・ページアウトが頻発しているならメモリ増設に意味がありますが、そうでなければお金を捨てることになります。デッドロックの4条件も、障害の原因を切り分けるときのチェックリストとして使えます。試験の用語は、現場で起きている現象を短く名指しするための道具です。

次回は第1部の後半に入り、ネットワークの基礎としてOSI基本参照モデルとTCP/IPを扱います。SC試験の本体に最も直結する分野なので、午前1の範囲を足がかりにしながら、その先まで見通せる形で整理していきます。

本記事は情報処理安全確保支援士(SC)試験対策を目的として作成しています。

参考資料

このドキュメントで一部のコンテンツが無効になっています

FREE PDF
SC午後記述
テンプレート集
登録特典
メール講座 登録で無料プレゼント
「知っているのに書けない」を、型で解消するPDF
設問の文末から解答の「型」を割り出し、そのまま当てはめて書く。SC午後の記述で手が止まらなくなる1冊です。
設問6タイプ分類頻出7テーマ減点10パターン時間配分&見直し
無料でPDFを受け取る →

+おまけ:毎日1通の無料メール講座つき。登録した日が「1日目」、図解と論理で16週間かけて基礎も固まります。

登録無料·いつでも配信停止
自社のセキュリティ対策に不安はありませんか?
BKサクセスでは、専任の情シスがいない中小企業様向けに、伴走型のセキュリティ対策支援を行っています。
まずは無料相談から、お気軽にご連絡ください。
✉️ セキュリティ対策について相談する(無料)

▼ 本気で難関資格を狙うなら、攻略法から

資格スクエア

▼ 理想の転職へ。まずはプロに相談

  • この記事を書いた人

Kenta Banno

元CIOの窓際サラリーマン(50代)。プライム上場企業の片隅で、情報処理安全確保支援士の合格を目指して奮闘中! 現在はAI(Gemini/Claude)を「壁打ち相手」として徹底活用し、日々の学習の備忘録とアウトプットを兼ねて記事を投稿しています。同じ資格を目指す初学者の参考になれば嬉しいです。

-1.テクノロジ