页面调度算法

我操作系统是如此伟大 令人敬佩的 在这里就不讲理论就只讲如何实现算法

OPT 最佳置换算法
最佳置换算法 是一理论上的算法 ,不可能是实现 选择淘汰的页面是后面长时间不在被访问的页面,或永久不使用的页面:该算法一般作为模板 评价其他算法的效率

先进先去的页面置换算法(FIFO)
该算法要求(在块装满时)我们首先淘汰 最先进来入内存的页面
需要注意几个点 1:每一个进来的页面 都要和原块里比较是否有相等页面 如果有则不缺页
否则发生缺页中断 2:当不缺页时 物理块内的内容不变
3:缺页时 把新进来的页面放入第一个块其他块内的内容从最后一个块下移
FIFO算法 是一种很简单的算法
#include<stdio.h>
#define N 12 //页面序列个数
#define M 3 //块数
struct node{
int a[M][N];
int b[N];//页面序列
int temp[M];
char F[N];
}s;
int main(){
printf(“输入页面序列:”);
for(int i=0;i<N;i++){
scanf("%d",&s.b[i]);
}
for(int i=0;i<M;i++){
s.temp[i]=-1;
}
for(int i=0;i<N;i++){
int p=0;
while(s.b[i]!=s.temp[p]&&p<M)p++; //如果s.b[i]==s.temp 则产生中断
// 判断是否缺页 ,选中的页面序列 在不在

(p== M)?(s.F[i]== ‘*’) : ( s.F[i]== ‘0’);//p==M代表缺页 如果不缺也块里的元素优先级是不会改变的

if(p==M){
for(int j=M-1;j>=1;j–){
s.temp[j]=s.temp[j-1];
}
s.temp[0]=s.b[i]; //当发生缺页中断是 将页面进的放在最上面
}
for(int j=0;j<M;j++){
s.a[j][i]=s.temp[j];
}
}
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
printf("%d\t",s.a[i][j]);
}
printf("\n");
}
for(int i=0;i<N;i++){
printf("%c\t",s.F[i]);
}
}

最迟最久未使用算法(LRU)页面置换算法 (当物理块装满)每次将最久没有使用的页面调出
同样将每次进来的页面和其他物理块内的页面序列比较 如果找不到则缺页
如果缺页 :每次调入的页面都放在第一个物理块
不缺也 :将物理块前面所有物理块里的页面下移 然后该页面赋值给再把第一个物理块即可
重复这个过程即可

#include<stdio.h>
#define N 12 //页面序列个数
#define M 3 //块数
struct node{
int a[M][N];
int b[N];//页面序列
int temp[M];
char F[N];
}s;
int main(){
printf(“输入页面序列:”);
for(int i=0;i<N;i++){
scanf("%d",&s.b[i]);
}
for(int i=0;i<M;i++){
s.temp[i]=-1;
}
for(int i=0;i<N;i++){
int conut=0;
while(s.b[i]!=s.temp[conut]&&conut<M) conut++;
s.F[i]=(conutM)?(’*’)?‘0’); //判断是否缺页
if(conut
M){//当缺页时 找到调入的物理块
for(int j=M-1;j>=1;j–){
s.temp[j]=s.temp[j-1];
}
s.temp[0]=s.b[i]; //缺页了 新调入的放在第一个位置
}
else{ //如果找到页面 不缺页 则吧改变页面放在第一个 位置
int c=s.temp[conut];//记录
for(int j=conut;j>=1;j–){ //讲该物理块前的所有物理块里的页面 一次下移
s.temp[j]=s.temp[j-1];
}
s.temp[0]=c; //讲不缺页的页面放入第一个物理块
}
for(int j=0;j<M;j++){
s.a[j][i]=s.temp[j];
}
}
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
printf("%d\t",s.a[i][j]);
}
printf("\n");
}
for(int i=0;i<N;i++){
printf("%c\t",s.F[i]);
}
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值