はじめまして。今年の新卒でatomitechに入社したid:hiro-tamakiです。
先週の金曜日に、O'REILLY社から出版されている『コンピュータシステムの理論と実装』の勉強会を開催しました。ここでは、そこで扱った内容と次回の勉強会の宣伝を書いていきます。
本記事の目次
本の概要
『コンピュータシステムの理論と実装』は、コンピュータの仕組みを学べる本です。コンピュータはハードウェアとソフトウェアで構成されており、それらの基礎的な内容を扱っています。
この本の魅力は何といっても、実際に自分でコンピュータを作れるところにあります!
作れるといっても、電気部品を買ってきて、はんだこてでそれらをくっつけて。。。。。。という作業はしません!
つまり、物理的にコンピュータを作るのではなく、PC上でコンピュータを仮想的に作っていきます。
この本1冊分のお値段でコンピュータを作ることができ、さらにコンピュータの仕組みも学べるので、なんともお手頃です。
勉強会の目的と流れ
この勉強会では、ハードウェア(HW)とソフトウェア(SW)の基礎的な内容を身に着けることを目的としています。
そのため、私のようにコンピュータ全体の知識がほとんどない方であったり、HW or SWどちらかの基礎的な知識を身に着けたい方が、対象となっています。
また、この勉強会では、最後にあの有名ゲームtetrisを作ります。ですので、tetrisを作りたい方も対象です。
全体的な勉強会の流れは、ハードウェアの学習 → ソフトウェアの学習 → tetrisの作成となっています。
第1回勉強会の内容
先週の第1回勉強会で扱った内容について、書きます。
この本は、ハードウェア→ソフトウェアの順で進めていきます。先週は、ハードウェアについて学習しました。
コンピュータでは、0と1の2つのラベル(2進数)を使って情報処理されています。ですので、コンピュータの動作をしっかり理解しようと思うなら、この2進数の学習をする必要があります。
ブール関数
数学では、2進数のような2つのラベルを用いて議論される分野をブール代数といいます。ブール代数で特に重要となってくるのが、ブール関数です。
10進数の関数では、四則演算が基本となって、さまざまな計算式はこの四則演算によって構成されます。2進数の関数(ブール関数)でも、これに対応する基本的な関数があります。それが
- And関数
- Or関数
- Not関数
です。一般的なブール関数は、この3つの基本関数で構成されることになります。また、And関数とNot関数を組み合わせた関数をNand関数といって、実は上の3つの基本関数はNand関数だけで表すことができるんです。
つまり、一般的なブール関数はNand関数だけで表現できることになります!
論理ゲート
2進数の関数(ブール関数)を物理的に実現した装置を、論理ゲートあるいは単にゲートと呼びます。
先の一般的なブール関数はNand関数だけで表現できることから、一般的なゲートはNandゲートだけで作ることができるということになります!
余談。。。
この本は、別名「nand2tetris」と呼ばれています。2は"to"のことで、全体的な意味は "nandゲートからtetrisへ" です。つまり、この本ではnandゲートからスタートして、さまざまなハードウェア装置を作り、最後にtetrisを作るコンセプトになってます。
複合ゲート
基本ブール関数に対応した(論理)ゲートを基本(論理)ゲートといいます。そして、基本ゲートを複数組み合わせて作られるゲートを複合ゲートと呼びます。
勉強会では、さまざまな複合ゲートを作っていきます。
HDL と ハードウェアシミュレータ
PC上で仮想的な回路を作るために必要なツールとして、HDLとハードウェアシミュレータがあります。
HDLは、Hadware Description Language(ハードウェア記述言語)の略で、作りたい回路の内容を記述するための言語です。
ハードウェアシミュレータは、HDLで作った回路が正しく動くか否か確認するためのツールです。
勉強会の作業
HDLを使って、基本ゲートと複合ゲートを制作
↓
シミュレータで動作確認
第1回目勉強会の資料
第1回勉強会の資料を載せおきます。ご興味のある方は、ご確認ください。
勉強会について
先週の勉強会は、ハンズオン形式(各自でパソコンを用意して、実際に手を動かして学習する形式)で行われました。
流れとしては、前半に必要な知識の説明、後半に各自で作業という形でした。下に、それぞれの画像を載せておきます!
宣伝
勉強会は、毎週金曜日の19時頃から開催していく予定です。ハードウェアもしくはソフトウェアの基礎的な部分の学習をしたいという方は、是非ご参加ください!詳しくは、下のリンクをご覧ください。
第2回目では、算術演算と論理演算を処理する回路ALUを作っていきます!