Files
LithosAnanake/docs/working/architecture/03-architecture/OVERVIEW.md
T

606 lines
18 KiB
Markdown

<!-- Moved from docs/03-architecture/OVERVIEW.md to docs/working/architecture/03-architecture/OVERVIEW.md on 2026-06-16 (docs reorg Phase 2) -->
# StarForth Architecture Overview
**Status:** Complete
**Last Updated:** 2025-12-14
**Audience:** Developers, Architects, Contributors
## Executive Summary
StarForth is a FORTH-79 compliant virtual machine with a **physics-driven adaptive runtime**, formally proven to achieve **0% algorithmic variance** across experimental runs. The architecture consists of three layers (VM, HAL, Platform) and seven physics feedback loops that enable self-optimization while maintaining deterministic behavior.
**Key Innovation:** Physics-grounded metaphor (execution heat, rolling window of truth) that drives adaptive optimization without sacrificing reproducibility.
> **HISTORICAL — L4Re/Fiasco.OC**: this document's L4Re references (platform table, "Hosted Platforms" section, etc.) describe a target that was a supported platform through mid-2026. L4Re support has since been removed as an active target — `src/platform/l4re/time.c` and related `#ifdef __l4__` code are retained for reference but no longer wired into any build. Treat every L4Re mention below as historical design context, not a currently buildable platform.
---
## System Architecture
### Three-Layer Model
```
┌──────────────────────────────────────────────────────────┐
│ Layer 1: VM Core + Physics Subsystems │
│ • FORTH-79 interpreter (vm.c) │
│ • Dictionary (words, compilation) │
│ • Stacks (data, return) │
│ • Physics subsystems (heat, window, cache, pipelining) │
│ • Heartbeat coordinator │
│ │
│ ↓ Platform-agnostic (calls HAL only) │
├──────────────────────────────────────────────────────────┤
│ Layer 2: Hardware Abstraction Layer (HAL) │
│ • hal_time.h - Timing & timers │
│ • hal_interrupt.h - IRQ management │
│ • hal_memory.h - Memory allocation │
│ • hal_console.h - I/O │
│ • hal_cpu.h - CPU control │
│ │
│ ↓ Platform-specific implementations │
├──────────────────────────────────────────────────────────┤
│ Layer 3: Platform Implementations │
│ ┌──────────────┬──────────────┬──────────────────────┐ │
│ │ Linux │ L4Re │ StarKernel (planned) │ │
│ │ (POSIX) │ (microkernel)│ (freestanding) │ │
│ ├──────────────┼──────────────┼──────────────────────┤ │
│ │ clock_gettime│ L4Re::Clock │ TSC + HPET + APIC │ │
│ │ malloc/free │ dataspaces │ PMM + VMM + kmalloc │ │
│ │ stdin/stdout │ L4Re console │ UART + framebuffer │ │
│ └──────────────┴──────────────┴──────────────────────┘ │
└──────────────────────────────────────────────────────────┘
```
---
## Core Components
### 1. VM Core (`src/vm.c`)
**Responsibilities:**
- FORTH-79 interpreter loop
- Dictionary management
- Stack operations (data, return)
- Word execution
- Compilation (`:`, `;`)
**Key Data Structures:**
```c
typedef struct VM {
vaddr_t data_stack[STACK_SIZE];
vaddr_t return_stack[STACK_SIZE];
vaddr_t dict_ptr; /* Dictionary pointer */
vaddr_t here; /* Compilation pointer */
DictEntry *latest; /* Most recent word */
HeartbeatState heartbeat; /* Timing coordinator */
RollingWindowOfTruth *window; /* Execution history */
/* ... */
} VM;
```
**Execution Flow:**
1. Fetch next word from input stream
2. Search dictionary for word
3. If found: execute or compile (based on `WORD_IMMEDIATE`)
4. If not found: try to parse as number
5. Update execution heat (physics feedback)
6. Continue
### 2. Dictionary System
**Structure:**
- Linked list of `DictEntry` nodes
- Each entry contains: name, code pointer, flags, physics metadata
- Linear search with hot-words cache acceleration
**Dictionary Entry:**
```c
typedef struct DictEntry {
char name[32];
void (*code_ptr)(VM *vm);
uint32_t flags; /* IMMEDIATE, HIDDEN, etc. */
float execution_heat; /* Physics: frequency tracking */
PhysicsMetadata physics; /* Window samples, decay state */
TransitionMetrics *transitions; /* Pipelining: successor prediction */
struct DictEntry *next; /* Linked list */
} DictEntry;
```
### 3. Memory Model
**Address Space:**
- `vaddr_t` (VM addresses) = byte offsets, not C pointers
- Dictionary: 0 → 2MB
- User blocks: block 2048+
- Heap: allocated via HAL
**Memory Access:**
```c
cell_t vm_load_cell(VM *vm, vaddr_t addr); /* Safe load */
void vm_store_cell(VM *vm, vaddr_t addr, cell_t value); /* Safe store */
```
---
## Physics Subsystems
The **physics-driven adaptive runtime** consists of six coordinated subsystems:
### 1. Execution Heat Model (`dictionary_heat_optimization.c`)
**Mechanism:** Words that execute frequently accumulate higher execution counts
**Implementation:**
```c
void track_execution_heat(DictEntry *entry) {
entry->execution_heat += 1.0f; /* Increment on each execution */
}
```
**Purpose:** Identifies frequently-executed words for optimization
**Feedback:** Positive (hot words get hotter via cache hits)
### 2. Rolling Window of Truth (`rolling_window_of_truth.c`)
**Metaphor:** Circular buffer captures execution history
**Implementation:**
```c
typedef struct RollingWindowOfTruth {
ExecutionSample samples[WINDOW_SIZE];
int head; /* Write position */
int count; /* Number of valid samples */
uint64_t timestamp_ns; /* Last sample time */
} RollingWindowOfTruth;
```
**Purpose:** Deterministic seeding of physics metrics (ANOVA, Levene's test)
**Key Insight:** Fixed-size window ensures deterministic sample selection
### 3. Hot-Words Cache (`physics_hotwords_cache.c`)
**Mechanism:** Reorder dictionary based on execution heat
**Algorithm:**
1. Sort dictionary entries by `execution_heat`
2. Move hot words to front of linked list
3. Accelerates linear search (hot words found first)
**Performance Impact:** 10-30% speedup on realistic workloads
**Determinism:** Cache updates triggered by heat decay, not execution order
### 4. Pipelining Metrics (`physics_pipelining_metrics.c`)
**Mechanism:** Predict next word based on current word
**Implementation:**
```c
typedef struct TransitionMetrics {
DictEntry *successor; /* Most common next word */
uint32_t transition_count; /* How many times seen */
} TransitionMetrics;
```
**Speculative Execution:** Prefetch successor word (future work)
**Determinism:** Transition counts updated deterministically
### 5. Inference Engine (`inference_engine.c`)
**Adaptive Parameters:**
- **Window width** - How many samples to analyze
- **Decay slope** - How fast heat decays
**Statistical Methods:**
- **ANOVA early-exit** - Stop when variance stabilizes
- **Levene's test** - Validate homogeneity of variance
- **Exponential regression** - Fit decay curve
**Key Property:** Inference uses deterministic algorithms (no randomness)
### 6. Heartbeat System (`src/heartbeat.c`)
**Purpose:** Centralized time-driven coordinator
**Responsibilities:**
- Trigger Loop #3 (heat decay) periodically
- Trigger Loop #5 (window width inference) periodically
- Coordinate all time-dependent operations
**Implementation:**
```c
void vm_tick(VM *vm) {
if (!vm->heartbeat.enabled) return;
vm->heartbeat.tick_count++;
/* Loop #3: Heat decay */
if (should_decay_heat(vm)) {
decay_execution_heat(vm);
}
/* Loop #5: Window width inference */
if (should_tune_window(vm)) {
infer_window_width(vm);
}
}
```
**Timing:** Periodic timer via HAL (`hal_timer_periodic()`)
---
## Seven Physics Feedback Loops
| Loop | Name | Type | Trigger | Effect |
|------|------|------|---------|--------|
| #1 | Execution Heat Tracking | Positive | Every word execution | Increments `execution_heat` |
| #2 | Rolling Window History | Neutral | Every execution | Captures sample in circular buffer |
| #3 | Linear Decay | Negative | Heartbeat tick | Decays `execution_heat` over time |
| #4 | Pipelining Metrics | Positive | Word→word transition | Increments `transition_count` |
| #5 | Window Width Inference | Adaptive | Heartbeat tick | Adjusts window size via Levene's test |
| #6 | Decay Slope Inference | Adaptive | Heartbeat tick | Adjusts decay rate via regression |
| #7 | Adaptive Heartrate | Adaptive | System load | Adjusts heartbeat frequency (future) |
**Determinism Proof:** All loops use deterministic algorithms; 0% algorithmic variance validated experimentally.
See `physics-engine/feedback-loops.md` for detailed analysis.
---
## Boot Sequence
### Hosted Platforms (Linux, L4Re)
```
main()
hal_*_init() /* Initialize HAL subsystems */
vm_create() /* Allocate VM struct */
vm_init_dictionary() /* Populate built-in words */
vm_init_physics() /* Initialize heat, window, cache */
heartbeat_start() /* Start periodic timer */
repl() /* Enter REPL loop */
vm_destroy() /* Clean shutdown */
```
### StarKernel (Planned)
```
UEFI Firmware
BOOTX64.EFI (uefi_loader.c)
↓ Collect BootInfo (memory map, ACPI, framebuffer)
↓ ExitBootServices()
kernel_main()
hal_*_init() /* Kernel HAL implementations */
vm_create() /* VM starts in kernel mode */
repl() /* Forth as kernel shell */
```
See `hal/starkernel-integration.md` for kernel boot details.
---
## Data Flow
### Word Execution Path
```
User Input ("1 2 + .")
tokenize() /* Split into words */
For each word:
├─> search_dictionary()
│ ├─> hot_words_cache (check front)
│ └─> linear_search (fallback)
├─> execute_word()
│ ├─> track_execution_heat()
│ ├─> record_transition()
│ └─> update_rolling_window()
└─> Output ("3")
```
### Physics Feedback Cycle
```
Word Execution
Execution Heat += 1.0
Rolling Window records sample
Heartbeat Tick (periodic)
├─> Heat Decay (Loop #3)
│ └─> Heat *= decay_factor
├─> Window Inference (Loop #5)
│ └─> Levene's test → adjust window_width
└─> (future) Decay Inference (Loop #6)
└─> Regression → adjust decay_slope
Hot-Words Cache Refresh
(cycle repeats)
```
---
## Control Flow
### Compile Mode vs. Execute Mode
**Execute Mode:**
- Default state
- Words execute immediately when encountered
**Compile Mode:**
- Entered via `:` (colon)
- Words are compiled into dictionary (not executed)
- Exception: `WORD_IMMEDIATE` words execute even in compile mode
**Example:**
```forth
: SQUARE ( n -- n² ) DUP * ;
\ During ":"
\ - "DUP" compiled (added to SQUARE's definition)
\ - "*" compiled
\ During ";"
\ - Exit compile mode
\ - SQUARE now in dictionary
```
### Interrupt Context (StarKernel)
**ISR-Safe Operations:**
- `heartbeat_tick_isr()` - ISR callback
- `vm_tick()` - Can run in ISR (no malloc/blocking I/O)
- Rolling window updates (lock-free)
**NOT ISR-Safe:**
- `hal_mem_alloc()` - Blocking
- `hal_console_getc()` - Blocking
- Dictionary compilation - Not reentrant
---
## Cross-Subsystem Interactions
### Heartbeat ↔ Physics
```
Heartbeat Timer (HAL)
↓ Fires periodic interrupt
heartbeat_isr()
↓ Calls
vm_tick()
↓ Coordinates
├─> dictionary_heat_decay()
├─> infer_window_width()
└─> (future) infer_decay_slope()
```
### Dictionary ↔ Cache
```
New Word Defined
dictionary_add_word()
↓ Invalidates
hot_words_cache_invalidate()
↓ Triggers rebuild
hot_words_cache_rebuild()
↓ Sorts by
execution_heat
↓ Reorders
linked list
```
### Window ↔ Inference
```
Word Execution
rolling_window_add_sample()
↓ Buffer fills
window_is_full()
↓ Triggers
infer_window_width()
↓ Analyzes via
levene_test()
↓ Adjusts
window->width
```
---
## Platform Abstraction
See [`hal/overview.md`](hal/overview.md) for comprehensive HAL documentation.
**Key Principle:** VM code never knows which platform it's on.
**Example:**
```c
/* VM code (platform-agnostic) */
uint64_t start = hal_time_now_ns();
execute_word(vm, word);
uint64_t elapsed = hal_time_now_ns() - start;
/* Linux HAL implementation */
uint64_t hal_time_now_ns(void) {
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return (uint64_t)ts.tv_sec * 1000000000ULL + ts.tv_nsec;
}
/* Kernel HAL implementation */
uint64_t hal_time_now_ns(void) {
return tsc_to_ns(rdtsc()); /* Direct hardware access */
}
```
---
## Roadmap: StarForth → StarKernel → StarshipOS
### Phase 1: StarForth (DONE)
✅ FORTH-79 compliant interpreter
✅ Physics-driven adaptive runtime
✅ 0% algorithmic variance proven
✅ 780+ tests passing
✅ Runs on Linux, L4Re
### Phase 2: HAL Migration (IN PROGRESS)
🔄 Define HAL interfaces
🔄 Refactor Linux platform to use HAL
🔄 Migrate VM core to HAL
🔄 Validate determinism preserved
📋 Implement L4Re HAL (optional)
See `hal/migration-plan.md` for detailed timeline.
### Phase 3: StarKernel (PLANNED)
📋 Implement kernel HAL (`platform/kernel/`)
📋 UEFI boot loader (`boot/uefi_loader.c`)
📋 Physical Memory Manager (PMM)
📋 Virtual Memory Manager (VMM)
📋 Kernel heap allocator (kmalloc)
📋 UART + framebuffer console
📋 TSC + HPET + APIC timer
📋 Boot to `ok` prompt on bare metal
📋 Validate physics on hardware
See `hal/starkernel-integration.md` for implementation details.
### Phase 4: StarshipOS (FUTURE)
🔮 Storage drivers (AHCI, NVMe)
🔮 Filesystem (FAT32, ext2, log-structured)
🔮 Networking (TCP/IP stack, VirtIO-net)
🔮 Process model (Forth tasks, scheduling)
🔮 Device model (block/net/char unification)
🔮 Security (capabilities, ACL, Forth-based access control)
---
## Performance Characteristics
### Microbenchmarks
| Operation | Cycles | Notes |
|-----------|--------|-------|
| `DUP` | ~5 | Stack manipulation (hot path) |
| `+` | ~8 | Arithmetic (optimized) |
| Dictionary search (hot) | ~20 | Cache hit |
| Dictionary search (cold) | ~200 | Linear search |
| Word call overhead | ~15 | Indirect call |
| Heat tracking | ~3 | Increment + branch |
### Macrobenchmarks
| Workload | Performance | Configuration |
|----------|-------------|---------------|
| Fibonacci (recursive) | 100M iterations/sec | `make fastest` |
| Ackermann(3,9) | 15s | `make fastest` |
| DoE full suite | 2.3s | 780+ tests, `make test` |
**Key Insight:** Physics overhead < 5% on average workloads.
---
## Debugging & Diagnostics
### Built-in Diagnostics
```forth
WORD-ENTROPY \ Print execution heat statistics
.S \ Print data stack
.R \ Print return stack
WORDS \ List all dictionary words
```
### Development Builds
```bash
make debug # -g -O0, full symbols
make PROFILE=1 # -pg, gprof profiling
```
### DoE Mode
```bash
./starforth --doe # Run experiments, output metrics
```
**Output:** Test results, execution heat, window metrics, determinism validation
---
## Key Invariants
1. **Determinism:** 0% algorithmic variance (formally validated)
2. **Platform Agnostic:** VM code has zero `#ifdef PLATFORM_*`
3. **Memory Safety:** All VM addresses via `vaddr_t`, bounds-checked with `STRICT_PTR=1`
4. **FORTH-79 Compliance:** All standard words implemented correctly
5. **Zero Warnings:** Builds clean with `-Wall -Werror`
6. **ANSI C99:** No GNU extensions, no C++ features
---
## Further Reading
### Architecture Details
- **[hal/](hal/)** - Hardware Abstraction Layer
- **[heartbeat-system/](heartbeat-system/)** - Centralized timing coordinator
- **[physics-engine/](physics-engine/)** - Physics subsystem details
- **[pipelining/](pipelining/)** - Speculative execution
- **[adaptive-systems/](adaptive-systems/)** - Window & decay inference
### Development
- **`../01-getting-started/`** - Quick start guide
- **`../CONTRIBUTING.md`** - Contribution guidelines
- **`../CLAUDE.md`** - Project overview for developers
### Research
- **`../02-experiments/`** - Experimental protocols
- **`../06-research/`** - Academic publications
- **`../ONTOLOGY.md`** - System ontology and taxonomy
---
## Glossary
| Term | Definition |
|------|------------|
| **vaddr_t** | VM address (byte offset, not C pointer) |
| **Execution Heat** | Frequency tracking metric for words |
| **Rolling Window** | Circular buffer of execution samples |
| **HAL** | Hardware Abstraction Layer |
| **Heartbeat** | Periodic timer coordinating physics loops |
| **DoE** | Design of Experiments (experimental methodology) |
| **POST** | Power-On Self Test (unit test organization) |
| **PMM** | Physical Memory Manager (kernel) |
| **VMM** | Virtual Memory Manager (kernel) |
| **TSC** | Time Stamp Counter (x86_64 high-res timer) |
| **HPET** | High Precision Event Timer |
| **APIC** | Advanced Programmable Interrupt Controller |
---
*This overview provides the "30,000-foot view" of StarForth's architecture. For detailed implementation, see subsystem documentation.*