




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
物理内存管理实验报告练习0:合并lab1和lab2书上提示使用“diff/merge”工具来合并lab1和lab2的代码,可是没有找到这款工具,但是被推荐使用meld工具,也能很方便地将不同目录的文件异同比较出来,可以一一手动合并,删除,增加代码,避免了不必要的错误。这部分主要合并的文件有kdebug.c、trap.c。练习1:实现firstfit连续物理内存分配算法。完成合并代码的工作之后,make qemu执行lab2,结果出现错误提示:提示default_pmm.c的第283行出现错误,打开文件看,发现这句话出现在函数static void default_check(void) 中,这是一个检查函数,并且提示不要修改。当然,为了调试工作,在检查函数中加一些代码还是可以的。例如通过cprintf输出一些调试信息,除此之外,还发现check函数中使用大量assert函数,大概作用是当参数条件不为1的时候就弹出debug minitor。也可以用来调试作用。起初,我仔细看了basic_check函数,它的作用只是做了一些简单的分配释放的操作,并且也没出错,后面看了default_check函数之后也没找到问题所在。再然后是重点分析default_alloc_pages和default_free_pages函数,结合list_add函数看了许久才发现它的空闲块插入顺序有问题:每次插入都是从free_list的头部插入,事实上,应该保持free_list的顺序,地址小的空闲块应该放在前面,地址大的空闲块应该放在后面,以便firstfit算法的从头快速查找。找到问题后大致明白了这个exercise的目标:这个练习主要就是完善default_alloc_pages和default_free_pages。关键变量:#define free_list (free_area.free_list)/空闲块的链表,但是不指向具体页#define nr_free (free_area.nr_free)/空闲块的个数关键函数:list_init(&free_list);/初始化空闲块链表SetPageProperty(base);ClearPageProperty(base);关键宏:le2page(le, page_link);/由链表指针得到对应页的地址(一) Alloc pages:用firstfit算法寻找空闲块list_entry_t *le = &free_list; while (le = list_next(le) != &free_list) struct Page *p = le2page(le, page_link); if (p-property = n) page = p; break; (二) Alloc pages:删除空闲块,若有剩余则把剩余的部分插入空闲块链表if (page != NULL) list_del(&(page-page_link); if (page-property n) struct Page *p = page + n; p-property = page-property - n;/list_add(&free_list, &(p-page_link); /Excise 1 :My Code list_add(page-page_link.prev, &(p-page_link);/应该要插在链表合适的位置 nr_free -= n; ClearPageProperty(page);(三) Free pages:删除指定块相邻的空闲块,合并成大空闲块while (le != &free_list) p = le2page(le, page_link); le = list_next(le); if (base + base-property = p) base-property += p-property; ClearPageProperty(p); list_del(&(p-page_link); else if (p + p-property = base) p-property += base-property; ClearPageProperty(base); base = p; list_del(&(p-page_link); (四) Free pages:把大空闲块假如空闲块链表/Excise 1:My Code 把新的大空闲块插入free_list le=list_next(&free_list); if(le=&free_list)/假如之前的删除操作刚好把空闲块链表清空 list_add(&free_list,&(base-page_link); else /找合适的位置把大空闲块入free_listwhile(le!=&free_list)p=le2page(le,page_link);if (pbase)list_add_before(&(p-page_link),&(base-page_link);break;le=list_next(le);if(le=&free_list)/假如找不到比base序号大的页,则放在链表尾部list_add_after(free_list.prev,&(base-page_link); 练习2、实现寻找虚拟地址对应的页表项关键的函数以及宏函数: * PDX(la) = 返回虚拟地址la的页目录索引 * KADDR(pa) : 返回物理地址pa相关的内核虚拟地址 * set_page_ref(page,1) : 设置此页被引用了一次 * page2pa(page): 得到page管理的那一页的物理地址 * struct Page * alloc_page() : 分配一页出来 * memset(void *s, char c, size_t n) : 设置s指向地址的前面n个字节为字节c. pde_t *pdep = &pgdirPDX(la);/得到页目录项 if (!(*pdep & PTE_P) /假如页目录项不存在 struct Page *page; if (!create | (page = alloc_page() = NULL) /假如不需要分配页或者分配页失败 return NULL; set_page_ref(page, 1);/设置该页被引用了一次 uintptr_t pa = page2pa(page);/得到该页物理地址 memset(KADDR(pa), 0, PGSIZE);/物理地址转虚拟地址,然后把该页初始化 *pdep = pa | PTE_U | PTE_W | PTE_P;/设置可读,可写,存在位 return &(pte_t *)KADDR(PDE_ADDR(*pdep)PTX(la); /KADDR(PDE_ADDR(*pdep):这部分是由页目录项地址得到关联的页表物理地址,再转成虚拟地址 /PTX(la):返回虚拟地址la的页表项索引 /最后返回的是虚拟地址la对应的页表项入口的地址练习3、remove_pte()函数的完善* struct Page *page pte2page(*ptep): 得到页表项对应的那一页 * free_page : 释放一页 * page_ref_dec(page) : 减少该页的引用次数,返回剩下引用此时 * tlb_invalidate(pde_t *pgdir, uintptr_t la) : 当修改的页表是进程正在使用的那些页表,使TLB的那一页无效if (*ptep & PTE_P) /假如页表项存在struct Page *pa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中职政治 (道德与法治)部编高教版(2023)心理健康与职业生涯第12课 终身学习 持续发展一等奖教学设计
- 九年级物理下册 第九章 家庭用电 2 家庭电路教学设计 (新版)教科版
- 2024中粮粮谷营销公司校园招聘笔试参考题库附带答案详解
- 采购控制程序培训
- 妇产科护理查房记录
- 成人培训学校2025年战略计划表
- 初中语文人教部编版八年级下册12《诗经》二首综合与测试教学设计
- 六年级数学上册 六 分数混合运算第5课时 解决问题(三)教学设计 西师大版
- 九年级化学下册 第7单元 常见的酸和碱 第1节 酸及其性质 第1课时 常见的酸教学设计 (新版)鲁教版
- 人教版六年级上册1 圆的认识教案及反思
- DL-T5181-2017水电水利工程锚喷支护施工规范
- 大学校园白蚁防治方法
- 地勘安全生产承诺书
- 医院专项资金使用方案
- 水利工程运维水利工程运行和日常维修养护方案
- 理论力学简明教程(第二版)课后答案陈世民
- 2016医学机能学实验教程
- 2024年10月公务员制度自考试卷含解析
- 幼儿园课件:谷雨绘本故事-养蚕忙
- 高级审计师《审计理论与审计案例分析》真题
- 高中生班会课课件 爱情三角理论爱情的本质
评论
0/150
提交评论