#pid #allocator #operating-system

no-std pid-allocator

适用于无std环境的简单PID分配器

6个版本

0.1.5 2024年4月7日
0.1.4 2024年4月7日

#98无标准库

Download history 3/week @ 2024-05-17 2/week @ 2024-05-24 9/week @ 2024-07-05

每月下载量197次

MIT 许可证

16KB
158

PidAllocator

概述

PidAllocator crate提供了一种线程安全的、高效的PID(进程标识符)分配系统,适用于需要动态分配和回收PID的系统。此crate旨在在no_std环境中工作,使其适用于嵌入式系统、操作系统和其他标准库设施不可用的情况。

特性

  • 线程安全分配:使用ArcSpinMutex确保PID可以在多个线程中安全地分配和回收。
  • 高效回收:实现了一种快速的分配策略,有效地回收PID,确保PID空间的最小浪费。
  • no_std 兼容性:设计用于在no_std环境中工作,使其非常适合低级系统编程。

使用

将以下内容添加到您的Cargo.toml文件中

[dependencies]
pid_allocator = "0.1.5"

然后在您的Rust代码中

#![no_std]

extern crate alloc;
use pid_allocator::{PidAllocator, Pid};

const ORDER: usize = 32; // Customize based on your requirements

fn main() {
    let allocator = PidAllocator::<ORDER>::new();
    
    // Attempt to allocate a PID
    if let Some(pid) = allocator.allocate() {
        // Use the PID for your purposes
        println!("Allocated PID: {}", *pid);
        
        // PID will be automatically recycled when `pid` goes out of scope
    }
}

结构

PidAllocator

管理PID分配和回收的主要结构。

方法

  • new() -> Self:创建PID分配器的新实例。
  • allocate() -> Option<Pid>:分配一个新的PID(如果可用),并将其包装在Pid结构中。
  • contains(usize) -> bool:检查给定的PID是否当前已分配。

Pid

分配的PID的句柄。当释放时自动回收PID。

工作原理

PidAllocator crate使用分层方法来管理PID的分配和回收。每一层代表一组PID,每个PID的状态(已分配或空闲)使用一个usize值中的位来跟踪。分配器扫描这些层以快速找到空闲的PID并在不再使用时回收它们。

贡献

欢迎贡献!请随时提交拉取请求、报告错误和建议特性,通过问题跟踪器进行。

许可证

此包采用MIT许可证


依赖项

~150KB