分页式存储的页面置换算法
来源:互联网 发布:薛冰是怎么死的 知乎 编辑:程序博客网 时间:2024/05/17 10:55
#include"stdio.h"#include"stdlib.h"#include"conio.h"#define N 16#define num 5 /*进程分配物理块数目*/int A[N]={1,2,3,4,5,6,7,8,5,2,3,2,7,8,1,4}; /*页表映像*/typedef struct page { int address; /*页面地址*/ struct page *next; }page;struct page *head,*run,*rear;void jccreat() /*进程分配物理块*/{ int i=1; page *p,*q; head=(page *)malloc(sizeof(page)); p=head; for(i=1;i<=num;i++) { q=(page *)malloc(sizeof(page)); p->next=q; q->address=0; q->next=NULL; p=q; } rear=p;}int search(int n){ page *p; int i=0; p=head; while(p->next) { if(p->next->address==n) { printf("Get it at the page %d\n",i+1); run=p; return 1;} p=p->next; i++; } return 0;} void changeOPT(int n,int position){ int i; int total=0; int flag=1; int distance[num]; int MAX; int order=0; page *p,*q; p=head->next; q=head->next; for(i=0;i<num;i++) distance[i]=100; i=0; while(p) { if(p->address==0) {flag=0; break;} p=p->next; i++; } if(!flag) {p->address=n; printf("Change the page %d\n",i+1); } else { while(q) { for(i=position;i<N;i++) {if(q->address==A[i]) distance[total]=i-position;} total++; q=q->next; } MAX=distance[0]; for(i=0;i<num;i++) { if(distance[i]>MAX) { MAX=distance[i]; order=i; } } printf("Change the page %d\n",order+1); i=0; while(p) { if(i==order) p->address=n; i++; p=p->next; } } } void changeLRU(int n){ int i=0; int flag=1; page *p,*delect; p=head->next; while(p) { if(p->address==0) {flag=0; p->address=n; printf("Change the page %d\n",i+1); break;} p=p->next; i++; } if(flag) { delect=head->next; head->next=delect->next; printf("Delect from the head, and add new to the end.\n"); delect->address=n; rear->next=delect; rear=delect; rear->next=NULL; }} float OPT(){ int i; int lose=0; float losef; float percent; for(i=0;i<N;i++) { if(search(A[i])==0) { lose++; changeOPT(A[i],i); } } losef=lose; percent=1-(losef/N); return percent;} float LRU(){ int i; int lose=0; float losef; float percent; page *p; for(i=0;i<N;i++) { if(search(A[i])==0) { lose++; changeLRU(A[i]); } else { p=run->next; run->next=p->next; rear->next=p; rear=p; rear->next=NULL; printf("Move it to end of queue.\n"); } } losef=lose; percent=1-(losef/N); return percent;} main() /*主函数部分*/{float percent; int choice; printf("Select the arithmetic:\n(1)OPT\n(2)LRU\nyour choice is:"); scanf("%d",&choice);/*选择页面置换算法*/ jccreat(); /*创建进程*/ if(choice==1) /*采用OPT算法置换*/ {percent=OPT(); /*计算OPT时的缺页率*/ printf("The percent of OPT is %f",percent);} else if(choice==2) /*采用LRU算法置换*/ {percent=LRU(); /*计算LRU时的缺页率*/ printf("The percent of OPT is %f",percent);} else printf("Your choice is invalid."); getch();}
0 0
- 分页式存储的页面置换算法
- 分页式存储管理页面置换算法——LRU、FIFO、改进型的CLOCK算法
- 存储管理的页面置换算法
- 存储管理的页面置换算法
- 存储管理的页面置换算法
- 存储管理的页面置换算法
- 存储管理的页面置换算法
- 页面置换算法的实现
- 虚拟页式存储管理——页面置换算法及其影响的缺页中断率
- 浅谈分页置换算法
- 分页置换算法
- 内存页面置换算法的设计
- 操作系统模拟置换页面的算法
- 5种页面置换算法的实现
- 简单的页面置换算法分析
- 几种常见的页面置换算法
- 操作系统:虚拟页式存储管理(缺页中断、页面置换算法)
- 实验七 存储管理---------常用页面置换算法模拟实验
- Android greendao配置及使用
- 主元素
- uva11729
- Volley 上传图片
- Angular学习(2)Directives
- 分页式存储的页面置换算法
- android 看门狗
- 渲染模板render_(内容管理系统总结2)
- 解决机器学习问题的步骤
- Android原生的刷新控件--SwipefreshLayout
- 欢迎使用CSDN-markdown编辑器
- nginx File not found 错误(转) 404
- android从零开始播放视频
- HDOJ1316 大肥波数