ucore操作系统Lab3虚拟内存管理试验报告(含challenge)
更新时间:2023-03-10 13:46:01 阅读量: 教育文库 文档下载
- ucore操作系统推荐度:
- 相关推荐
Lab3试验报告
练习1:给未被映射的地址映射上物理页
问题分析:
当启动分页机制以后,如果一条指令或数据的虚拟地址所对应的物理页不在内存中,或者访问权限不够,那么就会产生页错误异常。其具体原因有以下三点:
1. 页表项全为0——虚拟地址与物理地址未建立映射关系或已被撤销。 2. 物理页面不在内存中——需要进行换页机制。 3. 访问权限不够——应当报错。
根据以上三点错误原因,完成页错误处理函数do_pgfault()。
大体思路:
do_pgfault()函数从CR2寄存器中获取页错误异常的虚拟地址,根据error code来查找这个虚拟地址是否在某一个VMA的地址范围内,并且具有正确的权限。如果满足上述两个要求,则需要为分配一个物理页。 关键代码:
//尝试获得页表入口
if ((ptep = get_pte(mm->pgdir, addr, 1)) == NULL) { //如果找不到入口,是非法访问,退出 cprintf(\); goto failed; }
//页表不存在,页表项全为0 if (*ptep == 0) {
//尝试申请一个页,如果申请失败,就是内存不足了,退出 if (pgdir_alloc_page(mm->pgdir, addr, perm) == NULL) { cprintf(\); goto failed; }
}
练习2:补充完成基于FIFO()的页面替换算法。
问题分析:
根据练习1,当页错误异常发生时,有可能是因为页面保存在swap区或者磁盘文件上造成的,练习2需要利用页面替换算法解决这个问题。 大体思路:
页面替换主要分为两个方面,页面换出和页面换入。
页面换入主要在vmm.c中的do_pgfault()函数实现;页面换出主要在在换入时,需要先检查产生访问异常的地址是否属于某个vma表示的合法虚
swap_fifo.c中的swap_out_vistim()函数实现。
拟地址,并且保存在硬盘的swap文件中(对应的PTE的高24位不为0)。如果满足以上亮点,则执行swap_in() 函数换入页面。
换出则相对简单,当申请空闲页面时,alloc_pages()函数不能获得空闲页,
则需要调用swap_out()函数换出不常用的页面。
关键代码:
1. 页面换入的关键代码
//页表项非空,可以尝试换入页面 else {
if(swap_init_ok) {
struct Page *page=NULL;
//根据mm结构和addr地址,尝试将硬盘中的内容换入至page中 //此时的page还没有加入到队列中 if ((ret = swap_in(mm, addr, &page)) != 0) { cprintf(\); goto failed; }
//建立虚拟地址和物理地址之间的对应关系 page_insert(mm->pgdir, page, addr, perm); //将此页面设置为可交换的
swap_map_swappable(mm, addr, page, 1); } else {
cprintf(\,*ptep); goto failed;
} }
2. 页面换出的关键代码
FIFO替换算法会维护一个队列,队列按照页面调用的次序排列,越早被加载到内存的页面会越早被换出。下面几个关键函数在swap_out()中被调用。
a) _fifo_swap_out_victim()函数是用来查询哪个页面需要被换出。
static int
_fifo_swap_out_victim(struct mm_struct *mm, struct Page ** ptr_page, int in_tick) {
list_entry_t *head=(list_entry_t*) mm->sm_priv; assert(head != NULL); assert(in_tick==0);
list_entry_t *le = head->prev; assert(head!=le);
struct Page *p = le2page(le, pra_page_link); //将进来最早的页面从队列中删除 list_del(le); assert(p !=NULL);
//将这一页的地址存储在ptr_page中 *ptr_page = p; return 0; }
b) _fifo_map_swappable()函数将最近被用到的页面添加到算法所维
护的次序队列
static int
_fifo_map_swappable(struct mm_struct *mm, uintptr_t addr, struct Page *page, int swap_in) {
list_entry_t *head=(list_entry_t*) mm->sm_priv;
list_entry_t *entry=&(page->pra_page_link);
assert(entry != NULL && head != NULL); list_add(head, entry); return 0; }
Challenge:实现识别dirty bit的extended clock页替换算法
问题分析:
算法根据页面近期是否被修改从而决定该页面是否应当被换出。所以在查询空闲页时,需要加上对dirty bit的判断。 大体思路:
当操作系统需要淘汰页时,对当前指针指向的页所对应的页表项进行查询,
如果dirty bit为0,则把此页换出到硬盘上;如果dirty bit为1,则将dirty bit置为0,继续访问下一个页。
大致步骤:
根据mmu.h中定义的属性位,查找到dirty bit所对应的位置:
#define PTE_D 0x040 // Dirty
根据新的替换算法思想编写函数_extended_clock()。 最后需要更改默认替换算法。
关键代码:
static int
_extended_clock_swap_out_victim(struct mm_struct *mm, struct Page ** ptr_page, int in_tick) {
list_entry_t *head=(list_entry_t*) mm->sm_priv; assert(head != NULL); assert(in_tick==0);
//将head指针指向最先进入的页面 list_entry_t *le = head->prev; assert(head!=le);
//查找最先进入并且未被修改的页面 while(le!=head) {
struct Page *p = le2page(le, pra_page_link); //获取页表项
pte_t *ptep = get_pte(mm->pgdir, p->pra_vaddr, 0); //判断获得的页表项是否正确 if(*ptep<0x1000)
break;
//判断dirty bit if(!(*ptep & PTE_D)) {
//如果dirty bit为0,换出 //将页面从队列中删除 list_del(le); assert(p !=NULL);
//将这一页的地址存储在ptr_page中
*ptr_page = p; return 0; } else {
//如果为1,赋值为0,并跳过 *ptep &= 0xffffffbf;
}
}
le = le->prev;
//如果执行到这里证明找完了一圈,所有页面都不符合换出条件 //那么强行换出最先进入的页面 le = head->prev; assert(head!=le);
struct Page *p = le2page(le, pra_page_link); //将进来最早的页面从队列中删除 list_del(le); assert(p !=NULL);
//将这一页的地址存储在ptr_page中 *ptr_page = p; return 0; }
运行截图:
}
}
le = le->prev;
//如果执行到这里证明找完了一圈,所有页面都不符合换出条件 //那么强行换出最先进入的页面 le = head->prev; assert(head!=le);
struct Page *p = le2page(le, pra_page_link); //将进来最早的页面从队列中删除 list_del(le); assert(p !=NULL);
//将这一页的地址存储在ptr_page中 *ptr_page = p; return 0; }
运行截图:
正在阅读:
ucore操作系统Lab3虚拟内存管理试验报告(含challenge)03-10
路由器的端口映射方法03-31
高处作业施工安全监理细则11-02
孙犁小说的特点分析合集共四篇10-16
中级管道工技能实操题04-09
“刘三姐”创作大事记04-05
鹤岗三中2014-2015年答案05-01
七年级生物下册 4.13.1 关注生物圈 - 环境在恶化课时达标练习(含解析) 苏教版12-27
知晓率与满意度调查问卷04-08
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- challenge
- 试验
- 操作系统
- 内存
- 虚拟
- 报告
- ucore
- 管理
- Lab3
- 北师数学七年级上难题二则:已知O为直线AB上的一点
- 很好C语言练习题免财富值
- 玄关一窍
- 消防安全技术实务重点+考点+口诀 - 图文
- 注塑模具的设计及说明
- 无锡展鹏门机的电气接线及调试 - 图文
- 活动策划执行合同(标准版)
- 麻醉学中级考试之基础知识题库801-900
- 《水利工程营业税改征增值税计价依据调整办法》办水总2016132号
- 学前教育专业教学大纲
- 小学读书活动方案(共9篇)
- 九年级物理全册18.1电能的产生教案(新版)沪科版 - 图文
- 正点原子的 TFT函数手册
- 我心目中理想的学生
- 天津理工大学C语言复习资料
- 英语教学中学生的主体作用
- 投资与筹资循环审计案例
- 填写要求及示范
- 对我国民事抗诉制度的探讨
- 武汉市政府批复的《武汉临空经济区总体发展规划》