COREWAR

/
Step 22: お手本観察:分裂命令「SPL」と増殖の仕組み
🎯SPLを実行して自軍のプロセス数を 4 以上に増やす(0/4)

ミッション一覧 (全30ステップ)

第1章:画面とメモリの基本 (1-6)
BASIC★☆☆
Step 1: 時間を進める「STEP」ボタン
🔒
BASIC★☆☆
Step 2: プロセスの停止と「RESET」での復旧
🔒
BASIC★☆☆
Step 3: 「編集できる状態」と「実行中の状態」EDIT
🔒
BASIC★☆☆
Step 4: メモリの箱の3つの部屋(右の部屋 B を変える)EDIT
🔒
BASIC★☆☆
Step 5: 左の部屋(A)と右の部屋(B)を書き換えるEDIT
🔒
BASIC★☆☆
Step 6: 「数値(#)」と「番地($)」の記号の違いEDIT
第2章:代表的な命令とループ (7-13)
🔒
ARITHMETIC★☆☆
Step 7: 足し算の命令「ADD」の観察
🔒
ARITHMETIC★☆☆
Step 8: 足す「数値(A)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 9: 足す「相手の場所(B)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 10: 引き算の命令「SUB」を使ってみようEDIT
🔒
BASIC★☆☆
Step 11: 箱を丸ごとコピーする命令「MOV」EDIT
🔒
CONTROL★☆☆
Step 12: 時間を巻き戻すジャンプ命令「JMP」EDIT
🔒
CONTROL★☆☆
Step 13: 簡単なプログラムを作ろう(自動カウンター)EDIT
第3章:ノイマン型とデジタル生命 (14-18)
🔒
BASIC★☆☆
Step 14: なぜ「DAT」が爆弾になるのか?EDIT
🔒
BASIC★☆☆
Step 15: 自分自身の命令をコピーする(コード=データ)EDIT
🔒
BASIC★☆☆
Step 16: お手本観察:最古の生命体「Imp」をSTEP実行する
🔒
BASIC★☆☆
Step 17: Impの簡単な変更(コピー先の観察と実験)EDIT
🔒
ARITHMETIC★★☆
Step 18: 間接参照(@ポインタ)の仕組みを知るEDIT
第4章:伝統的アルゴリズム (19-24)
🔒
STRATEGY★★☆
Step 19: お手本観察:爆撃機「Dwarf」をSTEP実行で解剖する
🔒
STRATEGY★★☆
Step 20: Dwarfの簡単な変更(爆弾の間隔を変える)EDIT
🔒
STRATEGY★★☆
Step 21: 実戦デビュー:爆弾の間隔を調整して標的を破壊せよEDIT
🔒
CONTROL★★☆
Step 22: お手本観察:分裂命令「SPL」と増殖の仕組み
🔒
CONTROL★★☆
Step 23: お手本観察:条件比較命令「SEQ / CMP」で敵を探すEDIT
🔒
STRATEGY★★☆
Step 24: お手本観察と変更:防衛罠「Imp-Gate」でImpを止めろEDIT
第5章:実戦改造と総合演習 (25-30)
🔒
STRATEGY★★☆
Step 25: 【Stone(石)】高速爆撃機の観察とステップ幅の改造EDIT
🔒
STRATEGY★★☆
Step 26: 【Paper(紙)】自己複製スウォーム「Mice」を観察する
🔒
STRATEGY★★★
Step 27: 【Paperの改造】クローン投下距離を変更して増殖せよEDIT
🔒
STRATEGY★★☆
Step 28: 【Scissors(鋏)】索敵スキャナーの観察とスキャン間隔の改造EDIT
🔒
STRATEGY★★★
Step 29: 【Trap(罠)】敵の魂を誘拐する「Vampire」の観察と改造EDIT
🔒
STRATEGY★★★
Step 30: 卒業試験:愛機のチューニングと総合バトルEDIT
👁️ お手本観察モード([STEP] で観察)
[番地][命令 (Opcode)][A (左の値)][B (右の値)]
📦 データ領域 / 爆弾 (DAT)
0000
▼MOV
#
$
0001
▼MOV
<
<
0002
↺JMN
$
$
0003
❖SPL
@
#
0004
+ADD
#
$
0005
↺JMP
$
$
0006
■DAT
$0
$0
0007
■DAT
$0
$0
0008
■DAT
$0
$0
0009
■DAT
$0
$0
0010
■DAT
$0
$0
0011
■DAT
$0
$0
0012
■DAT
$0
$0
0013
■DAT
$0
$0
0014
■DAT
$0
$0
0015
■DAT
$0
$0
0016
■DAT
$0
$0
0017
■DAT
$0
$0
0018
■DAT
$0
$0
0019
■DAT
$0
$0
0020
■DAT
$0
$0
0021
■DAT
$0
$0
0022
■DAT
$0
$0
0023
■DAT
$0
$0
0024
■DAT
$0
$0
0025
■DAT
$0
$0
0026
■DAT
$0
$0
0027
■DAT
$0
$0
🏟️ARENA (20 ROWS)SCOPE: 0000 - 0019
[メモリ空間 800番地 (20行 × 40列)]左のエディタと1対1で同期
TASKS: 0
CYC: 0
📖 講義ノート // STEP 22 OF 30第4章:戦闘用Warriorの解剖と並列・知覚制御⏱ 読了目安:約6分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

分裂命令「SPL」とOSのマルチタスク——fork()システムコールと並列計算のトレードオフ

1つのプログラムが複数の実行ポインタ(魂)を持つとき、MARSのタスクキューはどうCPU時間を分配するのか?

#SPL (Split)#Multitasking & Concurrency#FIFO Task Queue#Round-Robin Scheduling#UNIX fork()
🔬Step 22: お手本観察:分裂命令「SPL」と増殖の仕組み

これまでのプログラムは、光る実行ポインタ(魂)が 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 で講義ノートの全編が解放されます

上段の実験シミュレーターでミッションを達成すると自動的に全編がアンロックされます。(下のボタンから今すぐ全文を先に読むことも可能です)