Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Phase 1.5 | Week 8: コンピューターが動く仕組み | プロジェクト・ミーミル

Phase 1.5 | Week 8: コンピューターが動く仕組み | プロジェクト・ミーミル

コンピュータが動く仕組みを、NAND ひとつから CPU、そしてプログラム実行までを一本の流れでたどる社内勉強会の資料です。

論理ゲート(NAND → Not/And/Or → 加算器 → ALU)、2の補数で引き算を加算器に使い回す理由、レジスタ・RAM・プログラムカウンタによる記憶と「次にどこを実行するか」、CPU のフェッチ→デコード→実行ループ、そして高級言語がコンパイル/インタプリタで機械語になるまでを順番に積み上げます。

ねらいは、断片的に覚えた基礎をひとつの流れにつなぎ、各段階の「なぜ」を自分の言葉で説明できる状態にすること。CPU・メモリ・翻訳の仕組みが分かれば、特定の言語経験は必須ではない、という見方に着地します。

この回は Phase 1.5 として、Phase 2 へ進む前に Phase 1 の基礎が足りていないメンバーに受けてもらう補講という位置づけです。

▼ プロジェクト・ミーミルとは
TLE(テックリードエンジニア)および技術面接官の育成を目的としたプログラムです。コンピュータ・ネットワーク・Web の基礎を体系的に学び直し、暗記ではなく「なぜそうなっているか」を自分の言葉で説明できる状態を目指します。週1回の勉強会で基礎から専門領域までを順番に扱い、技術面接で候補者の力を原理から正しく評価できる面接官を育てます。

More Decks by Hiroyuki Masuda (hiro8ma)

Transcript

  1. 今日のゴール 1. コンピュータの動作を NAND から CPU・実行まで順番に 説明できる 2. 各段階の「なぜ」を 1文で

    言える(覚えるのでなく、説明できる) 3. CPU・メモリ・コンパイラが分かれば、特定の言語経験は必須でない を理解する → バラバラに覚えていた基礎を、ひとつの流れにつなぐ プロジェクト・ミーミル | Phase 1.5 2
  2. 今日の全体像 NAND → Not/And/Or/Mux → 半加算器→全加算器→加算器→ ALU → DFF→レジスタ→RAM→ プログラムカウンタ(PC)

    → 機械語→ CPU(フェッチ→デコード→実行) → 高級言語→ コンパイル/インタプリタ ポイント①:論理回路は、すべて NAND という部品から作れる ポイント②:計算する部分も、記憶する部分も、同じ部品の組み合わせ → 前で作ったものが、次の段階の材料になる プロジェクト・ミーミル | Phase 1.5 3
  3. ① 論理ゲートと ALU 問い:「足し算の回路って、どう作られている?」 NAND → Not / And /

    Or → 半加算器(和と桁上げ) → 全加算器(桁上げを受け渡す) → 多ビット加算器 → ALU NAND 1種類から Not/And/Or が作れる それを組むと加算器ができ、論理演算を足したのが ALU → 計算は、ゲートの組み合わせでできている プロジェクト・ミーミル | Phase 1.5 5
  4. ② 2の補数 問い:「−5 を符号付き2進数(8bit)で? 引き算回路ってある?」 惜しい答え:先頭に1を立てる 1000 0101 → 補数になっていない

    ポイント:ビット反転して +1 5 = 0000 0101 → 1111 1010 → +1 1111 1011 最上位は符号でなく −128 の重み なぜ補数? ① の 加算器1個を引き算にも使い回す ため( a−b = a+(−b) ) 掘る型: 「先頭1=マイナス方式だと何が困る?」→ +0/−0 が二つ/加算回路が使えない プロジェクト・ミーミル | Phase 1.5 7
  5. ③ レジスタ・RAM・PC 問い:「計算した値や"次に実行する場所"はどこに覚える?」 DFF(1bit)→ レジスタ → RAM:記憶=前の状態を次クロックまで保つ プログラムカウンタ(PC):次に実行する命令アドレスを持つ(毎クロック+1) コンテキストスイッチでレジスタを退避するのは、CPU のレジスタが

    1組だけ だ から スタック:呼ぶたびフレームを積む・戻り先も退避。積みすぎ=SOF 掘る型: 「スレッド切替時、計算途中の値はどこへ?」→ レジスタをメモリに退避 プロジェクト・ミーミル | Phase 1.5 9
  6. ④ 機械語と CPU の実行ループ 問い:「CPU は1クロックごとに具体的になにをしている?」 PC の指す命令を取る(フェッチ) → 解釈する(デコード)

    → ALU で計算 / メモリ読み書き(実行) → PC を更新 → くりかえし 命令の種類の集まり=命令セット ①の ALU・③のレジスタ/PC が、ここで全部噛み合う 掘る型: 「"プログラムを実行する"を一番下まで分解すると?」 プロジェクト・ミーミル | Phase 1.5 11
  7. ⑤ コンパイル / インタプリタ 問い:「Go や TypeScript は、どうやって④の機械語になる?」 コンパイラが高級言語を機械語に翻訳(インタプリタは1行ずつ解釈・実行) CPU

    が分かるのは結局 ④の機械語だけ → だから CPU・メモリ・翻訳の仕組みが分かれば、言語経験は必須でない (Vue 経験者が React に乗れるのも、思想が分かれば同じ) 掘る型: 「経験言語が違う候補者をどう評価する?」→ 言語名でなく原理で見る プロジェクト・ミーミル | Phase 1.5 13