1、5、代码#include stdafx.h#define M 3 /物理页数#define N 20 /需要调入的页数typedef struct page int num; int time; int temp;Page; /物理页项,包括调入的页号和时间 Page ppM; /M个物理页int queue120, queue220, queue320; /记录置换的页int K = 0, S = 0, T = 0; /置换页数组的标识int pos = 0;/记录存在最长时间项int changenum = 0;int AN;/初始化内存页表项及存储内存情况的空间void INIT() i
2、nt i; for (i = 0; i max) max = ppi.time; pos = i; return pos;/检查最长时间不使用页面 int longestTime(int mxatimep,int temp) for (i = temp;N; if (pp0.temp = 1 & pp1.temp = 1 & pp2.temp = 1) break; if (pp0.num != Ai) pp0.time+; if (pp0.temp = 1) pp0.time-; else pp0.temp+; if (pp1.num ! pp1.time+; if (pp1.temp pp
3、1.time-; pp1.temp+; if (pp2.num ! pp2.time+; if (pp2.temp pp2.time-; pp2.temp+; if (ppi.timemax)/检查某页是否在内存int Equation(int fold) if (ppi.num = fold) return i; return -1;/检查物理内存是否已满,-1表满,其他不满int Check() if (ppi.num = -1)void FIFO(int fold,int temp) int a, b, c; a = Equation(fold); /页已存在 if (a != -1)
4、/页不存在 else b = Check(); /内存还有空闲 if (b ! ppb.num = fold; /内存已满,需要置换 else c = GetMax(); ppc.num = fold; ppc.time = 0; changenum+; queue1K+ = fold; if (ppi.num ! ppi.time+;void OPT(int fold,int temp) if (a = -1)/页不在内存 c = longestTime(fold,temp); queue3T+ = fold;void LRU(int fold,int temp) int a, b; int
5、 p;= -1)/页已在内存 /把此项移动到链表最后一项 if (a = 2)/此项已经在最后,不需要做任何改动 else p = Equation(-1); if (p = -1)/链表是满的 for (; a2; a+) ppa.num = ppa + 1.num; pp2.num = fold; else if (p = 3)/链表不满p - 1; ppa.num = fold; else= -1)/不满 for (i = 0; i+) ppi.num = ppi + 1.num; pp2.num = fold; queue2S+ = fold;int _tmain(int argc,
6、_TCHAR* argv) int BN; INIT(); changenum = 0; printf(请依次输入%d个页面号:n, N); scanf_s(%d, &Ai); /OPT);1.最佳置换算法(Opt)n INIT(); changenum = 0; for (i = 0; Bi = Ai; OPT(Bi, i); printf(OPT算法,调入页面顺序为:T; printf(%3d, queue3i);n页面置换次数为:%6dn缺页率:%16.2fnn, changenum, (float)changenum / N); /FIFO2.先进先出页面置换算法(FIFO)n FIFO(Bi, i);FIFO算法,调入页面顺序为:K;, queue1i); /LRU3.最近最久未使用算法(LRU)n LRU(Bi, i);LRU算法,调入页面顺序为:S;, queue2i);四种算法已全部执行完毕! return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1