第3回まで無料

コンピュータの仕組み入門コース

ビットの並びから、arm64 アセンブリ・キャッシュ・ページング・fork と exec・スレッドと排他制御・ファイルディスクリプタとバッファリングまで。全30レッスンで「遅い・落ちる・数が合わないの原因を、自分で測って突き止められる」ところまで進みます。アドレスも実行時間もアセンブリも、すべて実際に走らせた出力を載せています。

カリキュラム

全30レッスンを6つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ C・アセンブリ・シェルはブラウザ内で実行できないため、手元のターミナルで試してください。本文の出力は Apple M1 Max(arm64)・macOS・clang 21 での実測値です。アセンブリは arm64 で、x86-64 とは命令名が違いますが考え方は同じです。ビット演算や浮動小数点の回は、ブラウザでそのまま動く Python も置いてあります。

Chapter 1 — 数と表現(第1〜4回)

0 と 1 の並びが、整数にも小数にも文字にもなるところを、実際のメモリのバイト列で確かめます。エンディアン・桁あふれ・浮動小数点・UTF-8 を、すべて手元の機械の出力で見ていきます。

Chapter 2 — CPU(第5〜10回)

書いた C が、どんな命令の並びになるのかを clang -S で取り出して読みます。レジスタ・分岐・関数呼び出し・最適化・分岐予測・システムコールまで、arm64 の実物で進みます。

Chapter 3 — メモリ(第11〜16回)

アドレスを印刷して、コード・ヒープ・スタックの地図を描きます。キャッシュとページングの効き方を実測し、最後は mmap でファイルをメモリとして読みます。

11

アドレス空間の地図を描く

コード・文字列・大域変数・ヒープ・スタックが、それぞれどのあたりに置かれるのかを実際のアドレスで確かめる。毎回変わるのはなぜか。

🔒 ベーシック
12

スタックとヒープ(寿命の違い)

同じ「メモリ」でも、勝手に消えるものと、返すまで残るものがある。ローカル変数のアドレスを返す間違いを、アドレスの桁から見抜く。

🔒 ベーシック
13

malloc は OS から何を借りているのか

malloc(1) が 16 バイト返す理由。free しても OS には返っていないこと。vmmap で「100MB 確保して 16KB しか使っていない」ところを見る。

🔒 ベーシック
14

キャッシュ(読む順番だけで 8 倍変わる)

同じ要素を同じ回数だけ足すのに、行に沿うか列に沿うかで 8 倍。とび幅を変えて、キャッシュラインの大きさを実測で言い当てる。

🔒 ベーシック
15

仮想メモリとページング(ページフォルトを数える)

64MB 確保しても物理メモリは減らない。全ページを 1 バイトずつ触って、フォルトがちょうどページ数だけ起きることを数える。

🔒 ベーシック
16

mmap でファイルをメモリとして読む

read も fread も呼ばずにファイルを数える。ページ単位で必要なところだけ運ばれる仕組みと、mmap が向かない場面。

🔒 ベーシック

Chapter 4 — プロセスとスレッド(第17〜22回)

fork で 2 つに分かれ、exec で中身が入れ替わるところを動かして確かめます。切り替えの値段を測り、競合状態を実際に起こして、守る方法の値段まで比べます。

Chapter 5 — ファイルと入出力(第23〜27回)

ファイルディスクリプタがただの番号であることから始めて、バッファリングの 25 倍の差を測ります。最後は dup2 でシェルのパイプラインを自分で組み立て、1 本のスレッドで複数を待つところまで進みます。

Chapter 6 — 仕上げ(第28〜30回)

カーネルが何を守っているのかを、止められる側から確かめます。コンテナが何を分けているのかを整理し、最後に 30 回ぶんを 1 本の線につなぎます。

ここで見た仕組みをコードで使いこなすなら C 言語入門コース、コマンドでサーバーを触るなら Linux 入門コース、試験の下地として用語を広く押さえるなら IT 基礎入門コース へ。メンバーシップで全コースが解放されます。