您好,欢迎访问三七文档
操作系统实验报告-1-湖南师范大学工学院操作系统实验报告姓名:汪思源年级:2011级专业:计算机科学与技术学号:2010180504任课教师:肖柳明开课时间:2012~2013学年第二学期操作系统实验报告-2-实验(一)可变分区管理一、实验目的:1、加深对可变分区存储管理的理解;2、提高用C语言编制大型系统程序的能力,特别是掌握C语言编程的难点:指针和指针作为函数参数;3、掌握用指针实现链表和在链表上的基本操作。二、实验内容:参照教材P123-P125的内容,编写一个C程序,用char*malloc(unsignedsize)函数向系统申请一次内存空间(如size=1000,单位为字节),用循环首次适应算法、最佳适应算法和最坏适应算法,模拟UNIX可变分区存储管理,实现对内存区的分配和释放管理。三、程序分析与设计:1、算法思想和概要设计:首先开辟一块内存空间,在一次次的申请内存中会将空间划成若干个部分,慢慢的会将所编的算法体现出来,其中包括循环首次适应算法、最佳适应算法、最坏适应算法。在最佳与最坏适应算法中,要将剩于的内存空间按从小到大分配。2、重要数据结构和变量的说明#definemaxsize1000usingnamespacestd;typedefstructform{unsignedfsize;操作系统实验报告-3-char*faddr;structform*n,*p;}ff;ff*start;ff*head;intFfree(unsignedsize,char*addr)char*Fmalloc(unsignedsize)voidFprintall(void)voidFsort()char*Fbestmalloc(unsignedsize)char*Fworstmalloc(unsignedsize)3、重要模块的详细设计intFfree(unsignedsize,char*addr){ff*current=head;ff*s;do{if((head-faddraddr)&&(start-faddr-addr(signed)size)){s=(ff*)malloc(sizeof(ff));s-fsize=size;s-faddr=addr;s-n=head;s-p=head-p;head-p-n=s;head-p=s;head=head-p;return2;}elseif(head-faddraddr&¤t-faddr-addr==size){head-fsize=size+head-fsize;head-faddr=addr;return2;}操作系统实验报告-4-elseif(current-faddr+current-fsizeaddr&¤t-n-faddraddr+size){s=(ff*)malloc(sizeof(ff));s-faddr=addr;s-fsize=size;current-n-p=s;s-n=current-n;s-p=current;current-n=s;return1;}elseif(current-faddr+current-fsize==addr&¤t-n-faddraddr+size){current-fsize+=size;return1;}elseif(current-faddr+current-fsizeaddr&¤t-n-faddr==addr+size){current-n-faddr=addr;current-n-fsize=size+current-n-fsize;return1;}elseif(current-faddr+current-fsize==addr&¤t-n-faddr==addr+size){current-fsize+=size+current-n-fsize;current-n=current-n-n;current-n-n-p=current;return1;}elsecurrent=current-n;}while(current!=head);return0;}操作系统实验报告-5-char*Fmalloc(unsignedsize){ff*current;char*tmp;//intp=0;current=start;do{if(start-fsizesize){tmp=start-faddr;start-fsize-=size;start-faddr+=size;returntmp;}elseif(start-fsize==size){tmp=start-faddr;start-n-p=start-p;start-p-n=start-n;start-fsize=0;returntmp;}elsestart=start-n;}while(current!=start);returnNULL;}voidFprintall(void){ff*current=start;//inti=0;do{//coutstart-faddrstart-fsizeendl;操作系统实验报告-6-printf(%u,%u,current-faddr,current-fsize);coutendl;current=current-n;}while(current!=start);//returnEXIT_SUCCESS;//system(PAUSE);}4、源程序、注释和结果#includeiostream#includestdlib.h#includestdio.h#defineFree0//空闲状态#defineBusy1//已用状态#defineOK1//完成#defineERROR0//出错#defineMAX_length236//最大内存空间为236KBusingstd::cin;usingstd::cout;usingstd::endl;typedefintStatus;intflag;typedefstructfreearea//定义一个空闲区说明表结构操作系统实验报告-7-{longsize;//分区大小longaddress;//分区地址intstate;//状态}ElemType;//线性表的双向链表存储结构typedefstructDuLNode{ElemTypedata;structDuLNode*prior;//前趋指针structDuLNode*next;//后继指针}DuLNode,*DuLinkList;DuLinkListblock_first;//头结点DuLinkListblock_last;//尾结点Statusalloc(int);//内存分配Statusfree(int);//内存回收Statusrecycle_First_fit(int);//循环首次适应算法StatusBest_fit(int);//最佳适应算法StatusWorst_fit(int);//最坏适应算法voidshow();//查看分配StatusInitblock();//开创空间表操作系统实验报告-8-StatusInitblock()//开创带头结点的内存空间链表{block_first=(DuLinkList)malloc(sizeof(DuLNode));block_last=(DuLinkList)malloc(sizeof(DuLNode));block_first-prior=NULL;block_first-next=block_last;block_last-prior=block_first;block_last-next=NULL;block_last-data.address=0;block_last-data.size=MAX_length;block_last-data.state=Free;returnOK;}//分配主存Statusalloc(intch){intrequest=0;cout请输入需要分配的主存大小(单位:KB):;cinrequest;if(request0||request==0){操作系统实验报告-9-cout分配大小不合适,请重试!endl;returnERROR;}if(ch==2)//选择最佳适应算法{if(Best_fit(request)==OK)cout分配成功!endl;elsecout内存不足,分配失败!endl;returnOK;}if(ch==3)//选择最坏适应算法{if(Worst_fit(request)==OK)cout分配成功!endl;elsecout内存不足,分配失败!endl;returnOK;}else//默认循环首次适应算法{if(recycle_First_fit(request)==OK)cout分配成功!endl;elsecout内存不足,分配失败!endl;returnOK;}操作系统实验报告-10-}//循环首次适应算法Statusrecycle_First_fit(intrequest){//为申请作业开辟新空间且初始化DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));temp-data.size=request;temp-data.state=Busy;staticDuLNode*p;p=block_first-next;while(p){if(p-data.state==Free&&p-data.size==request){//有大小恰好合适的空闲块p-data.state=Busy;returnOK;break;}if(p-data.state==Free&&p-data.sizerequest){//有空闲块能满足需求且有剩余temp-prior=p-prior;操作系统实验报告-11-temp-next=p;temp-data.address=p-data.address;p-prior-next=temp;p-prior=temp;p-data.address=temp-data.address+temp-data.size;p-data.size-=request;returnOK;break;}p=p-next;}returnERROR;}//最佳适应算法StatusBest_fit(intrequest){intch;//记录最小剩余空间DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));temp-data.size=request;temp-data.state=Busy;DuLNode*p=block_first-next;DuLNode*q=NULL;//记录最佳插入位置操作系统实验报告-12-while(p)//初始化最小空间和最佳位置{if(p-data.state==Free&&(p-data.size=request)){if(q==NULL){q=p;ch=p-data.size-request;}elseif(q-data.sizep-data.size){q=p;ch=p-data.size-request;}}p=p-next;}if(q==NULL)returnERROR;//没有找到空闲块elseif(q-data.size==request){q-data.state=Busy;操作系统实验报告-13-returnOK;}else{temp-prior=q-prior
本文标题:操作系统实验报告
链接地址:https://www.777doc.com/doc-5894644 .html