miniOS系统缺页异常处理程序

我要开发同款
Tianyi Wang2022年07月26日
357阅读

作品详情

1. 功能
编写exec_noload()函数,使得加载程序时不会拷贝elf信息,构造缺页条件,在初次运行时便会触发缺页中断。
重写page_fault_handler()函数,在进行内核状态检查和越界检查后,判断缺页位置是在交换设备、text段、data段或是栈段,若是在交换设备中调用swap_in()将页面换进;若是在text或data段,先调用page_malloc()为页面分配内存后,调用copy_page_from_file()函数将页面从文件拷贝至内存;若是在栈段,则直接申请一个无名页。
swap管理是针对每个进程的,进程初始化时会申请一页作为swap的虚拟pde,pde地址会被记录在task.swap_cr3中,而pte则是动态建立的,这样就做到了swap设备中的页面管理和内存中的页面管理一致。其中pde表项20位pte表物理地址和12位叶子个数组成,pte表项由20位swap下标和12位标识组成。
对于全局需要调度的页面我们维护一个Page的链表page_sche_list,对于进程我们维护三种类型的Page链表swapped_pages、unsched_pages和sched_pages,即在swap中的页面、无需换出调度的页面和需要换出的调度的页面。
在缺页处理的过程中涉及到对页面内存的申请,若出现out of memory的情况,则需要调用oom()进行处理,在oom()我们尝试实验了三种不同的页面调度算法:FIFO、CLOCK和优化的CLOCK算法。
2. 本人任务
与他人合作完成,工作量约占40%。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论