static mut 排他監査台帳最終更新: 2026-11-03
AtmOS はクアッドコア ARMv8 (Cortex-A53) 上で動作するマルチコア OS である。 - Core 0: カーネル初期化、OS メインループ、EL0 ユーザーアプリ実行 - Core 1: USB ホストポーリング・HID 入力イベント処理 - Core 2: ネットワーク送受信・バックグラウンドワーカー - Core 3: オーディオ DMA 補給・マルチメディア非同期処理
不変条件 K-1 (排他完全網羅の原則):
共有可変状態(static mut)にアクセスする経路は触るコア・コンテキストを全て数え上げ、排他制御(スピンロック、リエントラントロック、またはアトミック操作)を完全に適用する。
| No | 変数名 | 定義箇所 | 所有サブシステム | 触るコア | 現在の排他 | 必要な排他 / 健全性評価 |
|---|---|---|---|---|---|---|
| 1 | CURRENT_SCREEN |
main.rs |
GUI / 描画 | Core 0 | なし (Core 0 専用) | ✅ Core 0 のみアクセス |
| 2 | REPEAT_PARAMS |
main.rs |
キーボード | Core 0, 1 | なし | ✅ 起動時設定後読み取り専用 |
| 3 | REPEAT_STATE |
main.rs |
キーボード | Core 0, 1 | KEYBOARD_LOCK |
✅ 排他済み |
| 4 | TABLET_MAX_X / Y |
main.rs |
USB タブレット | Core 1 | なし | ✅ Core 1 専用 |
| 5 | HEAP_CORRUPTION_FOUND |
main.rs |
デバッグ | Core 0 | アトミック相当 | ✅ 初期化診断 |
| 6 | NIC_DEBUG_DONE |
main.rs |
ネットワーク | Core 0 | フラグ | ✅ 1回のみ |
| 7 | GLOBAL_BROWSER |
apps/browser |
ブラウザ | Core 0 | なし (Core 0 専用) | ✅ GUI スレッド専用 |
| 8 | NEXT_APP_CORE |
os_lib/aura |
Aura | Core 0 | なし | ✅ Core 0 専用 |
| 9 | RAND_SEED |
os_lib/aura |
Aura 乱数 | Core 0 | なし | ✅ Core 0 専用 |
| 10 | IS_QEMU_ENV |
kernel/dma |
DMA | Core 0 | なし | ✅ 起動時判定後不変 |
| 11 | TIMER_PERIOD_TICKS |
kernel/timer |
タイマー | Core 0 | なし | ✅ 初期化後不変 |
| 12 | ARP_CACHE |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み (arp_cache.rs で純粋分離) |
| 13 | ARP_TICK |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み |
| 14 | ARP_NEG_IP / UNTIL |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み |
| 15 | PING_SEQ |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み |
| 16 | DNS_CACHE |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み (addr_of! 経由) |
| 17 | UDP_RX_QUEUE |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み (udp_queue.rs で純粋分離) |
| 18 | UDP_RX_TICK |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み |
| 19 | NIC_TX_QUEUE |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み (addr_of! 経由) |
| 20 | NIC_TX_DROPS |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み |
| 21 | NIC_TX_TICK |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み |
| 22 | TCP_SOCKETS |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み (tcp_state.rs で純粋分離) |
| 23 | TCP_EPHEMERAL_PORT |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み |
| 24 | NET_STATE |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み (status() 経由) |
| 25 | DHCP_* (各変数) |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み |
| 26 | LAST_PING_REPLY |
kernel/net |
ネットワーク | Core 0, 2 | NET_LOCK |
✅ 排他済み |
| 27 | ETH_CNT_* (カウンタ) |
kernel/net/arp |
統計 | Core 2 | アトミック推奨 | ✅ 統計用 |
| 28 | REASSEMBLERS |
kernel/net/tcp |
TCP再構築 | Core 2 | NET_LOCK |
✅ 排他済み |
| 29 | TABLES |
kernel/mmu |
MMU | Core 0 | なし | ✅ 起動時マップ生成後 MMU ロック |
| 30 | SDIO_INITIALIZED |
kernel/sdio |
SDIO | Core 0 | なし | ✅ 起動時初期化フラグ |
| 31 | GLOBAL_CONFIG |
kernel/config |
設定 | Core 0 | なし (Core 0 専用) | ✅ アプリ実行前ロード |
| 32 | GLOBAL_FILE_DIALOG |
kernel/dialog |
ダイアログ | Core 0 | なし (Core 0 専用) | ✅ UI スレッド専用 |
| 33 | GLOBAL_WM |
kernel/window_mgr |
ウィンドウ管理 | Core 0 | ReentrantMutex |
✅ 排他済み |
| 34 | RCA / CARD_SECTORS |
kernel/sdhost |
SDHOST | Core 0 | なし | ✅ 初期化後読み取り |
| 35 | WIFI_* (各変数) |
kernel/wifi |
WiFi | Core 0, 2 | WIFI_LOCK |
✅ 排他済み |
| 36 | SPLASH_ACTIVE |
kernel/draw |
描画 | Core 0 | なし | ✅ Core 0 専用 |
| 37 | BOOT_LOG_* |
kernel/draw |
描画ログ | Core 0 | なし | ✅ 初期ブート時専用 |
| 38 | RENDER_CL |
kernel/v3d |
V3D | Core 0 | なし | ✅ Core 0 専用 |
| 39 | TOTAL_HEAP_SIZE |
kernel/allocator |
アロケータ | Core 0 | 初期化後不変 | ✅ 初期化専用 |
| 40 | PCM_BUFFER_PWM/I2S |
kernel/audio |
オーディオ | Core 0, 3 | DMA バッファ | ✅ Core 3 DMA 補給排他 |
| 41 | STREAM_BUF/CBS |
kernel/audio |
オーディオ | Core 3 | DMA 排他 | ✅ Core 3 専用 |
| 42 | DMA_BUF / SETUP_BUF |
kernel/usb |
USB | Core 1, 2 | USB_LOCK |
✅ 排他済み |
| 43 | RX_DMA_BUF |
kernel/usb |
USB | Core 1, 2 | USB_LOCK |
✅ 排他済み |
| 44 | ETH_RX_BUF/LEN |
kernel/usb |
USB | Core 1, 2 | USB_LOCK |
✅ 排他済み |
| 45 | DEV_SPEED/ADDR 等 |
kernel/usb |
USB | Core 1, 2 | USB_LOCK |
✅ 排他済み |
| 46 | HID_DEVICES/COUNT |
kernel/usb |
USB HID | Core 1 | USB_LOCK |
✅ 排他済み |
| 47 | POLL_THREAD_ACTIVE |
kernel/usb |
USB | Core 0, 1 | アトミック相当 | ✅ スレッド同期 |
| 48 | RX_IN_FLIGHT 等 |
kernel/usb |
USB イーサネット | Core 2 | USB_LOCK |
✅ 排他済み |
| 49 | SERIAL_CHAR_COUNT |
kernel/uart |
UART ログ | 任意 | 排他集約 | ✅ 再帰防止済み |
| 50 | FS_INSTANCE |
kernel/fs |
SylFS | Core 0, 2 | FS_LOCK |
✅ 排他済み (get_fs()) |
static mut
を監査し、複数コアから競合アクセスされる経路(ネットワーク、USB、オーディオ、ファイルシステム)には
NET_LOCK、USB_LOCK、FS_LOCK
等の厳格な排他制御が適用されていることを確認した。static_mut_refs
警告対象箇所(DNS_CACHE、NET_STATE、NIC_TX_QUEUE、WINDOW_MGR)については、直接の参照キャストを撤廃し、addr_of!
/ addr_of_mut!
および安全なアクセサを経由する構造に改修完了した。