コンテンツにスキップ

コンピュータの構成とハードウェア

指導者向けの公開補足

学習本文に加えて、指導の視点・背景・授業での確かめ方を示します。どなたでも読めます。

指導の焦点

五大装置を製品の名前だけに対応させず、入力・記憶・演算・制御・出力の役割として整理する。一つの機器が複数の役割を持つこともある。

一歩踏み込んだ背景

CPU・主記憶・補助記憶の説明は、現在の実装を大きく単純化したモデルである。キャッシュや並列処理などの存在を、基本モデルの誤りとは扱わない。

授業での確かめ方

写真を加工して保存するまでのデータの流れを図にする。電源を切ると失われるデータと残るデータの違いを、記憶装置の役割に結びつける。

制度・規格等は本文末尾の参考資料も確認してください。

JSFiddleでコードを試す

JSFiddleは、ブラウザーでHTML・CSS・JavaScriptを入力して実行できるサービスです。短い動作確認から始められます。

  1. 新しい編集画面を開きます。JavaScriptは通常のJavaScriptを選び、外部ライブラリは追加しません。
  2. HTML欄にはページの本文、CSS欄には見た目、JavaScript欄には処理を書きます。HTML欄に<html>や<body>は不要です。JavaScript欄に<script>は付けません。
  3. DOMを使う例では、JavaScriptの実行タイミングを「On Load」「On DOM Ready」または「No wrap - bottom of body」にします。
  4. 「Run」を押してResult欄を確認します。書き換えたら再びRunを押します。

console.logの結果は通常、ページではなく開発者ツールのコンソールに出ます。このサイトの計算例をResult欄で読みたいときは、HTML欄に次を入れます。

<pre id="output"></pre>

JavaScript欄には次を入れ、console.log(2 + 3);の行を、試したいコード一つに置き換えます。独立した例を複数まとめて貼らないでください。

{
  const output = document.getElementById("output");
  const console = {
    log(...values) {
      output.textContent += values.join(" ") + "\n";
    }
  };
  console.log(2 + 3);
}

Runを押すと「5」と表示されます。外側の波括弧の中だけで表示用のconsoleを用意しているため、ブラウザー本来のコンソールは変更しません。

HTMLとJavaScriptの両方を載せた実習例は、この表示用コードで囲まず、それぞれの欄へ分けて貼り付けます。保存・共有時は公開範囲を確認し、個人情報やパスワードを入力しないでください。コードは手元にも残しましょう。

NAS・GitHub・CodePenなど、作業環境の選び方

この単元でできるようになること

Section titled “この単元でできるようになること”
  • 五大装置の役割を、身近な情報処理に対応させられる。
  • 命令とデータが記憶装置から利用される流れを説明できる。
  • 処理時間を、一つの性能値だけで判断しない理由を説明できる。

ハードウェアは、情報を処理するための物理的な装置である。架空の図書室で、貸出カードの番号を読み取り、貸出期限を画面に出す場面を考えよう。番号を受け取る働き、期限を計算する働き、その結果を人に伝える働きは異なる。装置名を覚えるだけでなく、情報の流れのどこを担当するかを確かめたい。

働き 役割 図書室での例
入力装置 外部の情報を取り込む 番号を読むスキャナ
出力装置 処理結果を外部へ伝える 期限を示す画面
記憶装置 命令やデータを保持する 貸出記録を置くメモリやSSD
演算装置 計算や比較を行う 期限の日付を求める部分
制御装置 命令に従い各部の動作を調整する 読み取り、計算、表示を進める部分

一般に演算と制御を担う中心がCPUである。タッチパネルは入力と出力の両方を持つように、一つの製品が一つの働きだけを持つとは限らない。実際の機器には通信装置や専用の画像処理装置もあり、五大装置は機能を整理するための見方である。

主記憶装置には、実行中のプログラムや作業中のデータを置く。一般的なRAMは電源を切ると内容が失われるため、後で必要な記録は補助記憶装置へ保存する。SSDやハードディスクはその例だ。「保存したつもり」と「画面で編集中」を分けることは、装置の違いを生活に結び付ける理解でもある。

CPU内部には、演算に使う値や命令に関する情報を一時的に置くレジスタがある。キャッシュは、主記憶との速度差を小さくするため、近く利用しそうな情報などを保持する。容量と速さは一般に両立しにくいため、小さく高速な場所と、大きな保存場所を組み合わせる。

装置間では、データだけでなく、どの場所を読み書きするかを示すアドレスや、動作を指示する制御の情報もやり取りする。このような伝送路をバスという。CPUが高速でも、転送できる情報量が不足すれば待ち時間が生じる。装置一個の性能と、装置同士をつなぐ経路の性能は分けて考えたい。

命令を取り出し、解釈し、実行する

Section titled “命令を取り出し、解釈し、実行する”

プログラム内蔵方式では、命令もデータも記憶装置に置いて利用する。基本的には、次に実行する命令を取り出し、その意味を解釈し、演算や転送を行うという流れで進む。分岐命令があれば、次に取り出す命令の位置が変わる。保存された本の記録そのものが、勝手に計算を始めるわけではない。

次は「二つの数を取り出し、足し、結果を保存する」流れをJavaScriptで表した教材である。実際のCPUの命令や回路を再現するものではない。配列を主記憶に、二つの変数を一時的な作業場所に見立てて、データ移動を見えるようにした。

取り出す・計算する・書き戻す
const memory = [18, 7, 0];
const left = memory[0];
const right = memory[1];
const result = left + right;
memory[2] = result;
console.log(memory.join(","));

出力は 18,7,25 になる。元の二つの値は残り、三番目の場所だけが更新された。実機では処理が重なって進むこともあるが、学習の最初は「何を読み、何を書いたか」を追うとよい。

クロック周波数は動作の刻みの速さを表すが、同じ刻み数で進む仕事の量まで同じとは限らない。コア数が増えても、順番にしか進められない処理はその数に比例して速くならない。メモリ不足で保存装置とのやり取りが増えれば、CPUの性能だけを上げても改善が小さい場合がある。

たとえば「写真一枚の加工」と「大量の写真の読み込み」では、時間を左右する要因が違う。比較では同じ仕事と条件を用意し、実際の所要時間や消費電力も調べる。処理全体を遅くしている箇所をボトルネックと呼ぶ。

注意: 主記憶の容量、保存容量、CPUの性能は別の量である。「容量が二倍なら処理時間は半分」といった換算はできない。また、この教材の配列へのアクセス時間から実機の性能を測ることはできない。

用語 意味
CPU 命令の解釈や制御、演算を担う中心的な装置
主記憶装置 実行中の命令やデータを保持する場所
補助記憶装置 データを継続的に保存する装置
レジスタ CPU内部で値などを一時的に保持する場所
ボトルネック 全体の処理能力を制限している箇所
  1. 貸出番号を読み、期限を印刷する処理で、入力装置と出力装置を一つずつ挙げよう。
  2. 例の memory[1] を12にすると、最後の表示はどうなるか。読み書きする場所も説明しよう。
  3. 大量の画像を開くのが遅いとき、CPUの交換前に調べたい要因を二つ挙げよう。
問1の解答例を見る

入力装置はバーコードリーダー、出力装置はプリンターが例になる。貸出番号を読み取り、処理結果として期限を印刷する。

問2の解答例を見る

18,12,30と表示される。memoryの添字0と1から18と12を読み、その和30を添字2へ書き込む。

問3の解答例を見る

主記憶が不足していないか、保存装置の読出しや通信が遅くないかを調べる。画像の容量や同時に動いているソフトも影響するため、原因を切り分ける。