55
ノイマン型コンピュータの特徴 について J.vonNeumannが偉いというより、プログラム内蔵方式という発想が素晴らしい 香川大学大学院 工学研究科 創造工学部 今井慈郎

ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

ノイマン型コンピュータの特徴について

J.vonNeumannが偉いというより、プログラム内蔵方式という発想が素晴らしい

香川大学大学院工学研究科

創造工学部

今井慈郎

Page 2: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

あらまし

• ノイマン型(「プログラム内蔵方式」という表現の方が妥当かも)とは

• どうしても「天才、偉人」に弱いのは、古今東西を問わず

• では「プログラム」とは何か

• プログラムの「基本構造」 ( 「制御構造」、代表的な3つのパターン)とは

• 逐次処理(Sequence)について

• 繰り返し(Loop/Iteration)について

• 条件分岐(Conditional branch)について

• プログラムを構成する命令語とは何か

• プログラム内蔵方式が理解できれば、コンピュータも怖くない(はず)

2

Page 3: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラム内蔵方式(=ノイマン型)とは

• ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻って、「プログラム内蔵方式」とは何か、どこに特徴があったのか

•既に述べたように、目的ごとに電子回路を個別に実現するのは、無駄というより、工学的でも(科学的でも)ない ・・非効率的!

•汎用的に作ることで、経費を抑え、ノウハウ蓄積も叶うことになる

•要するに、「個々のTuring機械」よりも「万能チューリングマシン=Universal Turing Machine(UTM)」の方が総ての点で効率的!

• チューリングも、フォンノイマンも、天才的先見性(全体を見通す認識力等)の持ち主なので、「コンピュータのあるべき姿を見極めた」と考えることができる

3

Page 4: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラム内蔵方式(=ノイマン型)とは(2)

•結局、基本的(≒汎用的)なハードウェアの上(内部!)に、問題毎に特化した計算手順を形式化した何か(後に、ハードに対して、柔軟性に富むという観点からソフトな何か、という意味でソフトウェアと総称)を搭載して、個別の計算問題を解決する手法・・概念・・を提案

•少し卑近な例え話で説明すると、パン生地をこねて、外側(外形となるハードウェア)を作り、中のアンコ?を目的ごとに入れ替えて、「ジャムパン」「クリームパン」「チョコ(レート)パン」を注文に応じて作り上げて店頭に「個々の品物」として並べるような考え方

• どこまで「汎用」的に作れるか、どこの部分を個別の問題毎にカスタムメイドで作り込むか、の兼ね合い=TradeOffを、みんなで考えることで、コンピュータの基本構想が出来上がったとも言える

4

Page 5: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「天才、偉人」に弱いのは、古今東西を問わず

(一部再掲載)

• プログラム内蔵方式(≒ノイマン型)の着想は、ENIAC主要メンバーであるジョン・モークリーとジョン・プレスパー・エッカートも考案していたと伝えられるが、後から開発チームに参加したフォン・ノイマンが単著で報告書『EDVACに関する報告書の第一草稿(First Draft of a Report on the EDVAC)』を書き(ENIACプロジェクトのセキュリティ担当者であるハーマン・ゴールドスタインによって1945年6月30日に配布)、他の多くの資料が軍事機密のため、彼の報告書のみが部外者へ配布。

• ノイマンとゴールドスタインが他の人を第一草稿の作者として挙げていなかったため、フォン・ノイマン単独の業績とみなされた。

5

Page 6: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「天才、偉人」に弱いのは、古今東西を問わず

• プログラム内蔵方式の概念はペンシルベニア大学ムーア・スクール(電気工学部)での会議の場で発展してきたもので、フォン・ノイマンのそこでの役割は単なるコンサルタントであり、第一草稿は議論された概念をフォン・ノイマンが形式論理の言語に翻訳したものにすぎない、とEDVAC設計チームの一部が主張。もし、そうなら研究者の倫理観としはマズイような?!

• また、一流数学者の名前を利用してEDVACの名声をあげたいとしたペンシルベニア大学側の思惑も見え隠れ。後に、モークリーとエッカートは開発チームから離脱するが、そこには彼らの反発があったとも(想像に難くない・・)。

6

Page 7: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「天才、偉人」に弱いのは、古今東西を問わず

• ENIAC主要開発メンバーであるモークリーとエッカートは技術面で優れており、後発参加のノイマンは理論的側面で優れていた。

• プログラム内蔵方式のコンピュータが「ノイマン型」と呼ばれる理由として、ノイマンの単著報告書の影響が強い。彼の報告書のみが部外者へ配布され、彼の知名度と相俟って「今もノイマンの名で参照」されることになった。

7

Page 8: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

• ハーマン・ハイネ・ゴールドスタインは、1913年にシカゴでユダヤ人の両親の下に生まれ、博士号を取得した後3年間、砲外弾道学の数学的理論に関する権威であったギルバート・エイムズ・ブリスの研究助手を務めた。その後、アメリカ陸軍に入隊し、弾道研究所(BRL)で射表を計算する兵器数学者として勤務。射表の計算は、機械式卓上計算機を操作する約100人の女性計算手によって行われ、1つの砲弾の軌道を計算するには約750の計算が必要で、少なくとも7時間は計算手(computer)が作業を行う必要があった。BRLはペンシルベニア大学電気工学部(ムーアスクール)の計算施設と連携し、ゴールドスタインはBRLと大学の連絡窓口となった。

• ムーアスクール物理学教員ジョン・モークリーは当時、真空管使用電子計算機により計算を何千倍も高速化できることを提案するメモを配布していたので、ムーアスクールの機械式微分解析機を調整していたゴールドスタインは、ジョン・モークリーを訪問し、1943年6月にモークリーとゴールドスタインはこのENIACプロジェクトのために陸軍から資金を確保した。ENIACは30か月で200,000人時をかけて建設された。

• ENIACが戦争の遂行には貢献しなかったが、電子式コンピュータの開発に対する陸軍の関心は依然として強く、ENIAC完成前に、陸軍とムーアスクールはEDVACと呼ばれる後継機を建設する契約を行った。ゴールドスタイン、モークリー、プレスパー・エッカート、アーサー・バークスは、ENIACの欠陥を修正することを期待して、新しいマシンの開発を研究し始めた。

• 1944年の夏、ゴールドスタインは、著名な数学者ジョン・フォン・ノイマンと出会い、ペンシルベニア大学での彼のプロジェクトについて説明した。当時、ノイマンは原子爆弾製造を目指すマンハッタン計画に取り組んでおり、このプロジェクトでも必要な計算量が膨大なものだった。

8

Page 9: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

• ゴールドスタインとの会話の結果、ノイマンは研究グループに加わり、「EDVACに関する報告書の第一草稿」というメモを書いた。ノイマンは研究グループ内メモのつもりだったが、メモを受け取ったゴールドスタインはこれをタイプして101ページの文書とし、著者としてノイマンの名前だけを書いた。1946年6月25日、ゴールドスタインはEDVACプロジェクトに密接に関係する人24人に文書の写しを送った。その後数週間で、報告書の謄写版コピーが大量に、米英の計算機科学者の間に広まった。不完全ながら、報告書は好評で、電子デジタルコンピュータを構築するための青写真となり、ノイマンが著名数学者だったことと相俟って、EDVACアーキテクチャは「ノイマン型アーキテクチャ」として大きな知名度を得た(ペンシルベニア大学ムーアスクールの思惑とも一致)。

• 「第一草稿」の重要なアイデアの1つは、機械式スイッチとパッチケーブルの配線でプログラムするのではなく、コンピュータの電子メモリにプログラムを保存することだった。この報告書に記載されたアイデアは、ノイマンがグループに参加する以前に、EDVAC研究グループで議論されていたものだったが、ENIACの実際の発明者・設計者であるエッカートとモークリーが報告書の共著者として明記されなかったことは、終戦後の研究グループの解散(互いの軋轢)につながった。

• エッカートとモークリーはエッカート・モークリー・コンピュータ (後にUnivac)を設立し、現在ユニシスの一部として存続している。ノイマン、ゴールドスタイン、バークスはプリンストン高等研究所に入り研究生活を続けた。1946年の夏、彼ら全員が再会し、後に「ムーア・スクール・レクチャー」として知られる「世界初のコンピュータの集中講義」を行った。メモなしで行われたゴールドスタインの講義は、デジタルコンピュータのプログラムに役立つ数学的方法(numerical mathematical methods useful in programs for digital computers)にも言及していた。

9

Page 10: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

• ゴールドスタインは以下の3冊を上奏したが、”The Computer from Pascal to von Neumann”というタイトルが示すように、ゴールドスタインは「ノイマンが現代コンピューティング理論の発展に重要な役割を果たした」との明確な論点を持っていた(経緯を考えれば、研究者としてはちょっと・・)ことになる。

• The Computer from Pascal to von Neumann(パスカルからフォンノイマンまでのコンピュータ)、

• History of Numerical Analysis from the 16th Through the 19th Century(16世紀から19世紀までの数値解析の歴史)、

• History of the Calculus of Variations from the Seventeenth Through the Nineteenth Century(17世紀から19世紀までの変分法の歴史)

• 結局、ゴールドスタインは(ユダヤ人同士という背景も影響してか・・との邪推すら可能になるが)能力的にも、ノイマン贔屓を鮮明にしたとも言える。

• ここでは割愛したが、ゴールドスタインとIBMとの関係も大変深く、Univacとの対抗上?ノイマンへの高い評価・・既に、ノイマンが早世していたことも相俟って・・を下したことが、計算機科学への「ノイマン型」の優位性を確定したとも言えるのでは。

• 大学以来、「フォンノイマンは素晴らしい」との世評をそのまま鵜呑みにしてきた人間なので、このような事実!?を耳にすれば、自身の教育過程への一抹の不安を感じざる得ない。

10

Page 11: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「EDVACに関する報告書の第一草稿」(抜粋)

ここで、フォン・ノイマンは、「超高速自動デジタルコンピューティングシステム」(very high speed automatic digital computing system)の詳細設計について記述し、次の6つの主要な装置に細分:

• CA: 中央演算部(central arithmetic part)

• CC: 中央制御部(central control part)

• M: 記憶装置(memory)

• I: 入力装置(input)

• O: 出力装置(output)

• R: (低速度の)外部記憶装置((slow) external memory) -パンチカード、紙テープ、磁気ワイヤ、鋼鉄テープなど

11

Page 12: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「EDVACに関する報告書の第一草稿」(抜粋)

前述の「6つの主要な装置」の中で、CAは、加算、減算、乗算、除算、平方根の計算を実行。対数や三角関数などのその他の数学的演算は、ルックアップテーブルと内挿を使用することで実現し、場合によって(精度の必要に応じて、の意味か)4次函数を使用する・・要するに近似解の利用。

乗算と除算は対数表でも可能であると述べたが、数表を十分に小さく保つためには内挿が必要となり、それには乗算が必要となる。

12

Page 13: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「フォン・ノイマン・ボトルネック」

• フォン・ノイマン・ボトルネック(Von Neumann bottleneck)は、コンピュータ・アーキテクチャの1つの型であるノイマン型に存在する性能上のボトルネック。

• ノイマン型(プログラム内蔵方式に共通)では、記憶装置に命令を格納するので、プロセ(ッ)サが命令を実行するには必ずバスを通して記憶装置(メモリなど)にアクセスしなければならず、プロセサ(=CPU)・メモリ間のアクセス速度が遅ければコンピュータ全体の処理能力を低下させるボトルネック(=隘路)になる。

•現代のコンピュータはほぼプログラム内蔵方式であり、CPU性能向上だけでなく、メモリ・アクセス速度向上も図られる必要があり、キャッシュメモリ導入など、記憶の階層化(memory hierarchy)によるコンピュータ全体のパフォーマンス改善が重要となる。

13

Page 14: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「フォン・ノイマン・ボトルネック」• フォン・ノイマン・ボトルネックは、今日では、コンピュータ設計上の留意点として扱われているが、もともとはプログラミングにおける問題意識から指摘されたもの。

• ジョン・バッカスがそのチューリング賞受賞講演「プログラムはフォン・ノイマン・スタイルから解放されうるか? 関数型プログラミング・スタイルとそのプログラム代数」において、従来型のプログラミング・スタイルの問題点について、それを実行するコンピュータの「CPUと記憶装置と、その2つをつなぐバス」という構成の影響を受け過ぎており、この隘路(ボトルネック)の交通整理をすることがプログラミングになってしまっている(煩雑化の要因)、と主張した際に命名John W. Backus: "Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs". CACM, Aug.1978, https://doi.org/10.1145/359576.359579

14

Page 15: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「フォン・ノイマン・ボトルネック」

1 章 コンピュータのモデル -

電子情報通信学会知識ベース

http://www.ieice-hbkb.org/files/06/06gun_04hen_01.pdf

Hardware organization of a typical system. CPU: Central Processing Unit, ALU: Arithmetic/Logic Unit, PC: Program counter, USB: Universal Serial Bus.

15

Page 16: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「フォン・ノイマン・ボトルネック」 https://basics.k-labo.work/

バスのシステムの構成には,命令の読込みとデータのアクセスを分離したハーバードアーキテクチャ,両者を分離せず同一のバスでアクセスするプリンストンアーキテクチャがあること,アーキテクチャごとの特徴を理解する。

ノイマンアーキテクチャは主記憶に命令もデータも格納する方式。Pentiumなどの多くのCPUはこの方式を採用。

プログラムを記憶するメモリとデータを記憶するメモリを別にした構成をハーバードアーキテクチャといい、マイコンなどで使われる方式。命令とデータに同時にアクセスできるので、高速化に適す。

16

Page 17: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

では、「プログラム」とは何か

• 「プログラムとは?」を理解するため、少し不親切ながら、計算手順という観点からスタートします(コンピュータ入門なのに、申し訳ないです)

•流石に、1+1= では、怒られるので、少しレベルを上げて、

を考えてみます。

•上は、「多項式計算」ですが、通常は「2項演算」の組合せで実現します。すなわち、以下のようになります。そこで「漸化式」を用いて・・

A+B+C+D+E+F+G+H+I+J= ・・・・?

(((((((((0+A)+B)+C)+D)+E)+F)+G)+H)+I)+J=

17

Page 18: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「プログラム」とは何か(2) いきなりですが、漸化式で・・

初期値の記述: これは「漸化式」では重要ですが、現時点では??

A(0)=?? , S(0)=??

多項式の第n項と第(n+1)項との関係の記述: 結局、2項演算に!

S(n)=A(0)+・・・+A(n)

S(n+1)=A(0)+・・・+A(n)+A(n+1)

S(n+1)=S(n)+A(n+1)

18

Page 19: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

•少し表現を考える(より数学的で恐縮ですが)と総和(summation)となる・・しかし、同値(計算自体は同じ)

「プログラム」とは何か(3) いきなりですが、総和=級数で・・

1

0

)(n

i

iA

)0()0(;)0(,

)1()()1(

ASvaluewhereA

nAnSnS

19

Page 20: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「プログラム」とは何か(4) いきなりですが、コードで・・

S=A(0); /* 初期値 */

for (i = 0 ; i <= n ; ++i){

S=S+A(i+1);

}

S=A(0); i = 0; /* 初期値 */

while (i <= n){

S=S+A(i+1);

++i;

}

A(i):given

•表現は数学的な記述からプログラムコードへと変化するが、計算自体は同じ

20

Page 21: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「プログラム」とは何か(4) いきなりですが、コード(2)で・・

• プログラムコード的には同じでも「初期値」の記述が簡潔に

S=0; /* 初期値 */

for (i = 0 ; i <= n+1 ; ++i){

S=S+A(i);

}

S=0; i = 0; /* 初期値 */

while (i <= n+1){

S=S+A(i++);

}

A(i):given

21

Page 22: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「プログラム」とは何か(5) いきなりですが、流れ図で・・

S=0; i=0; /* 初期値 */

while (i <= n+1){

S=S+A(i);

i=i+1;

}

END

L2

L1

START

i = 0S = 0

if ( i > n+1 )then

goto L2

S = S + A( i )i = i + 1goto L1

yesno

• 左側の「流れ図(Flow Chart)」は、右側のプ

ログラムコードを可視化(上から下への流れで計算の動きを「見える化」)している。

流れ図 (Flow Chart)

前頁と同じプログラムコード

22

Page 23: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

• どのような機能(コンピュータの命令群=命令セット)が必要となるか?(流れ図、Flow Chart等から判断すると・・)

•代入文 S=0, i=0

•四則演算文 S=S+i, i=i+1

•分岐文 goto L1•条件分岐文 if (i > n+1) then goto L2

•結局、上のような計算・・正確には、計算を実行するためのデータ処理・・を行うための命令(この命令の意味は、我々利用者がコンピュータにデータ処理を行わせるための指示記述のこと)を定義する必要がある。

「プログラム」とは何か(6) いきなりですが、流れ図で・・

23

Page 24: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

•要するに、ある目的の計算手順(数学的である必要なし)を表記ルールに基づいて記述したものを「プログラム」と呼ぶ。

• もし計算を電卓で実行したいなら、データとして 0⃣ から 9⃣ の「どのキー」を押し、演算として、 などの「どのキー」を押すか、という手順をユーザが予め決めておいて、その手順に従って操作することになる。

• コンピュータの場合、電卓と異なり(プログラム電卓ではないとして)、その手順を「プログラム」の形にして、データなどと一緒に記憶装置に格納する。「コンピュータ自身」がそれを読み出し、(そこに何が書いてあるかを)解釈し、それに従って、演算を実行することになる。

「プログラム」とは何か(7)

24

Page 25: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「プログラム」とは何か(8) 意思伝達手段について

相手が理解できる表現記述を使用する必要がある

従って、「コンピュータが理解できる形式」にプログラムを変換する必要がある

25

Page 26: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「プログラム」とは何か(9)

a high-level C program

言語処理系:プリプロセッサ+コンパイラ+アセンブラ+リンカ

電卓とは異なり、コンピュータ自身が自動的にプログラム(の命令部分)を読み出し、解釈して、実行(プログラムのデータ部分を演算処理)する

26

Page 27: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラムの「基本構造」とは• プログラムの「基本構造」 ( 「制御構造」、代表的な3つのパターン)とは、多くのテキストで以下のように分類される。

•逐次処理(Sequence):順次構造とか、順構造、順次、順次処理・・

•繰返し(Loop/Iteration):反復構造とか、反復、繰返し処理、繰返構造

•条件分岐(Conditional Branch):選択構造とか、選択、分岐・・

•結局、大規模なプログラム開発であっても、その個別要素では、上の3つのパターンを適宜、組み合わせて、計算手順を構成することになる。

https://www.acroquest.co.jp/webworkshop/programing_course/note.html

https://shop.cqpub.co.jp/hanbai/books/18/18781/18781_3syo.pdf

https://en.wikipedia.org/wiki/Structured_programming

https://xtech.nikkei.com/atcl/nxt/column/18/00208/031300002/

http://itdoc.hitachi.co.jp/manuals/3020/3020378270/LANG0027.HTM

様々な参考文献に同種の説明あり

27

Page 28: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラムの「基本構造」とは(2)

Graphical representation of the three basic patterns — sequence, selection, and repetition — using NS diagrams (blue) and flow charts (green)

SequenceSelection = Conditional branch

Repetition = Loop / Iteration

逐次処理 繰返し条件分岐

https://en.wikipedia.org/wiki/Structured_programming

28

Page 29: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラムの「基本構造」とは(3)

https://en.wikipedia.org/wiki/Structured_programming

Following the structured program theorem, all programs are seen as composed of control structures:

"Sequence"; ordered statements or subroutines executed in sequence.

"Selection"; one or a number of statements is executed depending on the state of the program. This is usually

expressed with keywords such as if..then..else..endif.

"Iteration"; a statement or block is executed until the program reaches a certain state, or operations have been

applied to every element of a collection. This is usually expressed with keywords such as while, repeat, for or do..until. Often it is recommended that each loop should only have one entry point (and in the original structural programming, also only one exit point, and a few languages enforce this).

"Recursion"; a statement is executed by repeatedly calling itself until termination conditions are met. While similar

in practice to iterative loops, recursive loops may be more computationally efficient, and are implemented differently as a cascading stack.

再帰呼出し(再帰性)の記述

29

Page 30: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

逐次処理(Sequence)について

•順番に処理を実行する(上から下へ)

• プログラムが書かれている上から順に処理をしていくというプログラムの構造で、プログラムの最も基本的な動きとなる。

•右の記述では、

• S=0 i= 0• S=S+A(i) i=i+1

などに相当する記述部分になる。

30

Page 31: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

•処理を繰り返し実行する

•決まった回数や条件を満たすまで同じ処理を繰り返すプログラム構造で、反復処理とも。

•右の記述では、

• Goto L1

などに相当する記述部分になる。

繰り返し(Loop/Iteration)について

31

Page 32: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

•条件により処理を選択する

•条件分岐とは、特定の条件のときは処理Aを、それ以外のときは処理Bを選択処理するプログラム構造で、条件式が導出した状態に従い、次に実行するサブプログラムを選択して分岐する。

•右の記述では、• if ( i > n + 1) then goto L2などに相当する記述部分になる。

•上で「条件式」とは” ( i > n + 1) ”を指し、値I, n+1の大小比較によって、真偽が決定される(プログラム状態の確定)

条件分岐(Conditional branch)について

処理A

処理B

32

Page 33: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

•条件により処理を選択する

•条件分岐とは、特定の条件のときは処理Aを、それ以外のときは処理Bを選択処理するプログラム構造で、条件式が導出した状態に従い、次に実行するサブプログラムを選択して分岐する。

•右の記述では、• if ( i > n + 1) then goto L2などに相当する記述部分になる。

• ” ( i > n + 1) ”を「条件式」と呼び、値i と n+1 との大小比較によって、式の真偽が決定され、プログラム状態が確定される。

処理A

処理B

プログラム状態(Program Status)について

33

Page 34: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

•変数a,bの関係(状態):

a<b, a=b, a>b

•大小比較の条件は次の6通りとなる

a<b,a≦b,a==b,a!=b,a>b,a≧b

• 3つの状態(プログラム状態: Program Status)で、上の6通りをチェックできる?!

変数a,bの大小関係は次の3通り:

a>b , a=b, a<b

そこで、(a-b)を考える。 結果は・・・

プログラム状態(Program Status)について(2)

34

Page 35: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

1) (a-b)>0 ・・・ a>b パターン{0,0}

2) (a-b)=0 ・・・ a=b パターン{0,1}

3) (a-b)<0 ・・・ a<b パターン{1,0}

の3通りで表現できるので、2進数で「 2ビットの情報量」となる。

ここで、少し天下りだが、「条件コードレジスタ」の導入を行う。

上記の3状態を以下のように定義する。

1) (a-b)>0 ・・・ {Nflag,Zflag}={0,0}

2) (a-b)=0 ・・・ {Nflag,Zflag}={0,1}

3) (a-b)<0 ・・・ {Nflag,Zflag}={1,0}

プログラム状態(Program Status)について(3)

35

Page 36: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラム状態(Program Status)について(4)

a>b

{NZ}={00}

a==b

{NZ}={01}

a<b

{NZ}={10}

a<b False False True

a<=b False True True

a==b False True False

a!=b True False True

a>b True False False

a>=b True True False

照会するaとbとの比較条件

実際のaとbの関係(aとbの関係状態)

比較条件は6通り

36

Page 37: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

比較条件は6通り 条件分岐命令も6通り

命令コード 「条件分岐命令」の意味

a<b jplt Jump On Less Than

a<=b jple Jump On Less Than Or Equal To

a==b jpeq Jump On Equal To

a!=b jpne Jump On Not Equal To

a>b jpgt Jump On Greater Than

a>=b jpge Jump On GreaterThan Or Equal To

照会するaとbとの比較条件

37

Page 38: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラムを構成する命令語とは何か

•少しプログラムが分かってくると、そのプログラムを構成する命令語を理解することが必要となる。では命令語とは何か?

• ところで「命令形」って言いますよね・・中学生の英語を思い出してください・・ちょっと例示すると;

• Please give me chocolate.

• Boys, be ambitious. Let me alone.

• Never pull off till tomorrow what you can do today.

•総て「動詞(の原形)+目的語(補語)」という形になっている。

• コンピュータでも同じで、この「命令語」を理解することが基本となる。

38

Page 39: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

ノンマン型コンピュータの特徴:『プログラム内蔵方式(stored programming)』と表現

プログラム=「命令系列」+「データ集合」

予め、記憶装置にプログラムがセットされていて、それを読出して、確かめながら、コンピュータは実行する。その速度が高速なので、様々な目的に利用できる。でも、いくつか疑問が・・・1)プログラムはどこに「セット」されているか?2)どのように「プログラムを確かめるのか?」3)プログラムを実行するとはどのようなことか?4)何故,高速に実行できるのか?5)コンピュータが実行できるプログラムとは(命令とは)どのようなものか?6)プログラムはどのような順番で実行されるのか?

39

Page 40: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラム内蔵方式(ノイマン型)コンピュータの構造

制御装置(Control Unit)

演算装置(ALU+Register)

記憶装置(Memory)

入力・出力装置(I/O Unit)

CP

U

(プロセサ)

40

Page 41: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

ノイマン型コンピュータの構造 その動作について1. 予めメモリにプログラムを格納

2. 制御装置がプログラムを1つづつ読出す・・②

3. 制御装置で解釈(解読)・・③

4. どのような命令かを判断し,演算装置などを動かす(制御)・・④

5. プログラムが終了するまで,2~4を繰り返す

プログラム内蔵方式

Program

②③

41

Page 42: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

ノイマン型コンピュータの構造 ~全体イメージ~

命令(群)

データ(群)

プログラム

制御装置

演算装置

記憶装置

(+

データ集合

命令系列

プログラムは命令系列とデータ集合から構成

メモリに予め格納

ノイマン型コンピュータ

Page 43: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラムを構成する・・

• プログラムは「命令系列」と「データ集合」がら成り立つ・・ということのようだが、「命令系列」とは?「データ集合」とは?

• ざっくり言えば、「命令系列」とは、命令語の並び(実はこの並び方が重要です)、一方、「データ集合」とは、系列を構成する「個々の命令語」が操作対象とする「データ」の集まりを意味する。

• Give me chocolate.

• Be ambitious.

• Let me alone.

• Never pull off what you can do.

•少し「ラフな説明」になりますが、上の4つの命令語をこの順番で実行するように(明確に)指示することが「プログラム」であると考える。

命令語 =命令(動詞)+目的語(補語)

命令の並び=命令系列(順番に意味がある)

43

Page 44: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

ノイマン型コンピュータの構造 ~ソフトウェアとの関係~

move a,GR0add b,GR0move GR0,c

c=a+b;

コンパイル(コンパイリング)

②・・・

①・・・

③・・・

機械語(アセンブリ言語)とプログラミング言語の関係

ハードウェアとソフトウェアとの深い?深い!!関係

コンパイラ+ローダなどのソフトウェアとの協調関係の理解が必要!

ローディング

人間の分かるプログラムからコンピュータの分かるプログラムへ(翻訳)

人間の分かるプログラム

コンピュータの分かるプログラム

44

Page 45: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

ノイマン型コンピュータの動作を参考に考えると・・

move a,GR0add b,GR0move GR0,ca:10b:20c: (初期値なし)

制御装置

演算装置

記憶装置

命令を実行する順番って決まっているの?

メモリには命令群とデータ群が格納されているとのことだけど、どうやって区別しているの?

最初の疑問:

コンピュータの分かるプログラム

Page 46: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

そもそも「GR0って何か?」• ノイマン型コンピュータって「プログラム内蔵方式」と「5大要素」・・だとして、ハードウェアとソフトウェアの関係もなんとなく分かるけど・・

•一方、「c=a+b;」と 「 “move a, GR0” “add b, GR0” “move GR0, c” 」 との関係で、急に「顔を出す」GR0って何か? (という質問があってびっくりしました・・そうだ、説明できていない!)

• (次章で詳細な説明を行いますが)ここでは簡単に、GRとはGeneral Register: CPU内などに複数個あって汎用の「データを蓄える・・具体的には、演算途中のデータや演算結果データを一時的に保持する領域などとして使用される」高速記憶回路

46

http://wisdom.sakura.ne.jp/programming/asm/assembly3.html

https://xtech.nikkei.com/it/article/COLUMN/20070404/267385/

https://ednjapan.com/edn/articles/1908/28/news026.html

https://en.wikipedia.org/wiki/Processor_register

Page 47: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

実行の順番は何で決まるか?• どこかに順番を決める「番号付け」となる情報が存在することになる

• 「メモリは、情報を格納する箱の集合である」という概念を思い出してください

• どの箱にどのような情報が入っているかは各箱に番号付けを行うことで、取り出しも容易になる。

メモリ:「番号付きの箱」の集合

47

Page 48: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

メモリ:「番号(番地)付きの箱」の集合

情報番地情報番地

move a,GR0

add b,GR0

move GR0,c

a:10

b:20

c: (初期値なし)

48

Page 49: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

• 番地の値の小さいものから大きいものへと順番にその「情報」を命令として、読出し、解釈し、実行する!?

• 「現在、実行中の命令の格納された番地はいくらか」という状態を記憶する「何か」が必要となる。

「Program Counter」という存在

メモリの番地+情報の関係

49

Page 50: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

命令群とデータ群の境界を如何に区別するか?

• Program Counterによって命令の実行順番が識別できることになったので、命令として実行できる記憶領域(の番号)と、データを格納しておく記憶領域(の番号)とを、プログラムを読み出し解釈して実行するまでに決めておけば良いことになる。

• 1つの解決策として、次の番地からは命令ではありません(あるいは

次はデータ群を格納している領域です)と明記する「特別な命令」を用意しておけば安心できる。(コンピュータは誤動作しない)

命令語の定義:「命令セットアーキテクチャ」の話題

50

Page 51: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

• 命令として実行できる記憶領域(の番号)の最後・・データを格納しておく記憶領域(の番号)の前・・に、処理を終了させる「終了命令」を配置することで、間違ってデータ部分を命令と思って実行する危

険性を回避できる。 halt 命令が必要!• 実は、一般のプログラム中にはhalt命令を置くことは禁止されている。何故か?一緒に考えてみましょう

「halt 命令」などのような命令=コンピュータの動作を規定、が必要となる

例えば、終了命令を考える

51

Page 52: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

「halt命令」の挿入

情報番地

move a,GR0

add b,GR0

move GR0,c

a:10

b:20

c: (初期値なし)

情報番地

add b,GR0

move GR0,c

a:10

b:20

c: (初期値なし)

22

23

24

halt

X (停止)

命令系列

データ集合

52

Page 53: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラム内蔵方式が(よく)理解できれば、コンピュータも怖くない• コンピュータに実行させたい「プログラム」を・・まず、人間が理解できる形で作成し・・準備し、それを・・コンピュータが理解できる形に翻訳して・・記憶装置に格納する。

•記憶装置(メモリ)にプログラムを格納できれば、それを(自動的に)読み出して、実行できる仕組みが必要となる。

• コンピュータは、記憶装置、演算装置、制御装置、入力装置、出力装置から構成される。

•記憶装置に格納された(コンピュータの理解できる)プログラムを構成する命令語を読み出し、解釈し、演算装置などに処理=実行させる。

53

Page 54: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラム内蔵方式が(よく)理解できれば、コンピュータも怖くない(2)• 命令語を記憶装置から1つづつ読み出して、解釈して、演算装置に実行させる仕組みを「制御装置」が持つ必要がある。

• 一方、入力装置はデータなどをコンピュータの外部から記憶装置へ読み込む機能を実現する。

• キーボード(マウス)や入力機器(ディスクも含む)が入力装置である

• また、出力装置は記憶装置にあるデータをコンピュータの外部に書き出す機能を実現する。

• ディスプレイ、プリンタ、ディスクが出力装置である。

• 制御装置と演算装置を1つにまとめてCPU(Central Processing Unit)と呼び、記憶装置はメモリ(主メモリ)と呼ぶ。

• ハードディスクは補助記憶装置であり、また、入出力装置でもある。

54

Page 55: ノイマン型コンピュータの特徴 についてstimai/R02pdf/2020LectureNo2...プログラム内蔵方式(=ノイマン型)とは •ICやLSI、そしてマイクロプロセ(ッ)サまで話が進んだが、原点に戻っ

プログラム内蔵方式が(よく)理解できれば、コンピュータも怖くない(3)•結局、プログラムを実行する上で、記憶装置(主メモリ)とCPU=制御装置と演算装置が、入力装置や出力装置を使いながら、どのような動きをするかを理解することが重要となる。

• いくつかの具体的なプログラムを対象として、コンピュータが5大要素である、記憶装置、演算装置、制御装置、入力装置、出力装置をどのように動作させるかを具体的に理解することで、プログラム内蔵方式のコンピュータを理解する。

(次回からの課題)

55