2. 物理内存管理

实验要求

  1. 阅读理解文档第四章。
  2. 回答:如果 OS 无法提前知道当前硬件的可用物理内存范围,请问你有何办法让 OS 获取可用物理内存范围?(2 分)
  3. 编程:实现 FirstFitAllocator ,接口参考 SegmentTreeAllocator ,并完成内部实现(可参考 ucore 中的算法)。(8 分)

实验指导

  • First Fit 就是蛮力寻找第一块大小合适的连续内存进行分配。
  • 这里可以简单的用一维数组维护。由于没有性能要求,

    2. 物理内存管理 - 图1

    查找都行。(可以参考 ucore ,不过那个相对复杂一些)

  • 测试方法:python3 test.py lab2,结果保存在 lab2.result 文件中。

说明:需要参考 init.rs 增加部分接口

  1. pub fn init_allocator(l: usize, r: usize) {
  2. FRAME_ALLOCATOR.lock().init(l, r);
  3. }
  4. pub fn alloc_frame() -> Option<Frame> {
  5. alloc_frames(1)
  6. }
  7. // 分配 cnt 块连续的帧
  8. pub fn alloc_frames(cnt: usize) -> Option<Frame> {
  9. if let Some(frame) = FRAME_ALLOCATOR.lock().alloc(cnt) {
  10. return Some(Frame::of_ppn(frame));
  11. }
  12. return None;
  13. }
  14. pub fn dealloc_frame(f: Frame) {
  15. dealloc_frames(f, 1)
  16. }
  17. // 释放以 f 为起始地址,cnt 块连续的帧
  18. pub fn dealloc_frames(f: Frame, cnt: usize) {
  19. FRAME_ALLOCATOR.lock().dealloc(f.number(), cnt)
  20. }

测试文件

如果输出了 8/8 ,则表示通过测试,基 ying 本 gai 没有问题