情報処理概論及演習 2012 ソフトウエアcu40887/material/w14_software.pdf · 1...
TRANSCRIPT
1
情報処理概論及演習 2012
ソフトウエア
工学院大学 情報通信工学科 保坂修治
コンピュータの基本動作
IBM sequioia ・・・June 2012 TOP500 Ranking No.1 cores:1572864 Peak 20132.7 TFLOPS
ノイマン型コンピュータ
コンピュータ = ノイマン型コンピュータ
1. 情報を2進数で表現する
2. プログラム内蔵型
2
メモリ
線形メモリ
0000000番地
0000001番地
0000002番地
0000003番地
0000004番地
0000005番地
0000006番地
0000007番地
0000008番地
FFFFFFFE番地
FFFFFFFF番地
・ ・ ・
・ ・ ・
コンピュータの基本機能
制御装置 主記憶装置
データの流れ 制御情報の流れ
キーボード マウス カメラ
ディスプレイ プリンタ スピーカー
半導体メモリ ハードディスク 光ディスク
演算装置
入出力装置 補助記憶装置
bus
記憶システム
レジスタ
キャッシュメモリ
主記憶
補助記憶装置
高価
高速
安価
低速
容量
CPU内部
DRAM
HD,DVD-R/W,
フラッシュメモリ
(USBメモリ)
SRAM
数百psec
数十msec
数nsec
数十nsec
SRAM
~数MB
~数GB
~数KB
~数TB
3
プロセッサ
CPU(演算装置 + 制御装置)
1チップに収納
CPUの内部構造
コンピュータの動作 命令実行サイクル
命令 フェッチ
• PCの値でメインメモリの番地を指定する。その番地に記憶されている命令を取り出しIRに格納する
命令 デコード
• IRに格納された命令をデコーダで解読し、制御信号を生成する
実行
•制御信号に従って、ALUや汎用レジスタを使った処理が行われる
4
簡単なモデルによる動作の理解
制御装置 カウンタ レジスタ 演算装置 表示装置
メモリ
A B
0
0 1 2 3 4 5 6 7 8 9 番地
制御装置の動作
制御装置の内部状態 動作
0 停止する
1 レジスタAとBのデータを加えた結果を表示装置に表示する
2 レジスタAとBのデータを掛けた結果を表示装置に表示する
5 5番地のメモリの内容をレジスタAに移す
6 6番地のメモリの内容をレジスタBに移す
9 カウンタの値を0にする
動作(0)
制御装置 カウンタ レジスタ 演算装置 表示装置
メモリ
A B
5 6 1 0 0 5 6 2 0 0
0
0 1 2 3 4 5 6 7 8 9 番地
5
動作(1)
制御装置 カウンタ レジスタ 演算装置 表示装置
メモリ
A B
5 6 1 0 0 5 6 2 0 0
0
0 1 2 3 4 5 6 7 8 9 番地
5 5
動作(2)
制御装置 カウンタ レジスタ 演算装置 表示装置
メモリ
A B
5 6 1 0 0 5 6 2 0 0
1
0 1 2 3 4 5 6 7 8 9 番地
5 5
6 6
動作(3)
制御装置 カウンタ レジスタ 演算装置 表示装置
メモリ
A B
5 6 1 0 0 5 6 2 0 0
2
0 1 2 3 4 5 6 7 8 9 番地
5 6 6
1
5+6 11 11
6
動作(4)
制御装置 カウンタ レジスタ 演算装置 表示装置
メモリ
A B
5 6 1 0 0 5 6 2 0 0
3
0 1 2 3 4 5 6 7 8 9 番地
11 5 6
0
演習1.4(1) 図1.8において、6+7=13 の処理を実現するには
メモリをどのように変更すればよいか。
制御装置 カウンタ レジスタ 演算装置 表示装置
メモリ
A B
5 6 1 0 0 5 6 2 0 0
0
0 1 2 3 4 5 6 7 8 9 番地
6 7
演習1.4(2) 図1.8においてカウンタの内容が5ならば、
どんな結果が得られるか。
制御装置 カウンタ レジスタ 演算装置 表示装置
メモリ
A B
5 6 1 0 0 5 6 2 0 0
5
0 1 2 3 4 5 6 7 8 9 番地
5 6 5×6 30
7
ソフトウエア
基本ソフトウエアと応用ソフトウエア
応用ソフトウエア
基本ソフトウエア
ハードウエア
ワードプロセッサ、表計算ソフト、TeX、メールソフト、など
コンパイラ、デバッガ、
オペレーティングシステム(Windows, MacOS, UNIX, )
物理構造
論理構造
マシン語
プログラミング言語 (C/C++,Java,C#, FORTRAN,BASIC)
プログラミング言語
高水準言語
手続き型 FORTRAN、COBOL、Basic、
C
関数型 Lisp,Haskell,Scala,Scheme
論理型 Prolog
オブジェクト指向 Smalltalk、C++、Java
低水準言語
アセンブリ言語
機械語
8
情報処理のプロセス
問題
ハードウエア
プログラム
アルゴリズム
マシン語
:解決したい問題がある
プログラミングパラダイム、計算モデル
(アルゴリズムを作るための前提、考え方)
:問題を解決するための手順を用意する
:アルゴリズムをプログラミング言語を使って表現しなおす
:ハードウエアでマシン語を実行する
言語処理プログラム(コンパイラ、インタープリタ)
:ハードウエアが理解できるマシン語に翻訳する
アルゴリズム
問題を解く手順
重要:最適な手順を求める
1. 最短である
2. 論理的な矛盾がない
3. 必ず、終了する
逐次処理
処理1
処理2
処理3
処理 i
9
プログラムの基本構造
フローチャート
記号 名称 説明
端子 チャートと始めと終わり
線 手順、制御の流れ
処理 変数への代入、演算など
データ記号 データの入出力
判断 条件分岐処理における判断
ループ端(開始) ループ処理の始め
ループ端(終了) ループ処理の終わり
基本構造
10
順次構造
反復構造
選択構造
基本構造を組み合わせる
処理1
条件2
処理3 処理2
条件1
[例]
デートのアルゴリズム
START
END
天気は良いか?
カフェに行く
映画鑑賞
NO
ラグビー観戦
YES
1~n個までの合計値を求める START
END
カウンタ←カウンタ+1
合計値←合計値+カウンタ
NO
YES カウンタ>n ?
合計値←0
カウンタ←1
11
演習:n個のデータから最大値を求める
START
END
データの読み込み
NO
YES
最大値←0
データ>最大値 最大値←データ
LOOP1
カウンタ>n
LOOP1
カウンタ←カウンタ+1
プログラミング言語 言語 用途
1 C 低水準から高水準まで、 UNIXシステム開発用に誕生
2 Java オブジェクト指向
3 C++ オブジェクト指向
4 Objective-C オブジェクト指向、iOS、MacOS
5 C# オブジェクト指向
6 (visual)Basic
7 PHP Webアプリケーション
8 Python スクリプト言語
9 Perl スクリプト言語
10 Ruby スクリプト言語、Webブラウザで実行
・・・ 11位 JavaScript、15位logo
20 ・・・ 29位FORTRAN、28位COBOL
30 ・・・ 31位 Scheme、41位 Scala
TIOBE Software June 2012
プログラム作成過程
ソースプログラム
オブジェクト
プログラム
ロードモジュール
(実行形式)
コンパイラ
リンカ
ローダ
ライブラリ関数
オブジェクト
コード
コンパイル
リンク
エディタ
実行(プロセス)
12
翻訳:ソースコードから実行可能形式へ
1. ソースプログラムを実行可能なマシン語に 一括して翻訳すること
翻訳するプログラムのことをコンパイラと呼ぶ
2. ソースプログラムを実行可能なマシン語に
1命令(1行)ずつ翻訳すること
翻訳するプログラムのことをインタプリタと呼ぶ
言語処理
C言語へ
#include <stdio.h>
int main(void){
printf("Hello World!");
return 0;
}
プログラム「HelloWorld」にみる機械語、アセンブリ言語、C言語によるコードの比較
13
『アセンブリ言語』
_main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
call __alloca
call ___main
subl $12, %esp
pushl $LC0
call _printf
addl $16, %esp
movl $0, %eax
leave
ret
マシン語
00000400 55 89 E5 83 EC 28 C7 44 24 04 04 20 40 00 8D 45
00000410 FC 89 44 24 10 A1 10 20 40 00 C7 45 FC 00 00 00
00000420 00 C7 04 24 00 20 40 00 89 44 24 0C 8D 45 F8 89
00000430 44 24 08 E8 B8 07 00 00 89 EC 5D C3 8D 74 26 00
00000440 55 89 E5 83 EC 08 A1 20 20 40 00 85 C0 74 57 A3
00000450 30 20 40 00 A1 D4 40 40 00 85 C0 75 5A 83 F8 E0
00000460 74 22 83 C0 20 89 04 24 E8 63 07 00 00 8B 15 20
00000470 20 40 00 89 04 24 89 54 24 04 E8 61 07 00 00 A1
00000480 D4 40 40 00 83 F8 C0 74 1D 83 C0 40 89 04 24 E8
00000490 3C 07 00 00 8B 15 20 20 40 00 89 04 24 89 54 24
000004A0 04 E8 3A 07 00 00 E8 15 07 00 00 8B 15 30 20 40
000004B0 00 89 10 89 EC 5D C3 89 04 24 E8 11 07 00 00 8B
『マシン語』(実行可能形式、下記はその一部)
コンピュータ内部では すべてを“1”と”0”で表す
・・・・・・・・・・ 0101 0101 1000 1001 1110 0101 1000 0011 1110 1100 0011 1000 1100 0111 0100 0100 0000 0100 0000 0100 0010 0000 0100 0000 0000 0000 1000 1101 0100 0101 1111 1100 1000 1001 0100 0100 0010 0100 0001 0000 1010 0001 0001 0000 0010 0000 0100 0000 0000 0000 1100 0111 0100 0101 1111 1100 0000 0000 0000 0000 0000 0000 1100 0101 0000 0100 0010 0100 0000 0010 0100 0000 ・・・・・・・・・・・・
14
コンピュータ言語 プログラム「HelloWorld」にみる機械語、アセンブリ言語、C言語によるコードの比較
00000400 55 89 E5 83 EC 28 C7 44 24 04 04 20 40 00 8D 45
00000410 FC 89 44 24 10 A1 10 20 40 00 C7 45 FC 00 00 00
00000420 00 C7 04 24 00 20 40 00 89 44 24 0C 8D 45 F8 89
00000430 44 24 08 E8 B8 07 00 00 89 EC 5D C3 8D 74 26 00
00000440 55 89 E5 83 EC 08 A1 20 20 40 00 85 C0 74 57 A3
00000450 30 20 40 00 A1 D4 40 40 00 85 C0 75 5A 83 F8 E0
00000460 74 22 83 C0 20 89 04 24 E8 63 07 00 00 8B 15 20
00000470 20 40 00 89 04 24 89 54 24 04 E8 61 07 00 00 A1
00000480 D4 40 40 00 83 F8 C0 74 1D 83 C0 40 89 04 24 E8
00000490 3C 07 00 00 8B 15 20 20 40 00 89 04 24 89 54 24
000004A0 04 E8 3A 07 00 00 E8 15 07 00 00 8B 15 30 20 40
000004B0 00 89 10 89 EC 5D C3 89 04 24 E8 11 07 00 00 8B
_main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax movl %eax, -4(%ebp) movl -4(%ebp), %eax call __alloca call ___main subl $12, %esp pushl $LC0 call _printf addl $16, %esp movl $0, %eax leave ret
#include <stdio.h>
int main(void){
printf("Hello World!");
return 0;
}
『マシン語』(実行可能形式、下記はその一部)
『C言語』
『アセンブリ言語』
命令
命令の形式
命令コード オペランド ・・・
命令コード: 命令の種類
オペランド: 命令の対象となるデータの格納場所
命令の例
命令コード (加算命令)
オペランド オペランド
機械語 アセンブリ言語 メモリアドレス
15
コンピュータ言語
アセンブリ言語
機械語命令を直接、人間に分かりやすい形に置き換えたもの
命令の種類
算術演算命令 ・・・ ADD,SUB、MPY
論理演算命令 ・・・ AND,OR
データ転送命令 ・・・ LD,MOV、ST
制御、ジャンプ命令 ・・・ JMP,CALL、RET
入手出力命令 ・・・ IN、OUT
割り込み命令 ・・・ ENI,DII,PUSH、POP
演習:C言語とマシン語 プログラムの作成
プログラムの作成と保存
保存先とファイル名
演習:C言語とマシン語 コマンドプロンプトの利用
カレントディレクトリをプログラム保存先へ移動する。
Visual Studio 2010 コマンドプロンプトの起動 [スタート]→[すべてのプログラム]→[Microsoft Visual Studio 2010]
→[Visual Studio Tools]→[Visual Studio コマンド プロンプト]
>H: >cd Documents¥Software
16
演習:C言語とマシン語 コンパイルと実行
←---コンパイル
←---実行
演習:C言語とマシン語 ダンプ
←---ダンプ(16進表示)
演習:C言語とマシン語 アセンブリ言語
1) 実行形式ファイルHelloWorld.exeを逆アセンブルし、その結果をファイルに保存する。
2) 保存した逆アセンブルファイルを秀丸で開く
17
オペレーティングシステム
OSの誕生: 1950年代
一つのプログラムが終了すると
人手を使って次のプログラムを実行していた。
手間がかかる、時間がかかる
高価な機械を低い効率で利用するのは、不経済
プログラムの監視、自動ロード、自動実行
複数のプログラムを順番に実行するために
OSの役割
処理の効率を高め、コンピュータを経済的に利用できようなサービスを提供するソフトウエア
様々なプログラムが共通で利用するプログラムを提供することによって、プログラム開発を効率化する
18
入出力制御プログラム
OSの役割:使いやすくする
ワードプロセッサ
キーボード制御 ディスプレイ制御 ディスク制御
電子メール Webブラウザ
OSの役割:資源管理
メモリ 入・出力装置
磁気ディスク
プログラムA プログラムC プログラムB
資源の取り合い
資源分配・信頼性保証
OS: プロセス管理
時間
running
running
running プロセスA
プロセスB
OS
ready ready
ready running wainting
wainting
running
ready
ready
プロセスまたはタスク:プログラムの実行単位
タ イ ム ス ラ イ シ ン グ
プロセススイッチ
マルチタスクの例
19
OS:データ管理(ファイルシステム)
異なる装置の違いを「ファイル」として利用できる
名前(ファイル名)でアクセス
ディレクトリ(もしくはフォルダ)による階層によるファイル管理
OS:メモリ管理
プロセス毎に適正配分
プロセスが終了したときの、メモリ開放と再配分
仮想記憶
容量が足りない。補助記憶装置を活用する。
メインメモリの容量は有限!
参考
赤木、荒、石井、ほか「情報処理の基礎と演習 第2版」 共立出版
柴山潔「改訂新版コンピュータアーキテクチャの基礎」 近代科学社
講義「情報処理概論及演習」第14週補助資料
作成日 2 July 2012
作成者 保坂修治