Skip to content

anxi710/tju-os-experiment

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unix V6++ 离散化内存管理实现

同济大学 2024-2025 学年春季学期 操作系统课设(dr 老师)

本项目基于 Unix V6++ 教学操作系统(同济大学内部使用),完成了从连续存储管理向 页式离散化存储管理 的全面迁移。通过重构内存管理、页表机制和进程资源生命周期,支持现代操作系统所采用的页框级物理内存分配方式,并引入了 Copy-On-Write(COW)机制以优化 fork 系统调用性能。

✨ 项目亮点

  1. 离散物理内存管理(Page-based)

    • 使用 位示图(bitmap) 替代传统的空闲分区表 MapNode 实现页框级内存管理;
    • 支持最大 0x2000(8192)个页框,位图结构固定占用 0x400 字节;
    • 重构 PageManager 类,彻底移除对 Allocator 的依赖,实现真正的页式管理。
  2. 精简高效的二级页表机制

    • 移除“相对虚实地址映射表”,直接使用页目录 + 用户页表实现地址转换;
    • 每个进程持有一份私有的 1# 用户页表,其他页表均可共享;
    • 通过切换页目录中 1# PDE 的 BaseAddr 实现进程切换的页表更新,简化 Swtch() 流程;
    • 进程创建时即初始化用户页表,避免 fork -> exec 路径中的 Page Fault。
  3. 进程资源全生命周期离散化支持

    • 精细化控制进程图像:保留 PPDA 区、释放旧图像内存、重建用户页表;
    • Exec、Exit、Expand 等函数均重构以支持页框级的内存释放与重新分配;
    • SStack() 与 SBreak() 分别支持堆栈区按页动态增长。
  4. Copy-On-Write(COW)机制实现

    • 为页框添加引用计数机制,仅在写时触发复制;
    • fork 调用中父子进程共享物理页框,避免无效复制;
    • 在写操作触发 Page Fault 时分配新页框并重新建立映射;
    • 提升性能同时降低内存开销,支持对大型进程的高效复制。

🛠️ 技术细节概览

模块 描述
Bitmap.h 定义位图结构,用于跟踪页框分配状态
PageManager.cpp 重写 AllocMemory 和 FreeMemory,采用页式算法
MemoryDescriptor.cpp 每个进程维护独立的 1# 用户页表,负责建立页表映射
ProcessManager.cpp 精简 Swtch 与 NewProc,支持离散页表管理与 COW 建立
Exception.cpp 在 Page Fault 中处理写操作触发的 COW 逻辑

目录说明

.
├── README.md
├── docs    # 相关文档
├── note    # 相关笔记
└── oos     # Unix V6++ 相关文件
    └── src # 源代码

补充

在 note/ 下有相关的设计文档可供参考。

oos/ 下只放置了修改过的文件,保留了原始路径,如有遗漏可查看设计文档自行补充。

注意:该学期为 dr 老师第一次独立开班,因此不保证后面学期会沿用该作业,自行甄别。

设计文档中的所有思考只代表我当时的看法,本人保留自省的权利

About

同济大学 2024-2025 学年春季学期 操作系统课设实验项目

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published