情報リテラシ「コンピュータ入門」
(プログラム内蔵方式コンピュータ
の構造と動作を視覚的に理解す
るための教材の実例)
香川大学 創造工学部(工学部、工学研究科)
今井研究室
情報リテラシを理解する(その1)
• 一般にコンピュータを利用することで、情報リテラシの理解が深まる
と言われる。そこで、「文書管理」のような応用技術から情報リテラシ
入門を試みる手法も広く散見される。
• 一方、情報リテラシの基本を「コンピュータ自体の理解」と位置付け、
例えば、プログラミング言語を理解し、実際にプログラミング実習を
通じて「コンピュータ理解」を試みる手法も、従来から、有益とみなさ
れてきた。
• 問題はプログラミング、特に高水準言語(高級言語)プログラムを理
解することと、コンピュータ自体(ハードウェアや基本ソフトウェア)を
理解することとの両方が(ほぼ)同時に要求される局面もあり、学習
初期の時点で学習者には負担になる場合もある、と見做されていた。
情報リテラシを理解する(その2)
• 実際、大学の授業でも「プログラミング」「システムプログラミング=コンパ
イラ」「計算機システム&アーキテクチャ」などのそれぞれの学問が(少な
くとも40年ほど前には・・苦笑)個別の半期分の演習科目、講義科目として
用意され、履修生には科目相互の「距離感」を感じさせながらも、ともかく
も学習を頑張るよう強要?する局面も否定できない状況にあった。
• このような「距離感」がどこにあったかと言えば、担当教員の分担制にもよ
るが、
• 「プログラミング」は、高度な(当時の考えでは)
技術習得型
と見做され、
• 「システムプログラミング」「計算機アーキテクチャ」は
知識習得型
と見做されていた。
• 学習者側の努力が強く求められ、これらを自力で融合&統一的理解を行
う=距離を埋めるためには、学習時点で「情報のプロ≒幅広い技術+知
識を備えていること」が必要であるとも言われてきた。
情報リテラシを理解する(その3)
• ここでは敢えて深堀り(もしたいのですが)よりも、とにかく流れを示し、全
体イメージを明らかにすること・・その意味では「情報リテラシ」的な
高級
言語プログラミングから計算機アーキテクチャまで
を一連の流れ
として・・を試みたい。
• 幸い、研究室の学生によるCPUシミュレータと(最近開発中の)コンパイラ
がWebアプリとして使用できる環境が整った。
• これを基本ツールにコンパイラからコンピュータの動きを理解するという流
れで、「情報リテラシ」として、高級言語プログラミングからコンピュータの
内部構造・動作の視覚化までを説明したい・・ちょっと無謀な冒険!?か
もしれないけれど。
http://stwww.eng.kagawa-u.ac.jp/~s17t260/VisualCompiler/VisualCompiler.html http://stwww.eng.kagawa-u.ac.jp/~imai/H27Labo/Higashikakiuchi/ http://stwww.eng.kagawa-u.ac.jp/~imai/H30Labo/Hara/simulator3/index.html情報リテラシを理解する(その4)
• 先行事例の1つとして、次の「著名な教科書」を紹介し、我々が目指す
高級言語プログラミングから計算機アーキテクチャまで
を一連
の流れとして「情報リテラシ」 の教材の1っの紹介を試みたい。
•C
OMPUTER
S
YSTEMS
• A Programmer’s Perspective
https://dadongwang.files.wordpress.com/2011/03/computer-system-a-programmers-perspective.pdfA Tour of Computer Systems
• 1.2 Programs Are Translated by Other Programs into Different Forms
The hello program begins life as a high-level C program because it can be read and understood by human beings in that form. In order to run hello.c on the system, the individual C statements must be translated by other programs into a sequence of low-level machine-language instructions. These instructions are then packaged in a form called an
executable object program and stored as a binary disk file. Object programs are also referred to as executable object files.
A Tour of Computer Systems
• 1.3 It Pays to Understand How Compilation Systems Work
• 1.4 Processors Read and Interpret Instructions Stored in Memory
Hardware organization of a typical system. CPU: Central Processing Unit,
ALU: Arithmetic/Logic Unit, PC: Program counter,
A Tour of Computer Systems
Reading the hello command from the keyboard.
Loading the executable from disk into main memory.
A Tour of Computer Systems
A Tour of Computer Systems
• 1.4 Processors Read and Interpret Instructions Stored in Memory(4)
Writing the output string from memory to the display.
情報リテラシを理解する(その5)
• 先に示した一連の流れ
はまさに、情報系専門技術者教育への
高級言語プログラミングから計算機アーキテクチャまで
を一
貫したトーンで話題提供する手法で「コンピュータの具体的な機能と
動作」を例示しており、単なる知識だけの押し売りには留まらない
「情報リテラシ」 の教材の好例と考える。
• そこで、このような事例≒好例を可能な限り忠実&適切に模しつつ
改善することで、
高級言語で記述されたプログラム
・・1つのアルゴリ
ズムとも言えるし、手順とも考えることができる・・
をコンピュータがど
のように処理することができるか
、を示すことにすることで、新しい
「情報リテラシ」の教材を提案するスタートポイントとしたい。
情報リテラシを理解する(その6)
ここでは、次のようなプロセスで内容を可視化する。
① 簡単な「級数(数列の和)」を求めるプログラムを示し、
1. その構造の理解を目指す。 (①-1)
2. プログラムの基本3要素を紹介する。 (①-2)
② プログラムの基本3要素を処理(=プログラムの要素を実行)するための
「コンピュータの構造や動作」を把握してもらい、
1.
プログラム内蔵方式の理解を目指す。 (②-1)
2.
プログラム=命令系列+データ集合の原理を紹介する。(②-2)
③ 「級数(数列の和) 」を求めるプログラムをコンピュータが理解(=読出し、
解釈そして実行)できる形式に変換する過程を示し、
1.
(手作業で)機械語≒アセンブリ言語プログラムへの変換を紹介する。(③-1)
2.
当該プログラムをコンピュータ内で如何に処理するかを具体的に示す。(③-2)
情報リテラシを理解する(その7)
(続き・・)
④ VisualCompilerを使用して高級言語記述プログラムをアセンブリ言語プロ
グラムへ変換するプロセスを示し、
1. その構造の理解を目指す。 (④-1)
2. プログラムの基本3要素を紹介する。 (④-2)
⑤ VisualCompilerが生成するアセンブリ言語プログラムをCPUシミュレータで
実行させる手順を理解してコンピュータの内部動作を理解してもらう。
1.
プログラム内蔵方式の理解を目指す。 (⑤-1)
2.
プログラム=命令系列+データ集合の原理を紹介する。(⑤-2)
⑥ また、CPUシミュレータのより高度な使用方法を学び、コンピュータの基本
原理を理解してもらう。
これはオプションとする
1.
(手作業で)機械語≒アセンブリ言語プログラムへの変換を紹介する。(⑥-1)
2.
当該プログラムをコンピュータ内で如何に処理するかを具体的に示す。(⑥-2)
情報リテラシを理解する(その6)
ここでは、次のようなプロセスで内容を可視化する。
① 簡単な「級数(数列の和)」を求めるプログラムを示し、
1. その構造の理解を目指す。 (①-1)
2. プログラムの基本3要素を紹介する。 (①-2)
② プログラムの基本3要素を処理(=プログラムの要素を実行)するための
「コンピュータの構造や動作」を把握してもらい、
1.
プログラム内蔵方式の理解を目指す。 (②-1)
2.
プログラム=命令系列+データ集合の原理を紹介する。(②-2)
③ 「級数(数列の和) 」を求めるプログラムをコンピュータが理解(=読出し、
解釈そして実行)できる形式に変換する過程を示し、
1.
(手作業で)機械語≒アセンブリ言語プログラムへの変換を紹介する。(③-1)
2.
当該プログラムをコンピュータ内で如何に処理するかを具体的に示す。(③-2)
級数(数列の和)を求める・・これをプログラムで表現
初期値の記述:A(0)=?,S(0)=?
第n項と第(n+1)項との関係の記述:
S(n)=A(0)+・・・+A(n)
S(n+1)=A(0)+・・・+A(n)+A(n+1)
S(n+1)=S(n)+A(n+1)
+
=
1
0
)
(
n
i
i
A
)
0
(
)
0
(
;
)
0
(
,
)
1
(
)
(
)
1
(
A
S
value
whereA
n
A
n
S
n
S
=
=
+
+
=
+
しかし,漸化式よりも,総和(summation)の記述の方がより簡潔!「プログラム」とは何か
いきなりですが、
流れ図
で・・
L2 L1 START i = 0 S = 0 if ( i > n+1 ) then goto L2 S = S + A( i ) i = i + 1 goto L1yes
no
• 左側の「流れ図(Flow Chart)」は、右側のプロ
グラムコードを可視化(上から下への流れで
計算の動きを「見える化」)している。
流れ図 (Flow Chart)S=0; i=0; /* 初期値 */
while (i <= n+1){
S=S+A(i);
i=i+1;
}
プログラムの「基本構造」とは
• プログラムの「基本構造」 ( 「制御構造」、代表的な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 様々な参考文献に 同種の説明ありプログラムの「基本構造」とは
Graphical representation of the three basic patterns — sequence, selection, and repetition — using NS diagrams (blue) and flow charts (green)
Sequence
Selection =
Conditional branch
Repetition =
Loop / Iteration
逐次処理
条件分岐
繰返し
https://en.wikipedia.org/wiki/Structured_programmingプログラムの「基本構造」とは
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.漸化式を「より簡単に」書き換えてみる
+
=
1
0
n
i
i
n
n
A
whereS
n
A
n
S
n
S
=
=
+
=
+
)
(
;
0
)
0
(
,
)
(
)
(
)
1
(
問題を簡単にする左フロー図(プログラム)を分類する・・
目的別の4つ文(命令パターン)に分類?
END L2 L1 START i = 0 S = 0 if ( i > n+1 ) then goto L2 S = S + i i = i + 1 goto L1 no yes S=0; i=0; /* 初期値*/ while (i <= n+1){ S=S+i; i=i+1; }◼代入文
S=0, i=0
◼四則演算文
S=S+i, i=i+1
◼分岐文
goto L1
◼条件分岐文
if (i > n+1) then goto L2
どのような命令セットが必要か?
逐次処理(Sequence)について
• 順番に処理を実行する(上から下へ)
• プログラムが書かれている上から順に処理をし
ていくというプログラムの構造で、プログラムの最
も基本的な動きとなる。
• 右の記述では、
• S=0 i= 0
• S=S+i
i=i+1
などに相当する記述部分になる。
「代入文」
、
「四則演算文」
などが
“逐次処理”
に分類
• 処理を繰り返し実行する
• 決まった回数や条件を満たすまで同じ処理を繰
り返すプログラム構造で、反復処理とも。
• 右の記述では、
• Goto L1
などに相当する記述部分になる。
繰り返し(Loop/Iteration)について
「分岐文」
などが
“繰り返し”
に分類
• 条件により処理を選択する
• 条件分岐とは、特定の条件のときは
処理A
を、そ
れ以外のときは
処理B
を選択処理するプログラム
構造で、
条件式が導出した状態
に従い、次に実
行するサブプログラムを選択して分岐する。
• 右の記述では、
• if ( i > n + 1) then goto L2
などに相当する記述部分になる。
条件分岐(Conditional branch)について
処理A
処理B
「条件分岐文」
などが
“条件分岐”
に分類
情報リテラシを理解する(その6)
ここでは、次のようなプロセスで内容を可視化する。
① 簡単な「級数(数列の和)」を求めるプログラムを示し、
1. その構造の理解を目指す。 (①-1)
2. プログラムの基本3要素を紹介する。 (①-2)
② プログラムの基本3要素を処理(=プログラムの要素を実行)するための
「コンピュータの構造や動作」を把握してもらい、
1.
プログラム内蔵方式の理解を目指す。 (②-1)
2.
プログラム=命令系列+データ集合の原理を紹介する。(②-2)
③ 「級数(数列の和) 」を求めるプログラムをコンピュータが理解(=読出し、
解釈そして実行)できる形式に変換する過程を示し、
1.
(手作業で)機械語≒アセンブリ言語プログラムへの変換を紹介する。(③-1)
2.
当該プログラムをコンピュータ内で如何に処理するかを具体的に示す。(③-2)
コンピュータの基本構造≒「
ノイマン型
」!?
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.
制御装置
(Control Unit)
演算装置
(ALU+Register)
記憶装置
(Memory)
入力・出力装置
(I/O Unit)
CP
U
(
プ
ロ
セ
サ
)
ノイマン型コンピュータの構造的特徴・・
5大要素
出力装置
入力装置
注目!ノンマン型コンピュータの特徴:
プログラム=「命令系列」+「データ集合」
予め、記憶装置にプログラムがセットされていて、それを読出して、確かめながら、コン
ピュータは実行する。その速度が高速なので、様々な目的に利用できる。でも、いくつか疑
問が・・・
1)プログラムはどこに「セット」されているか?
2)どのように「プログラムを確かめるのか?」
3)プログラムを実行するとはどのようなことか?
4)何故,高速に実行できるのか?
5)コンピュータが実行できるプログラムとは(命令とは)どのようなものか?
6)プログラムはどのような順番で実行されるのか?
プログラム内蔵方式(stored programming)
ノイマン型コンピュータの構造 その動作について
1. 予めメモリにプログラムを格納
2. 制御装置がプログラムを1つづつ読出す・・
②
3. 制御装置で解釈(解読)・・
③
4. どのような命令かを判断し,演算装置などを動かす(制御)・・
④
5. プログラムが終了するまで,2~4を繰り返す
プログラム内蔵方式
Program
②
③
④
ノイマン型コンピュータの構造
~全体イメージ~
プログラムは命令系列
とデータ集合から構成
メモリに予め格納
ノイマン型
コンピュータ
命令(群)
+
データ(群)
プ
ロ
グ
ラ
ム
制御
装置
演算
装置
記憶装置
(+
データ集合
命令系列
計算機で「プログラム」を処理するとは
a high-level C program言語処理系:プリプロセッサ+コンパイラ+アセンブラ+リンカ
電卓とは異なり、コンピュータ
自身が自動的にプログラム
(の命令部分)を読み出し、解
釈して、実行(プログラムの
データ部分を演算処理)する
計算機が処理できるプログラムを構成する・・
• プログラムは「命令系列」と「データ集合」がら成り立つ・・ということ
のようだが、「命令系列」とは?「データ集合」とは?
• ざっくり言えば、「命令系列」とは、命令語の並び(実はこの並び方が
重要です)、一方、「データ集合」とは、系列を構成する「個々の命令
語」が操作対象とする「データ」の集まりを意味する。
• Give
me chocolate
.
• Be
ambitious
.
• Let
me alone
.
• Never pull off
what you can do
.
• 少し「ラフな説明」になりますが、上の4つの命令語をこの順番で実行
するように(明確に)指示することが「プログラム」であると考える。
命令語
= 命令(動詞)+目的語(補語)命令の並び
=命令系列
(順番に意味
がある)
ノイマン型コンピュータとプログラムの関係
move a,GR0
add
b,GR0
move GR0,c
c=a+b;
コンパイル
(コンパイリング)②・・・
①・・・
③・・・
機械語(アセンブリ言語)とプログラミング言語の関係
ハードウェアとソフトウェアとの深い?深い!!関係
コンパイラ+ローダなどのソフトウェア
との協調関係の理解が必要!
ローディング
人間の分かるプログラム
から
コンピュータの分か
るプログラム
へ(翻訳)
人間の分かる
プログラム
コンピュータの
分かるプログ
ラム
move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ メモリにプログラムが格納 命令系列 データ集合 プログラム
初期化データ
move a,GR0 add b,GR0 move GR0,c a:10 b:20 c: (初期値なし)ノイマン型コンピュータの動作
No0(
初期
)
move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 命令系列 データ集合 プログラム move a,GR0 add b,GR0 move GR0,c a:10 b:20 c: (初期値なし)
ノイマン型コンピュータの動作
No1
命令読出し
move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 命令系列 データ集合 プログラム move a,GR0 add b,GR0 move GR0,c a:10 b:20 c: (初期値なし)
ノイマン型コンピュータの動作
No2
命令は「move a,GR0」だ!move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 命令系列 データ集合 プログラム move a,GR0 add b,GR0 move GR0,c a:10 b:20 c: (初期値なし)
ノイマン型コンピュータの動作
No3
命令は「move a,GR0」だ! 演算装置(のGR0)にa(=10)を設定move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 命令系列 データ集合 プログラム move a,GR0 add b,GR0 move GR0,c a:10 b: 20 c: (初期値なし)
ノイマン型コンピュータの動作
No4
命令読出し
命令系列 データ集合 プログラム move a,GR0 move GR0,c a:10 b: 20 c: (初期値なし)
ノイマン型コンピュータの動作
No5
命令は「add b,GR0」だ! move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ add b,GR0命令系列 データ集合 プログラム move GR0,c a:10 b: 20 c: (初期値なし)
ノイマン型コンピュータの動作
No6
命令は「add b,GR0」だ! move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 演算装置(のGR0)にb(=20)を加算:結果は30 move a,GR0 add b,GR0move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ 命令系列 データ集合 プログラム add b,GR0 move GR0,c a:10 b: 20 c: (初期値なし)
ノイマン型コンピュータの動作
No7
命令読出し
move a,GR0命令系列 データ集合 プログラム a:10 b: 20 c: (初期値なし)
ノイマン型コンピュータの動作
No8
命令は「move GR0, c」だ! move a,GR0 add b,GR0 move GR0,c ②・・・ ①・・・ ③・・・ add b,GR0 move GR0,c move a,GR0命令系列 データ集合 プログラム a:10 b: 20 c: