計算機学
計算機学
伊藤彰則
aito@spcom.ecei.tohoku.ac.jp
このスライドは以下のURLからダウンロード可能です
参考書の紹介
● 計算機学入門 デジタル世界の原理を学ぶ 阿曽弘具著 共立出版 ¥2,900 以前教科書だった本の改訂版。講義の内容と一致しており、説明は詳しい。 ● CPUの創りかた 渡波郁著 毎日コミュニケーションズ¥2,940 個人的おすすめだが講義の前半部分しかカバーしていない。 ● ソフトウェアの20世紀 長谷川裕行著 翔泳社 ¥2,400 コンピュータとソフトウェアの歴史。講義と直接の関連はないが面白い。 ● コンピュータはなぜ動くのか 矢沢久雄著講義の流れ
(1)
● イントロダクション(今回) – コンピュータの歴史 – 2進法・8進法・16進法 ● ハードウェアの原理 – 論理関数と論理回路 – 論理関数の簡単化 ● 論理関数の数学 – ブール代数と代数系講義の流れ
(2)
● ソフトウェアの原理 – CPUと機械語 – アセンブリ言語と高級言語 – データ構造とその操作 – 計算のモデルと計算量 ● 試験計算機(コンピュータ)とは何か
● 誰が何のために作ったのか。
● 計算機とは(原理的に)何なのか。
● 現在どのように使われているのか。
誰が:計算機をめぐる年表
● 17世紀 – ブレース・パスカル (1623-1662) ● 考える葦の人 ● 世界で初めて「計算機」 (calculator)を試作誰が:計算機をめぐる年表
● 17世紀 – ゴットフリート・ウィルヘルム・フォン・ ライプニッツ (1646-1716) ● 2進法の発明者 ● 「自動的に真なる概念を導くための計 算方法」を研究 ● 計算機も試作 ● ニュートンとは永遠のライバル誰が:計算機をめぐる年表
● 19世紀 – チャールズ・バッベジ (1791-1871) ● 2つの自動計算機械を設計 – 階差機関(Difference Engine) – 解析機関(Analytical Engine) ● でも完成しなかった…Babbageの解析機関
● 世界初の機械式計算機 – 加減乗除算 – あらかじめ決められた順序で 計算する – 結果の印字誰が:計算機をめぐる年表
● 世界初のプログラマ(Translator) – エイダ・オーガスタ・ ラブレス公爵夫人 (1815-1852) ● 詩人バイロンの娘 ● ド・モルガンに師事 ● チャールズ・バッベジを支援した ● 不遇な晩年誰が:計算機をめぐる年表
● 20世紀 – アラン・チューリング(1912-1954) ● 自動機械による証明についての理論的考察 ● 実際に計算をする「機械」を想定(チューリン グマシン) ● 計算の可能性についての理論を構築 ● 暗号解読器「コロッサス」の開発に参加 ● 不遇な晩年誰が:計算機をめぐる年表
● 20世紀 – エッカート&モークリー (UPENN) ● 世界初の(実用化された)電子 式コンピュータENIACを開発 ● 弾道計算に特化した計算機これが
ENIACだ
● 真空管17468本 ● コンデンサ10000 個 ● スイッチ6000個 ● ケーブルの接続 で実行を制御何のために?
● 正しい推論のため(ライプニッツ)
● 数表を作るため(バッベジ)
● 「計算」とは何かを考えるため(チューリング)
原理的に何なのか?
● 計算モデル:原理的に何が計算できるかを考える ための数学モデル – コンピュータを抽象化したもの – 速度やメモリ容量などの制約を考えない ● さまざまな計算モデル – チューリングマシン(TM) – ランダムアクセスマシン(RAM) – 帰納的関数チューリングマシン
● 仮想的な計算機械 by Alan Turing 0 ; B A = 1 = A + 2 ; F 状態 ヘッドランダムアクセスマシン
● 現在のコンピュータに近い – 計算部とメモリがある – メモリは必要に応じていくらでも大きい – どのメモリにアクセス(読み書き)するときにもかかる時 間は同じ(ランダムアクセス) 無限に大きいメモリ 計算部 12312番目のメモリの値と現在どのように使われているのか?
● 汎用の何でも機械として。 – 電話。 – ごはんの炊け具合を監視する。 – お部屋の温度をいい具合に調節する。 – 大きいお友達のゲーム。 – テレビを録画する。あるいはテレビそのもの。どのようにして実現されるのか?
コンピュータの実現のための階層
ソフトウェア アプリケーション MS-Wordとか
プログラミング言語 C, C++, Java, Ruby, Python, ...
OS Windows, MacOS, iOS, Linux, Android, ... ハードウェア CPU IA32, x86-64, ARM, MIPS, PowerPC, PIC, ...
論理回路 機能ブロック レジスタ、ALU、メモリ、... 論理ゲート AND, OR, NOT, ...
この講義では何をするのか
1.計算機の動作原理を理解するための論理回路の 理解(主に組み合わせ論理回路)。 (進んだ内容は「ディジタルコンピューティング」の範疇) 2.それに伴う論理演算・論理関数の理解。 3.計算機のネイティブな動作(機械語)の理解。 4.抽象的な計算機としての計算モデルの理解と、計 算量についての初歩的な理解。あらゆる計算が1と0で実現できる
● 10進法の数字⇔2進法の数字(1と0) ● 文字⇔数字 ● 文字列⇔数字列=数字 ● 画像⇔数字 ● 音声⇔数字 ● その他のデータ⇔数字計算機が行うすべての処理は
10進法、2進法、8進法、16進法
10進 2進 8進 16進 10進 2進 8進 16進 0 0 0 0 8 1000 10 8 1 1 1 1 9 1001 11 9 2 10 2 2 10 1010 12 A 3 11 3 3 11 1011 13 B 4 100 4 4 12 1100 14 C 5 101 5 5 13 1101 15 D 6 110 6 6 14 1110 16 E 7 111 7 7 15 1111 17 F10進・2進・16進数の変換
● 例題 – 108(10)を2進法で表せ。 ● 解答 – ある数xを2進数で表したとき、それが偶数ならば下1桁 は0、奇数ならば1になる。したがって2で割った余りを計 算すれば、2進数の最下桁が求まる。以下同様。 ) 2 108 ...0 2 54 ...0 2 27 ...1) )10進・2進・16進数の変換
● 例題 – 110010(2)を10進法で表せ。 ● 解答 – 2進数のn桁目だけが1である数は2n-1である。 したがって・・・ 110010 = 10 + 10000 2 1 = 2 24 = 16 2+16+32=5010進・2進・16進数の変換
● 例題 – 10110110010(2)を16進法で表せ。 ● 解答 – 16進数の1桁は2進数の4桁にそのまま対応する。ただ し下から割り当てていく。10110110010
2
B
5
5B2
演習
● 次の2進数を8進数と16進数で表せ。
0010 0100 0010 0110
● 次の10進数を2進数と16進数で表せ。
2進数の演算
● 加算 0+0=0, 0+1=1+0=1, 1+1=10 ● 減算 0-0=0, 0-1=-1, 1-0=1, 1-1=0 ● 乗算 0×0=0×1=1×0=0, 1×1=1, 1×10=10×1=10, 10×10=100, 10×11=11×10=110,...これらは「算術演算」と呼ばれる
2進数の演算
● どんなデータも0と1で表せる →すべての計算は01の列に対する関数で表現で きる ● 例 f (0101...)=001011.... f (00)=0 f (01)=1 f (10)=1 f (11)=1 入力の桁数が有限ならば入力 のパターンも有限 すべての入力に対して出力を基本的な論理関数(論理演算)
● AND演算(論理積) ● OR演算(論理和) 0⋅0=0 0⋅1=0 1⋅0=0 1⋅1=1x
⋅y , x y , x∧ y
2つの引数の両方が1の場合だけ1x
+ y , x∨ y
0+ 0=0 0+ 1=1 2つの引数の両方が0の場合だけ0基本的な論理関数(論理演算)
● NOT演算(否定) ● XOR演算(排他的論理和) ̄0=1 ̄1=0̄x , ¬x
x
⊕ y , x∨ y
0⊕0=0 0⊕1=1 1⊕0=1~
2つの引数が異なる場合だけ1 実はAND,OR,NOTで作れる組み合わせて作れる論理演算
● NAND演算 ● NOR演算x y
x
+ y
0+ 0=1 0+ 1=0 0⋅0=1 0⋅1=1 1⋅0=1 1⋅1=0論理演算の基本的性質
● 交換則(交換律)
● 結合則(結合律)
● 分配則(分配律)
● ド・モルガン則(ド・モルガン律)
x⋅y= y⋅x x+ y= y+x
x⋅( y⋅z)=(x⋅y)⋅z x+ ( y+ z)=(x+ y)+ z
x⋅( y+ z)=(x⋅y)+ ( x⋅z) x+ ( y⋅z)=( x+ y)⋅(x+ z)
論理演算の記述の優先順位
● 通常はAND演算をOR演算より優先して書く
(算術演算の記述法と同じ)
● 紛らわしい場合はカッコを使う
論理関数(論理演算)は何種類あるか
● 論理関数の引数の数を固定する →入力、出力ともに有限のパターンしかないので、 論理関数は有限個しかない ● 例:1変数論理関数は4種類 f 0(0)=0 f 0(1)=0 f 0(x)=0 f 1(0)=0 f 1(1)=1 f 1(x)=x f 2(0)=1 f 2(1)=0 f 2(x)=̄x f 3(0)=1 f 3(1)=1 f 3( x)=1論理関数(論理演算)は何種類あるか
● n変数関数の場合、入力のパターンは2n通り
● それぞれに対して、出力のパターンは0か1
入出力のパターン数=
2
2真理値表
● すべての入力パターンに対して出力を定義すれば 論理関数が定義できる →表にするとわかりやすい真理値表
(truth table)
x y x+y 0 0 0 0 1 1 1 0 1 x y x·y 0 0 0 0 1 0 1 0 0 x x 0 1 1 0AND
OR
NOT
真理値表
● 注意事項 – 引数(入力)のパターンは、その並びを2進数と見たとき に「だんだん増えていく」順番に記述するのが普通 – 対応関係が同じでも、思いついた順番に並べるのはよ くない! x y x·y 0 0 0 1 1 1 x y x·y 0 0 0 0 1 0 GOOD真理値表による証明
● 真理値表によってド・モルガン則を確かめてみよ
う。
x y x y x·y x+y x·y x+y x·y x+y
0 0 1 1 0 0 1 1 1 1
0 1 1 0 0 1 1 0 0 1
1 0 0 1 0 1 1 0 0 1
基本論理演算と論理関数
● AND, OR, NOT演算の組み合わせだけでどんな
論理関数でも作ることができる。 ● 証明:引数の数に関する数学的帰納法 – 引数1つの時 ● 引数1つの論理関数は前述の通り4種類しかない。 f 0( x)=0=x⋅̄x f 1(x)=x f ( x)=̄x
成立
基本論理演算と論理関数
– 引数n個のとき、引数n-1個では成立を仮定 ● 任意のn変数論理関数 – 次のn-1変数論理関数を考える – ここで次の式を考える:「x=0ならa、x=1ならb」 f (x1 , x2 ,…, xn) g0( x1 , x2 ,… , xn−1)= f (x1 ,…, xn−1 ,0) g1( x1 , x2 ,… , xn−1)= f ( x1 ,…, xn−1 ,1) ̄x a+ x b x a b xa xb xa+ab 1 0 0 0 0 0 1 0 1 0 1 1 x a b xa xb xa+ab 0 0 0 0 0 0 0 0 1 0 0 0基本論理演算と論理関数
● xnの値によって関数を切り替える – xn=0 ⇒ – xn=1 ⇒ ● 前ページの考察により、 ● 仮定よりg 0とg1はAND,OR,NOTのみで表せるの f ( x1,… , xn−1, xn)=g0( x1 ,…, xn−1) f ( x1,… , xn−1, xn)=g1( x1 ,… , xn−1) f ( x1 ,… , xn−1 , xn)=xn g0( x1 ,… , xn−1)+ xn g1( x1,… , xn−1)演習
● 分配律が成立していることを真理値表で確かめ
よ。
x⋅( y+ z)=( x⋅y)+ ( x⋅z) x+ ( y⋅z)=(x+ y)⋅(x+ z)
x y z xy xz y+z x(y+z) xy+xz
0 0 0 0 0 0 0 0
論理演算と論理素子
● ある論理演算を実現するための電子回路 (論理ゲート) ANDゲート ORゲート NOTゲートMIL記号
論理演算と論理素子
● ゲートの端にある○が「反転」を表す
NANDゲート NORゲート NOTゲート
等価な論理ゲート
● ド・モルガン律などによる = A B BNANDゲートは万能
● NANDゲートですべてのゲートの代用ができる = = = x⋅x=̄x x⋅y=x⋅yNANDゲートの実現例
● Diode-Transistor Logic (DTL) – 簡略化した回路図(実際はもう少し複雑) – DTLは遅くて消費電力が大きいので、実際にはあまり 使われない V+ V+ V+ V+ V+ V+ H L L H半導体でなくても論理ゲートは作れる
● リレーで作る論理ゲート
コイルに電流を流すと隣にある
スイッチがON/OFF
論理演算と論理回路
● 論理式⇔論理回路 ● 例Z
= ABBCCA
A B C Z演習
● 次の論理式に基づく論理回路を描け。S
= X⋅Y X⋅Y
C
= X⋅Y
?
X Y C S半加算器
● さっきの論理式の真理値表 X Y C S 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 X, Yを1桁の2進数、CSを2桁の2進数と見 C: Carry (桁上げ) S: Sum (和)桁の多い加算
● 2桁以上の2進数の加算をするにはどうする? – 桁上げを考慮⇒3つの2進数の和を計算しなければな らない – 3つの1桁の2進数 a,b,cを加算→2桁の2進数CS a b c C S 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0全加算器
(full adder)
発展
● 前ページの回路の入出力関係がその前の真理値 表と同じになっていることを確かめよう ● 2ページ前の真理値表を直接表現する論理式を考 えてみよう C= f (a , b , c) S=g (a ,b , c)桁の多い加算器
● 筆算と同じ要領(下から順に桁上げ)1111
+1111
---10000
1 1 1 1論理関数の設計
● これまでは論理式から論理回路を描いていた ● 本当にやりたいこと – 要求仕様(欲しい入出力関係)を実現する論理回路 ● やるべきこと – 要求仕様(真理値表)→論理式(関数)→論理回路 ● 問題点 – どうやって真理値表を満たす論理式を作るか – 真理値表を満たす論理式は1つではない どういう論理式を作ればいいか真理値表から論理関数へ
● 次の真理値表で表される論理式(論理関数)は? x y z f(x,y,z) 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1 0 1真理値表から論理関数へ
● 次の真理値表で表される論理式(論理関数)は? x y z f(x,y,z) 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1 0 1答えは唯一ではない
f =̄x y ̄z+ x ̄y z+ x y ̄z f = (x+ y+ z)( x+ y+ ̄z) (x+ ̄y+ ̄z)(̄x+ y+ z) (̄x+ ̄y+ ̄z) f = y ̄z+ x ̄y z真理値表から論理関数へ
● 論理関数への変換の考え方 – できるだけ機械的に変換できたほうがいい ● 真理値表から標準形論理式への変換 – できるだけ論理演算が少ないほうがいい ● 論理回路として実現した時の素子数が少ない – 低コスト、高速 ● 演算数が最小の論理式:最簡形論理式 ● 最簡形論理式の導出 – カルノー図 – クワイン・マクラスキ法基礎的な概念
● 基本的に積和形(論理積の論理和)で考える ● リテラル:変数または変数の否定 ̄y z+ x y ̄z リテラル ̄y z+ x y ̄z リテラル リテラル 項(積項)標準形論理式
● 積和標準形(主加法標準形) Sum-of-product – リテラルの論理積の論理和 – すべての項がすべての変数を含む – 同じ項は1回しか出てこない – 積和標準形の例 – 積和標準形でない例 f ( x , y , z)=̄x ̄y z+ x ̄y z+ x y ̄z f ( x , y , z)=̄y z+ x ȳz標準形論理式
● 和積標準形(主乗法標準形) Product-of-sum – リテラルの論理和の論理積 – すべての論理和がすべての変数を含む – 同じ論理和は1回しか出てこない – 和積標準形の例 – 和積標準形でない例 f ( x , y , z)=( x+ y+ z)(x+ y+ ̄z)(̄x+ y+ z) f ( x , y , z)=( x+ z)(̄x+ y+ z) f ( x , y , z)=( x+ z)(̄x y+ z)2つの標準形の関係
● どんな論理式でも、積和標準形と和積標準形の両 表で表現できる。 – 証明(変数の数による数学的帰納法) ● 1変数の場合は自明 ● k変数の場合に成立を仮定。 任意のk+1変数論理関数を考える 次のk変数関数を考える f (x1 , x2 ,…, xk+ 1) g0(x1 ,…, xk)= f ( x1 , x2 ,…, xk , 0) g1( x ,…, x )= f (x , x ,…, x ,1)2つの標準形の関係
● gをそれぞれ積和と和積標準形で表した論理式 ● 以前と同じ議論により、 g0( x1 ,…, xk)→ gSOP0 ( x1 ,…, xk), g0POS (x1 ,…, xk) g1(x1 ,…, xk)→ g1SOP( x1 ,…, xk) , g1POS (x1 ,…, xk) f (x1, x2 ,…, xk , xk+ 1)=xk+ 1 g0( x1 ,…, xk)+ xk+ 1 g1( x1 ,…, xk) =xk+ 1 g0SOP( x1 ,…, xk)+ xk+ 1 g1SOP( x1 ,…, xk) これを分配律によって展開すれば、fも積和標準形で表 せる。2つの標準形の関係
● 和積標準形の場合、まず次の関係を考える
x=0ならa、x=1ならbとなる論理式
● したがって
(x+ a)(̄x+ b)
x=0 →( x+ a)(̄x+ b)=(0+ a)(1+ b)=a⋅1=a x=1 →( x+ a)(̄x+ b)=(1+ a)(0+ b)=1⋅b=b f ( x1, x2 ,…, xk , xk+ 1)=( xk+ 1+ g0( x1 ,…, xk))( xk+ 1+ g1(x1,…, xk)) =( xk+ 1+ gPOS 0 ( x1,…, xk))( xk+ 1+ gPOS 1 ( x1,…, xk)) これを分配律によって展開すれば、fも和積標準形で表 せる。
標準形論理式と論理回路設計
● ある標準形は、1つの仕様(真理値表)に対して基 本的に1つしか存在しない 真理値表 一対一 標準形 論理式 一対一 論理回路 x y f(x,y) 0 0 0 0 1 1 1 0 1 1 1 0 ̄x y+ x ̄y真理値表から積和標準形へ
x y x・y x・y x・y x・y
0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 1 0 0 0 1 ● 最小項:すべての変数のリテラルを含む積項 ● ある入力の組み合わせの時だけ1になり、それ以外の組み合わせでは0になる。 x y f(x,y) 0 0 0 0 1 1 1 0 1 1 1 0 実現したい真理値表のうち、1になる組み合わせの最小項だけを OR で つなぐと積和標準形になる。 f (x , y)=̄x y+ x ̄y
真理値表から和積標準形へ
x y x+y x+y x+y x+y
0 0 0 1 1 1 0 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 ● 最大項:すべての変数のリテラルを含む論理和 ● ある入力の組み合わせの時だけ0になり、それ以外の組み合わせでは1になる。 x y f(x,y) 0 0 0 0 1 1 1 0 1 1 1 0 実現したい真理値表のうち、0になる組み合わせの最大項だけを AND でつなぐと和積標準形になる。
演習
● 次の真理値表による論理関数を積和標準形と和 積標準形で表せ。 x y z f(x,y,z) 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 0 1 1 0 1 0 1 1 0 1論理式の簡単化
● 標準形で表現した論理式は一般に冗長 x y f(x,y) 0 0 0 0 1 1 1 0 1 1 1 1 ̄x y+ x ̄y+ x y x ȳx y+ x ̄y+ x y=̄x y+ x ̄y+ x y+ x y =(̄x+ x) y+ x( y+ ̄y)=1⋅y+ x⋅1=x+ y
x y