4 个版本 (1 个稳定版本)
1.0.0 | 2024 年 1 月 27 日 |
---|---|
1.0.0-rc3 | 2024 年 1 月 16 日 |
1.0.0-rc2 | 2024 年 1 月 15 日 |
1.0.0-rc1 | 2024 年 1 月 12 日 |
#160 在 内存管理
每月 32 次下载
68KB
1.5K SLoC
这是什么?
Vmem 是由 Jeff Bonwick 和 Jonathan Adams 在 杂志和 Vmem:扩展 Slab 分配器以支持多个 CPU 和任意资源 中提出的资源管理系统。它提供任何不透明数值“资源”的 O(1) 分配和释放,例如内存块或进程 ID。
此特定实现为在我的自定义内核 velvet
内部使用提供了安全的 vmem 分配器。我将其作为我的 AP 计算机科学原理创建任务提交。它旨在与上述论文中规定的规范完全一致,但是,为了纯实用性,可能已做出一些更改。
缺少什么?
由于在更具体的堆分配器中更容易实现,因此省略了量子缓存。然而,仍然建议缓存分配,尤其是在用作源的事务中。
此外,不支持使用 AllocPolicy::NextFit
的约束分配,这并不非常有用,尽管实现它需要大量工作。
包功能
nightly
- 启用对所有类型实现alloc::Allocator
的实现。std
- 启用对lock::Lock
的实现,用于std::sync::Mutex
spin
- 启用对lock::Lock
的实现,用于spin::Mutex
参考
本库的编写参考了 xvanc 的 Rust 实现,以及它所参考的 NetBSD C 实现。没有直接复制任何代码,并修复了发现的所有问题。上述两种实现都是为了放置在它们编写的内核中而设计的。相比之下,此实现旨在在几乎任何环境中工作(如测试所示,它甚至可以在用户空间中工作)
问题报告
如果您在此库中发现任何问题,包括错误、内存泄漏、恐慌(不包括以下列出的 xalloc
的恐慌),或未定义的行为,请在此 GitHub 仓库 上提交一个问题。
许可
本库的许可协议为 MIT 或 Apache 2.0 许可证,您可选择其中之一。
依赖
~1MB
~16K SLoC