基本情報技術者試験 ハードウェア・OS完全対策
CPU・メモリ・仮想記憶・スケジューリング
ハードウェアとOS(オペレーティングシステム)は、コンピュータの内部構造と資源管理を学ぶ分野です。 基本情報技術者試験では、CPUの性能計算(MIPS・クロック計算)、キャッシュの実効アクセス時間計算、 仮想記憶のページング、プロセスのスケジューリングといった計算問題が頻出します。 公式を正確に覚えて数値を代入する練習を繰り返すことが、この分野の攻略の鍵です。
1. CPUの基本・クロック・MIPS計算
CPU(中央処理装置)はコンピュータの頭脳で、命令の読み込み・解読・実行を繰り返します。 動作のタイミングを刻む基準となるのがクロック信号で、その周波数(Hz)が高いほど1秒間に多くの命令を処理できます。 1GHz(ギガヘルツ)は1秒間に10億回のクロックを意味します。
クロックサイクル時間と処理時間の計算
クロック周波数とクロックサイクル時間(1クロックにかかる時間)は逆数の関係にあります。
命令の実行に必要なクロック数をCPI(Clocks Per Instruction)といい、処理時間は以下で求めます。
MIPS(Million Instructions Per Second)
MIPSは1秒間に何百万命令を実行できるかを示す性能指標です。試験では「クロック周波数とCPIからMIPSを求める」問題が頻出します。
パイプライン処理
パイプラインは複数の命令を流れ作業のように並行処理する技術です。 1命令を「フェッチ→解読→実行→書き込み」の4段階に分け、各段階を重ねて実行することで1クロックごとに1命令を完了できる状態を目指します。 ただし、分岐命令(if文など)が来るとパイプラインの先読みが無駄になる「分岐ハザード」が発生することがあります。
CISC と RISC
| 方式 | 特徴 | 代表例 |
|---|---|---|
| CISC | 複雑・高機能な命令セット。1命令で多くの処理ができる | x86(IntelのPC用CPU) |
| RISC | 単純な命令のみ。1命令を高速に実行。パイプラインに向く | ARM(スマートフォン用CPU) |
2. メモリ階層とキャッシュの実効アクセス時間
コンピュータの記憶装置は、速度・容量・コストのトレードオフで階層構造を形成しています。 上位ほど高速・小容量・高価で、下位ほど低速・大容量・低コストです。 この構造を「メモリ階層」と呼びます。
| 階層 | 速度 | 容量の目安 | 種類 |
|---|---|---|---|
| レジスタ | 最速(1クロック以下) | 数十〜数百バイト | CPU内部 |
| キャッシュメモリ(L1〜L3) | 高速(数〜数十ns) | 数KB〜数十MB | SRAM |
| 主記憶(メインメモリ) | 中速(数十〜百ns) | 数GB〜数十GB | DRAM |
| 補助記憶(SSD/HDD) | 低速(μs〜ms) | 数百GB〜数TB | フラッシュメモリ・磁気ディスク |
キャッシュメモリと実効アクセス時間の計算
キャッシュメモリは、CPUと主記憶の速度差を埋めるための高速な記憶装置です。 よく使うデータをあらかじめキャッシュに保持しておくことで、CPUが待つ時間を大幅に減らせます。 目的のデータがキャッシュに存在する確率をヒット率(h)といい、 ヒット率が高いほど全体の平均アクセス時間(実効アクセス時間)は短くなります。
DRAM と SRAM の違い
| 種類 | 速度 | コスト | 用途 | 特徴 |
|---|---|---|---|---|
| SRAM | 高速 | 高い | キャッシュメモリ | リフレッシュ不要。フリップフロップ回路で構成 |
| DRAM | やや低速 | 安い | 主記憶(メインメモリ) | 定期的なリフレッシュが必要。コンデンサで構成 |
3. 仮想記憶・ページング・ページ置換アルゴリズム
仮想記憶(バーチャルメモリ)は、補助記憶(SSD/HDD)の一部を主記憶の延長として使い、 実際の物理メモリよりも大きなアドレス空間をプログラムに提供する仕組みです。 プログラムは物理アドレスを意識せず、仮想アドレスでメモリにアクセスできます。 OSとハードウェア(MMU:メモリ管理ユニット)が仮想アドレスを物理アドレスに変換します。
ページングとページフォールト
ページングは仮想記憶を固定長のブロック(ページ)単位で管理する方式です。 仮想アドレス空間をページに分割し、必要なページだけ主記憶に載せておきます。 プログラムがアクセスしようとしたページが主記憶にない状態をページフォールトといい、 発生するとOSが補助記憶から該当ページを主記憶に読み込みます。この読み込み処理(ページイン)は時間がかかるため、 ページフォールトの頻度を減らすことが性能改善の鍵になります。
セグメンテーション
ページングが固定長でメモリを分割するのに対し、セグメンテーションはプログラムのコード・データ・スタックなど 論理的な意味単位(可変長)で分割する方式です。 内部断片化(ページ内の未使用領域)が生じにくいですが、外部断片化(割り当て済み領域の隙間)が発生しやすいというトレードオフがあります。
ページ置換アルゴリズム
主記憶が満杯のときに新しいページをページインするには、既存のページを追い出す(ページアウト)必要があります。 どのページを追い出すかを決めるのがページ置換アルゴリズムです。
| アルゴリズム | 方針 | 特徴 |
|---|---|---|
| FIFO | 最も古く読み込まれたページを置換 | 実装が簡単。最適とは限らない |
| LRU(最近最も使われていない) | 最後に参照された時刻が最も古いページを置換 | 頻出。キャッシュの置換にも使われる |
| LFU(最も使用頻度が低い) | 参照回数が最も少ないページを置換 | 頻繁に使われたページを残せる |
| 最適アルゴリズム(OPT) | 将来最も長く使われないページを置換 | 理論上最適だが未来は予測不可能 |
スラッシング
スラッシングは、主記憶が不足してページフォールトが多発し、 処理よりもページの入れ替え(ページイン・ページアウト)の方に時間がかかってしまう状態です。 CPUの使用率が極端に低下するという逆説的な現象が起きます。 対策としては、主記憶の増設、同時実行プロセス数の削減、ページサイズの見直しなどがあります。
4. プロセスとスケジューリング
プロセスとは、実行中のプログラムのことです。 OSは複数のプロセスを管理し、CPUの使用権を次々に割り当てることで、複数のアプリが同時に動いているように見せます(マルチタスキング)。 どのプロセスにどの順番でCPUを割り当てるかを決めるのがプロセススケジューリングです。
プロセスの状態遷移
| 状態 | 説明 |
|---|---|
| 実行可能状態(待機) | CPUが空くのを待っている状態 |
| 実行状態 | CPUを使って命令を実行している状態 |
| 待ち状態(ブロック) | 入出力完了などのイベントを待っている状態 |
主なスケジューリング方式
| 方式 | 説明 | 特徴 |
|---|---|---|
| FCFS(到着順) | 到着した順に処理する | 実装が簡単。長い処理が来ると後続が待たされる |
| SJF(最短ジョブ優先) | 処理時間が短いプロセスを優先 | 平均待ち時間が短くなるが、長い処理は後回しになり続ける可能性がある(飢餓) |
| ラウンドロビン | 各プロセスに一定時間(タイムクォンタム)ずつ順番にCPUを割り当てる | 公平性が高く対話型システムに適している。試験で最頻出 |
| 優先度スケジューリング | 優先度の高いプロセスを先に実行する | 優先度の低いプロセスが長時間待たされる飢餓が起きうる |
| 多段フィードバックキュー | 複数の優先度キューを用意し、実行するたびに優先度を下げる | 長時間のプロセスの優先度を自動的に下げる適応型 |
ラウンドロビンの計算例
タイムクォンタムを2msとして、3つのプロセスA(処理時間5ms)、B(処理時間3ms)、C(処理時間4ms)が同時に到着した場合、 実行順はA(2ms)→B(2ms)→C(2ms)→A(2ms)→B(1ms)→C(2ms)→A(1ms) となります。 プロセスAの完了時刻は12ms、Bは9ms、Cは11msです。
5. 割り込みとデバイス管理
割り込み(インタラプト)
割り込みとは、CPU が処理中に外部や内部からの信号によって現在の処理を中断し、 別の処理(割り込みハンドラ)を実行する仕組みです。 割り込みが終わると元の処理に戻ります。
| 種類 | 原因 | 例 |
|---|---|---|
| 外部割り込み(ハードウェア割り込み) | 外部デバイスからの信号 | キーボード入力、タイマー満了 |
| 内部割り込み(例外) | CPU内部のエラーや特殊命令 | ゼロ除算、ページフォールト、スーパーバイザーコール |
割り込みによってCPUはI/O待ちで止まらずに別のプロセスの処理を進められるため、システム全体の効率が大きく向上します。 この仕組みを活用した入出力方式が割り込み駆動型I/Oです。
DMA(Direct Memory Access)
DMAは、CPUを介さずにメモリとI/Oデバイスの間で直接データ転送を行う仕組みです。 大量のデータ転送(ディスクからメモリへの読み込みなど)の際にCPUの負荷を大幅に軽減できます。 転送が完了したらDMAコントローラがCPUに割り込みを発行して完了を通知します。
6. 計算例題で確認
7. よくある質問(FAQ)
Q. MIPS計算でつまずきます。何から押さえればいいですか?
A. まず「MIPS = クロック周波数(MHz) ÷ CPI」の公式を丸暗記してください。次に、問題文の単位(GHzならMHzに変換するなど)に気をつけながら数値を代入する練習をくり返せば解けるようになります。
Q. 実効アクセス時間の計算で「主記憶アクセス時間の定義」が問題によって違う気がします。
A. 正しい認識です。「キャッシュにない場合のみ主記憶にアクセス」か「常にキャッシュと主記憶の両方にアクセス」かで式が変わります。問題文の「キャッシュミス時のアクセス時間」や注釈をよく読んで判断するのが正解への近道です。
Q. メモリ階層が覚えられません。
A. 「レジスタ→キャッシュ(SRAM)→主記憶(DRAM)→補助記憶(SSD・HDD)」の順で、上ほど速く・小さく・高価、と一直線で覚えましょう。「速い→小さい→高い」の3セットがセットで来る、と覚えると整理しやすいです。
Q. 仮想記憶とページングの違いがよくわかりません。
A. 「仮想記憶」は補助記憶を使って大きなメモリ空間を作る仕組み全体の概念、「ページング」はその実現方法の一つです。ページングのほかにセグメンテーションという方式もありますが、試験ではページングの出題が多いです。
Q. スラッシングとページフォールトの違いは?
A. ページフォールトは「必要なページが主記憶にない」という単発の現象。スラッシングは「ページフォールトが多発しすぎてCPUが本来の処理をほとんどできない」という深刻な状態です。原因はページフォールトですが、スラッシングはその連鎖反応によるシステム全体の機能不全を指します。
Q. ラウンドロビンのタイムクォンタムはどう設定すればよいですか?
A. タイムクォンタムが短すぎるとコンテキストスイッチ(プロセスの切り替えオーバーヘッド)が増えてかえって非効率になり、長すぎるとFCFSに近くなり応答性が悪化します。試験では「適切なタイムクォンタムを設定すべき」という知識として押さえておけば十分です。
Q. 割り込みとDMAはどう使い分けられるのですか?
A. 割り込みは「イベント発生をCPUに知らせる」仕組み全般で、キーボード入力・タイマーなど少量のデータに使われます。DMAは「大量データ転送をCPUを使わずに行う」仕組みで、ディスク読み書きなどに使われます。DMAが完了したときもCPUへの割り込みで通知するので、両者は組み合わせて使われます。