Stage C-b: compudynamic switch decision, idle point, timer path removed (FABRIC-3.8 §3.13.3-§3.13.5)
Who runs next is now sk_vm_switch_decide(): among participants with work (pending kernel-Hermes mail, parked mid-task, or Hera with console input), the coolest by VM-physics heat; ties with the incumbent keep the incumbent, ties among candidates go to the longest waiting (unique wait stamps). No scheduler state, no timer: heartbeat_tick() no longer touches switching, readiness/threshold/has_work/take_pending removed. Decided at owned word checkpoints (colon words and, new, between top-level words) after a beat or new mail, at the trampoline between messages, and at Hera's idle point in the console poll loops. The idle pump skips participants (G3 closed for them): the WIREBIND relay is delivered by a real switch to rajames~user. Probe (restored away): relay via switch Hera->rajames~user->Hera on all three ISAs, parked saved_sp inside own stack, walk-order disagreements 0 over tens of millions of decisions, 0 bytes idle log growth. Acceptance: dict_hash unchanged, relay 3, no faults. Rulings: C-3, C-5 as proposed; C-4 taken as (alpha), consequence recorded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
7c3736841d
commit
06bcab504d
@@ -55,6 +55,19 @@ int sk_vm_context_switch(struct VM *from, struct VM *to);
|
||||
struct VM *sk_vm_switch_current_vm(void);
|
||||
void sk_vm_switch_set_current(struct VM *vm);
|
||||
|
||||
/* FABRIC-3.8.md §3.13.3 (Stage C-b): the word checkpoint's switch point.
|
||||
* Call only where `vm` owns its outermost frame (vm_core.c gates this with
|
||||
* sk_vm_owns_outermost_frame()). Re-decides only if something physical
|
||||
* changed since the last decision (a beat of the running VM, or mail);
|
||||
* switches to a strictly cooler VM with work, if there is one. */
|
||||
void sk_vm_switch_checkpoint(struct VM *vm);
|
||||
|
||||
/* FABRIC-3.8.md §3.13.5 (Stage C-b, ruling C-5): the idle point. Called
|
||||
* from the console's input poll loops (repl.c) each pass with no input.
|
||||
* Acts only when Hera is running with no frame live (between lines); then
|
||||
* switches to the coolest VM with work, if any. */
|
||||
void sk_vm_idle_point(void);
|
||||
|
||||
#endif /* __STARKERNEL__ */
|
||||
|
||||
#endif /* STARKERNEL_VM_SWITCH_H */
|
||||
|
||||
Reference in New Issue
Block a user