#resources #resource-constrained #no-alloc #process-id #allocator

no-std vmem

Vmem 是由 Jeff Bonwick 和 Jonathan Adams 在 *[杂志和 Vmem:扩展 Slab 分配器以支持多个 CPU 和任意资源][1]* 中提出的资源管理系统。它提供任何不透明数值“资源”的 O(1) 分配和释放,例如内存块或进程 ID。

4 个版本 (1 个稳定版本)

1.0.0 2024 年 1 月 27 日
1.0.0-rc32024 年 1 月 16 日
1.0.0-rc22024 年 1 月 15 日
1.0.0-rc12024 年 1 月 12 日

#160内存管理

每月 32 次下载

MIT/Apache

68KB
1.5K SLoC

这是什么?

Vmem 是由 Jeff Bonwick 和 Jonathan Adams 在 杂志和 Vmem:扩展 Slab 分配器以支持多个 CPU 和任意资源 中提出的资源管理系统。它提供任何不透明数值“资源”的 O(1) 分配和释放,例如内存块或进程 ID。

此特定实现为在我的自定义内核 velvet 内部使用提供了安全的 vmem 分配器。我将其作为我的 AP 计算机科学原理创建任务提交。它旨在与上述论文中规定的规范完全一致,但是,为了纯实用性,可能已做出一些更改。

缺少什么?

由于在更具体的堆分配器中更容易实现,因此省略了量子缓存。然而,仍然建议缓存分配,尤其是在用作源的事务中。

此外,不支持使用 AllocPolicy::NextFit 的约束分配,这并不非常有用,尽管实现它需要大量工作。

包功能

参考

本库的编写参考了 xvanc 的 Rust 实现,以及它所参考的 NetBSD C 实现。没有直接复制任何代码,并修复了发现的所有问题。上述两种实现都是为了放置在它们编写的内核中而设计的。相比之下,此实现旨在在几乎任何环境中工作(如测试所示,它甚至可以在用户空间中工作)

问题报告

如果您在此库中发现任何问题,包括错误、内存泄漏、恐慌(不包括以下列出的 xalloc 的恐慌),或未定义的行为,请在此 GitHub 仓库 上提交一个问题。

许可

本库的许可协议为 MIT 或 Apache 2.0 许可证,您可选择其中之一。

依赖

~1MB
~16K SLoC