1. 数学と論理学
0と1の電気で計算ができるまで
- アラビア数字 ⇨ 大量の数を表現
- 論理学 ⇨ 論理を数式で表す
- 工学 ⇨ 電気のON/OFFで計算可能に
(1) アラビア数字(数学)
- コンピュータの歴史は計算の歴史 ⇨ 内部で0と1の計算をしているに過ぎない
- コンピュータは元々、職業(計算手)を指していた
compute : 計算をする
er : 〜する人
数 : モノの集合を表す概念
数字 : 数を表す記号
-
数(概念)を簡単に表せる数字(手段)が発明されたから
⇨ アラビア数字は計算しやすく、大きな数を表しやすい -
コンピュータも数を数えることで絶大な力を発揮(内部で高速に計算をしている機械)
(2) ブールの論理演算(論理学)
-
論理学とは? ⇨ 正しい推論とは何か?
※すでに知っていることから、知らないことを導く -
論理演算とは? ⇨ 数学と論理学をミックスさせた計算方法
-
命題 : 真か偽を判定できる文章のこと ⇨ 命題の審議の結果を計算として扱う
-
AND, OR, NOTの3種類の演算
AND演算(✖️) :命題が2つとも真なら、真
命題X | 命題Y | 結果 |
---|---|---|
真 | 真 | 真 (真 × 真 = 真) |
真 | 偽 | 偽 (真 × 偽 = 偽) |
偽 | 真 | 偽 (偽 × 真 = 偽) |
偽 | 偽 | 偽 (偽 × 偽 = 偽) |
※ 真『1』偽『0』へ ⇨ 裏で真偽の計算を行なっている
命題X | 命題Y | 結果 |
---|---|---|
1 | 1 | 1 (1 × 1 = 1) |
1 | 0 | 0 (1 × 0 = 0) |
0 | 1 | 0 (0 × 1 = 0) |
0 | 0 | 0 (0 × 0 = 0) |
OR演算(➕) :どちらか一方が真なら、真
命題X | 命題Y | 結果 |
---|---|---|
真 | 真 | 真 (真 + 真 = 真) |
真 | 偽 | 偽 (真 + 偽 = 偽) |
偽 | 真 | 偽 (偽 + 真 = 偽) |
偽 | 偽 | 偽 (偽 + 偽 = 偽) |
※ 真『1』偽『0』へ
命題X | 命題Y | 結果 |
---|---|---|
1 | 1 | 1 (1 + 1 = 1) |
1 | 0 | 1 (1 + 0 = 0) |
0 | 1 | 1 (0 + 1 = 0) |
0 | 0 | 0 (0 + 0 = 0) |
NOT演算(➖) :1つの命題を対象とし、真と偽を逆に
命題X | 結果 |
---|---|
真 | 偽 |
偽 | 真 |
『人間の思考を数学で表そう』という取り組みは、最終的には1と0だけの表になった
2. 電気回路,2進数
(1) 電気を使って論理演算を実現
- AND, OR, NOT演算を電気回路に置き換えると
⇨ 電気が流れている時を1(ON)
電気が流れていない時を0(OFF)
AND演算
命題X | 命題Y | 結果 |
---|---|---|
1 | 1 | 1 (1 × 1 = 1) |
1 | 0 | 0 (1 × 0 = 0) |
0 | 1 | 0 (0 × 1 = 0) |
0 | 0 | 0 (0 × 0 = 0) |
すごいこと
- 電気を『情報を表すモノ』として用いた
- 工学の世界に論理学をミックスさせた
電気は『エネルギー』に利用される
身の回りの電化製品は電気を動力源として動く
⇨ 電気のON/OFFを『情報』として発送を転換
XOR回路を電気回路で実現
- AND, OR, NOT回路だけでなく、2進数で計算をするときに使われる回路
⇨ どちらか一方が真の時だけ、結果も真
(2)論理演算を使って、四則演算を実現
- 加算回路(加算 = 足し算)
① 半加算器 : half adder 一桁同士の足し算(1 + 1 = 10)
半加算器で出来る計算の組み合わせ
例)
- 1 + 1 = 10
- 1 + 0 = 1
- 0 + 1 = 1
- 0 + 0 = 0
⇨ 実際に電気回路を作って、計算の答えた合うか確認
② 全加算器 : full adder 二桁同士の足し算(10 + 1 = 11)
⇨ CP内部では010101001を計算している。実際に使われるのが多いのは全加算器
- 掛け算:足し算の繰り返しで実現
⇨ 2×3 は 2を3回加算する - 割り算:引き算の繰り返しで実現
⇨ 10×2 は 10から2を何回引けるかカウント
(3) シャノンの情報理論(工学)
- コード化:情報を短縮させる
- 0と1が情報の最小単位である!
⇨ どんなに長い情報でも、0と1でコード化すれば簡単に表せる
①なぜ0と1が情報の最小単位?
- 0と1の『2通りの変化』より、単純にすることはできない
②なぜ画像や動画、音声などたくさんのデータが扱えるのか?
- 全ての情報を『0と1』に対応させる
※ ビット(bit) ⇨ 二進数の一桁 = 『0か1』のこと ⇨ 2通りの情報を表すことができる
- 1を捨てると、0だけでは何もできない ⇨ 0と1を組み合わせば無限に対応ができる
※ 情報の基本単位: バイト bite:一口、一噛み
⇨ コンピータが一口で齧れるデータ量
1バイト = 8バイト ⇨ アルファベット1文字が8ビットだから
- 16進数 ⇨ 『2進数の4桁』と『16進数の1桁』はピッタリ一致する
1~15を表す方法
10進数 | 16進数 | 10進数 | 16進数 |
---|---|---|---|
1 | 1 | 16 | 10 |
2 | 2 | 17 | 11 |
3 | 3 | 18 | 12 |
4 | 4 | 19 | 13 |
5 | 5 | 20 | 14 |
6 | 6 | 21 | 15 |
7 | 7 | 22 | 16 |
8 | 8 | 23 | 17 |
9 | 9 | 24 | 18 |
10 | A | 25 | 19 |
11 | B | 26 | 1A |
12 | C | 27 | 1B |
13 | D | 28 | 1C |
14 | E | 29 | 1D |
15 | F | 30 | 1E |
31 | 1F | ||
32 | 20 | ||
33 | 21 |
- 16進数を使うメリット
10進数 | 2進数 | 16進数 |
---|---|---|
1 | 1 | 1 |
2 | 10 | 2 |
4 | 100 | 4 |
8 | 1000 | 8 |
16 | 10000 | 10 |
32 | 100000 | 20 |
64 | 1000000 | 40 |
128 | 10000000 | 80 |
256 | 100000000 | 100 |
※2進数が4桁上がると、16進数は1桁上がる!
- n進法 : n種類の数字を使って数を表す方法
- n進数 : n進法を使って表された数字
(4) 二進数を使ったデータの表現方法
-
アナログとは? ⇨ 流れつづける現実の情報をそのままの形で表したもの
-
デジタルとは? ⇨ 流れつづける現実の情報を区切って、飛び飛びで表したもの
-
コード化(符号化) ⇨ 本来数値でない情報を数値に置き換える
3. CPU, メモリ, I/O
(1)コンピュータの5大装置
CPにできることは5つだけ
5つの機能を組み合わせて目的のプログラムを作っている
- 入力 ⇨ 外部からデータを入力(キーボードやマウス)
- 出力 ⇨ 処理したデータを出力(ディスプレイ、プリンター)
- 演算 ⇨ 演算装置は計算しかできない
- 記憶 ⇨ メモリのこと
※演算装置で計算をするには記憶装置に入ったデータを持ってこないと行けない - 制御 ⇨ 制御装置が全体の動きをコントロール
(2)ICUの仕組み
- IC ⇨ 電子部品で作られた論理回路や演算回路
※ ICがたくさん集まることによってCPU:演算・制御装置、メモリ:記憶装置を実現
(3)CPUの4つの機能
- CPU ⇨ 全てのデータを処理し、全体の動きをコントロール
- CPU : 4つの部品 ⇨『演算+制御』 ①演算装置 ②レジスタ ③制御装置 ④クロック
①演算装置 ⇨ 0と1の数字を計算して情報を処理する
※ 計算の対象となるデータはやり取りできない
②レジスタ ⇨ 『CPUの中で』命令やデータを記憶する役割
※ レジスタにあるデータしかCPUは処理できない
- レジスタの特徴
1.必要なデータへ一瞬でアクセスできる
2.メモリに比べて保存量は少ない
③制御装置 ⇨ データのやり取り、演算装置への指示
- 制御 ⇨ データのやり取り メモリ、CPU、レジスタ間でデータをやり取り
④クロック ⇨ 一定の間隔で信号を出して、作業のタイミングを合わせる CPUにおいて異なる処理を同期させるための信号
- 動作周波数:Hz クロック信号が1秒間に何回出るか、何回電気信号ができたかを表す
※ 6Hz:1秒間に6回クロック=1秒間に6回命令できる
⑤RAMとROM
- メモリ:データを保管する場所
- ROM:データを保存するだけで、それ以外の作業はできない(読み込み専用)
- RAM:データを読み書きするための作業机
⑥SRAMとDRAMの違い
- SRAM ⇨ 電源がONなら時間がどれだけ経過してもデータを覚えていられる
※ 静的=何もする必要がない - DRAM ⇨ 時間の経過とともにデータが消えてしまうので定期的に上書きする必要がある
コンピュータのメインメモリで使われる
※ データの上書き=リフレッシュ
⑦マスクROMとPROM
- マスクROM ⇨ 製造時にデータが書き込まれ、書き換えできないメモリ
- BIOS ⇨ コンピュータのハードウェアを制御するソフト
- PROM ⇨ ユーザがデータを書き込めるようにしたROM
※ 一度だけしか書き込めないタイプと何度でも消して書き込めるタイプの2種類ある
⑧メモリICの物理てきな仕組み
- メモリIC ⇨ メモリを形作っている小さな部品 メモリを構成する最小単位
※ メモリICに格納されたデータを扱うことがエンジニアの仕事だから - 処理の対象となるデータはメモリに入っている ⇨ プログラムを書くことはメモリを操作しているのと同じこと
⑨メモリICの物理的な仕組み
- データ型 ⇨ どのような種類のデータを格納するかを示すもの
- データ型を使えばメモリーの特定領域を確保してくれる
char: 1バイト
short: 2バイト
long: 4バイト
⑩I/O
- I/O ⇨ Input,Outputの略 外部とデータをやり取りするための仕組み
- I/O ⇨ CP本体と周辺装置を繋ぐための装置
4. 処理の流れ
①メモリICへの記憶
- パス: CPUやメモリ、I/O同士をそれぞれ結ぶ役割
②CPUの処理の流れ
【3ステップ】1+2=3
メモリからデータを持ってくる ⇨ CPUがデータを処理する ⇨ 結果をメモリに返す
↓
1と2のデータを持ってくる ⇨ 1+2の計算を処理する ⇨ 3という結果を返す
CPUができる処理
- メモリの値をレジスタに記憶
- レジスタの値をメモリのアドレスに記憶
- レジスタの間で演算を行い、結果をレジスタに記憶
③レジスタの種類
- 汎用レジスタ ⇨ 計算に必要なデータを格納 色々なデータを保存することができる
- 命令レジスタ ⇨ 命令(どんな処理をすればいいか?)そのものを格納
- プログラムカウンタ ⇨ 次に実行する命令を管理するレジスタ CPUが1つの命令を実行するとプログラムカウンタが1つ増加
- フラグレジスタ ⇨ 直前に実行した演算の結果が+、ー、0のいずれかになったかを記憶
- ベースレジスタ ⇨ データのメモリの領域の先頭のアドレスを確認
- スタックレジスタ ⇨ 1次記憶に利用するメモリのアドレスを記憶
5. コンパイラ
①コンパイラとは? ⇨ CやJavaなどで書かれたプログラムを0と1の機械語に変換する作業
- コンパイル : 作業
- コンパイラ : ソフトウェア
- ソースコード : プログラミング言語で書かれた文章のこと
- オブジェクトコード : 翻訳された機械語の文章のこと
②機械語とは? ⇨ コンピュータが直接理解して、実行できる言語
- 低水準言語 : 機械語に近いプログラミング言語
- 高水準言語 : 人間の目線に近いプログラミング言語
- アセンブリ言語 : 機械語に1対1で対応したプログラミング言語
⇨ CPUが違えば、異なるアセンブリ言語が必要に アセンブリはCPUに依存した言語
③高水準言語の特徴
- 人間にとってわかりやすいこと
- 同じ1つのプログラムをほぼ全てのCP上で動かせる
※ IntelやARMなどのCPUの種類が違っていても同じ1つのプログラムで動かすことができる - コンパイラ、インタプリタ : 高水準言語の翻訳ソフトウェア
⇨ 環境構築はコンパイラ、インタプリタの準備
④アセンブリ言語
- アセンブリ言語 : 機械語と1対1の関係にある低水準言語
- アセンブリ : 機械語と1対1で対応する言語
- アセンブラ : 機械語に変換するソフトウェア
- アセンブル : 機械語に翻訳する作業
⑤コンパイラ、インタプリタ
- コンパイラ : 1行ずつ翻訳
⇨ 一括翻訳方式 : コードを全て機械語に翻訳
⇨ 実行速度が速いできるが全体を読み込まなければいけない手間がかかりエラーを見つけにくい不便さ - インタプリタ : 全体を翻訳
⇨ 逐次翻訳方式 : コードを1行ずつ機械語に翻訳
⇨ プログラムをすぐに実行できるが実行に時間がかかる
⑥コンパイラの流れ
『ソースコード』 ⇨ 『字句解析』 ⇨ 『構文解析』 ⇨ 『中間コード』 ⇨ 『最適化』
⇨ 『コード生成』 ⇨ 『機械語』
-
字句解析 : ソースコードをバラバラにする作業 ⇨ プログラムを構成するトークン(最小単位)に分割
-
構文解析 : バラバラにされた単語を分析してどのように構成されているか調べる ⇨ 構文木を用いてチェックを行う
-
中間コード : ソースコードから機械語へ変換される過程で一時的に作られるコード
6. OSの仕組み
①OSの位置付け
- OS : Operating System ⇨ CPを支える土台となるソフトウェア