Skip to content

Foundation: nommu のスロット方式をアリーナ方式と再配置可能な WAX に置き換える - #177

Merged
src3453 merged 3 commits into
mainfrom
claude/project-thread-7kb2sk
Oct 25, 2026
Merged

src3453 merged 3 commits into
mainfrom
claude/project-thread-7kb2sk

Conversation

@src3453

@src3453 src3453 commented Oct 25, 2026

Copy link
Copy Markdown
Owner

Closes #175

V(Extension V)のない CPU でのユーザーメモリ管理を、固定スロット(1 プロセス 1 スロット)から、nommu Linux のような方式に置き換えます。V のある CPU のページ表バックエンドは変えていません。

判断したこと(レビューしてほしい点)

  • 「MMU のエミュレーション」の解釈: nommu Linux 流にしました。プロセスごとに連続した 1 つのアリーナ(4 KiB ページのビットマップから first fit)を割り当て、実行形式は再配置可能な WAX(FLAT 形式相当)にして、ロード時に再配置します。ページ表のようなアドレス変換の模倣はしていません(Extension P ではできないため)。保護は従来どおり Extension P の 8 領域です。
  • WAX v3 の拡張(doc/spec_WAX_v3.md を 3.1 に): flags bit 2 RELOCATABLE、header 128/132 に relocation table(位置と件数)、136 に heap_hint。エントリは「リンク時アドレス + 種類(0: データ語、1: LDIH/LDIL の組)」。スタックは最下位ブロックの直下で、初期 R30 は配置後の origin。固定アドレスの v2/v3 画像は今までどおり動き、アリーナが取れなければ FND_E_ADDRESS_CONFLICT です。
  • --pie / --heap-hint(llvm-src32): 2 回リンク(0x01000000 ずらし)の差分から relocation を作り、説明のつかない差はエラーにします。Foundation の全プログラム(init・各サービス・シェル・/bin)を --pie でビルドします。
  • mem_grow は nommu の brk と同じく、アリーナを動かせず、末尾が空いているときだけ伸びます。大きなヒープが要る画像は --heap-hint で最初に求めます。
  • 改名: FND_MM_SLOT_ONLY → FND_MM_NOMMU_ONLY、FND_MM=slot → FND_MM=nommu(slot は build.py で別名として残しています)。fnd_proc_create_builtin と一部のテストは、旧スロットの範囲を指定してアリーナとして確保します。
  • ページプールは VM と共有する 1 つの参照数配列(frame_refs)にしました。Foundation: COWとproc_forkによるプロセス複製を実装する #176(COW/fork)の参照数管理とつなげています。fork は従来どおり VM 専用です。
  • 未対応のまま: プロセス 7 個の上限(スロットに縛られなくなったので増やせます)、アリーナの移動による断片化の解消。
  • foundation/tests/sgc/guest.c の FIFO 満杯検査は VDP フレームの位相に依存して不安定だったので、フレームをまたいだら待って再試行するようにしました(nommu で spawn の時間が変わり表面化)。

変更

  • カーネル: mm(アリーナ API)、proc(plan_arena、spawn_image、アリーナの解放)、wax(wax_inspect、wax_rebase、relocation)
  • ツール: tools/wax/wax3.py、tools/llvm-src32/{driver,v3}.py、foundation/boot/build.py
  • テスト: tests/wax(relocation、PIE を 3 つ同時起動)、tests/shell ほか
  • 仕様・README・memory/2026-10-25-issue-175-nommu-arena.md

確認したこと

  • VM モード: シェル 29 件、tests/{irq,rle,code,disk_cache,pkcl}、toolchain の phase1/wax_loader/fork/vm_kernel/wal_from_c
  • nommu モード(FND_MM=nommu): シェル 29 件、disk・fb・sgc・libsgc・tinybasic・wav・sgub・bmpview・chip8・console・pec・panic・fs・lzma・irq・rle・code・pkcl、上記 toolchain テスト
  • python3 -m unittest discover -s foundation/tests/wax(ホスト)
  • 未実行: pkcl の BusyBox 実ビルド(外部ソースが必要で skip)、cargo test 全体

Generated by Claude Code

ページアロケータとプロセスごとのアリーナ、WAX v3 の RELOCATABLE(relocation table と heap_hint)、
llvm-src32 の --pie/--heap-hint を追加し、Foundation の全プログラムを --pie でビルドする。

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011HTdnvAqSYxxtyGHv9j9d3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011HTdnvAqSYxxtyGHv9j9d3

@src3453 src3453 left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

x


Generated by Claude Code

エントリごとにブロックを探すと、数千エントリの画像で起動が遅くなり、
disk 起動テストの STOP_TICKS に間に合わなくなっていた。

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011HTdnvAqSYxxtyGHv9j9d3

src3453 commented Oct 25, 2026

Copy link
Copy Markdown
Owner Author

CI の LLVM toolchain + Foundation tests (disk) が失敗していたのはこの PR の原因でした。relocation table の検証がエントリごとにブロックを探していて、数千エントリの画像で起動が遅くなり、STOP_TICKS(フレーム 560)に間に合っていませんでした。検証を 1 回の走査に直し、テストの FRAMES も 600 に広げて push しました(VM と nommu の両モードで disk テスト 7 件 pass を確認)。残りのジョブは結果待ちです。


Generated by Claude Code

@src3453
src3453 merged commit 83285f2 into main Oct 25, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

nommu のスロット方式を、アリーナ方式と再配置可能な WAX に置き換える

2 participants