操作系统:页面置换算法OPT算法实验(C语言)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了操作系统:页面置换算法OPT算法实验(C语言),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3550字,纯文字阅读大概需要6分钟。
内容图文
![操作系统:页面置换算法OPT算法实验(C语言)](/upload/InfoBanner/zyjiaocheng/622/27a7af5a5cb049029422eb7ed9b7bb16.jpg)
实验题目:
OPT算法实验
实验内容:
已知页面访问序列,采用OPT页面置换算法,求缺页次数、页面置换次数和缺页率。
实验目的:
通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。
实验原理:问题分析及算法设计(流程图)
实验源代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
int toNextPageLen[50];//当前页面位置下一次被访问的位置,下标为当前页面位置,值为下一次访问位置
//OPT算法
void OPT(int page_access[],int PBC,int PAC,int result[][50]){
int k = 0;
int nextPageAccessIndex[50];//存储当前页面的位置,作为该页面上一次被访问的下一次访问位置 ,下标为页面,值为下一次访问位置
memset(nextPageAccessIndex,0,sizeof(nextPageAccessIndex));//初始化为0,代表没再访问过
//1.获取当前位置页面下次访问该页面的位置
for(int i = PAC-1; i>=0; i--){
int nextIndex = nextPageAccessIndex[page_access[i]];
if(nextIndex <= 0){//没在访问过则位置设为无穷
toNextPageLen[i] = INT_MAX;
}else{
toNextPageLen[i] = nextIndex;
}
nextPageAccessIndex[page_access[i]] = i;
}
//2.计算每一次访问的每个物理块存放的当前页面
int flagBlock[50];//存储页面是否在物理块中,用于去重,下标为页面,值为访问位置
memset(flagBlock,-1,sizeof(flagBlock));//不存在物理块中为-1
for(int i = 0 ; i < PAC; i++){//遍历访问位置
int len = 0;//存储下一次访问该页的最大长度
int block = -1;//要替换的物理块中页面
if(flagBlock[page_access[i]]!=-1){//如果存在物理块中,直接复制前一次数据
for(int j = 0; j < k; j++){
result[j][i] = result[j][i-1];
}
flagBlock[page_access[i]] = i;
continue;
}
for(int j = 0; j < PBC; j++){//遍历物理块
if(k < PBC){//如果当前使用的物理块数少于总共物理块数,复制上一次访问页面,在剩下的物理块中添加当前页面
if(j == k){//如果为新的物理块,直接存储当前页面
result[k][i] = page_access[i];//存储当前页面
flagBlock[page_access[i]] = i;// 标记为存在物理块中
k++; //使用的物理块数+1
result[PBC][i] = 1; //判断是否缺页,有增加则缺页
break;
}else{//复制上一次的页面
result[j][i] = result[j][i-1];
}
}else{//如果物理块满
result[j][i] = result[j][i-1];//复制上一次页面
int s = toNextPageLen[flagBlock[result[j][i-1]]]-i;
if(len < s){//找到下次访问最长页面替换 ,即判断物理块中页面 上次的下标 的下一次访问位置减去当前位置,得到距离长度
block = j;
len = s;
}
}
}
if(block!=-1){
flagBlock[result[block][i]] = -1;
flagBlock[page_access[i]] = i;
result[block][i] = page_access[i];//替换下次访问最长的页面
result[PBC][i] = 1;
}
}
}
int main(){
int PBC;//物理块数 physical block count
int PAC;//页面访问次数 Page access count
int page_access[50];//存储访问的页面,下标代表第几次访问
int result[50][50];//0~PBC-1行0~PAC-1列代表每个物理块存储每次访问的页面,PBC行存储是否缺页,是为1,否为0
memset(result, -1, sizeof(result));
printf("请输入物理块数:");
scanf("%d",&PBC);
printf("请输入访问次数:");
scanf("%d",&PAC);
for(int i = 0 ; i < PAC; i++){
printf("请输入第%d次访问的页面:",i+1);
scanf("%d",&page_access[i]);
}
//OPT
OPT(page_access, PBC, PAC, result);
//输出
printf("\n\n页面访问\t");
for(int i = 0 ; i < PAC; i++){
printf("%d\t",page_access[i]);
}
printf("\n");
for(int i = 0; i < PBC; i++){
printf("物理块%d\t\t",i+1);
for(int j = 0; j < PAC; j++){
if(result[i][j]!=-1&&result[PBC][j]!=-1){
printf("%d\t",result[i][j]);
}else{
printf("\t");
}
}
printf("\n");
}
printf("是否缺页\t");
for(int i = 0; i < PAC; i++){
printf("%c\t",result[PBC][i]==1?'Y':'N');
}
printf("\n");
}
/*
3
12
2
3
2
1
5
2
4
5
3
2
5
2
3
20
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
*/
实验结果:(截图)
实验总结:(心得体会)
通过此次实验,我熟练掌握了几种页面置换算法,自己独立写出了OPT算法的代码实现,对虚拟存储技术的特点有了更深的了解。
内容总结
以上是互联网集市为您收集整理的操作系统:页面置换算法OPT算法实验(C语言)全部内容,希望文章能够帮你解决操作系统:页面置换算法OPT算法实验(C语言)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。