.'.实验五存储分配[实验目的]1.了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及实现过程的理解。2.通过对页面、页表、地址转换和页面转换过程的模拟,加深对请求调页系统的原理和实现过程的理解。[实验内容和步骤]1.用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链管理;在进行内存分配时,系统优先使用空闲区低端的空间。2.假设初始状态下,可用的内在空间为640KB,并有下列的请求序列:作业1申请130KB作业2申请60KB作业3申请100KB作业2释放60KB作业4申请200KB作业3释放100KB作业1释放130KB作业5申请140KB作业6申请60KB作业7申请50KB作业6释放60KB请分别采用首次适应算法和最佳适应算法进行内存块的分配和回收,要求每次分配和回收后显示出空闲内存分区链的情况。3.假设每个页面中可存放10条指令,分配给一个作业的内存块数为44.用C语言模拟一作业的执行过程。该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块中均已装入该作业,则需进行页面转换。最后显示其物理地址,并转下一条指令。在所有320条指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。5.置换算法:请分别考虑OPT、FIFO和LRU算法。6.作业中指令的访问次序按下述原则生成:50%的指令是顺序执行的25%的指令是均匀分布在前地址部分25%的指令是均匀分布在后地址部分具体的实施办法:①在[0,319]之间随机选取一条起始指令,其序号为m②顺序执行下一条指令,即序号为m+1的指令③通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为m1;.'.④顺序执行下一条指令,即序号为m1+1的指令⑤通过随机数,跳转到后地址部分[m1+2,319]中的某条指令处,其序号为m2;⑥顺序执行下一条指令,即序号为m2+1的指令⑦重复跳转到前地址部分、顺序执行、跳转到后地址部分、顺序执行的过程,直至执行320条指令。代码1:#include#include#defineFree0//空闲状态#defineBusy1//已用状态#defineOK1//完成#defineERROR0//出错#defineMAX_length640//最大内存空间为640KBtypedefintStatus;typedefstructfreearea//定义一个空闲区说明表结构{intID;//分区号longsize;//分区大小longaddress;//分区地址intstate;//状态}ElemType;//----------线性表的双向链表存储结构------------typedefstructDuLNode//doublelinkedlist{ElemTypedata;structDuLNode*prior;//前趋指针structDuLNode*next;//后继指针}DuLNode,*DuLinkList;DuLinkListblock_first;//头结点DuLinkListblock_last;//尾结点Statusalloc(int);//内存分配Statusfree(int);//内存回收StatusFirst_fit(int,int);//首次适应算法StatusBest_fit(int,int);//最佳适应算法voidshow();//查看分配StatusInitblock();//开创空间表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.ID=0;block_last->data.state=Free;returnOK;}//-----------------------分配主存-------------------------Statusalloc(intch){intID,request;cout<<"请输入作业(分区号):";cin>>ID;cout<<"请输入需要分配的主存大小(单位:KB):";cin>>request;if(request<0||request==0){cout<<"分配大小不合适,请重试!"<