基本的にはキタミ式を読みながら、その結果をノートにGPTを使いながらまとめています。
ビット操作とマスクパターン(from キタミ式 R7 第5章-3)
疑問1:EORとXORって違うの?
- 答え:同じ意味です。
- EOR = Exclusive OR(排他的論理和)の略
- XOR = eXclusive OR の略
→ 回路図や教科書によって表記が違うだけ。機能はまったく同じ。
補足
排他的論理和は「同じなら0、異なれば1」を返す演算。
ビットを反転させる時などに利用される。
| A | B | A XOR B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
疑問2:ビットを反転させる方法
- やり方:
NOT(論理否定)または排他的論理和を使う- たとえば
1010の反転は0101 - 反転後に
+1すると「2の補数」になる
→ これで引き算ができる仕組み(加算器で減算を実現)
- たとえば
疑問3:特定のビットを取り出す(マスク処理)
- 方法:
AND演算を使う- 取り出したいビット位置を1、それ以外を0にした「マスクパターン」とANDを取る
- 例)
10110110 AND 00001111 = 00000110
→ 下位4ビットだけ取り出す
疑問4:パリティビットとは?
- 説明:データに「誤り検出用のビット」を追加したもの。
- 偶数パリティ:1の数が偶数になるように設定
- 奇数パリティ:1の数が奇数になるように設定
- 最上位ビットをパリティに使うケースが多い(問題文のSビットなど)
過去問の考察(H26春・問02)
最上位をパリティビットとする8ビット符号で、パリティ以外の7ビットを取り出すには?
- 考え方:上位1ビット(MSB)を除外したい
- ビットマスク:
01111111(2進)=0x7F(16進) - 演算式:
data AND 0x7F
→ パリティビットを除いた下位7ビットだけが残る。
学び
- 特定ビットを取り出す=AND
- 特定ビットを反転する=XOR(EOR)
- 2の補数(NOT+1)で引き算を加算回路で処理できる
論理回路とLSI(from キタミ式 R7 第5章-3)
疑問1:システムLSIとSoCはどう違う?
-
システムLSI(System LSI)
- 複数の機能(CPU・メモリ・通信・入出力など)を1枚の半導体チップに統合したもの。
- 「特定のシステムをチップ化したIC」。
-
SoC(System on a Chip)
- システムLSIの代表的な形態。
- 「1チップでシステムが完結する」という意味合いが強い。
- CPU・GPU・メモリ・通信機能を全部まとめてスマホやIoT機器に搭載されている。
🧩 まとめると:
SoC ⊂ システムLSI(=システムLSIの中でも特に「1チップ完結型」)
疑問2:SIP(System in Package)とは?
- SIP=複数のLSIチップを1つのパッケージにまとめたもの。
- 各チップ(CPU・メモリ・通信モジュールなど)は独立して製造されており、それらを1つのパッケージ(物理的な“箱”)に封入。
- 配線はパッケージ内で行われる。
| 用語 | 構成 | 例え |
|---|---|---|
| SoC | 1つのチップ内に全部入れる | 「1枚のマザーボードに全部内蔵」 |
| SIP | 複数のチップを1つのケースにまとめる | 「ノートPCの中に複数ボードを詰めた」 |
📌 試験では「SoCとSIPの違い」を選ばせる問題が頻出。
→ SoC:単一チップ/SIP:複数チップ封入
疑問3:ASICとは?
- ASIC(Application Specific Integrated Circuit)
- 特定用途向けに設計されたカスタムIC。
- 高性能・低消費電力だが、製造コストと設計期間が大きい。
- 一般製品に使うにはコスパが悪い。
🧩 試験ポイント:
ASIC = 汎用ICではない。
一度設計したら変更不可。製造後の修正が難しい。
疑問4:PLDとは?
- PLD(Programmable Logic Device)
- 電気的に回路を後から書き換え可能なIC。
- ASICの欠点(固定・高コスト)を補う存在。
- ソフトウェアのように論理構成を変更できる。
- 開発の初期試作や小ロット製品に向いている。
疑問5:FPGAとは?
- FPGA(Field Programmable Gate Array)
- PLDの代表格。
- 「出荷後でもフィールド(現場)で再プログラムできる」
- 回路を後から自由に書き換えられるため、実製品にも利用されている。
📘 試験問題(R5春 問20):
「論理回路を基板上に実装した後で再プログラムできる集積回路」=FPGA
→ キーワードは「再プログラム可能」
疑問6:FPGAで使う記述言語(R2秋 問21)
FPGAなどに実装するデジタル回路を記述して論理合成するために使用される言語は?
- 答え:HDL(Hardware Description Language)
- ハードウェアを記述するための専用言語。
- 主な言語:VHDL、Verilog HDL。
- いわば「回路設計のためのプログラミング言語」。
| 言語 | 用途 | 備考 |
|---|---|---|
| HDL | ハードウェアの動作を記述 | FPGA、ASICなどで使用 |
| UML | ソフトウェア設計(クラス図など) | システム開発で使用 |
| XML | データ記述 | 設計言語ではない |
| DDL | データベース定義言語 | 関係なし |
🧩 学び:
FPGA → 記述 → 合成 → 実装
この「記述」に使うのが HDL。
今日の学びまとめ
- SoC:システムLSIの一形態。1チップ完結。
- SIP:複数チップを1パッケージ化。
- ASIC:特定用途向けの固定回路。
- PLD:書き換え可能な論理回路。
- FPGA:PLDの代表。再プログラム可。
- HDL:FPGAやASICの論理回路を記述する言語。
コンピュータ回路と制御(from キタミ式 R7 第5章-3〜5)
1. ビット操作とマスクパターン
✅ 要点
- 2の補数:ビット反転(NOT)+1を加えることで引き算を加算回路で実現。
- 排他的論理和(EOR/XOR):同じなら0、異なれば1。ビット反転などに利用。
- マスク処理(AND演算):特定ビットを取り出す。
- 例)
data AND 0x7F→ 最上位ビットを除いた7ビットを抽出。
- 例)
- パリティビット:誤り検出用の1ビット(偶数/奇数パリティ)。
💡学び
「反転+1=引き算」
「抽出=AND」
「反転=XOR」
「通信の安全確認=パリティ」
2. 論理回路とLSIの種類
🧩 用語まとめ
| 用語 | 意味 | キーワード |
|---|---|---|
| LSI | 集積回路(多機能な電子回路を1チップ化) | Integrated Circuit |
| システムLSI | 複数機能を1チップに統合 | “System-level” |
| SoC (System on a Chip) | システムLSIの一種。1チップ完結。 | “All-in-one chip” |
| SIP (System in Package) | 複数のLSIを1つのパッケージにまとめた | “Multi-chip in one box” |
| ASIC | 特定用途向けのIC。設計変更不可。 | “Custom fixed circuit” |
| PLD | プログラムで回路を書き換え可能。 | “Programmable” |
| FPGA | PLDの代表。出荷後も再プログラム可能。 | “Reconfigurable circuit” |
| HDL | 回路設計を記述する言語(VHDL, Verilog) | “Hardware coding” |
💡学び
SoC=統合、SIP=封入
FPGA=後から書き換え可能
HDL=FPGAを動かす「回路記述言語」
ASIC=一度作ったら変更できない専用設計
3. 組み込みシステムと制御
⚙️ 概要
- 組み込みシステム:特定の機能に特化したコンピュータ制御システム。
→ 家電、自動車、IoT機器などに広く使用。
🌡️ 主な構成要素
| 要素 | 役割 | 例 |
|---|---|---|
| センサー | 物理量を検知し、デジタル信号に変換 | 温度、湿度、加速度、照度、GPS |
| ASIC/制御IC | 入力データを判断・制御信号に変換 | マイコン、CPU |
| アクチュエーター | 制御信号を物理的な動作に変換 | モーター、スピーカー、バルブ |
🔁 制御方式
| 種類 | 内容 | 例 |
|---|---|---|
| シーケンス制御 | あらかじめ決めた順序に従って動作 | 洗濯機(給水→洗い→すすぎ→脱水) |
| フィードバック制御 | センサーで結果を監視し、出力を自動調整 | エアコンの温度制御 |
💡学び
「センサーで状態を知り → 制御ICで判断 → アクチュエーターで動かす」
→ この流れが“組み込み制御”の本質。
フィードバック制御は“頭を使う制御”。
センサーとアクチュエーター(from キタミ式 R7 第5章 過去問)
1. 姿勢制御に使うセンサー(H29秋 問71)
✅ 問題
ドローンやマルチコプターの姿勢制御に使われるセンサーは?
🧩 正解:ジャイロセンサー
💡 解説
- ジャイロセンサー:回転や角速度を検出し、機体の傾きを把握。
- 加速度センサー:加速度を検出(動きや重力方向の変化を感知)。
- ドローンでは、加速度センサー+ジャイロセンサーを組み合わせて姿勢を安定化。
🧠 学び:
ジャイロ=回転/姿勢制御
加速度=移動や重力方向の検出
2. アクチュエーターの説明(R4春 問22)
✅ 問題
アクチュエーターの説明として適切なものは?
🧩 正解
「エネルギー源からのパワーを回転・直進などの動きに変換する」
💡 解説
- アクチュエーター:制御信号(デジタル)を**物理的な動作(アナログ)**に変換する装置。
- 例:モーター、ソレノイド、ヒータ、スピーカーなど。
- センサー:アナログ(現実の現象)→ デジタル信号
- アクチュエーター:デジタル信号 → アナログ(現実の動作)
🧠 学び:
センサーとアクチュエーターは表裏一体。
「入力がセンサー」「出力がアクチュエーター」。
3. 体温を測定するセンサー(R3春 問4)
✅ 問題
体温を測定するのに使われるセンサーは?
🧩 正解:サーミスタ(Thermistor)
💡 解説
- サーミスタ:温度によって電気抵抗が変化する素子。
→ 抵抗値の変化を温度に換算して体温を測定する。 - 超音波センサー:音波を使って距離を測定(障害物検知など)。
- フォトトランジスタ:光の強さを検知(照度センサー、スマホの自動輝度調整など)。
- ポテンショメーター:可変抵抗器。角度や位置を測定(ジョイスティック、ボリュームノブなど)。
🧠 学び
| センサー名 | 検出対象 | 例 |
|---|---|---|
| サーミスタ | 温度 | 体温計、空調 |
| 超音波センサー | 距離・障害物 | 車のバックソナー |
| フォトトランジスタ | 明るさ | スマホ自動輝度 |
| ポテンショメーター | 角度・位置 | ボリュームつまみ |
4. センサー・アクチュエーターの要点整理
| 区分 | 内容 | 代表例 |
|---|---|---|
| センサー | 環境情報を電気信号に変換 | 温度センサー、照度センサー、加速度、GPS |
| アクチュエーター | 電気信号を動作に変換 | モーター、ヒータ、スピーカー |
| 制御IC(ASICなど) | 入力(センサー)→判断→出力(アクチュエーター)を実施 | 組み込みマイコン |
🧩 制御方式
- シーケンス制御:順番が決まっている(洗濯機など)
- フィードバック制御:結果を見て調整(エアコンなど)
コンピュータの構成とノイマン型コンピュータ(from キタミ式 R7 第6章-1〜2)
1. コンピュータの五大装置
💡 構成要素
| 装置名 | 主な役割 | 備考 |
|---|---|---|
| 制御装置(CU) | 命令を解釈・実行の順序を制御 | CPUの中核 |
| 演算装置(ALU) | 四則演算・論理演算を実行 | CPUの一部 |
| 記憶装置 | データ・プログラム・中間結果を保持 | 主記憶+補助記憶 |
| 入力装置 | 外部から情報を取り込む | キーボード、センサーなど |
| 出力装置 | 処理結果を外部へ出す | モニタ、プリンタなど |
🧩 CPU(中央処理装置)
- 制御装置(CU)+演算装置(ALU)から構成される。
- 主記憶装置と連携して命令を実行。
2. ノイマン型コンピュータの特徴
💡 概要
現代の汎用コンピュータは基本的に ノイマン型 構造に基づいている。
| 特徴 | 説明 |
|---|---|
| プログラム内蔵方式 | 実行するプログラムを主記憶装置に格納しておく方式 |
| 逐次制御(蓄積制御方式) | 命令を1つずつ取り出して順番に実行 |
| 共通メモリ空間 | データと命令が同じ主記憶装置に格納されている |
🧠 学び
ノイマン型=「プログラムを記憶し、命令を順に実行」
CPUは主記憶装置から命令を取り出し、ALUで演算、結果を再び主記憶に戻す。
3. 主記憶装置とアドレス
- 主記憶装置は「コインロッカー」に例えられる。
- 各区画(メモリ領域)には番号=アドレスが振られている。
- CPUはアドレス指定により、どのデータを読み書きするかを決定する。
🧩 補助記憶装置
- プログラムやデータは通常、補助記憶(HDD・SSDなど)に保存されている。
- 実行時には主記憶装置にロードされてからCPUが実行する。
4. 過去問(R6春 問22)
✅ 問題概要
グラフィックLCDモジュール(640×480)における座標(x=7, y=6)のアドレスを求める。
条件整理
- 1画素:16ビット(=2バイト)
- 1行:640画素 → 640×2 = 1,280バイト
- y=6行目 → 6×1,280 = 7,680バイト
- x=7 → 7×2 = 14バイト
- 先頭アドレス:7,680 + 14 = 7,694番地
🧩 正解:選択肢「ウ」
5. LCDとは?
- LCD (Liquid Crystal Display)
液晶ディスプレイの略称。
液晶分子の向きを電圧で制御し、光の透過を変化させて表示を行う。
🧠 学び
「画素(ピクセル)単位でアドレスが割り振られる」
→ グラフィック処理もメモリアクセスの延長線上にある。
6. 追加トピック:ノイマン型の課題と新動向
- ノイマンボトルネック:
CPUとメモリ間のデータ転送速度が全体性能を制約する。 - 脱ノイマン型(ノイマン以外)アーキテクチャ:
- ハーバード型:命令メモリとデータメモリを分離。
- AI向けアーキテクチャ(ニューラルネット型):並列処理に最適化。
- 量子コンピュータ:量子状態を用いた全く異なる制御方式。
CPUの命令実行手順とレジスタ(from キタミ式 R7 第6章-3)
1. CPU内部の構成とレジスタの役割
CPUには、演算や制御を効率的に行うための**小型の記憶装置(レジスタ)**が備わっている。
主記憶装置よりも高速で、CPU内でのデータの一時保管に使用される。
💡 主なレジスタの種類と役割
| レジスタ名 | 役割 | 備考 |
|---|---|---|
| プログラムカウンタ(PC) | 次に実行する命令のアドレスを保持 | 命令実行後に +1(次の命令へ) |
| 命令レジスタ(IR) | 現在実行中の命令を保持 | 命令部+オペランド部に分かれる |
| アキュムレータ(ACC) | 演算結果の一時保存 | ALUに接続される主要レジスタ |
| 汎用レジスタ(GR) | 任意のデータを格納 | 多目的なデータ操作に使用 |
| インデックスレジスタ(XR) | アドレス計算に使用 | 配列・ループ処理に便利 |
| ベースレジスタ(BR) | ベースアドレスを保持 | 相対アドレス指定に使われる |
🧠 学び
CPUの中にも“超高速なメモリ”=レジスタがある。
データのやり取りを主記憶から直接行うのではなく、
一度レジスタにロードしてから演算する。
2. 命令の構造
命令は以下の2つの部分から構成される。
| 部分 | 内容 | 例 |
|---|---|---|
| 命令部(オペコード) | どんな処理をするか(例:加算、比較など) | ADD, SUB, CMP |
| オペランド部 | 処理対象のデータやアドレス | アドレス100番地、レジスタR1など |
🧩 例:
ADD A, B
→ A と B の内容を加算し、結果をAに格納する。
命令部=ADD、オペランド部=A, B。
3. 命令実行の手順(命令実行サイクル)
CPUは命令を「取り出す → 解読 → 実行」のサイクルで動いている。
| 手順 | 内容 | 対応する動作 |
|---|---|---|
| ① 命令フェッチ(Fetch) | 主記憶から命令を取り出す | PCのアドレスを参照し、IRにロード |
| ② 命令解読(Decode) | 命令部を解析して実行内容を判断 | 命令デコーダが解析 |
| ③ オペランド読出し(Operand Fetch) | 必要なデータを主記憶から読み込む | アドレスを参照してGRにロード |
| ④ 命令実行(Execute) | ALUで演算を実行 | 加算・論理演算など |
| ⑤ 結果書き戻し(Write Back) | 結果をレジスタまたは主記憶に保存 | ACCや主記憶へ書き戻し |
| ⑥ 次命令へ(PC更新) | プログラムカウンタを+1 | 次の命令をフェッチへ戻る |
🧠 まとめ
命令フェッチ → 命令解読 → オペランド読出し → 命令実行
=「命令実行サイクル」
4. 過去問(H19秋 問17)
✅ 問題
コンピュータの命令実行順序として正しいものはどれか。
🧩 正解
命令フェッチ → 命令解読 → オペランド読出し → 命令実行
💡 解説
- 命令実行は必ずフェッチから始まる。
- 実行後はプログラムカウンタが次の命令アドレスに更新される。
- CPUはこのサイクルを高速に繰り返してプログラムを実行している。
💬 コメント・補足
- アキュムレータ(ACC)はALUと直接やり取りする演算結果用レジスタ。
→ 「ALUの一部」ではなく「ALUに接続される専用レジスタ」。 - ベースレジスタやインデックスレジスタは、メモリアドレスの柔軟な指定に用いられる。
(ループ処理や配列アクセスなどで登場) - 試験では「命令実行サイクルの順序」問題は頻出。
暗記ではなく、流れをイメージで理解しておくのが重要。
CPUの主要レジスタとスタックポインタ(from キタミ式 R7 第6章-3 過去問)
1. プログラムカウンタ(Program Counter, PC)
✅ 過去問:令和1年 秋 問9
問題:
CPU内のプログラムレジスタ(=プログラムカウンタ)の役割はどれか?
正解:
命令を読み出すために、次の命令が格納されたアドレスを保持する。
💡 解説
- プログラムカウンタ(PC) は、主記憶装置上の次に実行すべき命令のアドレスを保持。
- 命令をフェッチするたびに自動的に+1される(逐次実行のため)。
- ジャンプ命令や条件分岐のときは、PCの値が変更され、別のアドレスへ分岐する。
🧠 ポイント
「次に実行する命令のアドレス」=プログラムカウンタの中身。
実行が進むたびにインクリメントされる。
2. 関連する他のレジスタとの比較
| レジスタ名 | 主な役割 | 備考 |
|---|---|---|
| 命令レジスタ(IR) | 現在実行中の命令そのものを保持 | 命令部+オペランド部 |
| アキュムレータ(ACC) | ALUと直接やり取りし、演算結果を保持 | “ALU専用の入出力レジスタ” |
| 状態レジスタ(フラグレジスタ) | 演算結果の状態(ゼロ、キャリー、負など)を保持 | 条件分岐で利用される |
| プログラムカウンタ(PC) | 次の命令のアドレスを保持 | 命令実行の流れを管理 |
| 汎用レジスタ(GR) | 任意のデータを一時保持 | 計算用・転送用など多目的 |
🧠 アキュムレータとALUの関係
- **ALU(演算装置)**は演算そのものを行う“仕組み”。
- アキュムレータ(ACC)はALUが演算した結果を一時的に格納するための場所。 → 「ALUの一部」ではなく、「ALUに直結した専用レジスタ」。
3. スタックポインタ(Stack Pointer, SP)
✅ 過去問:令和2年 春 問8
問題:
CPUのスタックポインタが示すものとして最も適切なのはどれか?
正解:
サブルーチン呼び出し時に、戻り先アドレスやレジスタ内容などを格納するメモリアドレス。
💡 解説
- スタックポインタ(SP)は、メモリ上の「スタック領域(積み重ね領域)」の最上位アドレスを保持。
- サブルーチン呼び出し・割り込み・関数実行時などに使われる。
- 「戻り先アドレス」や「一時退避したレジスタの内容」をスタックに積む(push)/戻す(pop)。
🧠 イメージ
↓メモリ下位アドレス
[変数領域]
[スタック領域] ← SPが指す(push/popで変動)
↑メモリ上位アドレス
関連語句
| 用語 | 内容 |
|---|---|
| スタック | データを「後入れ先出し(LIFO)」で扱う領域 |
| プッシュ(push) | スタックにデータを積む(SPを更新) |
| ポップ(pop) | スタックからデータを取り出す(SPを戻す) |
4. 状態レジスタ(フラグレジスタ)
- 演算結果に応じて状態ビット(フラグ)を立てる。
- 条件分岐命令で「どの条件でジャンプするか」を判断する材料となる。
| フラグ名 | 内容 |
|---|---|
| Zフラグ(Zero) | 演算結果が0になった |
| Cフラグ(Carry) | 桁あふれが発生した |
| Nフラグ(Negative) | 結果が負の値になった |
| Vフラグ(Overflow) | 正負判定でオーバーフローした |
🧠 まとめ
状態レジスタが“条件分岐命令の判断材料”になる。
例:「結果が0なら分岐」→ Zフラグを参照。
機械語のアドレス指定方式とバイトオーダー(from キタミ式 R7 第6章-4)
1. 命令とアドレス指定方式
CPUが主記憶装置上のデータを参照する際、
「オペランド部にどのようにアドレスや値が記載されているか」によって、
アドレス指定方式が異なる。
✅ 即値アドレス指定方式(Immediate Addressing)
- オペランド部にデータそのものが記述されている。
- メモリを参照せず、その値を直接利用する。
🧩 例:
ADD A, #5 ; A に 5 を加算
→ 「#5」は即値。メモリ100番地などを見に行かず、そのまま「5」を使う。
📘 特徴:
- 高速(メモリアクセス不要)
- 定数処理などに利用される
✅ 直接アドレス指定方式(Direct Addressing)
- オペランド部に実際のメモリアドレスが書かれている。
- 命令に書かれたアドレスのデータを読み書きする。
🧩 例:
LOAD A, 100 ; メモリ100番地の値をAへ
📘 特徴:
- アドレスが固定的(可搬性が低い)
- 小規模プログラムに向く
✅ 間接アドレス指定方式(Indirect Addressing)
- オペランド部にはデータが入っている番地が書かれている。
- その番地を経由して、最終的なデータを読み出す。
🧩 例:
LOAD A, (200)
→ メモリ200番地に“100”という値が入っており、実際のデータはメモリ100番地にある。
→ 200 → 100 → データ のように二段階参照する。
📘 特徴:
- 柔軟性が高い(動的なアドレス参照が可能)
- 参照回数が増えるため速度は遅い
✅ インデックスアドレス指定方式(Indexed Addressing)
- オペランド部に記された値に、インデックスレジスタの値を加算して実効アドレスを求める。
🧩 例:
LOAD A, 100(X)
→ 実効アドレス = 100 + X(インデックスレジスタの値)
📘 特徴:
- 配列や連続データ(例:A[0], A[1], A[2]…)の処理に最適
- ループ処理で頻出(インデックスをインクリメントして走査)
✅ ベースアドレス指定方式(Base Addressing)
- オペランド部の値に、ベースレジスタの内容を加算して実効アドレスを求める。
🧩 例:
LOAD A, 20(B)
→ 実効アドレス = 20 + B(ベースレジスタの値)
📘 特徴:
- プログラムがメモリ上のどこに配置されても命令を修正せずに動作できる。
- OSが複数のプログラムをメモリにロードする**再配置(リロケーション)**で重要。
🧠 補足
ベースレジスタは「プログラムの基準位置」を示す。
実際のメモリ番地は「基準位置+相対オフセット」で決まる。
✅ 相対アドレス指定方式(Relative Addressing)
- オペランド部の値に、プログラムカウンタ(PC)の値を加算して実効アドレスを求める。
🧩 例:
JUMP +4
→ 現在の命令アドレスに+4してジャンプする(相対分岐)
📘 特徴:
- 分岐命令やループ処理で多用される。
- プログラム全体を移動しても動作が変わらない(相対指定のため)。
2. まとめ:アドレス指定方式の比較表
| 種類 | オペランドの内容 | 実効アドレスの求め方 | 主な用途 |
|---|---|---|---|
| 即値 | データそのもの | オペランド値 | 定数処理 |
| 直接 | 実際のアドレス | オペランド値 | 固定参照 |
| 間接 | アドレスのアドレス | メモリ内容参照 | 動的参照 |
| インデックス | アドレス+XR | オペランド+インデックス値 | 配列処理 |
| ベース | アドレス+BR | オペランド+ベース値 | 再配置 |
| 相対 | アドレス+PC | オペランド+PC | 分岐命令 |
3. 主記憶装置上のバイトオーダー
CPUとメモリの間で、複数バイトのデータをどの順に格納するかという規約。
| 種類 | 格納順序 | 例(16進:0x12345678) | 採用例 |
|---|---|---|---|
| ビッグエンディアン(Big Endian) | 上位バイト → 下位バイト | 12 34 56 78 |
通信規格(TCP/IP)、モトローラ系 |
| リトルエンディアン(Little Endian) | 下位バイト → 上位バイト | 78 56 34 12 |
Intel系CPU、x86アーキテクチャ |
📘 ポイント
- ネットワーク通信(TCP/IP)は ビッグエンディアン が標準。
- PCなどのIntel系CPUは リトルエンディアン。
- 異なる方式の機器間通信では、送受信時に変換(エンディアン変換)が必要。
🧠 覚え方
「ビッグ」は“上から順に”
「リトル」は“下から順に”
💬 コメント
- インデックス/ベース/相対の3つは混同しやすいが、
**「何を基準に足すか」**で区別すると覚えやすい。- インデックス → 配列用(XR)
- ベース → 再配置用(BR)
- 相対 → 分岐用(PC)
- エンディアンは「通信 or CPU」で採用方式が違う点が試験でも問われやすい。
- この章は午後試験でも「アセンブラ問題」「アドレス変換問題」で頻出。
アドレス指定方式・メモリ転送・エンディアン(from キタミ式 R7 第6章-4 過去問)
1. 絶対アドレス方式(H26春 問10)
✅ 問題
命令のアドレス部から実行アドレスを生成する方法のうち、絶対アドレス方式はどれか。
🧩 正解:即値アドレス方式(選択肢A)
💡 解説
- 絶対アドレス方式=実行時にアドレスが変化しない方式。
- 命令のアドレス部に**固定の番地(または値)**を直接指定する。
- 「相対」「ベース」「インデックス」などのように基準を足し合わせる方式ではない。
📘 関連
| 種類 | 実効アドレス | 備考 |
|---|---|---|
| 絶対アドレス指定 | =命令部に記載された値そのまま | 固定参照 |
| 相対アドレス指定 | PC+オペランド | 分岐命令向け |
| ベースアドレス指定 | BR+オペランド | 再配置対応 |
| インデックス指定 | XR+オペランド | 配列アクセス |
🧠 まとめ
絶対アドレス方式=「メモリ上の特定位置を直接指す」方式。
プログラムをどこにロードしても変わらない。
2. メモリ転送機能(R6春 問8)
✅ 問題
同一メモリ空間で、ブロック転送を行う機能をもつCPUにおいて、
転送元アドレス・転送先アドレス・方向フラグ・転送号数を指定してデータを転送する。
1001〜1004番地のデータを1003〜1006番地へ転送する場合、どの方向指定が適切か。
🧩 正解:後順(方向フラグ=1)
💡 解説
- 転送範囲が重なる場合(上書きの危険がある場合)は、
**後方から(高アドレス→低アドレス方向)**へ転送する必要がある。 - そうしないと、転送元のデータが転送途中で上書きされてしまう。
🧩 イメージ
| アドレス | 転送方向 | 結果 |
|---|---|---|
| 1001→1003 (前方向) | ❌ データ上書き発生 | |
| 1004→1006 (後方向) | ✅ 正しく転送 |
📘 ポイント
メモリ転送では「重複領域を持つ場合、後方からコピーする」
→ OSやDMA転送でも同様の処理が使われている。
3. リトルエンディアン(H29春 問21)
✅ 問題
16進数 AB CD 12 34 をリトルエンディアン方式で4バイトのメモリに格納したときの順序は?
🧩 正解:34 12 CD AB
💡 解説
- リトルエンディアンは「下位バイトから順に格納」。
→ 下位バイト(34)が最初、上位バイト(AB)が最後になる。 - 通信やネットワークではビッグエンディアンが主流だが、
PCなどのIntel系CPUはリトルエンディアンを採用。
🧠 覚え方
「リトル=下から」
「ビッグ=上から」
4. 今日の暗記ノート転記候補
| 用語 | 意味 |
|---|---|
| 絶対アドレス方式 | アドレスが固定(即値または直接指定) |
| ブロック転送 | メモリ間でデータをまとめてコピーする機能 |
| 方向フラグ | 転送方向を示す(0=昇順、1=降順) |
| リトルエンディアン | 下位バイトから順に格納(Intel系CPU) |
| ビッグエンディアン | 上位バイトから順に格納(通信標準) |
| メモリ重複転送 | 後方からコピーして上書きを防ぐ |
💬 コメント
- 「絶対アドレス方式」はキタミ式本文には出てこないが、
「変位を加えない」=絶対という観点で理解できる。 - メモリ転送問題はOSやDMA制御でも出題される(応用情報午後対策にも重要)。
- エンディアン問題はネットワーク通信とCPU構造の違いを理解しておくと強い。
CPUの性能指標(from キタミ式 R7 第6章-5)
1. CPU性能を表す3つの指標
CPUの処理性能は、主に以下の3つで評価される。
| 指標 | 意味 | 単位 | 概要 |
|---|---|---|---|
| クロック周波数(Clock Frequency) | 1秒間にクロック信号が繰り返される回数 | Hz(ヘルツ) | 「頭の回転の速さ」 |
| CPI(Clock Cycles Per Instruction) | 1命令あたりに必要なクロック数 | ― | 「1つの命令を実行するのに何拍かかるか」 |
| MIPS(Million Instructions Per Second) | 1秒間に実行できる命令数(百万命令単位) | MIPS | 「1秒で何命令こなせるか」 |
2. クロック周波数の考え方
-
クロック:CPUの動作タイミングを決める基準信号。
→ “チクタク”のテンポに合わせて命令を実行する。 -
クロック周波数 1GHz = 1秒間に10億回のクロック。
→ 1クロックの時間 = 1 ÷ 10億 = 1ナノ秒 (1ns)。
🧠 まとめ
クロック周波数が高いほど「1クロックが短い」=より速く命令を処理できる。
3. CPI(Clock Cycles Per Instruction)
- 命令1つを実行するのに必要なクロック数。
命令の種類によって異なる(加算よりも乗算が多くかかる、など)。
📘 例
- CPI = 4 → 1命令あたり4クロック必要。
- CPIが小さいほど効率が良い。
🧩 命令実行時間の計算式
命令実行時間 = クロック周期 × CPI
4. MIPS(Million Instructions Per Second)
- 1秒間に実行できる命令の数(百万単位)。
📘 計算式
MIPS = クロック周波数(Hz) ÷(CPI × 10^6)
🧩 例
- クロック周波数:1GHz(=10^9 Hz)
- CPI:2
MIPS = 10^9 ÷ (2 × 10^6) = 500 MIPS
🧠 まとめ
MIPSが大きいほど高速だが、命令の種類や構成に依存する。
異なるCPU同士の単純比較には向かない(アーキテクチャ依存)。
5. 各指標の関係まとめ
| 観点 | 数式・説明 | 備考 |
|---|---|---|
| 1クロックの時間 | 1 ÷ クロック周波数 | 1GHz → 1ns |
| 命令実行時間 | CPI × (1 ÷ クロック周波数) | 命令ごとの処理時間 |
| MIPS | クロック周波数 ÷ (CPI × 10^6) | 毎秒実行命令数 |
6. 今日の暗記ノート転記候補
| 用語 | 意味 |
|---|---|
| クロック周波数 | 1秒あたりのクロック回数。動作テンポ。 |
| 1クロック時間 | 1 ÷ クロック周波数 |
| CPI | 1命令あたりに必要なクロック数 |
| MIPS | 1秒あたりに実行できる命令数(百万単位) |
| 命令実行時間 | クロック周期 × CPI |
| MIPS算出式 | クロック周波数 ÷ (CPI × 10^6) |
💬 コメント
- 「CPI × クロック周期」が1命令にかかる時間という感覚を持っておくと、どんな数値問題も対応できる。
- MIPSは便宜的な性能指標であり、実際の性能評価ではSPECスコアやベンチマークテストなどが使われる(応用情報でも出題あり)。
- 午前試験では「1GHz → 1ns」や「CPI・MIPSの計算式」を暗記しておくとほぼ確実に得点源になる。
記憶装置とキャッシュメモリ(from キタミ式 R7 第7章-1〜2 + 過去問)
1. 記憶装置の階層構造
記憶装置は、速度・容量・価格のバランスを取るために階層化されている。
CPUに近いほど高速で高価、遠いほど低速で大容量。
| 種類 | 特徴 | 速度 | 容量 | 主な役割 |
|---|---|---|---|---|
| レジスタ | CPU内部。最も高速。 | ◎ | × | 計算中データの一時保持 |
| キャッシュメモリ | 主記憶とCPUの間の中間記憶。 | ○ | △ | 高速アクセスのための緩衝 |
| 主記憶(RAM) | 実行中プログラムを保持。 | △ | ○ | 作業領域 |
| ディスクキャッシュ | HDD/SSD前段のバッファ領域。 | △ | ○ | I/O高速化 |
| 補助記憶(HDD/SSD) | 永続的保存用。 | × | ◎ | 長期データ保持 |
💡 まとめ
CPUに近いほど高速/小容量/高価。
遠くなるほど低速/大容量/低価格。
2. キャッシュメモリの役割
- 主記憶とCPUの速度差を埋めるための高速緩衝記憶。
- よく使うデータ・命令をキャッシュに保持して、再アクセスを高速化。
- ヒット率 (Hit Rate):キャッシュに目的データが存在する確率。
📘 平均アクセス時間の公式
- 平均アクセス時間 = (ヒット率 × キャッシュアクセス時間) + ((1 − ヒット率) × 主記憶アクセス時間)
🧠 ポイント
ヒット率が上がるほど、平均アクセス時間は短くなる。
3. キャッシュメモリの書き込み方式
| 方式 | 内容 | 特徴 |
|---|---|---|
| ライトスルー方式 (Write Through) | キャッシュと主記憶の両方に同時に書き込む | 一貫性(コヒーレンシー)が常に保たれるが遅い |
| ライトバック方式 (Write Back) | キャッシュにのみ書き込み、追い出し時に主記憶へ反映 | 高速だが同期制御が必要 |
💡 コヒーレンシー (Coherency)
キャッシュと主記憶のデータ内容が一致している状態。
4. キャッシュメモリの割り当て方式
| 方式 | 内容 | 特徴 |
|---|---|---|
| ダイレクトマッピング方式 | 主記憶の各ブロックをキャッシュの特定1か所に割り当て | 構造が単純で高速だが、衝突が多くヒット率低下 |
| フルアソシアティブ方式 | 任意の空きロケーションに割り当て可能 | 柔軟だが管理・探索が複雑で高コスト |
| セットアソシアティブ方式 | キャッシュを複数セットに分割し、その中から格納場所を選ぶ | 性能とコストのバランスが良い(実用的) |
🧠 イメージ
- ダイレクト:1対1対応。単純だが衝突多い。
- フルアソシアティブ:どこでもOK。柔軟だが遅い。
- セットアソシアティブ:中間的な実装。現実のCPUはこれ。
5. メモリインターリーブ
- 主記憶を複数のバンクに分割し、並列にアクセスすることで高速化する方式。
- 連続するアドレスを別バンクに分散配置し、連続読み出しを並行処理する。
📘 効果
- シーケンシャルアクセス(連続読み出し)では効果大。
- ランダムアクセスでは恩恵が少ない。
🧠 まとめ
「主記憶を複数の小部屋(バンク)に分けて並列アクセスする」仕組み。
6. 過去問整理
✅ 令和5年 春 問10
キャッシュメモリの書き込み方式に関する問題。
→ 「ライトスルー方式は、キャッシュと主記憶の両方に同時書き込みする」
→ 「ライトバック方式はキャッシュのみ書き込み、追い出し時に主記憶へ反映」
正解:ライトスルー方式=常に一致、ライトバック方式=高速だが遅延更新
✅ キャッシュのフルアソシアティブ方式
特徴:
主記憶ブロックをキャッシュ内の任意の場所に格納できる。
→ 高柔軟だが、アドレス検索のための制御が複雑。
正解:任意のロケーションに格納可能だが制御が複雑
✅ 令和1年 秋 問10
平均アクセス時間を求める式
| 記号 | 内容 |
|---|---|
| X | キャッシュのアクセス時間 |
| Y | 主記憶のアクセス時間 |
| R | ヒット率 |
| (1 − R) | ミス率 |
📘 式
- 平均アクセス時間 = (R × X) + ((1 − R) × Y)
🧠 補足
ヒット率が高いほど、アクセス平均時間はキャッシュ寄り(高速側)に近づく。
💬 コメント
- 「キャッシュメモリ」は応用情報で毎年出る定番領域。
- 「ライトスルー/ライトバック」「ヒット率」「平均アクセス時間」の式は必ず暗記。
- メモリインターリーブはCPU・主記憶間の帯域を上げるための手法。
- 割り当て方式の違いは構造のシンプルさとヒット率のトレードオフとして理解。
入出力装置とインターフェース(from キタミ式 R7 第9章)
1. バス(Bus)の種類と分類
コンピュータ内部・外部の機器を接続するための伝送経路を バス (Bus) と呼ぶ。
CPUやメモリ、周辺機器を相互に接続し、データや制御信号をやり取りする。
| 種類 | 接続対象 | 内容 |
|---|---|---|
| 内部バス | CPU内部の装置間 | レジスタや演算装置間の接続 |
| 外部バス | 外部機器との接続 | 主記憶や周辺機器など |
| システムバス | CPU・主記憶・I/O装置をつなぐ | データバス、アドレスバス、制御バスで構成 |
| 拡張バス | 拡張カードを接続するバス | PCIやAGPなど |
| 入出力バス | 入出力装置専用の外部バス | USBなど |
2. バスのデータ転送方式
| 分類 | 内容 | 特徴 |
|---|---|---|
| パラレルバス | 複数ビットの信号を同時転送 | 短距離・低速には向くが、高速化が難しい(信号ずれ) |
| シリアルバス | 信号を1本で直列転送 | 長距離・高速転送に適する。近年主流(例:USB, PCIe) |
💡 要点
高速化の進展により、現在はシリアルバスが主流。
タイミング制御・ノイズ耐性に優れる。
3. 入出力制御方式
| 制御方式 | 概要 | 特徴 |
|---|---|---|
| プログラム制御方式 | CPUがI/Oを逐次制御 | シンプルだがCPUが待機状態に陥る |
| DMA制御方式 | DMAコントローラがI/Oと主記憶間を直接転送 | CPUを介さず効率的。完了後に割り込み通知 |
| チャンネル制御方式 | DMAの発展型。専用I/Oプロセッサ(チャンネル)が制御 | 高性能システムで使用。CPUと並行動作可 |
🧠 まとめ
DMA(Direct Memory Access)=
CPUの代わりに入出力とメモリ間を転送する制御方式。
転送完了後、CPUに「割り込み」で完了通知。
4. 入出力インターフェース規格
🔹 PCI系(拡張バス)
| 規格 | 名称 | 内容 |
|---|---|---|
| PCI | Peripheral Component Interconnect | パソコンで広く使われた標準拡張バス |
| AGP | Accelerated Graphics Port | グラフィック専用の拡張ポート(PCIから独立) |
| PCI Express (PCIe) | PCI・AGPの後継。シリアル通信。 | レーン数(x1, x4, x8, x16)で帯域可変。現行主流。 |
🔹 パラレル方式の外部バス
| 規格 | 名称 | 内容 |
|---|---|---|
| IDE (ATA) | Integrated Drive Electronics | 内蔵HDD接続用。初期は2台→拡張で4台まで接続可。 |
| SCSI | Small Computer System Interface | 汎用高速I/O規格。最大8台接続可。デイジーチェーン接続+ターミネータ必須。 |
🔹 シリアル方式の外部バス
| 規格 | 名称 | 内容 |
|---|---|---|
| USB | Universal Serial Bus | 最も標準的な接続規格。ホットプラグ/プラグ&プレイ対応。 |
| IEEE 1394 | FireWire / i.LINK | 映像・デジタル家電向け。ホットプラグ対応。 |
| SATA | Serial ATA | ATAをシリアル化。HDD/SSD接続の主流。 |
5. USBの詳細
| バージョン | 最大速度 | 通信方式 | 備考 |
|---|---|---|---|
| USB 1.1 | 12Mbps | 半二重 | 初期規格 |
| USB 2.0 | 480Mbps | 半二重 | 普及モデル |
| USB 3.0 | 5Gbps | 全二重 | 9ピン。互換性あり。青色ポートが目印 |
| USB 3.1/3.2 | 最大20Gbps | 全二重 | Type-C対応 |
| USB4 | 最大40Gbps | 全二重 | Thunderbolt互換 |
💡 電源供給
- バスパワー:USBポートから電源供給(例:マウス、メモリ)
- セルフパワー:外部電源から供給(例:プリンター)
💡 コネクタ形状
- Type-A / Type-B / Mini-A / Mini-B / Micro-A / Micro-B
- Type-C:上下対称で向きを問わない。給電量を自動調整。
💡 USB OTG(On-The-Go)
パソコンを介さず機器同士を直接接続(例:カメラ → プリンタ)。
6. USB転送方式
| 転送方式 | 概要 | 例 |
|---|---|---|
| アイソクロナス転送 | 一定周期でデータ転送。リアルタイム性重視。 | Webカメラ、音声入力 |
| インタラプト転送 | 一定間隔で短いデータ転送。 | マウス、キーボード |
| バルク転送 | 大量データを一括転送。 | スキャナ、外付けストレージ |
🧠 補足
- アイソクロナス:周期重視
- インタラプト:イベント重視
- バルク:大量データ重視
7. 無線インターフェース規格
| 規格 | 通信距離 | 特徴 |
|---|---|---|
| IrDA | 約1m(赤外線通信) | 障害物に弱い。リモコン・古い携帯など |
| Bluetooth | 約10〜100m(無線通信) | 障害物に強く、マウス・イヤホン・キーボードなどに利用 |
8. 過去問整理
✅ 平成17年 春 問21
システムバスの説明として適切なもの
- CPU、主記憶、入出力装置を接続する共通データ転送路
- 正答:「コンピュータ装置間で信号を共有するデジタル転送路」
✅ 平成25年 秋 問12
DMAの説明として適切なもの
- 正答:「専用制御回路が入出力装置と主記憶間のデータ転送を行う方式」
✅ 平成30年 春 問12
USB3.0の特徴
- 正答:「全二重通信を行う」
(ピン数は9本に増加し、下位互換性あり)
✅ 令和3年 秋 問10
USB Type-Cコネクタの特徴
- 正答:「上下の向きを気にせず接続できる」
💬 コメント
- この章では DMA制御方式/USB規格の違い/RAIDとの接続構造 が頻出。
- USB3.0以降は「全二重通信」と「互換性あり」をセットで覚える。
- インターフェース問題は「略語+特徴+世代差」で整理すると得点源になる。
Chapter 10:オペレーティングシステム(OS)
10-2 ジョブ管理
🔹 ジョブとジョブステップ
ジョブ(Job):コンピュータが実行するひとまとまりの処理。
ジョブステップ(Job Step):ジョブをさらに細かく分割した処理単位で、
各ジョブステップはCPUの割り当てを受けて実行される。
ジョブは 1つ以上のジョブステップ から構成され、
さらにジョブステップは タスクまたはプロセス の集合として扱われる。
💡 ジョブの管理単位
- OSは複数のジョブをスケジューリングして順番に処理。
- ジョブ制御は「リーダ → イニシエータ → ターミネータ → ライタ」の流れで進行。
🔹 スプーリング(Spooling)
(※前節のまとめより引用)
Spool = Simultaneous Peripheral Operation On-Line
入出力処理を一時的に磁気ディスクへ蓄積し、CPUを待たせない仕組み。
- 低速なプリンタなどのI/O装置を非同期処理化できる。
- CPU効率を高める重要なOS機能。
🔹 過去問整理(ジョブ管理)
| 年度 | 問題内容 | 正答・ポイント |
|---|---|---|
| R4 春 問17 | 一時ファイルを生成するジョブ群で、磁気ディスクに必要な最小容量を求める | 並列実行数(多重度)とファイル参照関係を考慮して計算する |
| H19 春 問16 | ジョブとジョブステップの関係 | 「ジョブは1つ以上のジョブステップから構成される」が正答 |
| R5 春 問16 | CPUと磁気ディスクの使用率を問う問題 | CPU使用率 = CPU動作時間 / 全処理時間 で算出 |
10-3 タスク管理(プロセス管理)
🔹 タスクとは
CPUの実行単位。
ジョブステップがタスク管理に渡されると、タスク(プロセス) が生成される。
OSは複数のタスクを管理し、CPUの使用権を適切に割り当てて並列的に実行する。
🔹 タスクの状態遷移
タスクは実行中の状態によって以下の3つを行き来する。
| 状態 | 内容 |
|---|---|
| レディ (Ready) | 実行可能だがCPUの割当を待っている |
| ラン (Run) | CPUの使用権を得て実行中 |
| ウェイト (Wait) | 入出力などの完了待ち(CPU未使用) |
📈 遷移イメージ Ready → (CPU割当) → Run → (I/O要求) → Wait → (I/O完了) → Ready
🔹 ディスパッチャ(Dispatcher)
レディ状態のタスクにCPUを割り当てて実行(ラン状態に遷移)させるプログラム。
🧠 役割
ディスパッチャは「CPUの使用権を与える係」
スケジューラは「次に誰にCPUを与えるかを決める係」
10-4 タスクスケジューリング
🔹 スケジューリングの目的
限られたCPU時間を効率的に使い、応答時間を短縮・処理効率を高める。
🔹 スケジューリング方式
| 方式 | 特徴 | 備考 |
|---|---|---|
| 到着順方式 (FCFS: First Come First Served) | 実行可能になった順に処理 | CPU使用権は奪われない(ノンプリエンプティブ) |
| 優先順方式 (Priority Scheduling) | タスクに優先度を設定して実行 | より高優先度タスクが現れるとCPUを奪う(プリエンプティブ) |
| 動的優先順方式 | 待ち時間に応じて優先度を上げる | スタベーション(餓死) 防止に有効 |
🔹 スタベーション(Starvation)
優先度の低いタスクが、
高優先度タスクの連続出現によって長時間CPUを割り当てられず、
いつまでも実行されない状態。
💡 解決策
- 待ち時間に応じて優先度を上げる「動的優先順方式」を採用。
- タイムシェアリング方式などでCPU時間を公平に配分する。
🔹 過去問整理(タスク管理)
| 年度 | 問題内容 | 正答・ポイント |
|---|---|---|
| H18 春 問20 | タスク状態の説明 | レディ=CPU待ち、ウェイト=I/O待ち |
| R4 秋 問18 | スタベーションの発生原因 | 高優先度タスクが続くことで低優先度が実行されない |
| H30 秋 問15 | ディスパッチャの役割 | CPUを実行タスクに割り当てるプログラム |
| R3 春 問17 | 動的優先順スケジューリング | 待ち時間に応じて優先度を上げる方式 |
💬 コメント
- ジョブ → ジョブステップ → タスク(プロセス) の関係を整理しておくと混乱しない。
- タスク状態遷移(Ready / Run / Wait) の図は暗記レベル。
- 「CPU効率を上げる」系の設問では、スプーリング・スケジューリング・プリエンプション が頻出。
- スタベーション は語句問題で出やすい。
Chapter 10:オペレーティングシステム(OS)
10-5 再配置可能プログラムと4つの性質
🔹 再配置可能プログラムとは
プログラムをどの位置(アドレス)に読み込んでも実行できるように作られたプログラムのこと。
プログラムが実行される際、実記憶上のどこにロードされるかは毎回異なるため、
アドレスの変更(再配置)が可能である必要がある。
🔹 プログラムが持つ4つの性質
| 性質 | 読み方 | 意味 | イメージ |
|---|---|---|---|
| 再帰的 (Recursive) | リカーシブル | 自分自身を呼び出して処理できる性質 | 関数の中から自分自身を再び呼び出す処理(例:階乗計算) |
| 再入可能 (Reentrant) | リエントラント | 同一プログラムを複数のタスクから同時に呼び出しても問題が起きない性質 | 同じコードを共有し、データを個別に持つ(例:ライブラリ関数) |
| 再配置可能 (Relocatable) | リロケータブル | 実記憶上のどこにロードされても実行できる性質 | アドレスを実行時に決定できる |
| 再使用可能 (Reusable) | リユーザブル | 一度使用した後に解放し、別のタスクが再利用できる性質 | 終了後にメモリをクリアして別タスクに再割当可能 |
💬 ポイント
- OSがプログラムを動的にロード・アンロードするために、
上記4性質を備えていると柔軟に実行可能になる。 - 特に「再入可能(リエントラント)」は共有ライブラリなどで必須の性質。
🔹 過去問:平成30年 春 問8
再帰的な処理を実現するために適切な記憶管理方式はどれか?
選択肢:
FIFO / LFU / LIFO(ラストインファーストアウト) / LRU
✅ 正解:LIFO
🧠 解説
再帰(recursive)は「自分自身を呼び出す」処理。
呼び出しごとに、戻り先や変数などの情報を一時的に保存する必要がある。
このときの構造が「スタック構造(後入れ先出し:LIFO)」。
📘 イメージ
呼び出し1 → 呼び出し2 → 呼び出し3
↑ 戻り3 ← 戻り2 ← 戻り1
つまり「最後に呼び出した関数が最初に戻る」=LIFO構造。
関数呼び出しや再帰処理の実装にはスタック(LIFO)が不可欠。
10-6 仮想記憶管理(Virtual Memory)
🔹 仮想記憶とは
プログラムが実際の物理メモリより大きなアドレス空間を使えるように見せる仕組み。
OSが、必要な部分だけを実メモリにロードし、残りを補助記憶装置(HDDなど)に退避させることで、
あたかも大容量のメモリを使っているように見せる。
🔹 ページング方式
仮想記憶を固定長ブロックに分けて管理する方式。
- 仮想記憶を ページ (Page)
- 実記憶を ページフレーム (Page Frame) と呼ぶ。
OSは、どのページがどのフレームに対応しているかを
ページテーブル (Page Table) で管理する。
| 操作 | 内容 |
|---|---|
| ページイン (Page-in) | 必要なページを実記憶に読み込む |
| ページアウト (Page-out) | 不要なページを補助記憶へ退避する |
🔹 ページ置換アルゴリズム
実メモリ上に空きがないとき、どのページを追い出すかを決める方法。
| 方式 | 名称 | 特徴 |
|---|---|---|
| FIFO (First In First Out) | 先に入ったページから追い出す | 古いページを優先的に退避 |
| LIFO (Last In First Out) | 最後に入ったページから追い出す | スタック構造。再帰処理などで使用される |
| LRU (Least Recently Used) | 最近使われていないページを追い出す | 実用的だが記録コスト高 |
| LFU (Least Frequently Used) | 使用頻度の最も低いページを追い出す | 長期的に使われていないデータを削除 |
💡 試験頻出ポイント
- 「LRU」=最も最近使われていない
- 「LFU」=最も使用頻度が低い
- 「LIFO」=再帰・スタック構造
- 「FIFO」=単純に先入れ先出し
🔹 デマンドページングとプリページング
| 方式 | 内容 |
|---|---|
| デマンドページング (Demand Paging) | 必要になった時点でページを読み込む(遅延ロード) |
| プリページング (Pre Paging) | 先読みして必要になりそうなページを事前に読み込む |
🧠 補足
- デマンドページングはメモリ節約に優れるが、ページフォールト(読み込み待ち)が多発しやすい。
- プリページングはページフォールトを減らすが、無駄なロードが起こる可能性あり。
🔹 スワッピングとページングの違い
| 方式 | 単位 | 内容 |
|---|---|---|
| スワッピング (Swapping) | プログラム単位 | プログラム全体を補助記憶と入れ替える |
| ページング (Paging) | ページ単位 | 必要な部分(ページ)だけを入れ替える |
💬 要点
スワッピングは「プログラムごと」、
ページングは「ページごと(部分的)」。
🔹 過去問整理(記憶管理)
| 年度 | 問題 | 正答 |
|---|---|---|
| H30 春 問8 | 再帰処理に必要な記憶管理方式 | LIFO(ラストイン・ファーストアウト) |
| R5 春 問9 | ページング方式での置換アルゴリズム | LRUまたはFIFOを問う問題が頻出 |
| H29 秋 問12 | 仮想記憶とページテーブルの対応 | ページテーブルで仮想と実記憶を対応付ける |
| H25 春 問11 | スワッピングの単位 | プログラム単位で入れ替える |
💬 コメント
- 「リカーシブル・リエントラント・リロケータブル・リユーザブル」は 性質の違いをセットで暗記。
- 再帰(リカーシブル)=スタック=LIFO と覚えると、関連がつながりやすい。
- ページングの理解には「仮想⇔実記憶の対応図」を思い浮かべること。
- FIFO/LRU/LFU の違いを感覚で理解しておくと、実務でも役立つ。
Chapter 11:プログラムの作り方
11-1 プログラミング言語とは
🔹 プログラムとは
コンピュータに処理の手順(ロジック)を与え、目的の作業を実行させるための命令列。
人間が理解しやすい形式で書かれた「高水準言語」を、
コンピュータが理解できる「機械語」に翻訳して実行する。
🔹 主なプログラミング言語と特徴
| 言語 | 用途・特徴 | 備考 |
|---|---|---|
| C言語 | 高速処理が可能な汎用言語。OS・組み込み系開発で多用。 | 処理効率が高く、ハードに近い制御が得意。 |
| COBOL | 事務処理用言語。大型汎用機(ホスト)で使用。 | 金融・会計システムなどのレガシー環境に多い。 |
| Java | オブジェクト指向言語。ネットワーク・Web・業務システムで広く利用。 | JVM(Java仮想マシン)上で動作。 |
| BASIC / VBA | 初心者向けの文法。VBAはMicrosoft Office内で動作。 | BASICの派生としてOffice自動化に利用。 |
| JavaScript | Webブラウザ上で動作。HTMLと組み合わせて動的Webページを構築。 | Javaとは別言語。混同注意。 |
| Python | 機械学習・データ分析・自動化などで利用。 | シンプルな文法と強力なライブラリ群が特徴。 |
💬 補足
- Java と JavaScript はまったく別物。
- VBA は BASIC の派生言語。Office製品内でマクロを動かすために利用される。
🔹 用語:ガベージコレクション(Garbage Collection)
メモリ管理の仕組みのひとつ。
使われなくなったメモリ領域(=ガベージ=ごみ)を自動的に解放する機能。
💡 特徴
- Java や Python に実装されている。
- プログラマが手動でメモリ解放(free)しなくてもよい。
- メモリリーク(使い終えた領域が回収されないバグ)を防ぐ。
🔹 過去問整理(プログラミング言語)
| 年度 | 問題 | 正答・ポイント |
|---|---|---|
| H18 秋 問37 | Javaの特徴 | オブジェクト指向言語でガベージコレクションを備える |
| R4 春 問7 | Pythonの構文特徴 | ブロック構造をインデント(字下げ)で表す |
| R5 秋 問7 | JavaScriptのデータ形式 | JSON(JavaScript Object Notation):名前と値のペアで構成される |
11-2 言語プロセッサ(翻訳プログラム)
プログラミング言語を機械語に変換し、コンピュータが理解できる形にするプログラム。
🔹 主な3種類の言語プロセッサ
| 種類 | 動作の特徴 | 長所 | 短所 |
|---|---|---|---|
| コンパイラ (Compiler) | ソースコード全体を一括して機械語に翻訳し、実行ファイルを生成 | 実行が速い | コンパイルし直さないと修正が反映されない |
| インタープリタ (Interpreter) | ソースコードを1命令ずつ逐次翻訳しながら実行 | 動作確認しながら開発可能 | 実行速度が遅い |
| アセンブラ (Assembler) | アセンブリ言語を機械語に変換 | ハードに近い処理制御が可能 | 開発コストが高い・可読性低い |
📘 補足
- C, Java は主にコンパイラ方式。
- Python, JavaScript はインタープリタ方式。
- C# などは「中間コード(バイトコード)」を生成して仮想環境で実行するハイブリッド型。
🔹 その他の特殊な言語プロセッサ
| 名称 | 意味・用途 |
|---|---|
| プリコンパイラ (Precompiler) | ソースコードをコンパイル前に加工・整形する。例:SQL文を展開してCコードに埋め込む。 |
| クロスコンパイラ (Cross Compiler) | 異なるOSやCPU向けに実行プログラムを生成する。例:Windows上でスマホアプリ(Android用)をコンパイル。 |
| エミュレータ (Emulator) | 他機種のハードウェア環境を模倣して動作確認するツール。例:iPhoneシミュレータでアプリをテスト。 |
| ジェネレータ (Generator) | パラメータや条件を与えると、必要なコードを自動生成するプログラム。テンプレートから帳票・設定ファイルを自動生成など。 |
🔹 過去問整理(言語プロセッサ)
| 年度 | 問題 | 正答・ポイント |
|---|---|---|
| R5 秋 問18 | クロスコンパイラの説明 | 異なる命令体系のコンピュータ用に目的プログラムを生成する |
| H29 秋 問36 | コンパイラとインタープリタの違い | コンパイラ:一括翻訳、インタープリタ:逐次実行 |
| R1 春 問9 | エミュレータの説明 | 他機種の環境を模倣して動作を確認できる |
💬 コメント
- コンパイル型 vs インタープリタ型 の違いは必ず出題される。
- クロスコンパイラ・エミュレータ の違いを押さえると応用情報でも得点源になる。
- JavaScript → JSON、Python → インデント構文、Java → ガベージコレクションは鉄板セット。
- 「ジェネレータ」は開発効率化ツール(自動コード生成)として近年再注目。