10月5日(木)に開催された「技育CAMPアカデミア -Vol.03」においてデベロッパーエキスパートの三村 聡志が登壇し「コンピュータの仕組みを知ろう」というタイトルで勉強会を開催しました。勉強会では、普段あまり気にしないようなコンピュータ内のデータの保存の仕組みからOSの仕組みまでを紹介しました。イベント告知: https://developers.gmo.jp/37769/
登壇者
GMOインターネットグループ デベロッパーエキスパート三村 聡志(@mimura1133 / 親方)
実際に動いているものを見てコンピュータの見方を広げる
今回の勉強会では「実際に動いているものから仕組みを知る」ということにフォーカスを当てました。いくつか勉強会の資料のスライドを用いて説明します。
たとえば「コンピュータが『0』『1』の2つの値の組み合わせで動いている」という話は、学校の技術の教科書にも掲載されているほど、コンピュータの説明としてよく登場する話です。
では、実際にどういう信号が「0」と「1」になっているのでしょうか。下記の右下の図を見てみましょう。よく見ると波形が表示されていることに気づきます。
この波形は、左の図の装置で記録した実際の通信データであり、実際にUSBキーボードの通信を記録したものになります。
コメントを入れて読みやすくしたものが下図になります。(上図で掲載の波形とは少々異なります)
色々とアルファベットが書き込まれていて複雑になってきました。もちろん、今回の勉強会では、このような波形を読めるようになる事はゴールとはしていません。
今回の勉強会では「実際にはこういうことが起きている」とか「教科書に載っているような理想との差(たとえば波形が矩形波ではないということ)がある」ということを知ること、そしてこのような基礎技術の存在を知り見方を広げることが今回の勉強会の大きなテーマでした。
身近なものから高度な技術まで
今回の勉強会では下記の4テーマに触れて進めました。このうち後半の3テーマについて順を追って説明します。
2進数・「0と1」ファイルの中身(フォーマット)プログラムの動く仕組みOSの仕事
ファイルの中身(フォーマット)
ファイルの中身をバイナリエディタを用いて開きその特徴を調べました。
まず Bitmap ファイル (BMP) の場合。(ここでは分かりやすくするために 24bit フルカラーのファイルを用います。)下図に示すように、光の三原色がそれぞれ 1バイト (=8bit) で表現されていること、また書き換えるとその部分がそのとおりに色が変わることを紹介しました。
またファイルによっては特徴的なデータ列 (magic) が含まれる場合や、文字列として中身が見える場合などがあり、そのような特徴がファイルによって存在することを確かめました。
プログラムの動く仕組み
ここでは nasm を用いて、実際にアセンブル・および逆アセンブルを実施して、簡単なプログラムの作成と解析を行いました。
高度なプログラムも簡単な操作を複数組み合わせることで成り立っていること、そしてもちろん現在のPCで動作するプログラムも基本的な考え方は同じであることを紹介しました。
OSの仕事
ハードウェアの抽象化・リソース管理・スケジューリングについてこれまで話をしてきたことを組み合わせながら説明を行いました。
OS側でケアをすることにより、機器毎の違いをアプリケーションの開発者が気にしなくてもよくなっていること、複数のプログラムを起動しても動いていることなどを実例を交えて説明を行いました。
さいごに
今回の内容は1時間としてはとても濃い内容になっていたと思います。また演習環境の準備の関係上、勉強会の時間内では手を動かせなかったかたもいると伺っています。
いくつかの準備不足等はありましたが、資料は参加者のみなさんには公開していますので、少しでも興味関心が湧く所やもう少し掘り下げてみたいと思える場所が今回の内容から見つかれば嬉しいと思っています。