实验六 请求分页系统页面置换算法Word格式文档下载.docx
- 文档编号:19517431
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:13
- 大小:17.43KB
实验六 请求分页系统页面置换算法Word格式文档下载.docx
《实验六 请求分页系统页面置换算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验六 请求分页系统页面置换算法Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
28.intopt[10000];
intoth=0;
29.inttemp[1000];
30.
31.voidGShow()
32.{
33.inti,j;
34.printf("
位式图:
\n"
);
35.for(i=0;
i<
8;
i++)
36.{
37.printf("
\t"
38.for(j=0;
j<
j++)
39.printf("
%d"
G[i][j]);
40.printf("
41.}
42.}
43.
44.
45.voidinit()/*初始化*/
46.{
47.srand((unsigned)time(NULL));
48.inti,j;
49.for(i=0;
50.G[0][i]=1;
51.for(i=1;
52.{
53.for(j=0;
54.G[i][j]=rand()%2;
55.}
56.
57.for(i=0;
PageLength;
58.{
59.FPage[i].kuai=-1;
FPage[i].stage=0;
60.LPage[i].kuai=-1;
LPage[i].stage=0;
61.}
62.for(i=0;
Memsize;
63.{
64.FMemory[i].page=-1;
65.}
66.for(i=0;
67.{
68.LMemory[i].page=-1;
69.}
70.for(i=0;
71.{
72.OMemory[i].num=i;
73.OMemory[i].page=-1;
74.}
75.
76.FAbsent=LAbsent=visit=0;
77.}
78.
79.
80.voidShow()
81.{
82.inti;
83.
84.printf("
FPage:
\t\t\t\t\tLPage:
85.printf("
\t页号\t块号\t状态位\t\t\t页号\t块号\t状态位\n"
86.for(i=0;
87.{
88.printf("
\t%d\t"
i);
89.if(FPage[i].kuai==-1)
90.printf("
\t"
91.else
92.printf("
%d\t"
FPage[i].kuai);
93.printf("
%d"
FPage[i].stage);
94.printf("
\t\t\t%d\t"
95.if(LPage[i].kuai==-1)
96.printf("
97.else
98.printf("
LPage[i].kuai);
99.printf("
%d\n"
LPage[i].stage);
100.}
101.printf("
\nFMemory:
\t\t\t\tLMemory:
102.printf("
\t块号\t页号\t\t\t\t块号\t\t页号\n"
103.for(i=Memsize-1;
i>
=0;
i--)
104.{
105.printf("
106.if(FMemory[i].page==-1)
107.printf("
\t\t"
108.else
109.printf("
%d\t\t"
FMemory[i].page);
110.printf("
\t\t%d\t"
111.if(LMemory[i].page==-1)
112.printf("
113.else
114.printf("
\t%d\n"
LMemory[i].page);
115.}
116.printf("
Logical:
%d\n"
Logical);
117.printf("
Count:
%d%d\n"
Pagenumber,Pageaddr);
118.printf("
Physical:
Physical);
119.printf("
PageSize:
PageSize);
120.printf("
Visit:
visit);
121.printf("
FAbsent:
%dLAbsent:
FAbsent,LAbsent);
122.printf("
FRate:
%.2f%%LRate:
%.2f%%\n"
(double)FAbsent*100/(double)visit,(double)LAbsent*100/(double)visit);
123.}
124.
125.
126.voidFIFO()/*FIFO算法*/
127.{
128.inti;
129.intm,n;
130.
131.
132.if(FPage[Pagenumber].stage==1)/*命中*/
133.;
134.else/*缺页*/
135.{
136.FAbsent++;
137.FPage[Pagenumber].stage=1;
138.
139.for(i=0;
140.{
141.if(FMemory[i].page==-1)
142.{
143.for(m=1;
m<
m++)
144.{
145.for(n=0;
n<
n++)
146.if(G[m][n]==0)
147.{
148.break;
149.}
150.if(n<
8)
151.break;
152.}
153.Freemem=(m-1)*8+n;
154.FMemory[i].page=Pagenumber;
155.FPage[Pagenumber].kuai=Freemem;
156.
157.break;
158.}
159.}
160.if(i==Memsize)
161.{
162.FPage[Pagenumber].kuai=FPage[FMemory[0].page].kuai;
163.FPage[FMemory[0].page].kuai=-1;
164.FPage[FMemory[0].page].stage=0;
165.for(i=0;
Memsize-1;
166.FMemory[i].page=FMemory[i+1].page;
167.FMemory[i].page=Pagenumber;
168.}
169.}
170.
171.}
172.voidLRU()/*LRU算法*/
173.{
174.inti,j,m,n,l;
175.
176.//boolflag=true;
177.
178.for(l=0;
l<
l++)
179.if(LMemory[l].page==-1)
180.break;
181.
182.if(LPage[Pagenumber].stage==1)/*命中*/
183.{
184.for(i=0;
l;
185.{
186.if(LMemory[i].page==Pagenumber)
187.{
188.for(j=i;
l-1;
189.{
190.LMemory[j].page=LMemory[j+1].page;
191.}
192.LMemory[j].page=Pagenumber;
193.break;
194.}
195.}
196.}
197.else/*没命中*/
198.{
199.LAbsent++;
200.LPage[Pagenumber].stage=1;
201.
202.if(l<
Memsize)//问题出在这里,l++之前需要判断一下如果l<
memsize说明有空闲块,则l++,否则块已经满了,l不能++...
203.l++;
204.for(i=0;
205.{
206.if(LMemory[i].page==-1)
207.{
208.for(m=1;
209.{
210.for(n=0;
211.if(G[m][n]==0)
212.{
213.G[m][n]=1;
214.break;
215.}
216.if(n<
217.break;
218.}
219.Freemem=(m-1)*8+n;
220.LMemory[i].page=Pagenumber;
221.LPage[Pagenumber].kuai=Freemem;
222.for(j=i;
223.{
224.LMemory[j].page=LMemory[j+1].page;
225.}
226.LMemory[j].page=Pagenumber;
227.break;
228.}
229.}
230.if(i==l)
231.{
232.LPage[LMemory[0].page].stage=0;
233.LPage[Pagenumber].kuai=LPage[LMemory[0].page].kuai;
234.LPage[LMemory[0].page].kuai=-1;
235.for(j=0;
236.LMemory[j].page=LMemory[j+1].page;
237.LMemory[j].page=Pagenumber;
238.}
239.}
240.}
241.
242.voidOPTshow()
243.{
244.inti;
245.printf("
246.for(i=Memsize-1;
247.{
248.if(OMemory[i].page==-1)
249.printf("
"
250.else
251.printf("
%d"
OMemory[i].page);
252.}
253.printf("
254.}
255.
256.voidOPT()
257.{
258.printf("
\nOPTMemory:
259.printf("
\t210\n\n"
260.inti,j,k,l,m,n;
261.intcount=0;
262.for(i=0;
oth;
263.{
264.for(j=0;
265.{
266.if(OMemory[j].page==opt[i])
267.break;
268.}
269.if(j<
Memsize)
270.;
271.else
272.{
273.for(j=0;
274.{
275.if(OMemory[j].page==-1)/*如果此时内存没满还有空缺就直接将页号写进去*/
276.{
277.OMemory[j].page=opt[i];
278.break;
279.}
280.}
281.if(j==Memsize)/*需要发生置换*/
282.{
283.OAbsent++;
284.for(n=0;
285.temp[n]=0;
286.
287.for(k=i+1;
k<
k++)
288.{
289.for(l=0;
290.{
291.if(OMemory[l].page==opt[k])
292.{
293.temp[l]++;
294.break;
295.}
296.}
297.count=0;
298.for(m=0;
299.{
300.if(temp[m]==0)
301.count++;
302.}
303.if(count>
1&
&
oth-1)
304.;
305.else
306.{
307.for(m=0;
308.if(temp[m]==0)
309.{
310.OMemory[m].page=opt[i];
311.break;
312.}
313.}
314.}
315.}
316.}
317.OPTshow();
318.}
319.printf("
OAbsent:
OAbsent);
320.printf("
ORate:
(double)OAbsent*100/(double)visit);
321.
322.}
323.
324.voidcometrue()
325.{
326.printf("
输入页表长度(页):
"
327.scanf("
&
PageLength);
328.printf("
输入内存块数(块):
329.scanf("
Memsize);
330.printf("
输入页面大小(kb):
331.scanf("
PageSize);
332.init();
333.while(printf("
输入逻辑地址(10进制):
)&
scanf("
Logical))
334.{
335.if(Logical!
=-1)
336.{
337.Pagenumber=Logical/(PageSize*1024);
338.Pageaddr=Logical%(PageSize*1024);
339.if(Pagenumber>
=PageLength)
340.{
341.printf("
越界中断......!
342.continue;
343.}
344.opt[oth++]=Pagenumber;
345.GShow();
346.FIFO();
347.LRU();
348.
349.Physical=Freemem*PageSize*1024+Pageaddr;
350.visit++;
351.
352.Show();
353.}
354.elseif(Logical==-1)
355.{
356.inti;
357.printf("
页号访问序列:
358.for(i=0;
359.printf("
opt[i]);
360.printf("
361.OPT();
362.break;
363.}
364.}
365.}
366.
367.intmain()
368.{
369.cometrue();
370.return0;
371.}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验六 请求分页系统页面置换算法 实验 请求 分页 系统 页面 置换 算法