资源描述:
《NUR页面置换算法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、NRU页面置换算法1)假设每个页面中可存放10条指令,分配给作业的内存块数为4。2)用C语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。3)置换算
2、法:最近最不经常使用(NRU)算法。#include#include#include#defineN4#definesize320typedefstructPage{intpage_num;intflag_A;//访问位intflag_M;//修改位intread_or_write;//0表示不被修改,1表示被修改}PAGE;typedefstructBlock{intblock_num;//块号PAGEpage;//所装页的信息structBlock
3、*next;}BLOCK,*BLOCKLIST;typedefstructinstruct{//指令数据结构intaddress;//指令地址PAGEpage;//对应页的信息}INSTRUCTION,*INSTRUCTIONLIST;INSTRUCTIONinstructions[size];//定义320个指令BLOCKLISTblock_head;//块的头指针intdiseffect=0;//缺页次数intblockSize=0;voidInit_Instructions(){for(inti=0;i
4、<320;i++)instructions[i].address=rand()%320;for(intk=0;k<320;k++){instructions[k].page.page_num=(int)instructions[k].address/10;instructions[k].page.flag_A=0;instructions[k].page.read_or_write=rand()%2;if(instructions[k].page.read_or_write==0)instructions[k
5、].page.flag_M=0;elseinstructions[k].page.flag_M=1;}}BLOCKLISTInit_block(){BLOCKLISThead=(BLOCKLIST)malloc(sizeof(BLOCK));BLOCKLISTp;for(inti=1;i<=N;i++){if(i==1)p=head;else{p->next=(BLOCKLIST)malloc(sizeof(BLOCK));p=p->next;}p->block_num=i;p->page.page_num=
6、-1;p->page.flag_A=0;p->page.flag_M=0;}p->next=head;returnhead;}voiddisplay(INSTRUCTIONinstructions){BLOCKLISTp=block_head;printf("Thenewpage:(page_num==%d),(flag_M==%d),(address==%d)",instructions.page.page_num,instructions.page.flag_M,instructions.addres
7、s);printf("block_num,page_num,flag_A,flag_M");do{printf("%2d%10d%9d%8d",p->block_num,p->page.page_num,p->page.flag_A,p->page.flag_M);p=p->next;}while(p!=block_head);}voidshow_physical_address(BLOCKLIST&p,INSTRUCTIONinstructions){intaddress;printf("physi
8、caladdress:");address=p->block_num*1024+instructions.address%10;//页面大小为1kprintf("%d",address);}//查找四个块中是否有此页面intFind_page_in_block(INSTRUCTIONinstructions,BLOCKLIST&p){p=block_head;do{if(p->page.pa