分裂命令「SPL」とOSのマルチタスク——fork()システムコールと並列計算のトレードオフ
1つのプログラムが複数の実行ポインタ(魂)を持つとき、MARSのタスクキューはどうCPU時間を分配するのか?
これまでのプログラムは、光る実行ポインタ(魂)が 1つだけ でした。そのため、1回でも DAT を踏むと即座に全滅してしまいます。 そこで登場するのが、細胞分裂のように実行ポインタを2つに増やす魔法の命令 SPL(Split:分裂) です!
- SPL を実行すると、自分の実行ポインタ(プロセス数)が1つから2つ、3つ、4つ…と分裂して増えます。 - 複数のプロセスを持っていれば、1つが爆弾を踏んで消えても、残りのプロセスが生き続ける限り負けることはありません!
🎯 やってみよう(編集不要) [STEP] を数回押すか [PLAY] を押して、プロセス数が増えて複数の行が交互に光りながら進んでいく様子を観察しましょう!
1. 単一プロセスの脆さと「細胞分裂(SPL)」の衝撃
Step 1からStep 21まで、私たちが動かしてきたすべてのプログラムは、光る実行ポインタ(プログラムカウンタ / PC)を「たった1つだけ」しか持っていませんでした。1つしか魂(プロセス)がないということは、どこかで1回でも『DAT』爆弾を踏めば、その瞬間に即座にゲームオーバー(全滅)になることを意味します。
しかし、このStep 22で登場した魔法の命令『SPL(Split:分裂)』は、その前提を根底から覆します! 『SPL.A $0, #0』を実行した瞬間、あなたのWarriorの実行ポインタ(プロセス数)は 1個 ➔ 2個 ➔ 3個 ➔ 4個…と、まるでアメーバの細胞分裂(有糸分裂)のように次々と増殖し始めました。
CoreWarの勝敗ルールを思い出してください。「自軍のプロセスが【すべて】消滅したときに敗北となる」——裏を返せば、『SPL』でプロセスを10個に増やしておけば、たとえ敵のDAT爆弾を踏んで9個のプロセスが吹き飛んだとしても、最後の1個が生き残っている限り、あなたのWarriorは決して死なずに戦い続けることができるのです!
Executing: [0000] SPL.A $Target
│
┌─────────────┴──────────────────────────┐
▼ (1st in FIFO Queue) ▼ (2nd in FIFO Queue)
[Parent Process]: Steps to PC + 1 (0001) [Child Process]: Jumps to $Target!2. UNIX/Linuxの「fork()」とMARSのFIFOタスクキュー
この『SPL』命令は、実は現代のOS(Linux、macOS、Androidなど)の根幹を支える『fork()(フォーク)』システムコールや『マルチスレッド(Multi-threading)』の仕組みを、世界で最もシンプルに視覚化したものです。
『SPL.A $Target』が実行されると、MARSの内部では以下の順序で処理が行われます。 1. まず「親プロセス(元の魂)」のプログラムカウンタが、通常通り1つ下の行(PC + 1)へと進み、自軍のタスク待ち行列(FIFOキュー:先入れ先出しの列)の末尾に並びます。 2. 同時に、新しく生まれた「子プロセス(分身の魂)」のプログラムカウンタが、Aフィールドで指定された飛び先($Target)にセットされ、親プロセスのすぐ後ろに並びます。
では、あなたのWarriorが4つのプロセス(魂A・魂B・魂C・魂D)を持ったとき、MARSはどのようにCPUの実行権を割り振るのでしょうか? MARSは、OSの教科書に登場する『ラウンドロビン・スケジューリング(Round-Robin Scheduling)』そのもので動いています。あなたが1ターンを得るたびに、待ち行列(キュー)の先頭にいる「魂A」が1命令だけ実行して列の最後尾へ並び直し、次の自分のターンでは「魂B」が1命令実行し、次は「魂C」、次は「魂D」……と、順番に1サイクルずつCPU時間を分け合う(タイムシェアリングする)のです。
3. 並列計算の大原則:「冗長性(不死性)」と「速度 1/N」のトレードオフ
ここで、極めて重要な計算機科学の法則(アムダールの法則や並列スケジューリングの基本原理)に気づく必要があります。 「SPLでプロセスを100個に増やせば、100倍強くなるのではないか?」——答えは【NO】です!
なぜなら、1体のWarriorに与えられるCPUパワーは「1ターンにつき合計1命令」で固定されているからです。 ・プロセスが 1個 のとき:その1個は毎ターン動けるため、『100%(等倍)』の最高速度で走れます。 ・プロセスが 4個 に分裂したとき:4個が順番に1サイクルずつ交代で動くため、1個あたりの移動・攻撃スピードは『1/4(25%)』に遅くなります! ・もしプロセスを 100個 に増やしたら:1つのプロセスが次の1歩を踏み出すまでに100ターンも待たされることになり、泥沼の中を歩くように鈍足になってしまいます。
「プロセスを増やせば死ににくくなる(冗長性・生存力の向上)が、増やしすぎると1スレッドあたりの実行速度が $1/N$ に希釈される(クロックの分散)」——この並列コンピューティングの本質的なトレードオフをどう制御するかが、第5章で学ぶ自己複製スウォーム(Paper)の核心技術となります。
🔒 MISSION CLEAR で講義ノートの全編が解放されます
上段の実験シミュレーターでミッションを達成すると自動的に全編がアンロックされます。(下のボタンから今すぐ全文を先に読むことも可能です)