コンピューターの頭脳ともいえるCPUが、どのようにプログラムを実行するのかについて、17歳のエンジニアであるレクシー・マティック氏が、独学で調べた知識を解説したウェブページを公開しています。

Putting the "You" in CPU

https://cpu.land/



「プログラムを実行するとどうなるか」について疑問を抱いていたマティック氏は、独学での学習を始めたものの、OSやCPUがどのように機能するかについて詳細かつ適切に解説するサイトは見つからなかったそうです。そこでマティック氏は、「自分自身で本当に良い学習リソースを作るべきだ」と考え、解説ページの作成に取り掛かりました。

PCでプログラムを実行する際、CPUは命令を順番に実行していく必要があります。しかし、CPUプロセッサは、一度に複数のプログラムを実行することができません。そこで、OSの中核を担うカーネルが、タイマーを使って多数のプログラムの中からプロセッサに割り当てるべきタスクを選択します。その結果、CPU内でプログラムは首尾一貫した孤立したユニットとして実行されていると見なされ、処理が進みます。

コンピューターを起動させると、カーネルはinitプログラムを起動します。initプログラムは、コンピューターのグラフィック環境をレンダリングするプログラムを起動し、その後、さらなる別のソフトウェアの起動を担当します。



別のプログラムを起動するためには、「forkシステムコール」を使って、プロセスのコピーを作成する必要があります。作成されたコピーは、メモリページがすべてコピーオンライト(COW)を導入しており、物理RAM内にメモリをコピーする必要がないため、非常に効率的だとされています。

initプログラムや、別のプログラムの起動プロセスにおいても、自分がforkシステムコールを用いてコピーされたプロセスであるかどうかのチェックが入ります。コピーされたプロセスだと確認された場合、「exec」と呼ばれるシステムコールを用いて、カーネルに現在実行中のプロセスを新しいプログラムで置き換えるように要求します。

置き換えられた新しいプログラムは「Executable and Linkable Format(ELF)」と呼ばれる実行ファイル形式に変換され、カーネルはそのプログラムをロードする方法と、新しい仮想メモリ内のどこにコードとデータを配置するかについての情報を見つけるために、ELFファイル内を解析します。プログラムが流動的にリンクされている場合、カーネルはELFファイルを適切に変換することもあるとされています。



その後、カーネルはプログラムの仮想メモリ内をロードし、該当プログラムを実行したまま、カーネル以外のOSが動作するのに必要な、ファイルシステムやファイル操作コマンドを実行する、ユーザーランドに戻ることが可能になります。マティック氏は、「この動作はCPUの命令ポインターを仮想メモリ内の新しいプログラムにおけるコードの先頭に設定すること」と述べています。

マティック氏によると、プログラムとCPUに関する正確な解説ページを作成するために、詳細な研究と推敲(すいこう)を3カ月にわたって繰り返したとのこと。解説ページの作成にあたっては、ChatGPTが使われましたが、マティック氏は「ChatGPTは私にたくさんウソをつき、ほとんどの情報は役立ちませんでした。しかし、一部の情報は問題の解決に非常に役立ちました」と述べ「大規模言語モデルの限界を認識しており、AIが間違った情報を生成することを知っている場合、ChatGPTはプラスに働く可能性があります」と述べています。

マティック氏に対しては「正確に記述された素晴らしい学習リソースです」との称賛の声が上がっています。これに対しマティック氏は「この解説を作成することで、自身の思考プロセスが明確になり、最初は理解したと思っていてもまだ理解ができていなかった部分の特定に非常に役立ちました」と反応しています。

マティック氏は「この解説を読んで、楽しんでいただければ幸いですし、誰もがCPUやプログラムについて学ぶことができるオンラインリソースになることを願っています」と述べています。