1 / 16
文档名称:

linux操作标准系统实验三CB.doc

格式:doc   大小:1,692KB   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

linux操作标准系统实验三CB.doc

上传人:jianjian401 2019/2/19 文件大小:1.65 MB

下载得到文件列表

linux操作标准系统实验三CB.doc

文档介绍

文档介绍:电子信息学院实验报告书课程名:《Linux操作系统实验》题目:实验三存储管理试验实验类别【验证】班级:BX0907学号:24姓名:朱杰评语:实验态度:认真()一般()差()实验结果:正确()部分正确()错()实验理论:掌握()熟悉()了解()不懂()操作技能:强()一般()差()实验报告:好()一般()差()成绩:指导教师:胡静批阅时间:年月日成绩:指导教师:宁建红批阅时间:年月日实验内容或题目①(1)模拟初始内存页面分配(数组、结构体均可)(2)实现Buddyheap算法(3)通过键盘输入随机产生申请和释放操作请求:r8代表申请8个页面。释放:f4代表释放4个页面。注意:heap的分割和合并操作。(4)每个申请或释放操作,都在屏幕上显示操作前与操作后的内存分配的对比图。(5)实验假设申请和释放的页数都是2的整次幂。②(1)建立工作集页面模型。(2)利用随机函数动态生成进程访问页面的序列号。(3)实现FIFO页面淘汰算法。(4)实现页故障率反馈模型。实验目的与要求①(1)用C语言是实现模拟Linux系统中连续内存分配用到的伙伴对算法。(2)通过链表的形式输出在内存申请和释放过程中内存状态的对比图。②(1)了解工作集模型的原理及其特点。(2)实现页故障率反馈模型。;#include<>#include<>typedefstructblock//定义一个内存块的结构体{ intsize; //块的大小 intstart;//块的起始位置 intloc; //是否占用 structblock*next;//指向下一个块的指针 structblock*prior;//指向前一个块的指针}block;intmaxsize=512;//可分配的内存空间总量block*note;//初始化的结点block*id[10]; //链表头的数组//打印内存状态函数voidprintmem(){ inti; for(i=9;i>=0;i--){ printf("%d->",i); block*temp=(structblock*)malloc(sizeof(structblock)); temp=id[i]->next; while(temp!=NULL){ printf("%d(%s)(%d)->",temp->size,temp->loc==1?"占用":"空闲",temp->start);//输出内存块的大小、状态、起始位置 temp=temp->next; } printf("\n"); }}//初始化voidinit(){ inti; for(i=0;i<9;i++){ id[i]=(structblock*)malloc(sizeof(structblock)); id[i]->prior=id[i];id[i]->next=NULL; } note=(structblock*)malloc(sizeof(structblock)); note->size=maxsize; note->start=0; note->loc=0; note->next=NULL; id[9]=(structblock*)malloc(sizeof(structblock)); id[9]->next=note; id[9]->prior=id[9]; note->prior=id[9]; printmem();}intpower(intx,inty){//计算x的y次幂 intk=0,tmp=1; for(;k<y;k++){ tmp=tmp*x; } returntmp;}introot(intx,inty){//计算y的开x次方 intresult=y,count=0; while(result!=1){ result=result/x; count++; } returncount;}//对内存块进行拆分intsplit(inttempId){ block*pend=(structblock*)malloc(sizeof(structblock));//被拆分结点 block*cend=(structblock*)malloc(sizeof(structblock));//挂载点 block*newf=(structblock*)malloc(sizeof(structblock));//拆分后的第二个结点 block*newu=(structblock*)malloc(sizeof(structblock));//拆分后的第一个结点 pend=id[tempId]->next; intflag=0,isFirst=0; while(pend!=NULL){ if(p