清华大学操作系统课程lab2实验报告.docx

清华大学操作系统课程lab2实验报告.docx

ID:59148652

大小:171.08 KB

页数:5页

时间:2020-09-11

清华大学操作系统课程lab2实验报告.docx_第1页
清华大学操作系统课程lab2实验报告.docx_第2页
清华大学操作系统课程lab2实验报告.docx_第3页
清华大学操作系统课程lab2实验报告.docx_第4页
清华大学操作系统课程lab2实验报告.docx_第5页
资源描述:

《清华大学操作系统课程lab2实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、物理内存管理实验报告练习0:合并lab1和lab2书上提示使用“diff/merge”工具来合并lab1和lab2的代码,可是没有找到这款工具,但是被推荐使用meld工具,也能很方便地将不同目录的文件异同比较出来,可以一一手动合并,删除,增加代码,避免了不必要的错误。这部分主要合并的文件有kdebug.c、trap.c。练习1:实现firstfit连续物理内存分配算法。完成合并代码的工作之后,makeqemu执行lab2,结果出现错误提示:提示default_pmm.c的第283行出现错误,打开文件

2、看,发现这句话出现在函数staticvoiddefault_check(void)中,这是一个检查函数,并且提示不要修改。当然,为了调试工作,在检查函数中加一些代码还是可以的。例如通过cprintf输出一些调试信息,除此之外,还发现check函数中使用大量assert函数,大概作用是当参数条件不为1的时候就弹出debugminitor。也可以用来调试作用。起初,我仔细看了basic_check函数,它的作用只是做了一些简单的分配释放的操作,并且也没出错,后面看了default_check函数之后也没

3、找到问题所在。再然后是重点分析default_alloc_pages和default_free_pages函数,结合list_add函数看了许久才发现它的空闲块插入顺序有问题:每次插入都是从free_list的头部插入,事实上,应该保持free_list的顺序,地址小的空闲块应该放在前面,地址大的空闲块应该放在后面,以便firstfit算法的从头快速查找。找到问题后大致明白了这个exercise的目标:这个练习主要就是完善default_alloc_pages和default_free_pages。

4、关键变量:#definefree_list(free_area.free_list)//空闲块的链表,但是不指向具体页#definenr_free(free_area.nr_free)//空闲块的个数关键函数:list_init(&free_list);//初始化空闲块链表SetPageProperty(base);ClearPageProperty(base);关键宏:le2page(le,page_link);//由链表指针得到对应页的地址(一)Allocpages:用firstfit算法寻找空

5、闲块list_entry_t*le=&free_list;while((le=list_next(le))!=&free_list){structPage*p=le2page(le,page_link);if(p->property>=n){page=p;break;}}(一)Allocpages:删除空闲块,若有剩余则把剩余的部分插入空闲块链表if(page!=NULL){list_del(&(page->page_link));if(page->property>n){structPage*p=

6、page+n;p->property=page->property-n;//list_add(&free_list,&(p->page_link));//Excise1:MyCodelist_add(page->page_link.prev,&(p->page_link));/////////应该要插在链表合适的位置}nr_free-=n;ClearPageProperty(page);}(二)Freepages:删除指定块相邻的空闲块,合并成大空闲块while(le!=&free_list){p=

7、le2page(le,page_link);le=list_next(le);if(base+base->property==p){base->property+=p->property;ClearPageProperty(p);list_del(&(p->page_link));}elseif(p+p->property==base){p->property+=base->property;ClearPageProperty(base);base=p;list_del(&(p->page_link

8、));}}(三)Freepages:把大空闲块假如空闲块链表//Excise1:MyCode把新的大空闲块插入free_listle=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_

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。