ucore Lab3操作系统设计(理论部分)

本文详细介绍了ucore操作系统实验的页管理机制,包括实验流程、关键数据结构(如mm_struct和vma_struct)以及相关函数。重点讨论了Page Fault异常处理,特别是do_pgfault函数的作用,以及页面置换机制,包括FIFO算法和换入换出时机。此外,还阐述了页替换算法的数据结构设计和检查流程。
摘要由CSDN通过智能技术生成

一、实验流程、关键数据结构和相关函数

1、实验流程

kern init()----->pmm_init()------>pic_init()  idt_init()

------>vmm_init()------>ide_init()------>swap_init()

             

    vmm.c------>check_vma_struck()   check_pgfault()

ucore访问这些“合法”虚拟页时,会由于没有虚实地址映射而产生页访问异常。do_pgfault函数会申请一个空闲物理页,并建立好虚实映射关系,从而使得这样的“合法”虚拟页有实际的物理页帧对应。

swap_init函数首先建立swap_managerswap_manager是完成页面替换过程的主要功能模块,其中包含了页面置换算法的实现。然后会进一步调用执行check_swap函数在内核中分配一些页,模拟对这些页的访问,这会产生页访问异常。可通过do_pgfault来调用swap_map_swappable函数来查询这些页的访问情况并间接调用实现页面置换算法的相关函数,把“不常用”的页换出到磁盘上。

2、关键数据结构

page_fault函数不知道哪些是“合法”的虚拟页,原因是ucore还缺少一定的数据结构来描述这种不在物理内存中的“合法”虚拟页。为此ucore通过建立mm_structvma_struct数据结构,描述了ucore模拟应用程序运行所需的合法内存空间。当访问内存产生page fault异常时,可获得访问的内存的方式(读或写)以及具体的虚拟内存地址,这样ucore就可以查询此地址,看是否属于vma_struct数据结构中描述的合法地址范围中,如果在,则可根据具体情况进行请求调页/页换入换出处理;如果不在,则报错。

 

vma_struct述应用程序对虚拟内存“需求”(vmm.h),以及针对vma_struct的函数操作。(简称vma变量)

struct vma_struct {
    // the set of vma using the same PDT
    struct mm_struct *vm_mm;
    uintptr_t vm_start;      // start addr of vma
    uintptr_t vm_end;      // end addr of vma
    uint32_t vm_flags;     // flags of vma
    //linear list link which sorted by start addr of vma
    list_entry_t list_link;
};


vm_start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值