フォン・ノイマンとソフトウェアを可能にした保存プログラム型コンピュータ
保存プログラムの考え――ジョン・フォン・ノイマンの名と結びつくことが多いこの発想が、再利用可能なソフトウェア、汎用コンピュータ、現代のプログラミングをどのように可能にしたかを解説します。

保存プログラムの考えが重要な理由
現代のコンピューティングの核心には単純な問いがある:なぜ一台の機械が毎回作り直されることなく、さまざまな仕事をこなせるようになったのか? 初期の電子計算機は高速に計算できましたが、「やることを変える」にはしばしば機械の物理的な設定を変更する必要がありました。保存プログラムの考え方は、コンピュータを真にプログラム可能にした転換点です。
保存プログラムを平易に言えば
保存プログラム型コンピュータは、タスクのための命令(プログラム)を、そのプログラムが扱うデータと同じ種類の内部メモリに保持します。配線を変えたりパネルを手動で再設定したりする代わりに、新しい命令セットをメモリに読み込んで別の仕事を実行できます。
今では当然に思えますが、これは深い転換でした:
- コンピュータが汎用ツールになり、単一用途機械ではなくなった。\n- プログラムが情報になり、編集・保存・複製・共有が可能になった。\n- ハードを作り直すことなく命令を書き、テストし、改良するというソフトウェア開発が実用的になった。
この記事で扱うこと(そして今でも重要な理由)
これは単なる歴史的好奇心ではありません。保存プログラムの概念は「ソフトウェア」と「ハードウェア」が別個の存在として生まれた理由を説明し、今日デバイスを更新するだけで内部のチップを替えずに新機能を得られる理由にもつながります。
以下では、初期コンピュータが直面した問題、保存プログラム方式が何を変えたか、この考えを明確にした人々や文書(有名なEDVAC報告書を含む)、そして「フォン・ノイマン・アーキテクチャ」という呼び名がどのように広まったかをたどります。
クレジットについての簡単な注記
ジョン・フォン・ノイマンの名前は保存プログラム計算に強く結びついていますが、功績はより広いチームと時代にまたがっています。多くの研究者が初期の電子計算機を構築する過程で似たような考えに収束していました。本記事はその文脈を重視します。チーム作業を理解することで、そのアイデアがいかに素早く広まり、後のほとんどのコンピュータの標準モデルになったかが見えてきます。
保存プログラム以前:タスク変更が配線のやり直しを意味した時代
保存プログラムの考えが出る前、多くの初期コンピュータは今の意味で「ソフトを実行する」わけではありませんでした。高速に計算できても、何をさせるかを指定するには機械自体を物理的に変更することが多かったのです。
現場での「ハードウェア・プログラミング」
一般的な手法はプラグボード、パッチケーブル、スイッチパネルの使用でした。オペレータはソケット間に配線をつなぎ、スイッチを並べ、時には信号が正しい順序で届くようにタイミングを調整しました。「プログラム」は読み込むファイルではなく、暫定的な配線図だったのです。
この方式は機能しましたが、隠れたコストがありました:新しいタスクごとに小さなエンジニアリングプロジェクトが必要でした。演算の順序(加算、乗算、比較、ループなど)を変えたければ、数十本、場合によっては数百本の接続を移動しなければならないことがありました。一本の誤配線は、論理がハードウェアの接続に分散しているため見つけにくい微妙な誤りを生み出しました。
タスク切替が高コストだった理由
再設定には数時間から数日かかることがあり、機械を慎重にシャットダウンして配線をやり直し、テストする必要がありました。したがって柔軟性は限られ、これらの機械はしばしば長時間にわたって単一の計算に割り当てられていました。
単純な例
砲兵の射表(長く反復的な計算で固定された公式)を計算するための機械があると想像してください。研究者が同じ機械で国勢調査の統計結果を集計したい場合、それは「プログラムを編集して再実行」できるような簡単な作業ではありません。処理の順序、中間結果の保存手順、条件分岐の有無などが異なるため、プラグボードを全面的に作り直して再検証が必要です。
この世界から抜け出すために設計されたのが保存プログラム型コンピュータです。
保存プログラム型コンピュータを平たく説明すると
保存プログラム型コンピュータとは、命令(プログラム)が、プログラムが使用するデータと同じ作業用メモリに格納されている機械です。つまりコンピュータは「何をするか」と「何に対して作業するか」を別物として扱わず、どちらもメモリ上のビットのパターンとして保持します。
ここでいう「メモリ」とは何か
初期の先駆者たちが言った「メモリ」とは、コンピュータの高速で直接使える内部記憶、現在で言うところのRAMに最も近いものを指します。プロセッサが実行中に高速に読み書きできる場所です。
これは、電源オフ時にファイルを保持するディスクやSSDのような長期保存とは異なります。長期保存装置は便利ですが、プロセッサが次の命令を取り出し中間結果を更新するための即時的な作業領域ではありません。
主要な結果:機械を変えずに仕事を変えられる
命令がメモリに格納されると、タスクの切替が格段に簡単になります。新しいプログラムをメモリに読み込んで実行すれば、ハードウェアを作り直したり配線を変えたりする必要がなくなります。同じ汎用機が午前は給与計算、午後は弾道計算をこなせる—なぜなら仕事の「やり方」は置き換え可能なビット列であるからです。
日常的な例え
レシピと材料が同じ棚に置かれている台所を想像してください。料理人(プロセッサ)は棚(メモリ)に何度も行って次のレシピの手順(命令)を読み、材料(データ)を取り出して更新します。
別の料理を作りたいときは台所を改装する必要はありません。単に別のレシピを入れ替えるだけで済みます—同じ流し、オーブン、道具を使い続けられます。
ジョン・フォン・ノイマンの役割(名前が定着した理由)
ジョン・フォン・ノイマンは「コンピュータを発明した人」ではなく、保存プログラムの考えを単独で作ったわけでもありません。彼がやったことは、有望な概念を明確に述べ、他の技術者や研究室が構築できるように広く共有される設計に磨き上げたことです。
重要な貢献者であり、優れた伝達者でもある
フォン・ノイマンは戦時中と戦後の計算プロジェクトに深く関わり、チームに助言して初期設計の論理構造を整理しました。複雑な選択を平易で体系的に説明する才能があり、これは重要でした。なぜなら当時の電子計算は急速に進んでいて、複数のグループが同時に似た問題を解いていたからです。
さらに重要なのは、彼がプログラム命令をデータと同じメモリに保存するという考えを説明する影響力のある記述を作成し流布したことです。その明確な枠組みのおかげで他者が議論し教育し複製しやすくなりました。
なぜ彼の名前が付いたのか
名前というものは、必ずしも最初にアイデアを出した人につくわけではなく、その説明が参照点になった人につくことが多い。フォン・ノイマンの書き物は広く読まれ引用されたため、後の読者は自然に「保存プログラムの構成」を彼に結びつけました。
この呼び名は歴史を単純化します:すべての貢献者や報告書を挙げるより「フォン・ノイマン・アーキテクチャ」と言う方が簡単です。しかしその略称は実際に起きたことを曖昧にしてしまうことがあります。
単独の突破ではなく共同作業
初期の電子計算は数学者、技術者、プログラマが協力して進めた共同作業でした。保存プログラムの考えは議論、草稿、プロトタイプ、改訂を通じて成熟しました。フォン・ノイマンの持続的な役割は、アイデアを結実させ広めることで採用を加速させたことであり、単独で作り上げたというよりは結晶化と普及を促した点にあります。
EDVAC報告書と概念の明確化
EDVAC(Electronic Discrete Variable Automatic Computer)は戦後初期のプロジェクトの一つで、「一回限りの機械」を越えることを目指していました。ハードウェアの努力と同じくらい重要だったのは、設計思想を文書化して共有可能にする決定でした。当時のコンピュータ構築はまだ実験的工学に近く、知見は実験ノートや会議、限られた専門家の頭の中にとどまっていました。報告書はそうした断片的な洞察を他のチームが議論、批評、再利用できる形に変えました。
EDVAC報告書が数学抜きで述べたこと
First Draft of a Report on the EDVAC(通称EDVAC報告書)は、保存プログラムの考えを概念的に述べました:コンピュータは命令をデータと同じ内部メモリに保持すべきである。メモリは計算中に数値を保持する場所というだけでなく、次に何をするかを機械に指示する手順も保持する場であると位置づけたのです。
この枠組みによって、コンピュータは固定目的装置というより、メモリ中身を変えることで「再課題化」できる汎用機と感じられるようになりました。配線で切り替えるのではなく、命令列を読み替えるだけです。
他者にとっての意味
概念そのものに加え、報告書はメモリ、制御、演算、入出力という機能的区分を標準化するのに役立ちました。共通の語彙と広く読まれる記述があれば、EDVACだけでなく分野全体にとって保存プログラム型コンピュータを構築・比較・改良するための共通の精神モデルが提供されます。
初期の保存プログラム思想を支えたチームワーク
「誰が保存プログラム型コンピュータを発明したのか?」と単一の名前を期待して尋ねたくなりますが、科学と工学はめったにそうは動かないものです。アイデアは並行して発展し、議論で洗練され、稼働するハードウエアで実証されて初めて説得力を持ちます。
重要な共同研究者と並行した努力
ジョン・フォン・ノイマンは保存プログラム概念と強く結びついていますが、初期の仕事には多くの人々とグループが関わっていました:
- J. Presper Eckert と John Mauchly(ENIAC/EDVACの仕事): 実用的な電子計算機と改善設計に向けた工学的推進の中心。\n- Herman Goldstine: 数学者と技術者をつなぐ重要なオーガナイザで、アイデアの文書化と流布に貢献。\n- Arthur Burks: 初期の論理設計への貢献と後年の解説で知られる。\n- Alan Turing: EDVAC以前からの一般的計算とプログラム制御機械に関する影響力ある考えを記述。\n- Maurice Wilkes(EDSAC)、および Frederic Williams と Tom Kilburn(マンチェスター): 保存プログラム方式が実際に動作することを示した初期実証とメモリ技術の進展に寄与。
「誰が発明したか」が複雑な理由
保存プログラム型コンピュータは単一の洞察ではありません。それは(1) 命令をデータのようにメモリに置けるという概念的飛躍、(2) 信頼できるメモリと制御ユニットを構築する工学、(3) 設計を使いやすくするプログラミング実践の組合せです。異なる人々がそれぞれの部分に寄与しました。
提案と構築の違い
もう一つ信用が分かれる理由は、アイデアを提案することと日々動く機械を構築することが同じではない点です。初期の報告や議論は概念を明確にしました;初期のプロトタイプや実用システムがその実現可能性を証明しました。歴史を丁寧に見ると、どちらの貢献も尊重されるべきで、単純な「最初の発明者」判断に押し込めるべきではありません。
「フォン・ノイマン・アーキテクチャ」が通常意味するもの
人々が「フォン・ノイマン・アーキテクチャ」と言うとき、保存プログラム型コンピュータがどのように構成されるかの単純で教育的なモデルを指すことが多いです。これはブランドや単一の歴史的機械ではなく、多くのコンピュータに共通して現れる基本的計画の便宜的なラベルです。
一般的なブロック図:CPU、メモリ、入出力
概念的には次のような構成です:
- CPU(中央処理装置): 操作を行う「作業者」。\n- メモリ: 命令とデータの両方を保持する場所。\n- 入出力(I/O): 情報の入出力手段(キーボード、ディスク、画面、ネットワーク、センサなど)。
重要なのは、CPUにとって「プログラム」と「数値」は物理的に別の場所にあるわけではないという点です。必要なものはすべてメモリから取り出されます。
命令の流れ:フェッチ–デコード–実行
CPUは通常次のループを繰り返してプログラムを実行します:
- フェッチ(fetch): メモリから次の命令を読み出す。\n2. デコード(decode): その命令が何を要求しているか(加算、比較、ロード、ストア、ジャンプなど)を解釈する。\n3. 実行(execute): その動作を実行し、必要ならメモリの読み書きやI/Oとやり取りする。
これは単純化した説明ですが、核心は捉えています:プログラムはメモリに格納された命令列であり、CPUはそれを順に処理していくということです。
命令とデータを同じメモリに置くことの強み
命令とデータを同じメモリに置くとコンピュータは非常に実用的な意味で汎用になります:
- 機械の動作を変えるには、たいていの場合メモリ中のプログラムを変えるだけでよく、配線をいじる必要はない。\n- プログラムは情報として扱える—コピーしたり読み込んだり、場合によっては修正したりできる(安全のために制限されている場合もある)。\n- アセンブラ、コンパイラ、オペレーティングシステムのようなツールを作るのが容易になり、「プログラム」は他の情報と同じ扱いになる。
これは便利なラベルであり、単独の発明を主張するものではありません。フォン・ノイマンの説明と結びつけられているという点が強調されますが、実際の早期の発展は複数の貢献者によるものでした。
フォン・ノイマン型 vs ハーバード型:命令とデータを配置する二通りの方法
「フォン・ノイマン」と「ハーバード」はまるで対立する哲学のように語られることがありますが、実際には命令とデータをどのように配置してCPUが取り出すかという実用的な二つのやり方です。
フォン・ノイマン方式:一つのメモリ、共有経路
フォン・ノイマン方式では命令とデータが同じメモリにあり、通常CPUへの経路も共通です。概念的には単純で、プログラムはメモリ内のバイト列としてデータと隣り合って存在します。汎用性が高く、ソフトウェアの読み込み・変更・保存がデータと同じメカニズムで行えます。
欠点としては、命令とデータが同じ“道路”を共有するため帯域競合が発生しうる点(いわゆる「ボトルネック」)があります。
ハーバード方式:記憶を分離(しばしば経路も分離)
ハーバード方式では命令用の記憶とデータ用の記憶を分ける設計が行われ、多くの場合それぞれに別の経路があります。これにより次の命令を取り出しながら同時にデータの読み書きをするのが容易になるため、小規模で予測可能なシステムに向いています。多くのマイクロコントローラは、コードがフラッシュに、変数がRAMにあるという形でこのアプローチを取ります。
多くの実システムが両者を混ぜる理由
現代のCPUはソフトウェアから見ると「フォン・ノイマン的」に見えることが多い一方で、内部的にはハーバード的な工夫を取り入れています。典型的には命令キャッシュ(I-cache)とデータキャッシュ(D-cache)を別に持つことで、見かけ上は一つのメモリ空間でも命令とデータを効率よく供給できます。
覚えておくべきは、万能の最適解はないということです。フォン・ノイマンは単純さと柔軟性を、ハーバードは分離とスループットを重視します。多くの機械は両方の利点をバランスさせるために混合的な設計を採用しています。
保存プログラムが現代のプログラミングを可能にした方法
保存プログラム型コンピュータは単に計算を実行するだけでなく、メモリから命令を読み込んで実行し、後で別の命令群に入れ替えることができます。この変化により、ソフトウェアは再利用可能で共有可能になりました:一度書かれたプログラムは保存・複製・改善・配布ができ、ハードウェアに手を加える必要がなくなったのです。
「この機械専用」から「どんな仕事でも」へ
プログラムがメモリにあることで、同じ物理マシンが単に命令を差し替えるだけで多様な仕事をこなせます。これが「汎用機」と呼ばれる本当の意味です:一台の機械、複数のプログラム。コンピュータは単一のワークフローで定義されなくなり、プラットフォームになりました。
身近な例は、あなたのノートPCでメール、ゲーム、表計算ソフトが同じハードウェア上で動くことです。基礎となる考えは同じで、ハードはそのままに異なる保存プログラムを読み込んで実行します。
これが本当の意味で開発ツールを可能にした
命令がメモリ内のデータとして扱われることで、ソフトウェアを書くのを助ける多層のツールを作ることが実用的になりました:
- アセンブラ: 人間に優しいニーモニックを機械語に変換する。\n- コンパイラ: 高水準言語を機械命令に翻訳し、プログラムを書きやすく保守しやすくする。\n- オペレーティングシステム: プログラムの読み込み、メモリやデバイスの共有、スケジューリングを管理する。
これらのツールは、プログラムが他の情報のように保存・移動・操作できるという前提に依存しています。これがソフトウェアを単発の産物から生態系に変え、コンピュータを柔軟な汎用機に変えました。
長い流れを一言で言えば:保存プログラムはコンパイラやOSを可能にし、よりよいツールがより挑戦的なプログラムを可能にし、現在では自然言語でアプリを記述すると実行可能なコードを生成するような抽象化の層まで到達しています。例えば、Koder.ai はチャットインターフェースとLLMやエージェントベースのワークフローを活用して、意図(「何をすべきか?」)から実行可能な命令(エクスポート・デプロイ・スナップショットでロールバック可能なソースコード)までの道筋を短縮する「vibe-coding」プラットフォームの一例です。
結果として変わらないのは循環の良さです:保存プログラムがより良いツールを可能にし、より良いツールがより野心的なプログラムを可能にして、コンピュータを柔軟な汎用機に変え続けているのです。
有名な制約:「フォン・ノイマン・ボトルネック」
保存プログラムの考え方はコンピュータを柔軟にしましたが、同時にエンジニアが今でも語る実務上の制約を浮き彫りにしました:「フォン・ノイマン・ボトルネック」です。日常的には、これはCPU(働き手)とメモリ(倉庫)間の道路渋滞のようなものです。
CPUとメモリ間の渋滞
典型的な保存プログラム設計では命令とデータがメモリに共存します。CPUは命令を取り出し、必要なデータを取り出し、結果を書き戻す—これらがしばしば同じ接続を通ります。もしその接続が情報を十分速く運べないなら、CPUは待つことになり、本来なら高速に計算できる力があっても性能は低下します。
なぜ速度と帯域幅の両方が問題か
このボトルネックは主に二つの要因から現れます:
- メモリのレイテンシ(応答速度): 要求してから最初のデータが得られるまでの時間。\n- メモリ帯域幅: 一度転送が始まってから単位時間あたりどれだけの情報を移せるか。
CPUは秒間何十億回の演算を行えるかもしれませんが、メモリが命令とデータの安定した供給を提供できなければ、性能は最も遅い部分に制限されます。
一般的な緩和策(魔法の解決ではない)
この問題に対しては多くの工学的対処法があります:
- キャッシュ: CPUに近い小さく高速なメモリで、最近使われた命令やデータを保持する。\n- プリフェッチ: 次に必要になりそうなものを予測して先に読み込む。\n- 並列化: 複数のコアや計算とメモリアクセスの重ね合わせで同時に処理する。
これらは基礎となる“道路”を完全に消すわけではありませんが、混雑を和らげてCPUが待つ時間を減らすのに役立ちます。
今日あなたが使うコンピュータでこの考え方を見る場所
保存プログラムの概念は博物館の展示品ではなく、日常のコンピューティングが柔軟であり続ける方法です。あなたのデバイスは新しいことをするために「配線し直す」必要はありません。単に違う命令をメモリに読み込み、それを実行するだけです。
スマホ、ラップトップ、サーバ:同じ基本トリック
スマホでアプリアイコンをタップすると、OSがそのアプリのコード(命令)をストレージからメモリに読み込み、CPUがそれを実行します。ラップトップでも同様です。サーバでは、数千の変化するワークロード(ウェブリクエスト、データベースクエリ、バックグラウンドジョブなど)をハードウェアを変えずに実行している様子が一層明白です。
ネットワークルーティング、ビデオデコード経路、写真補正、電力管理ポリシーなど、ハードウェアらしく見える機能もソフトウェア定義であり、ファームウェアやシステムソフトウェアで更新されることが多いです—新しい命令、同じデバイス。
インタープリタや仮想マシンも保存された命令を実行する
PythonやJavaScriptのような言語は通常インタープリタや仮想マシン上で動きます。ソースコードをCPUが直接実行するのではなく、プログラムはバイトコードや内部命令の構造に翻訳され、それがメモリに保持され段階的に実行されます。JavaのJVM、.NET、WebAssemblyランタイム、ブラウザのJavaScriptエンジンはいずれも、命令がメモリ上のデータ構造になり、それをロード・移動・実行するという前提に依存しています。
セキュリティに関する余談:データが命令になるとき
命令は「ただの」情報なので、攻撃者はしばしば不正なコードをデータとして紛れ込ませようとします。これに対する防御としてメモリ保護、コード署名、実行不可メモリ領域などが存在し、信頼できないデータが実行可能命令として扱われるのを防いでいます。
ここまで述べてきた中心的な約束に戻ると:保存プログラムはソフトウェアによる柔軟性を約束します—同じハードウェアで新しい振る舞いを実現できるのです。
主要なまとめと次に読むべきもの
主要なまとめ
- 保存プログラム型コンピュータは命令をデータと同じ読み書き可能なメモリに保持するため、機械の動作を変えるにはメモリを変えればよく、ハードを配線し直す必要がない。\n- 「フォン・ノイマン・アーキテクチャ」というラベルは通常、CPU + メモリ + 入出力の実用的な構成を指し、命令とデータが同じ経路を共有することを強調する。単一の発明者を主張するものではない。\n- 初期の保存プログラム思想はチームワークの産物だった:EDVACでの議論と報告が考えを明確にし、複数のプロジェクトがその構築・運用の実現可能性を示した。\n- 保存プログラムは再利用可能なコード、ライブラリ、コンパイラ、OSなどを可能にし、ソフトウェアが「機械に読み込んで実行するデータ」であるという前提のもとに現代のプログラミングが成立している。
アーキテクチャを見分けるための簡単な質問
システムを見たり仕様を読んだりするときに、基本モデルを見分けるのに役立つ問い:
- 実行時に命令はどこに格納されているか:データと同じメモリか、別の命令メモリか?\n- 命令とデータは同じバス/経路を通るか、それとも分離されているか?(ハーバード様式では分離されることが多い)\n- システムはコードを生成または修正して実行できるか(典型的な保存プログラムの能力)、あるいはコードストレージが固定/隔離されているか?\n- 「プログラムメモリ」がフラッシュ/ROM、一方「データメモリ」がRAMと記載されているか(マイクロコントローラに多いハーバードっぽい分離のヒント)。
次に読むべきもの(参考)
- 書籍:Herman H. Goldstine『The Computer from Pascal to von Neumann』;ENIAC/EDVAC/IASを扱う一般的なコンピュータ史の概説書。\n- 博物館:Computer History Museum、Science Museum(コンピュータコレクション)、Smithsonian(技術史)。\n- アーカイブとジャーナル:IEEEやACMの歴史記事(口述歴史を含む)、大学図書館の特別コレクションに残る初期計算機の論文。
このようなバックグラウンドに優しい投稿をもっと読みたい場合は、/blog をご覧ください。
注: 現代の手法で「命令」を実行可能なシステムに変える実験(直接コードを書く場合や、Koder.aiのようなチャット駆動のビルドプラットフォームを使う場合を含む)を行うときは、学んだことを記録することを検討してください。Koder.aiは公開コンテンツや紹介に対するクレジット獲得プログラムも提供しており、さらに多くの実験やチュートリアル資金の調達に役立つかもしれません。
よくある質問
保存プログラム型コンピュータとは何ですか?(簡単に)
保存プログラム型コンピュータは、実行するプログラムの命令を、それが扱うデータと同じ内部メモリに保持する装置です。タスクを切り替えるには、ハードウェアを結線し直すのではなく、メモリに別の命令集合を読み込めば済みます。
保存プログラム以前は、初期のコンピュータはどう“プログラム”されていましたか?
保存プログラム以前は、多くの機械がプラグボード、パッチケーブル、スイッチの設定などで“プログラム”されていました。処理順序を変えるには何時間、場合によっては何日もかけて配線と再テストを行う必要があり、一本の誤配線が見つけにくい不具合を生むことがありました。
保存プログラムの文脈で「メモリ」とは何を指しますか(ストレージとどう違う)?
ここでの「メモリ」は、CPUが実行中に頻繁に読み書きする**高速な作業用ストレージ(現在のRAMに相当)**を指します。ディスクやSSDのような長期保存用のストレージとは異なり、プロセッサが次の命令を取り出したり中間結果を更新したりするための即時的な作業領域です。
なぜEDVAC報告書は保存プログラムの概念にとって重要なのですか?
EDVAC報告書(First Draft of a Report on the EDVAC)は、命令とデータが内部メモリを共有するという構成を明確に記述し、メモリ、制御部、演算部、入出力といった共通の語彙を広めました。その結果、他の研究チームが議論し比較し再利用できる共通のモデルが生まれました。
ジョン・フォン・ノイマンは保存プログラム型コンピュータを単独で発明したのですか?
フォン・ノイマンの名前が強く結びついたのは、彼の記述が広く流通して参照しやすかったためで、単独で発明したからではありません。保存プログラムの考えは複数の研究者やチームが同時並行的に発展させたものです。
「フォン・ノイマン・アーキテクチャ」は今日通常どのような意味ですか?
「フォン・ノイマン・アーキテクチャ」は一般に次のようなモデルを指します:
- CPU がフェッチ–デコード–実行のサイクルを回す
- 単一のメモリ に命令とデータの両方を保持する
- 入出力(I/O) デバイスがある
これは保存プログラムの構成を説明する便宜的なラベルであり、単一の歴史的機械や唯一の発明者を意味するものではありません。
フォン・ノイマンとハーバードのアーキテクチャの違いは何ですか?
フォン・ノイマン型では命令とデータが同じメモリに置かれ、通常は同じ経路でCPUに送られます。一方、ハーバード型では命令用とデータ用の記憶が分離され、しばしば経路も別です。現代の多くのシステムはソフトウェアからは単一アドレス空間に見えつつ、内部では命令キャッシュとデータキャッシュを分けるようなハイブリッド的な工夫を取り入れています。
フォン・ノイマン・ボトルネックとは何で、どのように緩和されますか?
「フォン・ノイマン・ボトルネック」は、CPUとメモリ間のデータ伝送路が制約となることで生じる性能上の制限を指します。対策としては、キャッシュ(CPU近傍の小さく高速なメモリ)、プリフェッチ(先読み)、並列化(複数コアや計算とメモリアクセスの重ね合わせ)などが使われますが、根本的な制約を完全に消すわけではありません。
保存プログラムの考えは、現代のデバイスでのソフトウェア更新やアプリ切替をどう説明しますか?
命令がメモリ上の情報として扱われるため、動作を変えたいときはソフトウェアを変更すればよく、ハードウェアを作り直す必要はありません。これが、同じデバイスでアプリを切り替えたり、ファームウェアやOSの更新で新機能を追加したりできる理由です。
「命令がデータである」ことはセキュリティにどんな影響を与えますか?
命令が単なるデータとして扱われるため、攻撃者が信頼できないデータを実行可能なコードとして紛れ込ませることを試みるケースがあります(例:コードインジェクション)。現代の防御策としては、メモリ保護(実行不可領域)、コード署名、その他データと実行可能コードの分離手法があります。