操作系统实验三实验报告材料_第1页
操作系统实验三实验报告材料_第2页
操作系统实验三实验报告材料_第3页
免费预览已结束,剩余24页可下载查看

下载本文档

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

文档简介

1、实验三实验报告实验源码:#include "stdio.h"#include <iostream.h>/ 常量 DataMax/ 常量 BlockNum#include <stdlib.h>#define DataMax 100#define BlockNum 10int DataShowBlockNumDataMax;bool DataShowEnableBlockNumDataMax; 示int DataDataMax;int BlockBlockNum;int countBlockNum;int N;int M;int ChangeTimes;

2、void DataInput();/ 用于存储要显示的数组/ 用于存储数组中的数据是否需要显/ 保存数据/ 物理块/ 计数器/ 页面个数/ 最小物理块数/ 缺页次数/ 输入数据的函数void DataOutput();void FIFO();void Optimal();void LRU();/ 输出数据的函数/ FIFO 函数/ Optimal 函数/ LRU 函数int main(int argc, char* argv)DataInput();int menu;while(true)printf("n*菜单选择*n");printf("*n");p

3、rintf("*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;case 3:LRU();break;case 0:exit(0);bre

4、ak;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(" 请输入最小物理块数: ");scanf

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

6、tf(" 请选择产生页面访问序列的方式 (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+)printf("

7、;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");break;default:while(choice != 1 &&

8、amp; choice != 2)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( DataShowEnableji ) elseprintf(" ");printf("n");printf(" 缺页次数 : %dn",ChangeTimes);

9、printf(" 缺页率 : %d %n",ChangeTimes * 100 / N); / 最佳置换算法void Optimal()int i,j,k;bool find;int point;int temp; / 临时变量,比较离的最远的时候用int m = 1,n;ChangeTimes = 0;for( j = 0;j < M;j+)for(i=0;i < N;i+)DataShowEnable ji = false;/ 初始化为 false ,表示没有要显示的数据for(i = 0;i < M;i+)counti = 0 ; / 初始化计数器/

10、 确定当前页面是否在物理块中,在继续,不在置换/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=0;i < N;i+)/ 表示块中有没有该数据find = false;for( j = 0;j < M;j+)if( Blockj = Datai )find = true;if( find ) continue; / 块

11、中有该数据,判断下一个数据/ 块中没有该数据,最优算法ChangeTimes+; / 缺页次数 +for( j = 0;j < M;j+)/ 找到下一个值的位置find = false;for( k = i;k < N;k+)if( Blockj = Datak )find = true;countj = k;break;if( !find ) countj = N;/ 因为 i 是从 0 开始记,而 BlockNum 指的是个数,从 1 开始,所以 i+1 if( (i + 1) > M )/ 获得要替换的块指针temp = 0;for(j = 0;j < M;j+)

12、if( temp < countj )temp = countj;point = j; /获得离的最远的指针else point = i;/ 替换Blockpoint = Datai;/ 保存要显示的数据for( j = 0;j < M;j+)设置显示数据DataShowji = Blockj;DataShowEnablei < M ? (j <= i ? j : i) : ji = true; / 输出信息printf("nOptimal => n");DataOutput();/ 先进先出置换算法void FIFO()int i,j;boo

13、l find;int point;int temp; /临时变量int m = 1,n;ChangeTimes = 0;for( j = 0;j < M;j+)for(i = 0;i < N;i+)DataShowEnable ji = false; / 初始化为 false ,表示没有要显示的数据for(i = 0;i < M;i+)counti = 0; /大于等于 BlockNum ,表示块中没有数据,或需被替换掉/ 所以经这样初始化( 3 2 1 ),每次替换 >=3 的块,替换后计数值置 1,/ 同时其它的块计数值加 1 ,成了( 1 3 2 ),见下面先进先

14、出程序段/ 确定当前页面是否在物理块中,在继续,不在置换/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 = 0;i < N;i+)/ 增加 countfor( j = 0;j < M;j+)countj+;find = false; /表示块中有没有该数据for( j = 0;j < M;j+)if( Blockj

15、 = Datai )find = true;/ 块中有该数据,判断下一个数据if( find ) continue;/ 块中没有该数据ChangeTimes+; / 缺页次数 +/ 因为 i 是从 0 开始记,而 M 指的是个数,从 1 开始,所以 i+1 if( (i + 1) > M )/ 获得要替换的块指针temp = 0;for(j = 0;j < M;j+)if( temp < countj )temp = countj;point = j; / 获得离的最远的指针else point = i;/ 替换Blockpoint = Datai;countpoint =

16、0; /更新计数值/ 保存要显示的数据for( j = 0;j < M;j+)设置显示数据DataShowji = Blockj;DataShowEnablei < M ? (j <= i ? j : i) : ji = true; / 输出信息printf("nFIFO => n");DataOutput();/ 最近最久未使用置换算法void LRU()int i,j;bool find;int point;int temp; / 临时变量int m = 1,n;ChangeTimes = 0;for( j = 0;j < M;j+)for

17、(i = 0;i < N;i+)DataShowEnable ji = 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+;/ 对有所数据操作for(i = 0;i &l

18、t; 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+1 if( (i + 1) > M )/ 获得要替换的块指针temp = 0;for(j = 0;j &l

19、t; M;j+)if( temp < 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; / 输出信息prin tf("nLRU => n");DataOutput();实验结果截图:程序运行:输入相应数据:巳1作聖欄作VfinisIhed hiysnsanZXDebug.shiyansani exe数抉幫序W 理<

温馨提示

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

评论

0/150

提交评论