《 操作系统原理A 》实验报告 - 5 -
//初始化5个实页,并将其串成链表形式
for(i=0;i { pp[i].pn=-1; pp[i].pfn=i; pp[i].next=NULL; } //将5个实页依次相连,形成Free链表 Free=&pp[0]; for(i=0;i pp[L-1].next=NULL; Free_head=Free; //初始化Busy链表 Busy=NULL; Busy_head=NULL; Busy_tail=NULL; pp[i].next=&pp[i+1]; //初始化MemoryStatus数组 for(i=0;i MemoryStatus[i][j]=-1; } //初始化NotInMemory数组 《 操作系统原理A 》实验报告 - 6 - } for(i=0;i NotInMemory[i]=1; } void FIFO(int L,int MemoryStatus[][N]) //先入先出算法的具体实现。 { count=0; int i,j,k,currentpage; //一些临时变量 for(i=0;i //当前访问的虚页是哪一页? 由数组queue[i]中的值表示 //判断该虚页是否已经调入内存 currentpage=queue[i]; if(vp[currentpage].pfn!=-1) //表示该页已经在内存中,可以直接访问。同时记录访问该页时对应的实页信息(和前一页相同) { for(j=0;j { } MemoryStatus[j][i]=MemoryStatus[j][i-1]; } NotInMemory[i]=0; else //该页不在内存,需要请求调页 { count=count+1; //缺页数加1 if(Free!=NULL) //如果Free链表不为空,表示内存中还有空的实页,故从Free链表中取队首元素,装入该虚页,并修改相关信息。 { 《 操作系统原理A 》实验报告 - 7 - temp=Free_head; //本程序中用Free表示链表的起始地址,Free_head表示链表中的第一个元素地址。实际上两者的值永远相等。 //将temp指向的实页插入Busy链表的末尾 temp->next=NULL; if(Busy==NULL) //如果是第一次把虚页装入实页,则temp就是Busy链表的第一 //将虚页currentpage装入temp指向的实页,该实页的编号为temp->pfn vp[currentpage].pfn=temp->pfn; temp->pn=currentpage; Free_head=Free_head->next; Free=Free_head; 个元素。 { Busy=temp; Busy_head=Busy; Busy_tail=Busy; } else //如果不是第一次把虚页装入实页,则将temp插入Busy链表的队尾。 { Busy_tail->next=temp; Busy_tail=temp; } //修改内存状态 for(k=0;k { MemoryStatus[k][i]=MemoryStatus[k][i-1]; } MemoryStatus[temp->pfn][i]=currentpage; //虚页currentpage装入了temp->pfn表示的那个实页里 《 操作系统原理A 》实验报告 - 8 - } else //如果Free链表为空,需要置换一页出去。由于采用FIFO算法,故取busy链表的队首元素,将其置换出去,修改信息后插入队尾。 { //将Busy首元素取出,赋给temp temp=Busy; Busy_head=Busy->next; Busy=Busy_head; //将当前虚页currentpage装入temp指向的实页,修改其信息 vp[temp->pn].pfn=-1; //该页被置换出去了,所以其pfn字段要设置成-1,表示其已经不再内存。 vp[currentpage].pfn=temp->pfn; //currentpage被装入内存,更新其pfn字段为temp指向的实页。 虚页 //将temp指向的实页插入Busy链表的末尾,此时不用再考虑Busy是否为空了。 temp->next=NULL; Busy_tail->next=temp; Busy_tail=temp; //修改内存状态 temp->pn=currentpage; //temp指向的实页,装入了currentpage for(k=0;k { MemoryStatus[k][i]=MemoryStatus[k][i-1]; } MemoryStatus[temp->pfn][i]=currentpage; //虚页currentpage装入了 temp->pfn表示的那个实页里 } 《 操作系统原理A 》实验报告 - 9 - } } } void LRU(Page pp[],int MemoryStatus[][N],int L) { int i,j,k,currentpage; for(i=0;i currentpage=queue[i]; if(vp[currentpage].pfn!=-1) { } else { count=count+1; if(Free!=NULL) { temp=Free_head; for(j=0;j NotInMemory[i]=0; MemoryStatus[j][i]=MemoryStatus[j][i-1]; Free_head=Free_head->next; Free=Free_head; vp[currentpage].pfn=temp->pfn; temp->pn=currentpage; temp->next=NULL; if(Busy==NULL) { Busy=temp; 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库虚拟存储器管理 页面置换算法模拟实验(2)在线全文阅读。
相关推荐: