バイトとメモリ

前講「フィードバックとフリップフロップ」では、出力を入力へ戻すという一見おかしな配線から SRラッチが生まれ、そこにクロックを足したDフリップフロップが「1ビットを覚え続ける」ところまで 辿り着いた。回路が、自分が過去に受け取った値を保持できるようになった——記憶の原理はすでに手元にある。 1ビットを覚えられるなら、それを何百万個も並べればコンピュータの主記憶になるはずだ。 ただしその前に、片づけておきたい面倒がひとつある。回路のあいだを行き交う8桁の0と1の羅列を、 人間が読み書きできる長さに縮める表記法である。この講は、その表記法から始めてメモリの完成までを一気に走る。 全6セクション・演習26問。回答はブラウザに保存されるので、途中でやめても続きから再開できる。

進捗 0 / 26 問(正解 0 問)

1. バイトはなぜ8ビットか

前講までに組み立てた回路のあいだを行き来していたのは、いつも8ビットの値だった。加算器の入力も、ラッチが覚える値も、スイッチで定めて電球で表示する値も8桁——回路のデータパスは8ビット幅である、と言われる。ではなぜ8なのか。6でも7でも10でもよかったのではないか。答えは拍子抜けするほど素っ気ない。最初に作った加算器がたまたま8ビット用だったから、というだけである。ただし8ビットという単位には、後から振り返れば都合の良い性質がいくつも見つかった。この8ビットの塊がバイトと呼ばれるようになった経緯と、半分の4ビットを指すニブルという呼び名をここで押さえる。

前講までに組み立ててきた回路を思い返すと、そこを流れていたのはいつも8ビットの値だった。加算器の 入力も出力も8桁、ラッチが覚える値も8桁、スイッチで定めて電球で表示する値も8桁である。回路の部品 から部品へと値が移動していく道筋のことをデータパスと呼び、この回路のデータパスは 8ビット幅である、と言う。

では、なぜ8なのか。6でも7でも9でも10でもよかったのではないか——答えは拍子抜けするほど素っ気ない。 最初に作った加算器がたまたま8ビット用だったから、というだけである。そうしなければ ならない理論的な理由はどこにもない。第3講で、10進法が人類の指の本数に由来する偶然の産物にすぎない と確かめたときと、まったく同じ構図がここでも繰り返されている。

この8ビットの塊をバイト(byte)と呼ぶ。この言葉が生まれたのはIBMで、たぶん1956年頃 のことである。語源は「かじる」を意味するbiteだが、bit(ビット)と読み間違えられないよう、綴りを わざとずらしてbyteとした。しばらくのあいだは単に「そのデータパスのビット数」を指す言葉だったが、 1960年代半ば、System/360という大型ビジネスコンピュータの開発と結びついて、8ビットのグループを 意味するようになった。

1バイトは 00000000 から 11111111 までの並びを取る。これを0から255までの符号なし整数に割り当てる こともできるし、第7講で学んだ2の補数を使えば−128から127までの符号付き整数にも 割り当てられる。あるいは数と考えず、256通りの異なるもののうちの1つを表す札として使ってもよい。 同じ8ビットが、扱う側の約束次第で何通りもの意味を持てる——第7講の締めがそのまま戻ってきている。

8ビットには、後から振り返れば都合の良い性質がいくつも見つかった。世界のほとんどの書き言葉は (中国語・日本語・韓国語で使われる表意文字を除いて)256文字未満で書き表せる。白黒写真の濃淡も、 人間の目が区別できるのはおおよそ256階調なので、1バイトでちょうど足りる。1バイトで足りないときも、 2バイトあれば65,536通りを表せるので普通は充分である。なお半分の4ビットには ニブルという呼び名があるが、バイトほど会話には登場しない。

演習 1理解

「バイト(byte)」という言葉についての説明として正しいものはどれか

演習 2理解

「回路のデータパスが8ビット幅である」ことについて、本講の説明として正しいものはどれか

演習 3理解

8ビットの2進数について正しい組み合わせはどれか

演習 4理解

半バイト(4ビット)を指す言葉と、8ビット(256通り)という大きさが都合が良いとされる理由の組み合わせとして正しいものはどれか

このセクション: 0 / 4 問正解

2. 8進法の壁と16進法の誕生

バイトはコンピュータの内部に頻繁に登場するので、その値を簡潔に書き表す方法が欲しくなる。8桁の0と1の並びは正確だが、人間が読み書きするには煩わしい。10進数に直せば短くなるが、変換に紙と鉛筆が要る。第3講で学んだ8進法なら2進数との変換が一瞬で済む——ところが8ビットは3で割り切れないという、地味だが決定的な壁にぶつかる。桁ごとのビット数がそろわないと、複数バイトをまとめた表記が、個々のバイトの表記の単純な連結にならないのである。バイトを均等なビット数のグループに分けられる基数を選べばこの壁は消える。そこで登場するのが16進法であり、その名前のややこしさと、足りない6個の数字をどう補うかを扱う。

バイトはコンピュータの内部に絶えず登場する。だから、その値をできるだけ簡潔に書き表す方法があると ありがたい。8桁の0と1の並びは、たしかに一切の曖昧さがない代わりに、目で追うのに骨が折れる。 正確さは足りているが、簡潔さが足りていない。

もちろん10進数に直せば短くなる。第3講で見たとおり、各桁に2の累乗を掛けて足せば10進数が求まるし、 逆向きに割り算を繰り返せば2進数に戻せる。ただしこの変換は、紙と鉛筆とそれなりの練習を要求してくる。 機械のなかの値を人間が眺めるたびに筆算するのでは、簡潔さを買うために手間を払っていることになる。

第3講ではもう1つ、8進法も学んでいた。8進法の数字1桁は2進数のちょうど3ビットに 対応するので、変換は暗算どころか見ただけで済む。右端から3桁ずつ区切って読み替えるだけである。 実際、8進法はバイトを表す方法としてそれなりに良い。ただし小さな、しかし致命的な問題がある。

8は3で割り切れない。8ビットを右端から3桁ずつ区切っていくと、一番左の桁だけが 2ビット分しか受け持たない。この歪みは1バイトを単独で書いているうちは目立たないが、複数バイトを 並べた値を8進数にした瞬間に表面化する。16ビットの値をまとめて8進数に直した結果と、それを構成する 2つのバイトをそれぞれ8進数にして並べた結果が、一致しないのである。表記がバイト単位で積み上がら ないのは、実用上かなり困る。

直し方ははっきりしている。1バイトを均等なビット数のグループに分けられる基数を選べばよい。 8ビットを2ビットずつ4個に分けるなら4進法、4ビットずつ2個に分けるなら16進法である。そして選ばれたのが 16進法(hexadecimal)だった。

この名前がまたややこしい。hexagon(六角形)やhexapod(六脚)と同じく、hexaで始まる語はたいてい 6つの何かを意味している。それなのにhexadecimalは16を指す。さらに16進法は、これまでのどの基数とも 違う面倒を抱えている——10進法より数字が足りないのである。0から9の10個では、 1桁で16通りを書き分けられない。あと6個の記号が要る。実際の慣習では、アルファベットの最初の6文字 A・B・C・D・E・Fがその6個として使われている。

演習 5理解

バイトの値をそのまま2進数で書く(8桁の0と1の並び)ことの実務上の欠点はどれか

演習 6理解

8進法(1桁=2進数3ビット)を8ビットのバイトの簡潔な表記に使おうとすると生じる問題はどれか

演習 7理解

バイトの表記がバイト単位できれいに積み上がるようにするには、どのような基数を選べばよいか

演習 8理解

16進法(hexadecimal)という名前とその表記について正しい説明はどれか

このセクション: 0 / 4 問正解

3. 16進法の読み書きと相互変換

4ビット(1ニブル)がちょうど16進数の1桁に対応する——この対応関係ひとつが、この節のすべての変換の土台になる。1バイトは常に16進数2桁で書ける。2進数から16進数へは4ビットずつ区切って読み替えるだけ、16進数から10進数へは各桁に16の累乗を掛けて足すだけ、10進数から16進数へは16で割って商と余りを求めるだけである。表記法は書籍にならい、数の後ろに小文字の「h」を付ける方式を使う。ここで身につけた読み書きは、この先アドレスや文字コードを扱うすべての講でそのまま使うことになる。

16進法の1桁は、ちょうど4ビット——つまり1ニブルに等しい。ここから 1バイトは常に16進数2桁で表せるという結論がただちに出てくる。8桁が2桁になる。 しかも複数バイトを並べても崩れない。前節で8進法が抱えていた歪みが、きれいに消える。

2進数から16進数への変換は、右端から4桁ずつ区切って、各グループを0からFに読み替えるだけである。 逆に16進数から2進数へ戻すときも、各桁を4ビットに展開して並べればよい。この対応表を覚えてしまえば、 変換に筆算は要らない。

16進数と10進数のあいだの変換には、位取り記数法の一般原理(第3講)がそのまま効く。16進数の各桁は 16の累乗——右から1・16・256・4096・65536——に対応するので、各桁の値に対応する累乗を掛けて足せば 10進数になる。

2Fh = 2×16 + 15×1 = 32 + 15 = 47

逆に10進数から16進数へ変換するときは、割り算で桁を1つずつ削り出す。255以下の数なら16進数2桁に 収まるので、16で割った商が上位の桁、余りが下位の桁になる。もっと大きな数なら、先に256で割って 2バイトに分けてから、それぞれを16で割ればよい。

200 ÷ 16 = 商 12(=C)… 余り 8  →  C8h

表記法についても決めておく。何進数かを区別する下付き文字は他の基数と同様に使えるが、16進数の場合は 書くのが長い。この教材では書籍にならい、最もよく使われている方式——数の後ろに小文字の「h」を 付ける——を採用する。C8h、5Dh、FFhといった具合である。第7講の2の補数と組み合わせると、 8ビット符号付きの数は先頭の16進数字が8・9・A・B・C・D・E・Fのいずれかなら負だと一目でわかる。 これらの数字の2進数表現は、いずれも1で始まるからである。

1バイト=2ニブル=16進数2桁4ビット(1ニブル)がちょうど16進数の1桁に対応する例: 8ビットの2進数 01011101 を16進数にする上位ニブル(4ビット)下位ニブル(4ビット)01011101510進では 5D10進では 132桁をつなぐと5Dh末尾の h = 16進数の印4ビットと16進数1桁の対応(0000〜1111 → 0〜F)2進数(4ビット)16進数00000000110010200113010040101501106011172進数(4ビット)16進数10008100191010A1011B1100C1101D1110E1111F 1バイト(8ビット)は必ず16進数2桁になる。上位4ビットが左の桁、下位4ビットが右の桁
演習 9理解

2進数と16進数の対応について正しいものはどれか

演習 10計算

8ビットの2進数 01011101 を16進数で表すとどれか

演習 11計算

16進数 2Fh を10進数に変換するといくつか

演習 12計算

10進数 200 を16進数に変換するといくつか(200は16で割ると商12・余り8になる)

演習 13理解

この教材(書籍)で16進数を表すときに使われる表記法はどれか

このセクション: 0 / 5 問正解

4. フリップフロップからラッチへ

前講で完成したレベルトリガー型のDフリップフロップは、クロックが1のあいだ出力がデータ入力に追従し、クロックが0に落ちた瞬間の値を保持し続ける回路だった。これはすでに「1ビットの記憶」そのものである。本講ではこの回路を記憶専用の部品として使うので、入出力の名前を目的に合わせて付け替える——クロックはライト、Dはデータイン、Qはデータアウトになる。回路はまったく同じなのに、呼び名が変わるだけで見え方が変わる。ライト信号を1にしてまた0に戻すという操作が「書き込む」という意味を持ち、この種の回路をラッチと呼ぶ。同じラッチを8個並べてライト信号を1本にまとめれば、8ビット値をまるごと覚える8ビットラッチになる。

ここからが本題である。記憶とは、書き留めることと後で読むこと、この2つの出来事のあいだ、情報を そのまま保持し続けることだと言い直せる。紙は文書に、磁気テープは音や映像に向いた媒体だが、 電信のリレーで組んだ論理ゲートを組み合わせても情報は保存できる。前講のフリップフロップが1ビットを 保存できることは、すでに確かめたとおりである。

前講で作ったレベルトリガー型のDフリップフロップは、インバータ1個・ANDゲート2個・ NORゲート2個からできていた。動作はこうである——クロック入力が1のあいだ、出力はデータ入力に追従する。 クロック入力が0になると、出力はその時点のデータ入力の値を保持し続け、以降データ入力をいくら動かしても クロックが1に戻るまで出力は変わらない。

本講ではこの回路を、ほかの用途ではなく1ビットの情報を保存するためだけに使う。 そこで、入出力の呼び名を目的に合わせて付け替える。回路そのものはまったく同じで、名札だけを貼り替える。

クロック → ライト(W)
データ入力 D → データイン(DI)
出力 Q → データアウト(DO)

名前が変われば操作の意味も変わる。通常、ライト入力は0にしておき、このときデータイン信号は出力に 何の影響も与えない。値を保存したいときだけ、データイン信号を目的の値にしたうえで ライト入力を1にしてから、また0に戻す。紙にペンを下ろし、書き終えてペンを離すのと 同じ手つきである。データに錠を掛けるように値を閉じ込めるので、この種の回路は ラッチとも呼ばれる。

1ビットの保存法がわかれば、2ビット、3ビット、それ以上も難しくない。8個の1ビットラッチを並べ、 8本のライト入力を1本の信号にまとめて共通接続すれば、8ビットラッチができる。データ 入力8本・データ出力8本・ライト入力1本を持ち、1回のライト操作で8ビット値をまるごと書き換えられる。 次のセクションでは、これとは別の組み立て方——8個のラッチに、1本のデータインと 1本のデータアウトだけで個別に読み書きする方法——を考える。

演習 14理解

前講で見たレベルトリガー型のDフリップフロップの動作として正しいものはどれか

演習 15理解

本講でこのフリップフロップを1ビットの記憶として使うとき、入出力の名前はどう付け替えられるか

演習 16理解

このラッチに新しい値を保存する操作の手順として正しいものはどれか

演習 17理解

8個の1ビットラッチを組み合わせて1つの8ビット値を保存する「8ビットラッチ」を作るとき、8個のライト入力はどう配線すればよいか

このセクション: 0 / 4 問正解

5. セレクタとデコーダでRAMを作る

8個のラッチに、たった1本のデータインと1本のデータアウトだけで個別に読み書きしたい——そう望んだ瞬間に、「8個のうちどれか1つを指し示す」仕組みが必要になる。8通りを表すのに要るスイッチは3個。読み出し側では、この3ビットで8個のデータアウトから1つを選ぶ8線-1線データセレクタが働く。書き込み側では、その逆向きに動く3線-8線デコーダが、ライト信号を8本のうち1本だけに振り分ける。第6講で「後の講でメモリのアドレス指定に使われる」と予告された2線-4線デコーダが、ここで出力を8本に増やして本当に主役として戻ってくる。セレクタとデコーダに共通で入る3本の信号がアドレスであり、この構成全体がランダムアクセスメモリ(RAM)である。

8ビットラッチが保存するのは、8ビットの値が1つだけだった。今度は同じ8個のラッチを使って、 8個の別々の1ビット値を保存したい。しかも入口はデータイン1本、出口はデータアウト 1本に絞る。8個のラッチのどれに書き込むか、どれを読み出すかは、そのつど指定できるようにしたい。

まず読み出し側から片づける。8個のうちどれを見るかを指定するには、いくつスイッチが要るだろうか。 3個である。3個のスイッチなら 000・001・010・011・100・101・110・111 の8通りを 表現でき、8個のラッチを1つずつ過不足なく指し示せる。第4講で学んだ「n個のスイッチで2のn乗通り」 という数え方が、そのままここで使われている。

この3ビットを受け取って、8本のデータアウトから1本を選んで出力する部品が 8線-1線データセレクタである。前講で加算器を改良したときに使った2線-1線セレクタ (2個から1個を選ぶ)の、選択肢を8個に増やした拡張版にすぎない。セレクト入力が000なら出力はD0と 同じ、010ならD2と同じ、111ならD7と同じになる。中身は3個のインバータ・8個の4入力ANDゲート・ 1個の8入力ORゲートである。

残るは書き込み側である。ここで手順を間違えやすいので、順番に確認する。8個のラッチの データイン端子は、8個すべてを1本の信号に共通接続してよい。同じ値がすべての ラッチの入口に届いていても、書き込みが起きなければ何も起こらないからである。一方、 8本のライト入力を1本にまとめてはならない。それをやると8個すべてが同時に書き換わって しまい、個別に保存するという目的が果たせない。ライト信号は1本のまま、8個のうち ちょうど1個のラッチにだけ届けなければならない。

これを実現するのが、セレクタとちょうど逆向きに働く3線-8線デコーダである。 出力は8本あり、どんなときも1本を除いてすべて0。その例外の1本は、3ビットのアドレス入力によって 選ばれた出力で、そこにだけデータイン入力(この構成ではライト信号)が現れる。つまりデコーダは データの値を運んでいるのではなく、書き込みの許可を配っている。選ばれたラッチの ライト端子だけが有効になり、共通配線されたデータイン信号がそのラッチに書き込まれる。

第6講「論理ゲートを作る」の終わりで、ANDゲート4個と インバータ2個で作った2線-4線デコーダを見た。あのとき「後の講でメモリのアドレス 指定(たくさんの記憶場所から1つを選ぶ)に使われる重要部品」と書いた回路が、出力を8本に増やして いま本当に戻ってきたことになる。

ここで注目すべきは、デコーダとセレクタに入る3本のセレクト信号が同一の信号である ことだ。この3本にはアドレスという名前が付いている。私書箱の番号のように、この 3ビットのアドレスが8個のラッチのうちどれを参照しているかを決めている。入力側では「ライト信号が どのラッチを書き換えるか」を、出力側では「どのラッチの値を読み出すか」を、同じアドレスが同時に 決めているのである。この構成がランダムアクセスメモリ(RAM)——アドレスを変える だけで8個のラッチのどれでも好きな順序で読み書きできることから、この名が付いた。読むのに手前から 順にたどらなければならない逐次的なメモリとの対比である。この特定の構成は 8×1のRAMアレイと呼ばれる(8個の値、各1ビット)。

RAM(8×1のラッチ配列)の構成 — 同じアドレスが書き込み先と読み出し元を決めるデコーダが振り分けるのはデータの値ではなく「ライト信号」。データイン信号は全ラッチへ共通配線されているデータイン3線-8線デコーダライト8線-1線セレクタデータアウト01ビットラッチ 001ビットラッチ 101ビットラッチ 201ビットラッチ 301ビットラッチ 411ビットラッチ 501ビットラッチ 601ビットラッチ 7DIWDOアドレス(3本)同じ3本のアドレスがデコーダとセレクタの両方に入る アクセント色の線=アドレスで選ばれた1本だけがライト信号を伝え、そのラッチのW端子を有効にする(図の例はアドレス101 → ラッチ5) データイン信号はデコーダを通らず、8個すべてのラッチのDI端子へ共通配線されている(線の半円は交差していて接続していない印)

上の構成図を、そのまま手で動かせるようにしたのが次のシミュレータである。3個のアドレススイッチを 切り替えるとデコーダとセレクタの経路が動き、8個のラッチから選ばれる1個が移る。データインを定めて ライトを押せば選ばれたラッチだけが書き換わり、データアウトには選ばれたラッチの値がそのまま現れる。

さわって確認8×1 RAMアレイ — アドレスで選んだラッチを読み書きする
アドレス

アドレス 000 → ラッチ0 を選択中

3線-8線デコーダ(ライト信号の届け先を1個だけ選ぶ)
00
10
20
30
40
50
60
70
8線-1線セレクタ(読み出し元を1個だけ選ぶ)
0
データアウト(ラッチ0 の値)

3個のスイッチが作る3ビットのアドレスが、8個のラッチのうちどれを読み書きするかを決めています。 書き込みのとき、デコーダが運ぶのはデータの値ではなくライト信号です。 データインの値は8個すべてのラッチに共通配線で届いていて、アドレスで選ばれた1個のW端子だけが 有効になるので、そのラッチだけが書き換わります。読み出し側では、同じアドレスを受け取ったセレクタが 8本のデータアウトから1本を選びます。いくつかのラッチに違う値を書き込んでからアドレスを切り替えると、 それぞれの値が保存されたまま、好きな順序で読み出せることを確かめられます。

演習 18計算

「1本のデータイン・1本のデータアウトで、8個の別々の1ビット値を個別に読み書きしたい」場合、8個から1個を選ぶのに最低何個のスイッチが必要か

演習 19理解

8個のラッチのうち1つのデータアウト信号を選んで出力する「8線-1線データセレクタ」について正しい説明はどれか

演習 20計算

8線-1線データセレクタのセレクト入力(3ビット)が010のとき、出力にはどのデータ入力の値が現れるか

演習 21理解

8個のラッチのうち1つだけにライト信号を届けて書き込みを許可する「3線-8線デコーダ」について正しい説明はどれか(データイン信号自体は最初から全ラッチのデータ入力へ共通配線されている)

演習 22理解

セレクタとデコーダに共通して入力される3本の信号を「アドレス」と呼び、この構成全体をランダムアクセスメモリ(RAM)と呼ぶ理由として正しいものはどれか

このセクション: 0 / 5 問正解

6. RAMアレイの規模と揮発性

アドレス入力を1本増やすたびに、指し示せる場所の数は2倍になる。値の個数はアドレス入力の本数を指数とする2の累乗——この単純な関係だけで、RAMアレイをどこまでも大きくしていける。1024個の8ビット値を蓄えるアレイならアドレス入力は10本で、1024バイトすなわち当時の言い方で1キロバイトになる。なぜ1000ではなく1024なのかという混乱の種にもここで決着をつける。そして最後に、これまで組み立ててきたリレーのメモリが抱える宿命を確認する。リレーは電磁石に電流を流し続けることで接点を押さえているのだから、電源を切れば磁力は消え、蓄えた内容は残らず失われる。これが揮発性と呼ばれる性質である。

RAMアレイは自由に組み合わせられる。2つの8×1アレイのアドレス入力とライト入力を共通につなげば、 8個の値をそれぞれ2ビットで保存する8×2のRAMアレイになる。あるいは同じ2つを、2線-1線セレクタと 1線-2線デコーダで「どちらのアレイを使うか」選べるようにつなげば、そのセレクト信号が実質的に 4本目のアドレスになり、全体は16個の1ビット値を保存する16×1のRAMアレイと同じものになる。

ここに規則が現れる。アドレス入力がなければ保存できる値は1個(1ビットラッチ・8ビットラッチが これにあたる)。1本なら2個、2本なら4個、3本なら8個、4本なら16個——アドレス入力を1本増やすたびに 容量が倍になる。

RAMアレイの値の個数 = 2 の(アドレス入力の本数)乗

この式さえあれば、いくらでも大きなアレイを想像できる。たとえば1024個の8ビット値を保存するアレイを 考えよう。1024は2の10乗なのでアドレス入力は10本、データ入力8本、データ出力8本である。1024個の 私書箱を備えた郵便局のようなもので、それぞれの箱に1バイトずつ違う値が入っている。 1024バイト、すなわち1キロバイトである。

——ここで混乱の種がひとつ埋まっている。メートル法の「キロ」は1000を意味する。1キログラムは1000グラム、 1キロメートルは1000メートルである。それなのに1キロバイトは1024バイトだという。理由は単純で、しかも 少し間の抜けたものだ。メートル法は10の累乗に、2進数は2の累乗に基づいており、10の整数乗と2の整数乗が 一致することはない。ただしときどき近づく。2の10乗(1024)は、10の3乗(1000)に かなり近い。この小さな偶然のおかげで、当時の人々は1024バイトのことを1キロバイトと呼ぶことができた。

同じ理屈で1024キロバイトは1メガバイト(2の20乗、およそ100万)、1024メガバイトは1ギガバイト (2の30乗、およそ10億)、その次はテラバイト(2の40乗、およそ1兆)と倍増が続く。なお、キロビット・ メガビットはバイトではなくビットの単位で、こちらは通信速度を語るときにほぼ限って使われる。 56Kモデムは毎秒56キロビットの意味であって、キロバイトではない。

なおこの「1キロバイト=1024バイト」は、書籍が書かれた1999年当時のコンピュータ用語の慣習である。 現在はSIの「キロ」は1000を指し、2進の1024にはIEC二進接頭辞の「キビ(Ki)」を使って KiB(キビバイト)と表記して区別するのが標準になっている。この教材では、当時の 慣習として1024を扱う。

では実際に大きなものを作ってみよう。65,536バイト、つまり64KBのメモリである。65,536は2の16乗なので アドレスはちょうど16ビット=2バイト、16進数で書けば 0000h から FFFFh までになる。前節で身につけた 16進表記が、さっそくアドレスを語る言葉として働いている。ちなみにこれをリレーで本当に作ろうとすると、 この設計では1ビットの記憶に9個のリレーが要るので、64K×8のアレイ全体では500万個近いリレーが必要に なる。試さない方がよい。

そして最後に、メモリについてどうしても覚えておくべきことがひとつある。第6講で論理ゲートを導入した とき、個々のリレーを描くのをやめ、すべてのリレーが電源につながっていることを示すのもやめた。だが その事実は消えていない。リレーは起動されているあいだ、電磁石のコイルに電流が流れ続け、 金属接点を所定の位置に押さえ続けている。

64K×8のRAMアレイを65,536個の大事なバイトで満たしていても、電源が切れれば終わりである。リレーの 電磁石は磁力を失って接点が元の位置へ戻り、保持していた内容は取り戻せない。だからランダムアクセスメモリは 揮発性メモリとも呼ばれる。電力を 供給され続けていなければ内容を保てないのである。ここまでで、1ビットの記憶を数百万個並べれば メモリになることはわかった。しかしそもそも、なぜ人類は計算という作業を機械に任せたがるのか。 次講ではその歴史的な問いに立ち返る。

演習 23理解

RAMアレイが保存できる値の個数と、アドレス入力の本数の関係として正しいものはどれか

演習 24計算

アドレス入力が6本のRAMアレイは、何個の値を保存できるか

演習 25理解

この章が扱う当時(書籍執筆時点)のコンピュータ用語の慣習で、「1キロバイト」を(1000バイトではなく)1024バイトの意味で使っていたのはなぜか

演習 26理解

このリレーで作ったRAMアレイが「揮発性メモリ」と呼ばれる理由はどれか

このセクション: 0 / 4 問正解