Overview
Relevant source files
This document covers the timer_list crate, a Rust library that provides efficient timer event management for the ArceOS operating system. The crate implements a priority queue-based system for scheduling and triggering time-based events in no-std environments. For detailed API documentation, see Core API Reference. For practical implementation examples, see Usage Guide and Examples.
Purpose and Core Design
The timer_list crate serves as a foundational component for time-based event scheduling in operating system kernels and embedded systems. It provides a TimerList data structure that manages TimerEvent objects, ensuring they are triggered sequentially when their deadlines expire.
Core Design Principles
The following diagram illustrates the core system architecture and maps natural language concepts to specific code entities:
flowchart TD
subgraph subGraph2["Internal Implementation"]
HEAP["BinaryHeap"]
WRAP["TimerEventWrapper"]
ORD["Ord implementation"]
end
subgraph subGraph1["Core Operations"]
SET["set(deadline, event)"]
EXP["expire_one(now)"]
EMPTY["is_empty()"]
NEXT["next_deadline()"]
end
subgraph subGraph0["Public Interface"]
TL["TimerList"]
TE["TimerEvent trait"]
TEF["TimerEventFn struct"]
TV["TimeValue type alias"]
end
EXP --> HEAP
HEAP --> WRAP
SET --> HEAP
TE --> TEF
TEF --> TL
TL --> EMPTY
TL --> EXP
TL --> NEXT
TL --> SET
WRAP --> ORD
Sources: Cargo.toml(L1 - L15) README.md(L12 - L34)
System Architecture
The timer_list crate implements a min-heap based priority queue system for efficient timer management. The following diagram shows the complete system architecture:
flowchart TD
subgraph subGraph3["ArceOS Integration"]
KERNEL["Kernel Timer System"]
NOSTD["no-std Environment"]
TARGETS["Multi-architecture Support"]
end
subgraph subGraph2["Data Management"]
PQUEUE["Priority Queue (BinaryHeap)"]
EVENTS["TimerEventWrapper objects"]
ORDERING["Min-heap ordering by deadline"]
end
subgraph subGraph1["timer_list Crate"]
API["TimerList API"]
TRAIT["TimerEvent trait"]
WRAPPER["TimerEventFn wrapper"]
end
subgraph subGraph0["Application Layer"]
APP["User Code"]
CB["Event Callbacks"]
end
API --> KERNEL
API --> NOSTD
API --> PQUEUE
APP --> API
APP --> TRAIT
CB --> WRAPPER
EVENTS --> ORDERING
NOSTD --> TARGETS
PQUEUE --> ORDERING
TRAIT --> EVENTS
WRAPPER --> EVENTS
Sources: Cargo.toml(L6 - L7) Cargo.toml(L12) README.md(L7 - L8)
Key Capabilities
The timer_list crate provides the following core capabilities:
| Capability | Implementation | Code Entity |
|---|---|---|
| Event Scheduling | Priority queue with O(log n) insertion | TimerList::set() |
| Event Expiration | O(1) access to next expired event | TimerList::expire_one() |
| Custom Events | Trait-based event system | TimerEventtrait |
| Function Callbacks | Wrapper for closure-based events | TimerEventFn |
| Queue Status | Check if events are pending | TimerList::is_empty() |
| Deadline Access | Get next event deadline | TimerList::next_deadline() |
Sequential Processing Model
The crate enforces sequential processing of timer events, where events are triggered one at a time in deadline order. This design ensures deterministic behavior suitable for real-time systems and kernel environments.
sequenceDiagram
participant UserCode as User Code
participant TimerList as TimerList
participant BinaryHeap as BinaryHeap
participant TimerEvent as TimerEvent
UserCode ->> TimerList: "set(deadline, event)"
TimerList ->> BinaryHeap: "push(TimerEventWrapper)"
Note over BinaryHeap: "Auto-sorts by deadline"
loop "Event Processing"
UserCode ->> TimerList: "expire_one(current_time)"
TimerList ->> BinaryHeap: "peek() - check earliest"
alt "Event expired"
BinaryHeap -->> TimerList: "Return wrapper"
TimerList ->> BinaryHeap: "pop() - remove"
TimerList -->> UserCode: "Some((deadline, event))"
UserCode ->> TimerEvent: "event.callback(now)"
else "No expired events"
TimerList -->> UserCode: "None"
end
end
Sources: README.md(L24 - L33)
ArceOS Ecosystem Integration
The timer_list crate is designed specifically for integration with the ArceOS operating system ecosystem. Key integration aspects include:
- No-std Compatibility: Designed for kernel and embedded environments without standard library dependencies
- Multi-architecture Support: Compatible with x86_64, RISC-V, and ARM architectures
- License Flexibility: Triple-licensed (GPL-3.0, Apache-2.0, MulanPSL-2.0) for broad ecosystem compatibility
- Crates.io Publication: Available as a standalone library for reuse in other projects
The crate serves as a foundational component that other ArceOS modules can depend on for timer-based functionality, from interrupt handling to task scheduling.
Sources: Cargo.toml(L7 - L12) README.md(L3 - L5)