コンピュータの基礎
CPU、メモリ、補助記憶装置、OS、ミドルウェア、データ表現、システム構成の原理を整理する
このページの役割
このページは、コンピュータの基礎 を整理するページです。装置が何をするか、どのソフトウェアがどこに位置するか、データがどう表現されるか、システムはどう構成されるか を 4 つの視点で押さえます。
このページの読み方
- ハードウェア編:5大装置、CPU性能、高速化技術、記憶階層、RAID を順に読む
- ソフトウェア編:OS、ミドルウェア、アプリケーション の層を把握する
- データ表現編:進数、補数、浮動小数点、論理演算 の計算例で手を動かす
- システム構成編:集中・分散・C-S など処理形態を比較する
- 確認問題:パイプライン、キャッシュ、RAID の計算と判断を試す
学習のポイント
- まず
ハードウェアとソフトウェアを分ける - 次に
5大装置と記憶階層の役割をつかむ - CPU 性能指標の意味と計算を確認する
OSとミドルウェアの違いを切る- 進数と補数、浮動小数点の計算を実際にやってみる
- そのうえで集中・分散・C-S の構成を読む
試験で何が問われるか
5大装置の役割を説明できるかCPU性能指標(クロック周波数、MIPS、CPI、FLOPS)の意味を言えるかパイプライン処理とスーパースカラの効果を計算できるかキャッシュヒット率と実効アクセス時間を求められるか記憶階層と仮想記憶の仕組みを説明できるか進数変換、補数、浮動小数点の計算ができるか論理演算の真理値表を読めるかRAID0/1/5/6/10 の違いと選択を言えるか処理形態(集中・分散・C-S・P2P・3層)を使い分けられるか
ハードウェア編
5大装置と役割
コンピュータはシンプルな原理で動作しています。プログラムを実行する際、制御装置 が指令の流れを管理し、演算装置 が計算を実行し、記憶装置 がデータを保持し、入出力装置 が外部と通信します。この 5 つの装置の協調で、すべてのコンピュータ処理が実現されています。
制御装置 の役割は司令塔です。メモリに格納されたプログラムの命令を 1 つずつ読み込み、その命令に応じて演算装置や入出力装置へ指示を送ります。制御装置がなければ、各装置が何をすればよいかわからず、全体の処理が進みません。
演算装置 は計算と論理操作を担当します。加算や減算などの算術演算、AND や OR などの論理演算を実行します。制御装置の指示を受けて初めて動作するため、制御装置と連携して機能します。実装上、制御装置と演算装置は同じ回路上に統合されており、この組み合わせを CPU(Central Processing Unit) と呼びます。
主記憶装置 は実行中のプログラムとそのデータを一時的に保持する場所です。CPU がプログラムを実行する際、命令やデータはすべてこの主記憶から読み込まれます。DRAM という種類のメモリが使われており、高速にアクセスできますが、電源を切ると中身は消える揮発性です。これは、実行直前にディスクから読み込まれるため、消えること自体は問題ではありません。しかし、物理的な容量は限られており、すべてのプログラムとデータを常に主記憶に置くことはできません。
補助記憶装置 は長期的にプログラムとデータを保存する装置です。ハードディスクや SSD などが該当します。主記憶より遅いですが、電源を切っても内容が残る不揮発性が特徴です。コンピュータを起動した直後、プログラムはここから主記憶に読み込まれます。
入出力装置 は外部とのデータやり取りを担当します。キーボードでユーザーが入力したデータを受け取り、画面にデータを表示し、ネットワークカード経由で他のコンピュータと通信します。制御装置が指示することで初めて動作します。
| 装置 | 役割 | 特徴 |
|---|---|---|
| 制御装置 | 命令をメモリから読み込み、各装置へ指示を送る | 演算装置や入出力を制御する司令塔 |
| 演算装置 | 計算と論理操作を実行する | CPU内に統合されることが多い |
| 主記憶装置 | 実行中のプログラムとデータを一時保存 | 高速だが揮発性(電源OFF時に消える) |
| 補助記憶装置 | プログラムとデータを長期保存 | 遅いが不揮発性(ハードディスク、SSD等) |
| 入出力装置 | データを外部から受け取り、外部へ出力する | キーボード、画面、ネットワークカード等 |
制御装置と演算装置は合わせて CPU(Central Processing Unit) と呼びます。
CPU性能指標
CPU の性能を評価するとき、単に「クロック周波数が高い」というだけでは不十分です。同じクロック周波数でも、1 つの命令を処理するのに必要なサイクル数が異なれば、実際の処理速度は大きく変わります。そのため、複数の指標を組み合わせて性能を評価する必要があります。
クロック周波数 は CPU が 1 秒間に実行するクロックパルスの回数を示し、単位は GHz(ギガヘルツ)です。これが高いほど、単位時間あたりにより多くの処理が可能になります。しかし、クロック周波数だけを見て CPU を比較することはできません。なぜなら、同じクロック周波数の CPU でも、「1 つの命令を実行するのに何サイクル必要か」が異なるからです。
CPI(Cycles Per Instruction) は、1 つの命令を実行するのに必要なクロックサイクル数です。CPI が低いほど、同じサイクル数でより多くの命令が実行でき、効率が高いと言えます。たとえば、CPI が 2 なら、1 命令あたり 2 クロックサイクル必要です。
MIPS(Million Instructions Per Second) は、1 秒間に実行できる命令の百万単位の数です。MIPS = クロック周波数 ÷ CPI ÷ 10^6 という式で計算され、汎用的な性能指標として使われます。
FLOPS(Floating Point Operations Per Second) は、浮動小数点演算の毎秒回数です。科学計算やグラフィックス処理など、小数を含む複雑な計算が多い場合、MIPS よりも FLOPS を重視して CPU を選びます。
最終的に重要なのは 実行時間 です。どれだけ早くプログラムが完了するかは、次の式で決まります。
実行時間 = 命令数 × CPI ÷ クロック周波数
この式を見ると、実行時間を短くするには、①命令数を減らす(効率的なアルゴリズム)、②CPI を下げる(CPU設計の工夫)、③クロック周波数を上げる(ハードウェアの改善)の 3 つの方法があることがわかります。
計算例: クロック周波数 3 GHz、CPI 2 の CPU で 10 億命令を実行する場合、実行時間は以下のように計算します。
実行時間 = 10^9 × 2 ÷ (3 × 10^9) = 2 ÷ 3 ≈ 0.667 秒
この CPU は約 0.67 秒でこれらの命令をすべて実行します。もし同じ命令セットを CPI が 1 の CPU(より効率的な設計)で実行できれば、実行時間は約 0.33 秒に短縮されます。
| 指標 | 定義 | 用途 |
|---|---|---|
| クロック周波数 | CPU が 1 秒間に実行するクロックパルスの回数(単位:GHz) | 単位時間あたりの動作速度。高いほど高速 |
| MIPS | Million Instructions Per Second。1秒間に実行できる命令の百万単位の数 | 汎用性能の目安 |
| CPI | Cycles Per Instruction。1 命令を実行するのに必要なクロックサイクル数 | 低いほど効率が良い |
| FLOPS | Floating Point Operations Per Second。浮動小数点演算の毎秒回数 | 科学計算やグラフィックス向け |
CPU高速化技術
CPU の性能を上げるには、クロック周波数を単純に上げるだけでなく、複数の工夫を組み合わせる必要があります。最新のプロセッサには、以下のような高速化技術が搭載されています。
パイプライン処理 は、命令の実行を複数のステージ(段階)に分割し、複数の命令を重ねて処理する技術です。たとえば、命令実行を「フェッチ(取得)」「デコード(解析)」「実行」「メモリアクセス」「ライトバック(結果保存)」の 5 ステージに分割すると、1 つの命令がメモリアクセスステージにいるとき、次の命令は実行ステージに、その次の命令はデコードステージにいるという状態になります。このため、複数の命令が同時に進行し、全体のスループットが向上します。ただし、分岐(if 文など)が発生すると、パイプラインの途中で待機が発生し、効果が減少することがあります。
スーパースカラ は、複数の演算ユニットを搭載し、1 クロックサイクルで複数の命令を同時に実行する技術です。パイプラインとの組み合わせで、さらに高いスループットが実現されます。ただし、命令間に依存関係がある場合(前の命令の結果を次の命令が使う場合)、並列実行ができず、待機が発生します。
アウトオブオーダー実行 は、CPU が命令の依存関係を自動解析し、プログラムに書かれた順序と異なる順序で命令を実行する技術です。これにより、スーパースカラの待機を減らし、効率を上げられます。
マルチコア は、1 つの物理プロセッサに複数の CPU コア(演算ユニット)を搭載する技術です。マルチスレッド対応のプログラムなら、複数のコアで並列処理が可能になり、大幅な高速化が期待できます。ただし、複数コア間の同期やデータ共有にオーバーヘッドが発生するため、すべての処理が単純に N 倍速くなるとは限りません。
キャッシュメモリ は、CPU と主記憶の間に高速な小容量メモリを階層化して配置し、メモリアクセス時間の遅延を削減する技術です。詳しくは「記憶階層」の節で説明します。
パイプライン処理の計算
パイプラインの効果を定量的に理解するため、計算方法を学びます。k ステージのパイプラインで n 個の命令を実行する場合、処理時間は次のようになります。
処理時間 = (k + n - 1) × 1 ステージ時間
この式の意味を考えてみましょう。最初の命令は k ステージすべてを経由する必要があるため、k サイクル必要です。その後、パイプラインが十分に満杯になれば、毎サイクル 1 つの命令が完了します。したがって、残りの (n - 1) 個の命令には (n - 1) サイクルが必要です。合計すると k + (n - 1) = k + n - 1 サイクルになります。
計算例: 5 ステージのパイプラインで 100 個の命令を実行する場合を考えます。
パイプラインあり:(5 + 100 - 1) × 1 = 104 ステージ時間
非パイプライン(1 命令ごとに 5 ステージを逐次実行):100 × 5 = 500 ステージ時間
高速化比 = 500 ÷ 104 ≈ 4.8 倍
このように、パイプラインを導入するだけで約 5 倍近い高速化が実現されます。ステージ数が多いほど、また命令数が多いほど、高速化の効果がより顕著になります。
| 技術 | 仕組み | 効果と制限 |
|---|---|---|
| パイプライン | 命令を複数のステージに分割し、重なりを持たせて並列実行 | ステージ数が多いほど効果大。ただし分岐で待機が発生 |
| スーパースカラ | 複数の演算ユニットで同時に複数命令を実行 | スループットを大幅に上げるが、依存関係で待機 |
| アウトオブオーダー実行 | 命令の依存関係を解析し、順序を変えて実行 | スーパースカラの効率を上げる |
| マルチコア | 1つの CPU に複数のコア(演算ユニット)を搭載 | 並列処理に適した問題で大幅高速化。同期オーバーヘッドに注意 |
| キャッシュメモリ | 高速な小容量メモリを階層化して配置 | メモリアクセスの遅延を削減 |
記憶階層
コンピュータシステムにおいて、「高速だが容量が小さい」と「低速だが容量が大きい」という矛盾した要求を解決するために、複数の異なる速度と容量のメモリを階層的に配置する設計が採用されています。これが 記憶階層 です。
CPU に最も近いレジスタから始まり、L1 キャッシュ、L2 キャッシュ、L3 キャッシュ、主記憶、補助記憶へと階層化されています。上の階層ほど高速で容量が小さく、下の階層ほど低速で容量が大きいという関係が成り立ちます。
レジスタ は CPU の内部に直接組み込まれた最小のメモリです。演算結果や計算中の値を一時的に保持します。数十バイト〜数 KB の容量(SIMD レジスタを含む場合)で、アクセス時間は 1 ナノ秒以下〜数ナノ秒(非常に高速)です。
L1 キャッシュ は各 CPU コア内に個別に配置された高速メモリです。数十 KB の容量で、アクセス時間は 3~10 ナノ秒です。プログラムが最頻繁にアクセスするデータがここに置かれます。
L2 キャッシュ は L1 より大きく遅いキャッシュで、数百 KB の容量、アクセス時間は 10~20 ナノ秒です。各コア別に配置されることもあり、コア群で共有されることもあります。
L3 キャッシュ はマルチコア CPU で複数コア間で共有される、さらに大容量のキャッシュです。数 MB の容量、アクセス時間は 20~50 ナノ秒です。
主記憶(DRAM) は実行中のプログラムとデータを保持するメインメモリです。数 GB~数十 GB の容量で、アクセス時間は 50~100 ナノ秒です。キャッシュより遅いですが、補助記憶よりはるかに高速です。
補助記憶(HDD/SSD) は長期的にプログラムとデータを保存する装置です。TB 以上の大容量ですが、アクセス時間は数ミリ秒~数秒と非常に遅いです。電源を切っても内容が残る不揮発性が特徴です。
このような階層構造により、「CPU が高速に実行する」という要求と「大量のデータを保存する」という要求の両立が可能になっています。
キャッシュヒット率と実効アクセス時間
キャッシュの効果がどれほどあるかを評価するために、ヒット率 と 実効アクセス時間 という概念が使われます。
ヒット率(h) は、CPU がアクセスしたアドレスがキャッシュに存在する確率です。ミス率(1 - h) はキャッシュに見つからず、より下位のメモリ層から取得する確率です。
キャッシュが機能しているとき、データアクセスの合計時間は、ヒット時の時間(高速)とミス時の時間(低速)を確率で加重平均したものになります。これを 実効アクセス時間 といい、以下の式で計算されます。
T_実効 = h × T_キャッシュ + (1 - h) × T_メモリ
この式の意味を考えてみましょう。全アクセスの h 割はキャッシュから高速に取得でき、残りの (1 - h) 割は主記憶から低速に取得されます。ヒット率が高いほど、実効時間はキャッシュアクセス時間に近づきます。
計算例: L1 キャッシュとメモリのアクセス環境で、実効時間を計算してみます。
条件:
- L1 キャッシュアクセス時間:5 ナノ秒
- 主記憶アクセス時間:50 ナノ秒
- ヒット率:90%
T_実効 = 0.9 × 5 + 0.1 × 50 = 4.5 + 5 = 9.5 ナノ秒
ヒット率が 90% でも、実効時間は 9.5 ナノ秒です。これは直感より遅く感じるかもしれません。なぜなら、ミスした 10% のアクセスに 50 ナノ秒かかり、その影響が大きいからです。もしヒット率を 95% に上げたら、T_実効 = 0.95 × 5 + 0.05 × 50 = 4.75 + 2.5 = 7.25 ナノ秒となり、わずか 5% の改善でも時間短縮効果がより顕著になります。このため、キャッシュ設計では、ヒット率を極限まで上げることが重要です。
| 階層 | 種類 | 容量 | アクセス時間 | 揮発性 | 用途 |
|---|---|---|---|---|---|
| レジスタ | SRAM | 数十バイト〜数KB | 1 ns以下〜数 ns | 揮発 | CPU内の最高速メモリ |
| L1キャッシュ | SRAM | 数十KB | 3~10 ns | 揮発 | コア別、最頻繁アクセス用 |
| L2キャッシュ | SRAM | 数百KB | 10~20 ns | 揮発 | コア別またはコア群用 |
| L3キャッシュ | SRAM | 数MB | 20~50 ns | 揮発 | 複数コア共有 |
| 主記憶(メモリ) | DRAM | GB~数十GB | 50~100 ns | 揮発 | 実行中のプログラムとデータ |
| 補助記憶 | HDD/SSD | TB以上 | ms以上 | 不揮発 | 長期保存 |
主記憶の種類
主記憶を構成するメモリにはいくつかの種類があり、それぞれの特性に応じて使い分けられています。
DRAM(Dynamic RAM) は、微小なキャパシタに電荷を蓄えることでデータを保存する方式です。「動的」という名前の通り、保存されたデータは時間とともに放電してしまうため、定期的に電荷を補充する「リフレッシュ」という処理が必要です。この仕組みにより、小さな回路面積でメモリセルを実装できるため、大容量化が容易です。したがって、PC やサーバの主メモリとして広く使われています。読み書き両方が可能で、電源を切ると内容は消える揮発性です。
SRAM(Static RAM) は、複数のトランジスタを組み合わせてデータを保持する方式です。「静的」という名前の通り、リフレッシュが不要で、一度データを書き込めば電源がある限り保持されます。DRAM よりはるかに高速にアクセスできますが、同じ容量を実装するのに DRAM より多くの回路面積が必要です。このため、キャッシュメモリとして使われます。読み書き両方が可能で揮発性です。
ROM(Read-Only Memory) は、読み出し専用のメモリで、初期化時に一度だけ内容を書き込み、その後は読み出すだけです。電源を切っても内容が残る不揮発性が特徴です。コンピュータの起動時に実行される BIOS やマイクロプロセッサのファームウェアなど、変更する必要のない基本的な制御プログラムを格納するのに使われます。
フラッシュメモリ は、半導体メモリで、SSD や USB メモリの主要な構成要素です。ROM のように電源を切っても内容が残る不揮発性を持ちながら、ROM と異なり、データの書き直しが何度もできます。ただし、1 回の書き直し操作に時間がかかるため、読み出しと比べて書き込み速度は遅いという特性があります。
一般的なコンピュータの構成は、DRAM を主記憶とし、SRAM をキャッシュメモリとして使用しています。また、コンピュータの起動時に実行される初期化プログラムは ROM に格納されます。
| メモリ種別 | 特性 | 読み書き | 揮発性 | 用途 |
|---|---|---|---|---|
| DRAM | 動的RAM。キャパシタに電荷で保存。定期的なリフレッシュが必要 | 読み書き可 | 揮発 | 主メモリ。PC、サーバ標準 |
| SRAM | 静的RAM。トランジスタで保持。リフレッシュ不要。高速 | 読み書き可 | 揮発 | キャッシュメモリ |
| ROM | Read-Only Memory。読み出し専用。電源OFF時も保持 | 読み出しのみ | 不揮発 | BIOS、ファームウェア |
| フラッシュメモリ | 半導体メモリ。SSD、USBメモリの主体。書き直し可能だが遅い | 読み書き可 | 不揮発 | SSD、メモリカード |
フラッシュメモリの特性と試験での見分け方
フラッシュメモリは、電源を切っても内容が消えない という点で ROM に似ていますが、何度も書き換えられる という点で補助記憶装置として実用化されています。試験では、単に「不揮発性」で終わらず、SSD や USB メモリに使われる理由 と RAM との違い をセットで問われます。
重要なのは、フラッシュメモリは 1 バイトずつ自由に上書きするのではなく、ブロック単位で消去してから書き込む という点です。これが、読み出しより書き込みや消去が遅い理由であり、書換え回数に上限がある理由でもあります。
| 観点 | フラッシュメモリ | DRAM | ROM |
|---|---|---|---|
| 電源OFF後 | 内容が残る | 消える | 残る |
| 書換え | 可能だが回数制限あり | 自由に可能 | 原則不可 |
| 速度 | 読み出しは速いが、消去・書込みは遅め | 高速 | 読み出し中心 |
| 主な用途 | SSD、USBメモリ、SDカード | 主記憶 | ファームウェア |
| 試験での着眼点 | 不揮発性と書換え可能性の両立 | 揮発性の高速メモリ | 不揮発だが柔軟に更新しない |
さらに、フラッシュメモリには NAND 型 と NOR 型 があります。試験では細かい回路構造より、NAND は大容量保存向き、NOR は高速読み出し向き と整理すれば十分です。
NAND型:高密度で大容量化しやすく、SSD や USB メモリに使われるNOR型:ランダムアクセス性が高く、組込み機器のファームウェア格納に使われる
受験上は、SSD = フラッシュメモリ = 不揮発性 をまず固定し、そのうえで 書込みは無限ではない DRAM の代替ではない という2点を切り分けられるようにしておくと、選択肢を切りやすくなります。
RAID(冗長ディスクアレイ)
補助記憶装置は、コンピュータシステムの中でも故障のリスクが比較的高い部分です。ハードディスクは機械部品を含むため、寿命は主記憶より短く、故障時のデータ損失は重大な問題になります。RAID(Redundant Array of Independent Disks) は、複数のディスクを組み合わせることで、この問題を解決する技術です。故障時に高速に復旧したり、故障しても稼働を継続したりすることが可能になります。同時に、データアクセスの並列化により性能も向上できます。
RAID 0(ストライピング) は、データを複数のディスクに分散して書き込む方式です。データが複数ディスクに分散されているため、複数ディスクに並列アクセスでき、性能が大幅に向上します。容量効率も 100%(複数ディスクの容量をすべて使用)で、コスト面でも効率的です。しかし、1 台のディスクが故障するとデータの一部が失われ、復旧不可能になります。バックアップが別途ある環境や、キャッシュなど再構築可能なデータ用途で使われます。
RAID 1(ミラーリング) は、同じデータを 2 つのディスクに完全に複製する方式です。1 台が故障しても、もう 1 台にデータが残っているため、システムは継続稼働でき、故障ディスクの復旧時にデータ復帰が可能です。信頼性は最高レベルですが、容量効率は 50%(2 台分の物理容量で 1 台分のデータ容量)となり、コストが高くなります。小規模なシステムで最大の信頼性が必要な場合に採用されます。
RAID 5(ストライピング+パリティ) は、RAID 0 のストライピング高速化と、パリティ(誤り訂正情報)による冗長化を組み合わせた方式です。データとパリティが複数ディスクに分散されており、1 台のディスク故障なら、パリティから失われたデータを計算で復旧できます。容量効率は 3 台構成で 67%(1 台分がパリティ用)となり、バランスが取れています。実装が複雑になるため、故障時の復旧処理に時間がかかることがあります。しかし、コストと性能のバランスが良いため、サーバやストレージで最も一般的に採用されています。
RAID 6(デュアルパリティ) は RAID 5 を拡張し、パリティを 2 組搭載する方式です。これにより、2 台のディスクが同時に故障しても、システムを継続稼働させられます。大規模なストレージで 24 時間連続稼働が求められ、復旧に長時間かかる環境では、復旧途中に別のディスク故障が発生するリスクがあります。RAID 6 なら、そのようなリスクに対応できます。容量効率は 4 台構成で 50%(2 台分がパリティ用)となり、RAID 1 と同じです。
RAID 10(RAID 1+0) は、RAID 1 と RAID 0 を組み合わせた方式です。複数ディスクをペアにしてミラーリング(RAID 1)し、そのペア間でストライピング(RAID 0)します。このため、高い性能と高い信頼性を同時に実現できます。容量効率は 50%(4 台構成)で、実装も複雑になりますが、エンタープライズサーバなど最高レベルの性能と信頼性が必要な環境で採用されます。
選択の考え方: システムの要求に応じて、RAID 方式を選択する際の基準は以下の通りです。
- RAID 0:速度が最優先で、故障許容が不要な場合。別途完全なバックアップがある環境。
- RAID 1:小規模なシステムで、最大レベルの信頼性が必要な場合。
- RAID 5:バランスの取れた標準的な選択。中規模~大規模なサーバやストレージ。
- RAID 6:24 時間連続稼働で、復旧に長時間かかる大規模ストレージ。2 台同時故障の可能性を考慮する必要がある環境。
- RAID 10:高性能と高信頼性を同時に必要とするエンタープライズサーバ。コスト増も許容できる場合。
| RAID | 方式 | ディスク数 | 特徴 | 容量効率 | 信頼性 | 用途 |
|---|---|---|---|---|---|---|
| RAID 0 | ストライピング | 2以上 | データを複数ディスクに分散して速度UP | 100% | 故障時全損失。使用不可 | 高速が必要で、バックアップがある環境 |
| RAID 1 | ミラーリング | 2 | 同じデータを2つのディスクに複製 | 50% | 1台故障しても稼働。最高レベル | 小規模で信頼性重視 |
| RAID 5 | ストライピング+パリティ | 3以上(最小3) | データとパリティをいずれかのディスクに分散 | 67%(3台)以上 | 1台故障まで許容。バランス型 | 最も一般的 |
| RAID 6 | デュアルパリティ | 4以上 | RAID 5 と同じく分散だが、パリティ2組で冗長化 | 50%(4台)以上 | 2台同時故障まで許容 | 大規模、超高信頼性需要 |
| RAID 10 | RAID 1+0 | 4以上(最小4) | ミラーリング+ストライピング。各ペア内ミラー、ペア間ストライピング | 50% | 性能と信頼性の高いハイブリッド | エンタープライズサーバ |
DAS・NAS・SAN の違い
ストレージは「どこに置くか」だけでなく、サーバとどうつなぐか で性質が変わります。RAID が「複数ディスクの束ね方」の話なのに対して、DAS・NAS・SAN は「ストレージをシステムにどう提供するか」の話です。ここを混同すると、過去問で誤答しやすくなります。
| 方式 | 接続の考え方 | 利用者からの見え方 | 向いている場面 | 試験での見分け方 |
|---|---|---|---|---|
| DAS | サーバに直接接続 | そのサーバのローカルディスク | 小規模システム、単独サーバ | Direct Attached、もっとも単純 |
| NAS | ネットワーク越しにファイル共有 | 共有フォルダとして見える | ファイル共有、部門共用データ | ファイル単位 で共有 |
| SAN | 専用ネットワークでブロック単位接続 | サーバからは外付けディスクに見える | 高性能 DB、仮想化基盤 | ブロック単位、高速・高価 |
判断のコツは次のとおりです。
共有フォルダファイルサーバとあれば NASDBサーバから高速な外部ディスクとして認識なら SAN1台のサーバにUSBやSATAで直結なら DAS
受験では、RAID 5 の NAS のように複数概念を組み合わせた選択肢も出ます。RAID = 冗長化方式、NAS/SAN/DAS = 提供方式 と役割を分けて理解してください。
ソフトウェア編
プログラミング言語の分類
プログラミング言語は、コンピュータにどれだけ近いか、そして実行前にどう翻訳するかで整理すると混乱しません。試験では、機械語 / アセンブリ言語 / 高水準言語 と コンパイル型 / 解釈型 の2軸で問われます。
| 分類軸 | 種類 | 特徴 | 代表的なイメージ |
|---|---|---|---|
| 抽象度 | 機械語 | CPU がそのまま実行できる 0 と 1 の列 | 最も低水準 |
| 抽象度 | アセンブリ言語 | 機械語にニーモニックを付けた低水準言語 | MOV ADD など |
| 抽象度 | 高水準言語 | 人間が読み書きしやすい構文を持つ | C、Java、Python など |
| 翻訳方式 | コンパイル型 | 事前に機械語へまとめて変換してから実行 | C、C++、Go など |
| 翻訳方式 | 解釈型 | 実行時に1文ずつ読み解きながら動く | Python、JavaScript など |
区別のポイント
- アセンブリ言語は低水準言語 であり、高水準言語ではありません
- 高水準言語 = 解釈型 ではありません。高水準言語にもコンパイル型と解釈型があります
- コンパイル型は一般に実行速度が高く、解釈型は試行錯誤しやすい傾向があります
OS、ミドルウェア、アプリケーションの層構成
現代のコンピュータシステムは、ハードウェアから最上層のアプリケーションまで、複数のソフトウェア層が積み重なっています。各層は明確な役割を持ち、下位層のサービスを利用しながら、上位層へサービスを提供する構造になっています。
ハードウェア は物理的な CPU、メモリ、ディスク、入出力装置です。これらを直接操作するのは困難なため、その上にソフトウェア層が構築されます。
OS(オペレーティングシステム) は、ハードウェアとアプリケーションの間に位置する基盤です。Windows、Linux、macOS などが代表的です。OS の主な役割は、ハードウェアの複雑さを隠し、すべてのアプリケーションへ統一的で分かりやすいインタフェース(API)を提供することです。複数のプログラムが同時に実行できるようにスケジューリングしたり、メモリを効率的に管理したり、ディスクのファイルを階層的に整理したりします。
ミドルウェア は、OS とアプリケーションの間で、複数のアプリケーション共通の機能を提供するソフトウェアです。DBMS(データベース管理システム)は大量のデータを効率的に保存・検索するための機能を提供します。Web サーバはネットワークからの HTTP リクエストを受け取り、HTML などのコンテンツを返すサービスを提供します。アプリケーションサーバはビジネスロジック(複雑な計算や処理)を集中管理し、複数のクライアントからのリクエストを処理します。各アプリケーションが個別に実装する必要のない共通機能を、ミドルウェアが肩代わりすることで、開発効率が向上し、保守性も高まります。
アプリケーション は、最上層で、ユーザーが直接使うソフトウェアです。Excel や Word などのオフィスツール、会計システムなどの業務アプリケーション、Web ブラウザなど、具体的な目的を実現するために設計されています。
このような層構造により、各層が独立して改善・更新でき、全体の複雑性が管理できるようになっています。
| 層 | 名称 | 役割 | 例 |
|---|---|---|---|
| 最上層 | アプリケーション | 業務や利用者の目的に直接使うソフトウェア | Excel、Word、会計システム、Web ブラウザ |
| 中間層 | ミドルウェア | OS とアプリケーションの間で、共通機能を提供 | DBMS(DB2、Oracle)、Web サーバ(Apache、Nginx)、アプリケーションサーバ |
| 基盤層 | OS(オペレーティングシステム) | ハードウェアを管理し、すべてのアプリケーションへ統一インタフェースを提供 | Windows、Linux、macOS |
| 最下層 | ハードウェア | CPU、メモリ、ディスク、入出力装置 | — |
OSの主要機能
1. タスク管理(スケジューリング)
複数のプログラムが同時に実行されているかのように見える機能は、OS のタスク管理機能により実現されています。物理的には CPU は 1 つですが、OS は CPU 時間を複数のプログラムに分割して配分することで、マルチタスク環境を実現します。
マルチタスク は、複数のプログラム(プロセス)が、CPU 時間を時間分割して使用する仕組みです。OS のスケジューラが、一定時間ごと(通常数ミリ秒単位)に実行中のプロセスを切り替えることで、複数のプログラムが並列に動作しているように見えます。
マルチスレッド は、1 つのプロセス内で複数の実行路(スレッド)を持つ仕組みです。プロセスはプログラムの実行単位で、複数のプロセスはメモリ空間が分離されていますが、同じプロセス内のスレッドはメモリ空間を共有します。このため、スレッド間でのデータ共有が効率的ですが、同時アクセス時には矛盾を避けるための同期機構が必要です。
スケジューリング は、複数のプロセス・スレッドに CPU 時間を割り当てる方式です。公平性を重視して、各プロセスに順番に時間を割り当てる「ラウンドロビン」方式や、優先度の高いプロセスから順に処理する「優先度ベース」方式などがあります。
2. メモリ管理
OS は限られた物理メモリを、複数のプログラムで効率的に共有するための管理機構を提供します。
仮想記憶(Virtual Memory) は、物理メモリの不足を補う仕組みです。ハードディスクの一部を、メモリの拡張領域として使用します。プログラムは「物理メモリサイズより大きなメモリがある」と見なせるようになり、メモリ不足を気にせずプログラムを実装できます。実際には、必要に応じて OS が自動的にディスクとメモリの間でデータを入れ替えます。
ページング(Paging) は、仮想記憶を実装する具体的な技術です。メモリとディスクを固定サイズ(ページ、通常 4KB)に分割して管理します。プログラムが必要とするページだけをメモリに読み込み、不要になったページはディスクに書き込みます。ページテーブルという変換表により、プログラムが見ている仮想アドレスを実際の物理アドレスに変換します。
スラッシング(Thrashing) は、ページング過多による性能低下の状態です。メモリが極度に不足していると、ページの入れ替え(ページアウト・ページイン)ばかりが頻繁に発生し、実際の計算処理が進まず、CPU 使用率は高いのに処理速度は著しく遅くなります。スラッシングを避けるには、不要なプログラムを終了させてメモリを解放したり、メモリを増設したり、あるいはスワップ領域(ディスク上の仮想記憶領域)を拡張したりする対策が必要です。
3. ファイル管理
OS は、ディスク上に格納されたプログラムやデータを、利用者が分かりやすく、検索しやすいように管理します。
ファイルシステム は、ディレクトリ(フォルダ)とファイルの論理構造です。利用者は、フォルダを階層的に作成して、関連するファイルをまとめられます。OS は、この論理構造をディスク上の物理的な位置に対応付けて管理します。
アクセス制御 は、ファイルやディレクトリに対する利用者の操作権限を管理する仕組みです。読み込み、書き込み、実行などの権限を、ユーザーごと、グループごとに設定できます。これにより、重要なファイルへの不正アクセスを防ぎ、セキュリティを確保できます。
バックアップ・リカバリ は、システム障害やディスク故障時にデータを復旧するための仕組みです。OS はバックアップ機能を提供し、重要なデータを定期的に別の記憶媒体に複製します。障害発生時には、バックアップから復旧できます。
ミドルウェア
ミドルウェアは、OS とアプリケーションの間で、複数のアプリケーション共通の機能を提供するソフトウェアの総称です。各アプリケーションが個別に実装するのは効率が悪い機能を、ミドルウェアが集中管理・提供することで、開発効率と信頼性が向上します。
DBMS(データベース管理システム) は、大量のデータを効率的に保存・検索・更新するための専門的な機能を提供します。複数ユーザーが同時にデータにアクセスする際の整合性を保つトランザクション管理も重要な役割です。DB2、Oracle、MySQL などが代表的です。
Web サーバ は、ネットワークから HTTP リクエストを受け取り、HTML などのコンテンツをクライアントに返すソフトウェアです。Apache や Nginx が広く採用されています。複数のクライアントからの並行リクエストを効率的に処理する必要があります。
アプリケーションサーバ は、ビジネスロジック(複雑な計算や処理)を実行し、複数のクライアントからのリクエストを処理するためのプラットフォームです。Tomcat や JBoss などが該当します。Web サーバとデータベースの間に位置し、画面表示とデータベース操作を仲介します。
メッセージキュー は、プロセス間通信を非同期で実現するソフトウェアです。RabbitMQ や Kafka などが該当します。あるプロセスが別のプロセスへのメッセージをキューに格納し、受け取り側がそれを非同期で処理できます。これにより、プロセス間の結合度を低く保ちながら、複雑な処理フローを実装できます。
キャッシュサーバ は、頻繁にアクセスされるデータをメモリに保持し、高速に供給するソフトウェアです。Redis や memcached などが代表的です。データベースアクセスの遅さを補い、全体の応答速度を向上させます。
| ミドルウェア | 役割 |
|---|---|
| DBMS(データベース管理システム) | データの保存、検索、更新、トランザクション管理 |
| Webサーバ | HTTP リクエストを受け取り、コンテンツを返す(Apache、Nginx等) |
| アプリケーションサーバ | ビジネスロジックを実行し、複数クライアントを処理(Tomcat、JBoss等) |
| メッセージキュー | プロセス間通信、非同期処理(RabbitMQ、Kafka等) |
| キャッシュサーバ | 頻繁にアクセスされるデータを高速に供給(Redis、memcached等) |
OSSライセンス比較
コンピュータシステムの構築では、オープンソースソフトウェア(OSS)の利用が一般的になっています。しかし、OSS には複数のライセンス体系があり、それぞれ商用利用時の条件が大きく異なります。企業がミドルウェアや OS を選択するときは、ライセンスの性質を理解したうえで判断する必要があります。
GPL(GNU General Public License) は、自由度が高い反面、「コピーレフト」という特性を持ちます。GPL ライセンスのソフトウェアを利用したり改変したりしたら、その結果もすべて GPL で公開する義務が生じます。ソースコードを秘密にして商用化したい企業にとっては、この義務が負担になります。組み込み製品など、ソースコードを閉じたい場合には採用しにくいライセンスです。
MIT ライセンス は、極めてシンプルで自由度が高いライセンスです。条件は著作権表示の明記のみであり、ソースコード公開の義務はなく、商用化も自由です。そのため、オープンソースのコンポーネントをクローズドソースの製品に組み込みたい企業に適しています。
Apache ライセンス 2.0 は、MIT ライセンスと同様に自由で商用利用可能ですが、特許に関する明確な条項を含んでいます。著作権表示とライセンス表示に加え、変更箇所の記載が条件です。Apache や nginx など、多くの Web 基盤ソフトウェアで採用されており、企業向けプロジェクトの標準的な選択肢になっています。
企業の観点からは、GPL は再開発品を公開する必要があるため採用しにくく、MIT ライセンスや Apache ライセンスが商用化に適しているということになります。
| ライセンス | 特徴 | 条件 | 商用利用 | 企業への採用 |
|---|---|---|---|---|
| GPL(GNU General Public License) | 自由度が高いが、継承的。改変品も同じライセンスで公開必須 | 改変品や組み込み品も OSS 化が義務 | 可(ただし改変品公開義務) | 企業向けの組み込み製品には不向き |
| MIT ライセンス | 極めて自由。ほぼ無制限利用可 | 著作権表示のみ必須 | 可(制限なし) | クローズドソース商用化に最適 |
| Apache ライセンス 2.0 | 自由で、明確な特許条項 | 著作権・ライセンス表示、変更箇所の記載 | 可(制限なし) | 企業向けプロジェクトに一般的 |
データ表現編
アナログ信号のデジタル化
現実世界の音や光、温度の変化は連続的です。しかし、コンピュータは 0 と 1 の離散的な値しか扱えません。そのため、アナログ情報をコンピュータに取り込むには、標本化 → 量子化 → 符号化 の 3 段階が必要です。
| 段階 | 何をするか | 具体例 | 試験での着眼点 |
|---|---|---|---|
| 標本化 | 一定時間ごとに値を取り出す | 音声を 1 秒間に 44,100 回測る | 標本化周波数が高いほど元信号を細かく追える |
| 量子化 | 取り出した値を近い段階値に丸める | 音の強さを 16bit の段階で表す | ビット数が多いほど量子化誤差が小さい |
| 符号化 | 丸めた値を 0/1 のビット列に変換する | 量子化後の値を 101101... で記録 | 保存・通信できる形式になる |
なぜ 3 段階に分かれるのか
- 標本化 が粗すぎると、波の細かな変化を取り逃し、元の音や画像を再現できません
- 量子化 が粗すぎると、値を大ざっぱに丸めるため、ざらつきやノイズが増えます
- 符号化 を経て初めて、コンピュータが保存・伝送・演算できます
音声 CD の「44.1kHz / 16bit」という表記は、標本化周波数と量子化ビット数を示しています。試験では、「標本化は時間方向の細かさ」「量子化は値の細かさ」と切り分けて覚えることが重要です。
進数変換
コンピュータはすべての情報を 2 進数(0 と 1)で処理・保存します。人間が使う 10 進数との相互変換、また実装上便利な 16 進数への変換は、コンピュータシステムを理解する上で必須の操作です。
10進 → 2進
10 進数を 2 進数に変換するには、「2 で割り続けて、余りを下から読む」という方法を使います。この方法は、位取り記数法の原理に基づいています。10 進数の値を 2 のべき乗の和で表現すれば、各べき乗に対応する係数(0 または 1)が 2 進数の各桁になります。
計算例:25 を 2 進数に変換
25 ÷ 2 = 12 余り 1
12 ÷ 2 = 6 余り 0
6 ÷ 2 = 3 余り 0
3 ÷ 2 = 1 余り 1
1 ÷ 2 = 0 余り 1余りを下から読むと:11001(2 進数)
確認(2 進数を 10 進に戻す): 1×2^4 + 1×2^3 + 0×2^2 + 0×2^1 + 1×2^0 = 16 + 8 + 0 + 0 + 1 = 25 ✓
この方法の仕組みを理解することが重要です。割り切れなくなるまで 2 で割り続けるのは、25 を 2 のべき乗(16、8、4、2、1)の合計で表すプロセスそのものです。
2進 → 16進
2 進数と 16 進数には特別な関係があります。16 = 2^4 なので、2 進数を 4 ビット(4 桁)ずつグループ化すれば、各グループが 16 進数の 1 桁に対応します。この性質により、2 進数から 16 進数への変換は、中間の 10 進を経由せずに直接行えます。
計算例:11001011 を 16 進数に変換
2 進数を右から 4 ビットずつグループ化:
1100 | 1011各グループを 16 進数に変換:
- 1100 (2進) = 12 (10進) = C (16進)
- 1011 (2進) = 11 (10進) = B (16進)
答え:CB(16進数)
確認(16 進数を 10 進に戻す): C×16 + B = 12×16 + 11 = 192 + 11 = 203 (10進)
この変換が便利な理由は、コンピュータのメモリアドレスや機械語の命令が、16 進数で表記されることが多いからです。2 進数そのままだと桁数が多すぎて人間が読みにくいため、16 進数を中間表現として使うことが慣例になっています。
補数と負の数表現
コンピュータは、すべての数を固定ビット幅で表現します。たとえば 8 ビット環境では、どんな数でも 8 ビットで表現する必要があります。では、負の数をどう表現するのでしょうか? コンピュータは 2 の補数 という表記法を使っています。
2 の補数 の考え方は、「ある数と、その負の数を足すと 0 になる」という数学的原理に基づいています。固定ビット幅では、加算結果が桁あふれ(オーバーフロー)して消える現象が起こるため、この性質を利用して負の数を表現します。
2 の補数の求め方:
- 元の数のビットをすべて反転(0 を 1 に、1 を 0 に)する。これを 1 の補数 という。
- 結果に 1 を加える。これが 2 の補数 = その数の負の表現。
計算例:8 ビットで -5 を表現
+5 を 8 ビット 2 進数で表現:00000101
ステップ 1:全ビット反転(1 の補数):11111010
ステップ 2:1 を足す(2 の補数):11111011
確認:11111011 を 2 進数として解釈すると、実は -5 です。実際に +5 (00000101) と -5 (11111011) を加算すると:
00000101 (+5)
+ 11111011 (-5)
-----------
100000000 (9ビット = 256、8ビット環境では桁あふれで消える = 0)2 の補数を使うことで、加算回路を負の数にも対応させることができ、ハードウェア設計が単純になります。
負の数の判定: 2 の補数表現では、最上位ビット(符号ビット)が 0 なら正の数、1 なら負の数です。
- 00000101:最上位ビット = 0 → 正の数(+5)
- 11111011:最上位ビット = 1 → 負の数(-5)
この表記法により、負の数を直感的に判定できます。
浮動小数点数(IEEE 754)
2 進整数だけではコンピュータは実用的ではありません。小数点以下の値が必要な科学計算や、億単位の大きな数、1 兆分の 1 のような極小数も扱う必要があります。このような幅広い範囲の数を、限られたビット幅で表現するために、浮動小数点数 形式が採用されました。
浮動小数点数は、数学の「指数表記(科学記法)」の考え方に基づいています。たとえば、12345 は 1.2345 × 10^4 と書けますし、0.0001234 は 1.234 × 10^(-4) と書けます。このように、数値を「仮数部(有効数字)」と「指数部(スケール)」に分けて表現することで、広い範囲の数を効率的に扱えます。
IEEE 754 32 ビット(単精度)の形式:
- 符号ビット:1 ビット(0 なら正、1 なら負)
- 指数部:8 ビット(2 のべき乗の指数)
- 仮数部:23 ビット(有効数字)
合計 32 ビットで、約 ±10^(-38) から ±10^38 までの範囲の数を表現できます。
計算例:0.5 を IEEE 754 32 ビットで表現
0.5 を指数表記で書くと:0.5 = 1.0 × 2^(-1)
- 符号ビット:0(正の数)
- 指数:-1 ですが、指数部は符号なしなので、バイアス 127 を加える:-1 + 127 = 126 = 01111110(2 進)
- 仮数部:1.0 の小数部 = 00000000000000000000000(23 ビット、すべて 0)
答え:0 01111110 00000000000000000000000
指数にバイアスを加える理由は、指数部を符号なし整数として扱うためです。これにより、指数の大小比較が符号なし整数の比較で実現でき、ハードウェアが単純になります。
浮動小数点数の落とし穴
浮動小数点数は便利ですが、限られたビット幅で無限の実数を表現するため、いくつかの問題(誤差)が発生します。これらを理解していないと、計算結果が予期しない値になる可能性があります。
情報落ち(丸め誤差) は、仮数部の桁数不足で、末尾の有効数字が失われる現象です。32 ビット単精度では約 7 桁までしか正確に表現できません。たとえば、1000 万 + 1 = 1000 万、というように、小さい値が大きい値に吸収されてしまいます。金銭計算など、精度が必須の用途では 64 ビット倍精度を使うべきです。
桁落ち(cancellation error) は、ほぼ同じ大きさの 2 つの数を引いたときに、有効数字が大幅に減る現象です。たとえば 1.000001 - 1.000000 = 0.000001 ですが、両方の数の最初の 6 桁は同じため、引き算により有効数字がほぼ失われ、相対誤差が非常に大きくなります。回帰分析など多くの計算では、この問題を避けるための工夫が必要です。
アンダーフロー は、絶対値が非常に小さい数が 0 に丸められる現象です。表現可能な最小値より小さい数は、0 として扱われます。確率計算で非常に小さい値を扱う場合、アンダーフローにより計算結果が不正確になることがあります。
オーバーフロー は、絶対値が最大表現可能値を超える現象です。結果が無限大(∞)として扱われます。大きな数同士の掛け算を繰り返すときに注意が必要です。
| 現象 | 説明 | 例 |
|---|---|---|
| 情報落ち | 仮数部の桁数不足で、末尾の有効数字が失われる | 10^7 + 1 = 10^7(単精度で約7桁までしか正確でない) |
| 桁落ち | ほぼ同じ大きさの 2 つの数を引くと、有効数字が大幅に減る | 1.000001 - 1.000000 = 0.000001(相対誤差が大きくなる) |
| アンダーフロー | 絶対値が非常に小さい数が 0 に丸められる | 10^(-50) × 10^(-50) = 0(正確には 10^(-100) だが表現不可) |
| オーバーフロー | 絶対値が最大表現可能値を超える | 10^38 × 10 = ∞(単精度では表現不可) |
論理演算
コンピュータの内部処理は、基本的にすべて論理演算の組み合わせで実現されます。データの検証、制御フローの判定、ビット操作などは、複数の論理演算を組み合わせて実装されます。論理演算を理解することは、コンピュータの動作原理を理解する上で重要です。
AND(論理積) は、両方の入力が 1 のときだけ 1 になります。条件分岐で「条件 A かつ条件 B」を判定するときに使われます。ビット操作では、特定のビットだけを抽出(マスク)するために使われます。
OR(論理和) は、どちらか一方(またはその両方)が 1 なら 1 になります。「条件 A または条件 B」という判定や、複数のビットを組み合わせる操作に使われます。
NOT(論理否定) は、0 と 1 を反転させます。単純ですが、条件の反対を判定する場合に必須です。
XOR(排他的論理和) は、2 つの入力が異なるときだけ 1 になります。通常の OR は「どちらか一方、または両方」ですが、XOR は「どちらか一方だけ」という意味です。データ通信のエラー検出やデータの反転に使われます。
NAND と NOR は、AND と OR の反転です。NAND は「両方が 1 でなければ 1」、NOR は「両方が 0 でなければ 1」です。これらは応用的で、大規模集積回路(LSI)の基本論理ゲートとしても使われます。
これらの論理演算を組み合わせることで、加算器などの複雑な演算回路が構成されます。
| 演算 | 記号 | 真理値表 | 説明 |
|---|---|---|---|
| AND | ∧ | 1∧1=1, 他=0 | 両方が 1 のときだけ 1 |
| OR | ∨ | 0∨0=0, 他=1 | どちらか一方が 1 なら 1 |
| NOT | ¬ | ¬1=0, ¬0=1 | 反転 |
| XOR | ⊕ | 1⊕1=0, 1⊕0=1, 0⊕0=0 | 異なるときだけ 1(排他的論理和) |
| NAND | - | 1∧1=0, 他=1 | AND の反転 |
| NOR | - | 0∨0=1, 他=0 | OR の反転 |
計算例:真理値表から読み取る
- 1 AND 1 = 1(両方が 1 なので 1)
- 1 OR 0 = 1(一方が 1 なので 1)
- NOT 0 = 1(0 を反転すると 1)
- 1 XOR 1 = 0(両方が同じなので 0)
- 1 XOR 0 = 1(異なるので 1)
データ形式と識別編
コード体系とチェックディジット
企業システムでは、商品、取引先、店舗、伝票などをコードで管理します。コード化の目的は、識別を速くする 入力ミスを減らす 分類や集計をしやすくする の3つです。試験では、単なる番号付けと、誤入力を検知する仕組み を区別できることが重要です。
| 種類 | 役割 | 例 | 試験での着眼点 |
|---|---|---|---|
| 識別コード | ある対象を一意に区別する | 社員番号、顧客ID | 同じ番号が重複しないことが重要 |
| 分類コード | 属性や区分を表す | 地域コード、業種コード | 桁に意味があることが多い |
| チェックディジット付きコード | 入力誤りを検出する | JAN、ISBN、GLN | 最後の1桁が検査用である |
チェックディジット は、既存の数字列から一定のルールで計算した確認用の数字です。目的は 誤入力の予防ではなく、誤入力の検出 です。したがって、「桁を見れば分類が分かる」という説明は分類コードの話であり、チェックディジットの本質ではありません。
たとえば JAN や GLN では、奇数桁・偶数桁に重みを掛けて合計し、最後に 10 の倍数になるように確認数字を付けます。受験では細かな計算式よりも、次の2点を言えるようにしておくと強いです。
- チェックディジットは 転記ミスや1桁違い の検出に役立つ
- コードの最後の数字は 対象の意味を直接表すのではなく、検査用 のことがある
正規表現
正規表現は、文字列のパターンを簡潔に表す方法です。試験では、プログラミング問題というより 「この記号がどんな文字列に一致するか」 を問う形で出ます。
| 記号 | 意味 | 例 | 一致する文字列のイメージ |
|---|---|---|---|
. | 任意の1文字 | a.c | abc, axc |
* | 直前の0回以上繰り返し | ab*c | ac, abc, abbc |
+ | 直前の1回以上繰り返し | ab+c | abc, abbc |
? | 直前の0回または1回 | ab?c | ac, abc |
[] | 文字集合のいずれか1文字 | [0-9] | 0〜9 の1文字 |
^ | 行頭 | ^A | A で始まる |
$ | 行末 | Z$ | Z で終わる |
解くときの手順は、どの記号が何に掛かっているか を左から順に確認することです。特に * や + は 直前の1文字や1まとまりにだけ作用する ので、「全体に効く」と思い込むと誤ります。
構造化データ形式の比較
構造化データ形式は、人に読みやすいか 機械処理しやすいか 階層構造を表せるか で選びます。情報システムの試験では、CSV / JSON / XML / YAML の違いを対比で理解しておくと、設問に対応しやすくなります。
| 形式 | 特徴 | 向いている用途 | 注意点 |
|---|---|---|---|
| CSV | 行と列の単純な表 | 表形式データ、Excel 連携 | 階層構造を表しにくい |
| JSON | キーと値、配列で軽量に記述 | Web API、設定情報 | コメント不可、厳密な構文が必要 |
| XML | タグで階層構造を明示 | 厳格なスキーマが必要な連携 | 冗長で記述量が多い |
| YAML | インデントで読みやすく記述 | 設定ファイル、IaC | インデントミスに弱い |
判断のコツは、単純な表なら CSV、Web API なら JSON、厳格な業務連携や文書構造なら XML、人が編集する設定なら YAML です。
Web・マルチメディアのファイル形式
ファイル形式は、何を表すか と 圧縮方式はどうか で整理すると混乱しません。
| 分類 | 形式 | 特徴 | 試験での見分け方 |
|---|---|---|---|
| Web文書 | HTML | 文書構造を記述 | 見出し、段落、リンクの意味づけ |
| 装飾 | CSS | 見た目を指定 | 色、レイアウト、フォント |
| 動作 | JavaScript | ブラウザ上の処理 | 入力検証、画面更新 |
| 画像 | JPEG | 非可逆圧縮、写真向き | 容量を小さくしやすいが劣化する |
| 画像 | PNG | 可逆圧縮、透過対応 | ロゴや図表向き |
| 画像 | GIF | 256色、簡易アニメ対応 | 色数が少ない画像向き |
| 画像 | SVG | ベクタ形式 | 拡大しても劣化しにくい |
| 音声 | WAV | 非圧縮または可逆寄り | 高音質だが容量大 |
| 音声 | MP3 / AAC | 非可逆圧縮 | 容量削減に強い |
| 文書 | レイアウト固定 | 印刷・配布向き |
特に頻出なのは JPEG と PNG の違い です。写真のような自然画像で容量を抑えたいなら JPEG、文字やロゴをくっきり保ちたいなら PNG が基本です。
PCM と音声データ量
PCM(Pulse Code Modulation)は、アナログ音声をデジタル化する代表的な方式です。考え方は単純で、1秒間に何回サンプリングするか、1回あたり何ビットで表すか、何チャンネルあるか を掛け合わせれば、音声データ量を求められます。
音声データ量(bit)=
サンプリング周波数 × 量子化ビット数 × チャンネル数 × 時間計算例
- サンプリング周波数:44.1kHz
- 量子化ビット数:16ビット
- チャンネル数:2(ステレオ)
- 時間:10秒
44,100 × 16 × 2 × 10 = 14,112,000 bitバイトに直すと 14,112,000 ÷ 8 = 1,764,000 byte です。試験では bit と byte の換算を忘れる モノラルかステレオかを見落とす というミスが多いので、式に4要素を書き出してから計算してください。
システム構成編
ファイル編成と処理方式
データをどのような順で格納し、どう取り出すかによって、処理速度と使いやすさが変わります。試験では、ファイル編成 と バッチ処理 / オンライン処理 の違いを組み合わせて問うことが多いです。
| 方式 | 特徴 | 向いている用途 | 注意点 |
|---|---|---|---|
| 連続ファイル | データを順番に並べて格納 | 給与計算、売上集計など一括処理 | 途中の1件だけ探すのは遅い |
| 相対ファイル | レコード番号で直接位置を指定 | 固定長データの高速参照 | 空き領域管理が必要 |
| インデックスシーケンシャルファイル | 索引を使って目的レコードへ近道する | 検索と順次処理の両立が必要な場面 | 索引更新の手間がかかる |
バッチ処理とオンライン処理
| 処理方式 | 仕組み | 代表例 | 長所 | 短所 |
|---|---|---|---|---|
| バッチ処理 | ある程度データをためてまとめて処理 | 月次請求、夜間の一括更新 | 大量データを効率よく処理できる | 即時反映できない |
| オンライン処理 | 入力のたびに即時処理 | ATM、EC注文、在庫引当 | 結果をすぐ確認できる | 常時稼働と高い可用性が必要 |
受験では、「月末まとめて処理」「夜間一括更新」とあれば バッチ処理、「端末から即時照会」「在庫をその場で更新」とあれば オンライン処理 と判定します。
処理形態の比較
企業や組織が情報システムを構築するとき、どこで処理を実行するか、複数の拠点にどう分散させるか、という設計判断は、システム全体のパフォーマンス、保守性、コストに大きく影響します。処理形態には、集中から分散まで複数の選択肢があり、組織の規模や要件に応じて選択されます。
集中処理 は、すべての処理を 1 台のメインフレーム(大型コンピュータ)で実行し、オフィスの各所には単なる入出力端末(ダム端末)だけを置く構成です。1990 年代以前の大企業の標準形式でした。管理が一元化でき、セキュリティも厳密に管理できます。しかし、メインフレームが故障すると全システムが停止し、処理能力の上限はホスト 1 台に限定されます(スケーラビリティの限界)。
分散処理 は、複数の独立したコンピュータをネットワークで結び、それぞれが自律的に処理を実行する構成です。各マシンが故障しても、ほかのマシンは動作を続けられ、高い耐障害性があります。スケーラビリティも高く、コンピュータを追加するだけで容量を増やせます。しかし、複数マシン間でのデータ同期や状態管理は複雑になり、管理コストが上がります。
クライアント・サーバ(C-S) は、サーバとクライアントの役割を分担する構成です。サーバはデータベースやビジネスロジックを管理し、クライアントは画面表示やユーザー入力を担当します。この役割分担により、クライアント側である程度の処理ができるため、サーバの負荷が軽減されます。ユーザー体験も向上しやすいですが、実装は集中処理より複雑になります。
P2P(ピアツーピア) は、中央のサーバを置かず、参加するノード(コンピュータ)が対等に通信する構成です。ファイル共有やブロックチェーンなど、非中央集権化が必要な用途で採用されます。スケーラビリティと耐障害性は極めて高いですが、全ノード間の同期は困難で、セキュリティ管理も課題があります。
3 層 C-S は、クライアント、アプリケーションサーバ、データベースサーバという 3 つの層を分離した構成です。Web アプリケーション(HTML/CSS/JavaScript)がクライアント層を担当し、アプリケーションサーバが業務ロジック、データベースサーバがデータ管理を担当します。各層を独立してスケーリングでき、保守性とセキュリティに優れています。現代の Web サービスはこの構成が標準になっています。
| 処理形態 | 構成 | 特徴 | メリット | デメリット |
|---|---|---|---|---|
| 集中処理 | メインフレーム+端末(ダム端末) | すべてをホスト1台で処理、端末は入出力のみ | 管理一元化、セキュリティ厳密 | スケーラビリティ限界、単一障害点 |
| 分散処理 | ネットワークで結ばれた複数コンピュータ | 各マシンが独立して処理実行 | スケーラビリティ高、障害分散 | 管理複雑、同期困難 |
| クライアント・サーバ(C-S) | サーバ(データ・業務処理)+ クライアント(画面) | 役割分担。クライアントが一定の処理を担当 | 柔軟性、ユーザー体験向上 | 実装複雑、ネットワーク依存 |
| P2P(ピアツーピア) | 対等なノード群が直接通信 | 中央サーバ不要、全ノードが同格 | スケーラビリティ、障害強度 | 管理・同期困難、セキュリティ課題 |
| 3層C-S | クライアント + アプリケーションサーバ + DBサーバ | Web型の標準構成。各層の役割を明確に分離 | スケーラビリティ、保守性、セキュリティ | 複数層の同期 |
2層C-S vs 3層C-S
C-S 構成の進化を理解することは、現代のシステムアーキテクチャを理解する上で重要です。
2 層 C-S は 1990 年代の標準形式で、クライアント側にビジネスロジックを含める構成です。クライアントがデータベースに直接接続し、画面表示とロジック処理の両方を担当します。小規模なシステムなら実装が単純で、クライアントで複雑な処理ができます。しかし、クライアント数が増えると、各クライアントにロジックを配布・更新するコストが膨大になります。また、クライアントがデータベースに直接アクセスするため、セキュリティ上の課題があり、ネットワークトラフィックも多くなります。
3 層 C-S は Web アプリケーションの普及とともに、標準的な構成になりました。クライアント層は Web ブラウザで、HTML/CSS/JavaScript のみを実行します。ビジネスロジックはアプリケーションサーバに集中管理され、クライアントはサーバへのリクエスト送信と画面表示に専念します。この分離により、サーバ側のロジック更新がクライアントに影響を与えず、クライアントの配布・管理コストがほぼゼロになります。アプリケーションサーバを複数台配置して水平スケーリングすれば、ユーザー数の増加に対応でき、セキュリティも向上します。ただし、3 つの層の同期処理は複雑になります。
| 項目 | 2層C-S | 3層C-S |
|---|---|---|
| 構成 | クライアント(画面+ロジック) ↔ DB | クライアント(画面)↔ アプリサーバ(ロジック)↔ DB |
| 画面開発 | クライアント側で画面描画・ロジック | Web ブラウザ(HTML/CSS/JavaScript) |
| スケーラビリティ | クライアント数増で負荷が分散しにくい | アプリサーバを水平スケーリング可能 |
| 保守性 | クライアント更新が必要 | サーバ側のみ更新可(クライアント不要) |
| セキュリティ | DB への直接アクセス(危険) | アプリサーバが仲介(ビジネスロジック、権限チェック) |
| 典型例 | VB+SQLServer(1990年代) | Web サービス(現代標準) |
過去問で戻りやすい補助論点
システムバスと周辺機器インタフェース
CPU、主記憶、入出力装置は、バス と呼ばれる共通の通り道でつながっています。試験では 何を運ぶバスか と 幅が広いと何が良いか を区別できることが重要です。
| 用語 | 役割 | 試験での見分け方 |
|---|---|---|
| アドレスバス | どの番地を読むか、書くか を指定する | 幅が広いほど、指定できる主記憶の範囲が広い |
| データバス | データそのものを運ぶ | 幅が広いほど、1 回に運べるデータ量が多い |
| 制御バス | 読み出し、書き込み、割り込みなどの制御信号を運ぶ | 何をするか を指示する信号の通り道 |
また、シリアル と パラレル の違いも頻出です。シリアル は 1 本の経路で順に送る方式で、長距離でも安定しやすく、現在の USB や SATA、PCI Express で主流です。パラレル は複数ビットを同時に送れる一方、配線が増え、距離が長いと信号ずれが起きやすくなります。
外部インタフェース規格は、何をつなぐ規格か で覚えると整理しやすくなります。
| 規格 | 主な用途 | 着眼点 |
|---|---|---|
| USB | キーボード、マウス、外付け記憶装置などの汎用接続 | 周辺機器全般に使える。ホットプラグ対応が代表例 |
| HDMI / DisplayPort | 映像・音声出力 | ディスプレイ接続用。ストレージ接続ではない |
| SATA / NVMe | SSD や HDD の接続 | 補助記憶装置向け。NVMe は高速な SSD で使われやすい |
| Bluetooth / Wi-Fi | 無線接続 | ケーブル不要。通信距離や速度は用途で異なる |
ユーザーインタフェースと入出力装置の選び方
過去問では、どの入力方式がその業務に向くか、どのプリンタがその用途に向くか を問う形で出ることがあります。まずは 自由入力が多いのか 選択式なのか 数字中心か を見ます。
| 方式・装置 | 向いている場面 | 注意点 |
|---|---|---|
| 101配列キーボード | 英数字を多く入力する業務、プログラミング | 自由度は高いが、初心者には入力負荷が高い |
| テンキー | 金額、数量、日付など数字中心の入力 | 文字入力には向かない |
| チェックボックス | 選択肢が決まっている申請、アンケート | 選択肢にない内容は入力できない |
| タッチパネル | 店頭端末、受付、セルフレジ | 直感的だが、細かな長文入力は苦手 |
| バーコード / QR コード読取 | 商品登録、在庫管理、伝票処理 | コード印字の品質に影響される |
プリンタは、何を印字するか で切ると迷いにくくなります。
| プリンタ | 強み | 向いている用途 |
|---|---|---|
| レーザープリンタ | 高速で文字印刷に強い | オフィス文書、大量帳票 |
| インクジェットプリンタ | 写真や色表現に強い | 写真、少量のカラー印刷 |
| ドットインパクトプリンタ | 圧力で複写伝票を印字できる | 宅配伝票、複写帳票 |
| 熱転写 / 感熱プリンタ | ラベルやレシート印字に向く | POS レシート、物流ラベル |
BIOS、ファームウェア、デバイスドライバ、ミドルウェアの切り分け
どのソフトウェアがどの層にあるか を曖昧にすると、選択肢の言い換えに対応できません。特に BIOS ファームウェア デバイスドライバ ミドルウェア は混同されやすいです。
| 用語 | 位置づけ | 役割 | 具体例 |
|---|---|---|---|
| BIOS / UEFI | 起動時の基盤ソフトウェア | ハードウェア初期化と OS 起動の橋渡し | PC 起動時の初期設定 |
| ファームウェア | 機器内部に組み込まれた制御ソフト | その機器を動かす基本動作を担当 | ルータ、SSD、プリンタ内蔵ソフト |
| OS | 最下位の基盤ソフトウェア | CPU、主記憶、ファイル、入出力を管理する | Windows、Linux |
| デバイスドライバ | OS と周辺機器の間の橋渡し | OS から機器を操作できるようにする | プリンタドライバ、GPU ドライバ |
| ミドルウェア | OS の上で共通機能を提供 | DB、Web、メッセージ制御などを担う | DBMS、Web サーバ |
| アプリケーション | 利用者が直接使うソフト | 業務処理や文書作成を行う | 会計ソフト、表計算ソフト |
判断のコツは、起動直後に必要か 機器を動かすために必要か 複数アプリに共通の機能か の順に見ることです。起動直後なら BIOS / UEFI、特定機器の制御ならファームウェアやデバイスドライバ、アプリ共通機能ならミドルウェアです。
レスポンスタイム、ターンアラウンドタイム、スループット
性能を問う問題では、速さ という言葉だけで判断すると危険です。何の速さなのかを分けて読む必要があります。
| 指標 | 何を測るか | 典型例 |
|---|---|---|
| レスポンスタイム | 利用者が要求してから最初の応答が返るまでの時間 | 画面操作後、結果が表示されるまで |
| ターンアラウンドタイム | 処理依頼から処理完了までの総時間 | バッチ投入から集計完了まで |
| スループット | 単位時間あたりの処理件数 | 1 分間に何件の注文を処理できるか |
たとえば、EC サイトの注文画面なら利用者にとって重要なのは レスポンスタイム です。一方、夜間の給与計算バッチなら、朝までに処理が終わるかを見るので ターンアラウンドタイム が重要です。サーバ全体の処理能力比較では スループット を見ます。
スタック、キュー、LIFO、FIFO
スタック と キュー は、データを どの順番で取り出すか を決める基本的なデータ構造です。試験では、英語の略語だけでなく、最後に入れたものから処理するのか 最初に入れたものから処理するのか を日本語で判断できることが必要です。
| 用語 | 取り出し順 | 覚え方 | 身近な例 |
|---|---|---|---|
| スタック | LIFO(Last-In, First-Out) | 後から積んだものを先に取る | 皿の積み重ね、関数呼び出しの戻り順 |
| キュー | FIFO(First-In, First-Out) | 先に並んだものから順に処理する | レジ待ち行列、印刷待ちジョブ |
問題文では、一時的に格納したデータを後入れ先出しで処理する とあれば スタック、受け付けた順に処理する とあれば キュー を選びます。配列 という言葉が出ても、それだけではスタックでもキューでもありません。どう並べ、どう取り出すか を見て判断します。
また、プロトコルスタック という言葉も出ますが、これは 通信機能を層で積み重ねた構成 を指す別の意味です。スタック という語が共通でも、LIFO の処理順序 を指しているのか、TCP/IP のような層構造 を指しているのかを文脈で切り分けてください。
問題文の言い換えから逆算する
過去問では、スタック や キュー という語がそのまま出ないこともあります。語を探すのではなく、どんな順序で処理するか、層構造の話か を日本語で言い換えてから選ぶ方が安定します。
| 問題文の言い換え | 最初に疑う語 | 判定のコツ |
|---|---|---|
| 受け付けた順に処理する | キュー / FIFO | 先入先出ならキュー |
| 最後に積んだものから取り出す | スタック / LIFO | 後入先出ならスタック |
| 最後に呼び出した関数から順に戻る | スタック | 戻り順は LIFO になる |
| 印刷ジョブを順番に処理する | キュー | 待ち行列の流れで考える |
| 通信機能を層で積み重ねる | プロトコルスタック | 処理順序ではなく層構造の話 |
ファイルシステム階層とパス表記
ファイルシステムは、フォルダの入れ子構造 で整理されます。試験では、絶対パスか相対パスか、どの階層にあるか を読めることが重要です。
| 用語 | 意味 | 例 |
|---|---|---|
| ルートディレクトリ | 最上位の起点 | /、Windows なら C:\\ |
| ディレクトリ(フォルダ) | ファイルや下位フォルダをまとめる場所 | /users/yamada/docs |
| 絶対パス | ルートから書く完全な場所 | /data/sales/2026.csv |
| 相対パス | 現在位置を基準に書く場所 | ../images/logo.png |
問題を解くときは、どこを起点にしているか を最初に確認します。絶対パスは起点が固定ですが、相対パスは現在位置によって意味が変わります。
典型的なつまずき
1. 主記憶と補助記憶の区別が曖昧
「保存」という言葉を主記憶と補助記憶の両方に使うと、混乱が生じやすいです。正しくは、主記憶は「一時保存」で揮発性、補助記憶は「長期保存」で不揮発性です。この区別が重要なのは、試験問題でメモリ不足時の動作やシステム障害時のデータ保護を問われるからです。電源を切ってもデータが残る必要があるなら補助記憶が必須です。
2. CPU性能指標を暗記するだけで応用できない
実行時間 = 命令数 × CPI ÷ クロック周波数 の関係を理解しても、問題ごとに具体的に当てはめる練習がないと、本番で計算できません。試験では「CPI を 2 から 1 に改善すれば、実行時間は何分の 1 になるか」というような問題が出ます。公式を機械的に暗記するのではなく、「CPI が半分になれば、実行時間も半分になる」という因果関係を理解することが重要です。
3. パイプラインの計算で、命令数の誤解
「5 ステージ × 100 命令 = 500」と誤計算する人が多いです。実際には (k + n - 1) = (5 + 100 - 1) = 104 ステージ時間です。最初の命令が 5 ステージを経由する遅延があり、その後は毎ステージ 1 命令が完了するため、合計 k + (n - 1) サイクルになります。この 1 つの計算ミスで、高速化の効果を大きく過小評価してしまいます。
4. キャッシュヒット率が高いと、実効時間も高速になるとの勘違い
ヒット率 90% でも、実効時間は 9.5 ns という例を見ると、直感と合いにくいかもしれません。重要なのは、キャッシュミス時のメモリアクセス時間が大きいため、そのミス時間が実効時間に大きく寄与するということです。ヒット率を 99% に上げた場合の効果を計算して、初めて改善効果の大きさが理解できます。
5. RAID を「すべて信頼性向上」と一括りにする
RAID 0 は高速化(容量効率 100%)が目的で、故障対応は一切ありません。RAID 1 は最高レベルの信頼性ですが容量効率 50%。RAID 5 はバランス型。用途に応じて選択が異なります。試験問題では「同時 2 台故障対応が必要」と書かれたら RAID 6 を選ぶ、というように、要件から最適な RAID を判断する能力を問われます。
6. 2進数補数計算での手順ミス
全ビット反転と 1 の加算は絶対に忘れてはいけない 2 ステップです。どちらか一方だけでは、負の数の正しい表現が得られません。計算過程を書いて、複数回確認する癖をつけることが重要です。
7. IEEE 754 の指数バイアスを見落とす
指数 -1 を指数部に直接格納する(つまり -1 として 2 進化)のではなく、バイアス 127 を加えて 126 として格納します。この仕組みを理解していないと、浮動小数点数の計算問題で確実に落とします。バイアスの目的は、指数部を符号なし整数として扱うことで、大小比較をシンプルにするという点が重要です。
8. クライアント・サーバと分散処理の混同
クライアント・サーバは役割分担の設計パターンで、サーバ側でビジネスロジックを集中管理します。分散処理は複数プロセスが対等に動作するモデルです。3 層 C-S でも、アプリケーションサーバを複数台配置すれば分散処理になりますが、基本的に役割は分担されています。概念をはっきり分けることが重要です。
9. BIOS、ファームウェア、デバイスドライバを同じものだと思う
どれも 機器を動かすためのソフトウェア ですが、役割は異なります。BIOS / UEFI は起動の土台、ファームウェアは機器内蔵の制御、デバイスドライバは OS から機器を扱う橋渡しです。起動時か 機器内部か OS との接続か を見分けてください。
10. レスポンスタイム、ターンアラウンドタイム、スループットを同義で覚える
いずれも性能指標ですが、測っている対象が違います。利用者の待ち時間ならレスポンスタイム、仕事全体の完了までならターンアラウンドタイム、単位時間あたりの処理量ならスループットです。誰にとっての速さか を見ると切り分けやすくなります。
11. スタックとキュー、LIFO と FIFO、プロトコルスタックを一緒にしてしまう
スタック = LIFO、キュー = FIFO は処理順序の話です。一方、プロトコルスタック は通信機能を層で積み重ねた構成であり、取り出し順序とは関係ありません。最後に入れたものから出すのか、先に入れたものから出すのか、層構造を説明しているのか を分けて読むだけで、多くの誤答を防げます。
問題を解くときの観点
1. ハードウェア・パフォーマンス問題
試験問題でハードウェアの性能に関する問題が出たら、まず「何の性能を上げたいのか」を見極めることが重要です。速度を重視する問題なのか、データの信頼性を重視する問題なのか、それとも容量不足への対応なのかで、選ぶべき技術が変わります。
次に、その性能に関係するコンポーネントを特定します。CPU の高速化が必要なら CPI やクロック周波数、メモリの性能を上げるならキャッシュヒット率やアクセス時間、ディスク関連なら RAID の方式を検討します。
RAID の問題では、「同時故障何台まで許容できるか」を必ず読み、適切な方式を選択します。「24 時間連続稼働」と「復旧に長時間かかる」という条件なら RAID 6 を選ぶべき、というように、要件から最適解を導き出す思考プロセスを習慣づけます。
2. データ表現問題
進数変換、補数、浮動小数点数、論理演算の問題は、計算手順を確実に実行することが重要です。暗記ではなく、各ステップの意味を理解した上で、手を動かして計算する練習をすべきです。
進数変換では、「2 で割り続けて余りを下から読む」という手順を確実に実行します。16 進数への変換では、4 ビットごとのグループ化を忘れずに。
補数では、「全ビット反転」と「1 を加算」の 2 ステップが必須です。どちらか一方だけでは正答になりません。
浮動小数点数では、符号ビット、指数部(バイアス加算後)、仮数部の 3 部を正確に分離して考えます。バイアス 127 の意味(指数を符号なし整数として扱うため)を理解していれば、計算ミスを減らせます。
論理演算の真理値表は、暗記ではなく「AND は両方が 1 のときだけ 1」というロジックから導き出す習慣をつけます。
3. ソフトウェア・アーキテクチャ問題
OS とミドルウェアの役割分担をはっきり区別して説明できることが重要です。OS はハードウェアを隠し、ミドルウェアはアプリケーション共通機能を提供する、という層構造を理解した上で、具体的な例(DBMS、Web サーバ)を思い出します。
OSS ライセンスの問題では、GPL の「改変品も公開義務」と MIT の「商用化OK、著作権表示のみ」という最大の相違点を押さえます。企業が DBMS を選ぶときに、ライセンスが採用判断に影響する点を理解することが重要です。
処理形態(集中・分散・C-S・P2P・3層)の問題では、まず「この要件が優先されるのは何か」を判断します。スケーラビリティ重視なら C-S や 3 層、セキュリティ管理重視なら集中処理、といった思考プロセスを習慣づけます。BIOS、ファームウェア、ドライバ、ミドルウェアが並んだときは、起動、機器制御、共通機能 のどれかに分解して読んでください。
4. 複合判断問題
過去問では単一の概念だけでなく、複数の概念を組み合わせた問題が多く出ます。たとえば「RAID 5 で 24 時間連続稼働しているシステムで、復旧中に別の故障が発生する可能性があるため、RAID を RAID 6 に変更を検討している」というような複合問題です。
このような問題では、RAID の種類(同時故障許容)と、運用ポリシー(復旧時間)、コスト制約などを総合的に判断して、最適解を導き出す必要があります。一つ一つの概念を確実に理解した上で、複数の要件を組み合わせる練習をすることが、本番での得点力につながります。
5. 周辺機器・ユーザーインタフェース問題
周辺機器の問題では、まず 入力か出力か、次に 自由入力か選択入力か、最後に 帳票か画像か を確認します。レジや受付端末のように利用者がその場で操作するならタッチパネルやチェックボックス、数字中心ならテンキー、複写伝票ならドットインパクト、レシートなら感熱方式というように、業務の性質から逆算します。
6. 性能指標・パス表記問題
性能指標では、1件の待ち時間 を問うのか、仕事全体の完了時間 を問うのか、単位時間の件数 を問うのかを先に切り分けます。パス表記では、絶対パスか相対パスかを先に見て、現在位置からどう移動するかを手順で追うと誤りにくくなります。
7. データ構造の処理順序問題
最後に入れたものから処理 ならスタック、先に受け付けたものから処理 ならキューです。英語の略語が出ても、日本語に戻して 後入先出 か 先入先出 かを確認してください。プロトコルスタック のように、同じ スタック でも意味が異なる場合は、層構造の話か、取り出し順序の話か を先に見分けます。
8. 用語をそのまま探さず、日本語の役割へ戻して判定する
過去問では、レスポンスタイム、スループット、スタック、キュー といった用語が、そのままではなく業務の描写として出ることがあります。利用者が待つ時間 なのか 1時間あたりの処理件数 なのか、順番待ち なのか 後から積んだものを先に取る のかを日本語で言い換えるだけで、選択肢の切り分けがかなり楽になります。名称暗記ではなく、その語は何を測り、何をどう並べるか を答えられる状態を目指してください。
確認問題
確認問題 1:パイプライン処理の高速化率を計算する
問題: 5 ステージのパイプラインを持つ CPU で、100 個の命令を実行する場合、パイプラインなし(1命令を 5 ステージで逐次実行)と比べて何倍高速化されるか。
解答手順:
- パイプラインあり:(5 + 100 - 1) × 1 = 104 ステージ時間
- パイプラインなし:100 × 5 = 500 ステージ時間
- 高速化比 = 500 ÷ 104 ≈ 4.81 倍
ポイント:初期段階(k-1 = 4 ステージ)の遅延後、スループット = 1 命令/ステージになる
確認問題 2:実効メモリアクセス時間を計算する
問題: L1 キャッシュのアクセス時間 4 ns、主記憶のアクセス時間 80 ns、ヒット率 92% のシステムで、実効アクセス時間を求めよ。
解答手順:
- 実効時間 = h × T_キャッシュ + (1 - h) × T_メモリ
- 実効時間 = 0.92 × 4 + 0.08 × 80
- = 3.68 + 6.4 = 10.08 ns
ポイント:ヒット率が 92% でも、ミス時のメモリアクセス時間が大きいため、実効時間は 10 ns 程度。ヒット率をさらに上げることが重要。
確認問題 3:RAID 構成を選択する
問題: 金融機関の基幹システムで、24 時間連続稼働、復旧時間が 6 時間以上取れない環境がある。同時に 2 台のディスク故障が発生した場合でも、システムを止めてはいけない。どの RAID を選ぶべきか、理由とともに答えよ。
解答: RAID 6 を選択する
理由:
- RAID 5 は「1台故障まで許容」のため、2台同時故障時はデータ全損失
- RAID 6 は「2台同時故障まで許容」可能(デュアルパリティ)
- 24 時間連続稼働では、復旧中に別の故障が起こるリスクが高い
- RAID 6 なら 2台故障しても稼働継続でき、復旧時間に余裕がある
容量効率:4 台構成なら 50%(2 台分がパリティ)
確認問題 4:ソフトウェアの層を判定する
問題:
次の役割を、BIOS / UEFI、デバイスドライバ、ミドルウェア のどれに対応づけるべきか。
- PC 起動時にハードウェアを初期化して OS 起動へつなぐ
- OS からプリンタへ印刷命令を渡せるようにする
- 複数アプリケーションから共通に利用される DB 機能を提供する
解答:
BIOS / UEFIデバイスドライバミドルウェア
ポイント:起動の土台、機器制御の橋渡し、アプリ共通機能 の3つに分けると判断しやすいです。
確認問題 5:性能指標を使い分ける
問題:
次の状況で重視すべき指標を、レスポンスタイム、ターンアラウンドタイム、スループット から選べ。
- 利用者が検索ボタンを押して結果が返るまでの待ち時間
- 夜間バッチの開始から終了までの総時間
- 1 時間あたりに処理できる受注件数
解答:
レスポンスタイムターンアラウンドタイムスループット
ポイント:利用者の体感、仕事全体の完了、単位時間の処理量 のどれを見ているかで切り分けます。
確認問題 6:スタックとキューを判定する
問題: 次の説明に最も適切な組合せを選べ。
- 印刷ジョブを受け付けた順に処理する
- 関数呼び出しが終わったら、最後に呼び出した関数から順に戻る
解答:
キュー(FIFO)スタック(LIFO)
ポイント:先に並んだものから処理 ならキュー、最後に積んだものから取り出す ならスタックです。語だけでなく、業務の流れを日本語で言い換えて判断してください。
確認問題 7:用語の言い換えを見抜く
問題: 次の説明に最も適切な用語を答えよ。
- 複数の通信機能を層で積み重ねて提供する構成
- 1 秒あたりに何件処理できるかを表す指標
- 利用者が検索ボタンを押してから結果が返るまでの時間
- 最後に呼び出した関数から順に戻る処理順序
解答:
プロトコルスタックスループットレスポンスタイムスタック
ポイント:スタック という語が出ても、処理順序 の話か 層構造 の話かで意味が変わります。性能指標も同様に、待ち時間 と 処理量 を分けて読みます。
関連ページ
このページは役に立ちましたか?
評価とひとことを残してもらえると、内容と導線の改善に使えます。
Last updated on