清华大学操作系统lab3实验报告
更新时间:2023-09-05 06:41:01 阅读量: 教育文库 文档下载
- 清华大学操作系统教材推荐度:
- 相关推荐
实验3:虚拟内存管理
练习1:给未被映射的地址映射上物理页
ptep=get_pet(mm->dir,addr,1);
if(ptep == NULL){ //页表项不存在
cprintf("get_pte in do_pgfault failed\n");
goto failed;
}
if (*ptep == 0) {
//物理页不在内存之中
//判断是否可以分配新页
if (pgdir_alloc_page(mm->pgdir, addr, perm) == NULL) {
cprintf("pgdir_alloc_page in do_pgfault failed\n");
goto failed;
}
}
else{
if(swap_init_ok) {
struct Page *page=NULL;
ret = swap_in(mm, addr, &page);
if(ret != 0){ //判断页面可否换入
cprintf("swap_in in do_pgfault failed\n");
goto failed;
}
//建立映射
page_insert(mm->pgdir, page, addr, perm);
swap_map_swappable(mm, addr, page, 1);
}
else {
cprintf("no swap_init_ok but ptep is %x, failed\n",*ptep);
goto failed;
}
}
ret = 0;
failed:
return ret;
}
练习2:补充完成基于FIFO算法
_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;
}
pra_page_link用来构造按页的第一次访问时间进行排序的一个链表,这个链表的开始表示第一次访问时间最近的页,链表的尾部表示第一次访问时间最远的页。
sm_priv指向用来连接记录页访问情况的链表头。
_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;
}
Challenge:实现识别dirty bit 的extended clock 页替换算法
该算法中,淘汰一个页面时要考虑被淘汰的页面是否被访问过,同时该页面是否被修改过。淘汰修改过的页面还需要写回硬盘,使得其置换代价大于未修改过的页面,该算法不但希望淘汰的页面是最近未使用的页,而且还希望被淘汰的页是在主存驻留期间其页面内容未被修改过的。
因此通过访问页表项中的访问位和修改位即可完成识别。
在mmu.h中可以看到页表中各位代表的含义:
在编程中主要会用到的就是PTE_A和PTE_D两个位置。
首先将所有访问页连接成一个环,因此_fifo_map_swappable函数基本保持不变。
_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;
_fifo_swap_out_victim与之前的置换函数相比多了几重循环,需要对队列进行多次扫描,达到减少磁盘I/O操作次数。
_fifo_swap_out_victim(struct mm_struct *mm, struct Page ** ptr_page, int in_tick)
{
int flag=0;//设置标志 list_entry_t *head=(list_entry_t*) mm->sm_priv; assert(head != NULL); assert(in_tick==0); list_entry_t *le = head->next; while(le != head) { struct Page *p = le2page(le,pra_page_link);
//获取对应页的页表项
pet_t *ptep = get_pte(mm->pgdir , p->pra_vaddr , 0);
if(!(*ptep & PTE_D) && !(*ptep & PTE_A))//最近未被使用也未被修改
{
flag = 1;
list_del(le);
assert(p!=NULL);
*ptr_page = p;
}
le = le->next;
}
If(!flag)
{
le = le->next;
while(le != head)
{
struct Page *p = le2page(le,pra_page_link);
pet_t *ptep = get_pte(mm->pgdir , p->pra_vaddr , 0);
if( (*ptep & PTE_D) && !(*ptep & PTE_A)) ////最近未被使用但被修改
{
flag = 1;
list_del(le);
assert(p!=NULL);
*ptr_page = p;
}
le = le->next;
}
If(!flag)
} { le = le->next; while(le != head) { struct Page *p = le2page(le,pra_page_link); pet_t *ptep = get_pte(mm->pgdir , p->pra_vaddr , 0); if( !(*ptep & PTE_D) && (*ptep & PTE_A)) //最近被使用但未被修改 { flag = 1; list_del(le); assert(p!=NULL); *ptr_page = p; } le = le->next; } If(!flag) { le = le->next; while(le != head) { struct Page *p = le2page(le,pra_page_link); pet_t *ptep = get_pte(mm->pgdir , p->pra_vaddr , 0); if( (*ptep & PTE_D) && (*ptep & PTE_A)) //最近被使用也被修改 { flag = 1; list_del(le); assert(p!=NULL); *ptr_page = p; } le = le->next; } return 0;
重新运行程序后,可以看到页面成功置换。
正在阅读:
清华大学操作系统lab3实验报告09-05
《永远的雷锋》观后感04-02
最新语文S版小学语文二年级上册《望庐山瀑布》优秀教案(精品)04-21
怎样上好一堂数学课06-09
变化多端的云作文450字07-05
钻探技术工作总结(精选多篇)09-28
自行车编幅条05-13
当今中国大学生毕业应该先就业03-03
打造魅力班会课05-31
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 清华大学
- 操作系统
- 实验
- 报告
- lab3
- 四年级数学 商的变化规律练习题
- IPQC检验标准
- 第七章 国际新兴服务贸易产业(1)
- ORACLE_EBS ERP财务超全面操作和培训手册(总账GL、应收AR、应付AP、固定资产FA、现金TA)
- 2008—2012植物生理生化考研真题
- 建筑给水排水工程习题及答案
- 海南美食印象
- 新视野大学英语(第三版)读写教程1答案(Units1-6)
- 2017年中国铜火锅市场调研及投资前景评估(目录)
- 浅析软装在室内设计中的运用
- 2012年度领导班子工作实绩考核目标责任书
- 2014科学总复习第14课时 电和磁
- 【新】2019届中考数学复习第八章统计与概率8.1抽样与数据分析练习
- 十七大新党章核心内容
- 新世纪大学英语综合教程3(第二版)unit1-8习题答案全
- 空间形态
- 广西蒙山县第一中学2018_2019学年高二生物下学期第一次月考试题2019042602107
- 【范文】最新精选行业工作范文·年度安全生产费用提取及使用计划
- 四川农业大学本科生毕业论文开题报告
- 人教版必修2 Unit5 Music warming up reading