Files
hakorune/docs/development/current/main/phase-85-ring0-runtime/README.md

76 lines
2.3 KiB
Markdown
Raw Normal View History

# Phase 85: Ring0 Runtime System
Ring0 is the OS API abstraction layer in Hakorune/Nyash, providing a clean interface to system resources without knowing about Boxes or Nyash-specific concepts.
## Architecture
Ring0Context bundles multiple API traits:
- **MemApi**: Memory allocation (malloc/free)
- **IoApi**: Stdin/Stdout/Stderr operations
- **TimeApi**: System time and monotonic clock
- **LogApi**: Structured logging
- **FsApi**: File system operations (Phase 90-A)
- **ThreadApi**: Thread operations (Phase 90-D)
## Implementations
### Phase 88: Initial std-based implementations
- NoopMem: Stub memory API (returns null)
- StdIo: std::io based I/O
- StdTime: std::time based time
- StdLog: eprintln!/println! based logging
- StdFs: std::fs based filesystem
- StdThread: std::thread based threading
### Phase 102: MemApi Bridge Skeleton
**Completed Tasks**:
- StdMem implementation (stdlib alloc/free based)
- default_ring0() unified to use StdMem instead of NoopMem
- Unit tests for StdMem allocation and statistics
- NoopMem retained for compatibility
#### Implementation Status
- **StdMem**: Implemented (stdlib alloc/free based)
- **Statistics Management**: allocated/freed/current counters
- **Compatibility**: NoopMem retained for testing
#### Design Notes
- The free() method counts freed operations but not freed bytes (no size info)
- Full statistics tracking will be added in Phase 102B (hakmem integration)
#### Usage Example
```rust
let mem = StdMem::new();
let ptr = mem.alloc(1024);
let stats = mem.stats();
println!("allocated: {}, current: {}", stats.allocated, stats.current);
mem.free(ptr);
```
#### Next Steps
Phase 102B will add:
- Size-pairing dictionary (record alloc sizes)
- Accurate freed size statistics
- hakmem API bridge integration
## Global Ring0Context
Ring0 provides a global singleton via:
- `init_global_ring0(ctx)`: Initialize global context
- `get_global_ring0()`: Get global context
## Testing
All Ring0 components have comprehensive unit tests. Run with:
```bash
cargo test --release --lib ring0
```
## Files
- `src/runtime/ring0/mod.rs`: Main module and Ring0Context struct
- `src/runtime/ring0/traits.rs`: API trait definitions
- `src/runtime/ring0/std_impls.rs`: Standard library implementations
- `src/runtime/ring0/errors.rs`: Error types