操作系统实验三(页面置换算法)实验报告材料(共14页)_第1页
操作系统实验三(页面置换算法)实验报告材料(共14页)_第2页
操作系统实验三(页面置换算法)实验报告材料(共14页)_第3页
操作系统实验三(页面置换算法)实验报告材料(共14页)_第4页
操作系统实验三(页面置换算法)实验报告材料(共14页)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上实验三实验报告实验源码:#include "stdio.h"#include <iostream.h>#include <stdlib.h>#define DataMax 100 / 常量DataMax#define BlockNum 10 / 常量BlockNumint DataShowBlockNumDataMax; / 用于存储要显示的数组bool DataShowEnableBlockNumDataMax; / 用于存储数组中的数据是否需要显示int DataDataMax; / 保存数据int BlockBlock

2、Num; / 物理块int countBlockNum; / 计数器int N; / 页面个数int M; / 最小物理块数int ChangeTimes; / 缺页次数void DataInput(); / 输入数据的函数void DataOutput(); / 输出数据的函数void FIFO(); / FIFO 函数void Optimal(); / Optimal函数void LRU(); / LRU函数int main(int argc, char* argv)DataInput();int menu;while(true)printf("n* 菜单选择 *n")

3、;printf("*n");printf("* 1-Optimal *n");printf("* 2-FIFO *n");printf("* 3-LRU *n");printf("* 4-返回上一级 *n");printf("* 0-EXIT *n");printf("*n");scanf("%d",&menu);switch(menu)case 1:Optimal();break;case 2:FIFO();break;cas

4、e 3:LRU();break;case 0:exit(0);break;case 4:system("cls");DataInput();break;if(menu != 1 && menu != 2 && menu != 3 && menu != 0 && menu !=4) system("cls");printf("n请输入0 - 4之间的整数!n");continue;return 0;void DataInput()int i,choice;printf(&q

5、uot;请输入最小物理块数:");scanf("%d",&M);/ 输入最小物理块数大于数据个数while(M > BlockNum)printf("物理块数超过预定值,请重新输入:");scanf("%d",&M);printf("请输入页面的个数:");scanf("%d",&N);/ 输入页面的个数大于数据个数while(N > DataMax)printf("页面个数超过预定值,请重新输入:");scanf("%

6、d",&N);printf("请选择产生页面访问序列的方式(1.随机 2.输入):");scanf("%d",&choice);switch(choice)case 1:/ 产生随机访问序列for(i = 0;i < N;i+) Datai = (int)(float) rand() / 32767) * 10); / 随机数大小在0 - 9之间system("cls");/ 显示随机产生的访问序列printf("n随机产生的访问序列为:");for(i = 0;i < N;i

7、+)printf("%d ",Datai);printf("n");break;case 2:/ 输入访问序列printf("请输入页面访问序列:n");for(i = 0;i < N;i+)scanf("%d",&Datai);system("cls");/ 显示输入的访问序列printf("n输入的访问序列为:");for(i = 0;i < N;i+)printf("%d ",Datai);printf("n"

8、);break;default:while(choice != 1 && choice != 2)printf("请输入1或2选择相应方式:");scanf("%d",&choice);break;void DataOutput()int i,j;/ 对所有数据操作for(i = 0;i < N;i+)printf("%d ",Datai);printf("n");for(j = 0;j < M;j+)/ 对所有数据操作for(i = 0;i < N;i+)if( Data

9、ShowEnableji )printf("%d ",DataShowji);elseprintf(" ");printf("n");printf("缺页次数: %dn",ChangeTimes);printf("缺页率: %d %n",ChangeTimes * 100 / N);/ 最佳置换算法void Optimal()int i,j,k;bool find;int point;int temp; / 临时变量,比较离的最远的时候用int m = 1,n;ChangeTimes = 0;f

10、or(j = 0;j < M;j+)for(i=0;i < N;i+)DataShowEnableji = false; / 初始化为false,表示没有要显示的数据for(i = 0;i < M;i+)counti = 0 ; / 初始化计数器/ 确定当前页面是否在物理块中,在继续,不在置换/Block0 = Data0;for(i = 1;m < M;i+)int flag = 1;for(n = 0; n < m;n+)if(Datai = Blockn) flag = 0;if(flag = 0) continue;Blockm = Datai;m+;/

11、对所有数据进行操作for(i=0;i < N;i+)/ 表示块中有没有该数据find = false;for(j = 0;j < M;j+)if( Blockj = Datai )find = true;if( find ) continue; / 块中有该数据,判断下一个数据/ 块中没有该数据,最优算法ChangeTimes+; / 缺页次数+for(j = 0;j < M;j+)/ 找到下一个值的位置find = false;for( k = i;k < N;k+)if( Blockj = Datak )find = true;countj = k;break;if

12、( !find ) countj = N;/ 因为i是从0开始记,而BlockNum指的是个数,从1开始,所以i+1if( (i + 1) > M )/获得要替换的块指针temp = 0;for(j = 0;j < M;j+)if( temp < countj )temp = countj;point = j; / 获得离的最远的指针else point = i;/ 替换Blockpoint = Datai; / 保存要显示的数据for(j = 0;j < M;j+)DataShowji = Blockj;DataShowEnablei < M ? (j <

13、= i ? j : i) : ji = true; / 设置显示数据/ 输出信息printf("nOptimal => n");DataOutput();/ 先进先出置换算法void FIFO()int i,j;bool find;int point; int temp; / 临时变量int m = 1,n;ChangeTimes = 0;for(j = 0;j < M;j+)for(i = 0;i < N;i+)DataShowEnableji = false; / 初始化为false,表示没有要显示的数据for(i = 0;i < M;i+)co

14、unti = 0; / 大于等于BlockNum,表示块中没有数据,或需被替换掉 / 所以经这样初始化(3 2 1),每次替换>=3的块,替换后计数值置1,/ 同时其它的块计数值加1 ,成了(1 3 2 ),见下面先进先出程序段/ 确定当前页面是否在物理块中,在继续,不在置换/Block0 = Data0;for(i = 1;m < M;i+)int flag = 1;for(n = 0; n < m;n+)if(Datai = Blockn) flag = 0;if(flag = 0) continue;Blockm = Datai;m+;/ 对有所数据操作for(i =

15、0;i < N;i+)/ 增加countfor(j = 0;j < M;j+)countj+;find = false; / 表示块中有没有该数据for(j = 0;j < M;j+)if( Blockj = Datai )find = true; / 块中有该数据,判断下一个数据if( find ) continue;/ 块中没有该数据ChangeTimes+; / 缺页次数+ / 因为i是从0开始记,而M指的是个数,从1开始,所以i+1if( (i + 1) > M )/获得要替换的块指针temp = 0;for(j = 0;j < M;j+)if( temp

16、 < countj ) temp = countj;point = j; / 获得离的最远的指针else point = i;/ 替换Blockpoint = Datai; countpoint = 0; / 更新计数值/ 保存要显示的数据for(j = 0;j < M;j+)DataShowji = Blockj;DataShowEnablei < M ? (j <= i ? j : i) : ji = true; / 设置显示数据/ 输出信息printf("nFIFO => n");DataOutput();/ 最近最久未使用置换算法voi

17、d LRU()int i,j;bool find;int point; int temp; / 临时变量int m = 1,n;ChangeTimes = 0;for(j = 0;j < M;j+)for(i = 0;i < N;i+)DataShowEnableji = false; / 初始化为false,表示没有要显示的数据for(i = 0;i < M;i+)counti = 0 ; / 初始化计数器/ 确定当前页面是否在物理块中,在继续,不在置换/Block0 = Data0;for(i = 1;m < M;i+)int flag = 1;for(n = 0;

18、 n < m;n+)if(Datai = Blockn) flag = 0;if(flag = 0) continue;Blockm = Datai;m+;/ 对有所数据操作for(i = 0;i < N;i+)/ 增加countfor(j = 0;j < M;j+)countj+;find = false; / 表示块中有没有该数据for(j = 0;j < M;j+)if( Blockj = Datai )countj = 0;find = true; / 块中有该数据,判断下一个数据if( find ) continue;/ 块中没有该数据ChangeTimes+;/ 因为i是从0开始记,而BlockNum指的是个数,从1开始,所以i+1if( (i + 1) > M )/获得要替换的块指针temp = 0;for(j = 0;j < M;j+)if( temp < countj ) temp = countj;point =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论