实验4,名为"虚拟内存管理", 是数据科学与计算机学院2018级软工3班学生米家龙进行的一次课程实践。该实验旨在让学生深入理解虚拟内存的核心概念,包括页目录项(PageDirectoryEntry)和页表项(PageTableEntry)在ucore虚拟内存管理中的作用,以及页替换算法的设计与实现。
页目录项和页表项是虚拟内存管理的关键组件。PageDirectoryEntry负责存储更高层次的页表索引,而PageTableEntry则存储具体的物理页地址。它们一起构成了内存的虚拟映射结构,使得程序可以使用虚拟地址来访问内存,而ucore通过这些映射关系在物理内存中找到所需的页。当发生PageFault异常时,即试图访问的页不在内存中,硬件会触发缺页中断,此时ucore的缺页服务例程会被调用,它会根据预定义的替换策略(如FIFO)来查找合适的物理页,更新页表,然后继续执行程序。
实验要求学生熟悉ucore Lab的代码结构,特别是vmm.c文件和do_pgfault()函数,该函数在处理PageFault异常时起到关键作用。练习1需要编写代码,将未被映射的地址与物理页关联起来,同时理解并应用do_pgfault()函数中的相关注释。练习2则涉及基于FIFO的页面替换算法的实现,包括_fifo_map_swappable()和_fifo_swap_out_victim()函数的编写,以及对内存页特征的识别和换入换出操作的时机。
在这个实验中,学生需要理解虚拟内存管理的核心原理,比如虚拟地址到物理地址的转换过程,以及如何通过页表项动态管理内存。实验与实际操作系统中的虚拟内存管理有显著区别,后者更为复杂,需要处理更多的并发和系统级交互,例如进程调度、内存分配、I/O操作等。
实验成果包括分析ucore_lab提供的参考答案,对比自己的实现,并解释差异。此外,实验还要求学生思考实验中的知识点与操作系统原理的关系,如页替换算法对应着操作系统中页式虚拟内存管理和内存管理策略。尽管实验简化了部分细节,但它依然是理解操作系统底层工作原理的重要实践环节。
在整个实验过程中,学生可以深化对以下知识点的理解:
1. 虚拟内存与物理内存的映射机制
2. 缺页异常处理流程
3. 页表项和页目录项的作用
4. 基于FIFO的页面替换算法
5. OS中内存管理的复杂性与实验简化版本的异同
对于实验中没有直接对应的实际操作系统原理,可能包括进程间的内存隔离、内存分配算法、内存碎片管理等内容,这些都是操作系统高级设计中不可或缺的部分。通过这次实验,学生可以建立起从底层硬件抽象到上层操作系统的认识框架。