求先来先服务调度算法的源代码,C/C++版的都行,尽量短啊!!!能调试的
发布网友
发布时间:2022-05-04 15:07
我来回答
共1个回答
热心网友
时间:2023-10-23 06:10
//FIFO
#include<iostream>
using namespace std;
int pagenum=0; ///内存的页面数
int total=0; ///要访问的叶面总数
int lacknumber=0; ///缺页的总数
void main()
{
int array[20]; //生成一个内存空间并进行分配,且初始化为空-1,不用0去初始化,是因为等待序列初始化是0
for(int x=0;x<20;x++)
{
array[x]=-1;
}
int seque[20]={0};//生成一个虚拟空间初始化为空,即等待队列
cout<<"请输入内存的页面数:";
cin>>pagenum;
cout<<"请输入页面的访问顺序(输入-1结束):";
//输入的页面访问序列,进入等待队列
for(int i=0;i<20;i++)
{
int num;
cin>>num;
if(num!=-1)
{
seque[i]=num;
total++;//计算总的进程数
}
else
{
seque[i]=num;
break;
}
}
cout<<"总的页面数为"<<total<<endl;//总的页面数
cout<<"---------进入FIFO页面调度----------------"<<endl;
int j=0;
for(i=0;i<pagenum;i++) //刚开始置换前pagenum个空页面
{
//刚开始,不存在内存中的,都算缺页
if(i<pagenum & array[i] != seque[i])
{
array[i]=seque[i];
cout<<"页面"<<seque[i]<<"进入内存"<<endl;
cout<<"缺页! 此时页面内容为";
for(int j=0;j<pagenum;j++)
{
cout<<array[j]<<" ";
}
cout<<"(-1代表没有内容)"<<endl;
}
cout<<endl;
}
//队列和进入页表内容比较
int kk=0;
for(i=pagenum;i<total;i++)//假如说分了三个内存页,从此开始三个内存页已被占满,就要考虑命中或替换了
{
int flag=0;//作为标志,如果=0说明不存在,则要进行替换,反之命中
for(int k=0;k<pagenum;k++)//此for循环实现的是把要进入内存的页和内存页中的数比较,看是否有
{ //若有则把flag置成1 。
if(array[k]==seque[i])
{
flag=1; //存在
break;
}
}
cout<<endl;
if(flag==1)//利用flag标志判断,若等于1则说明有,就不用替换了,
{
cout<<"页面"<<seque[i]<<"进入内存,命中!"<<endl;
cout<<"此时页面内容为";
for(int j=0;j<pagenum;j++)
{
cout<<array[j]<<" ";
}
}
cout<<endl;
if(flag==0)//另一种就是内存没有的情况了,就要把最先进的弹出
{
int tem=array[kk];//kk初始值为0,说明是内存分配页的那个数组,把数组的第一个,也就是0要单元的那个数替换
array[kk]=seque[i];
cout<<"页面"<<seque[i]<<"进入内存"<<endl;
cout<<"缺页!页面"<<tem<<"被替换"<<endl;
cout<<"此时页面内容为";
for(int j=0;j<pagenum;j++)
{
cout<<array[j]<<" ";
}
cout<<endl;
kk++; //kk++意思是:假如分配内存三个页面,每次进行kk++说明有一个要进入内存页中,刚开始kk=0,指内存页的第一个
//内存页,也就是最先进来的那个页被替换了,+1说明要把原来在数组二号中的数替换,+1说明要替换第三个了,
//而内存页也就三页,当下次再替换的时候就要替换第四页除以3的余了,而余就是0,也就是下边kk==pagenum把
//kk置0了。
lacknumber++; //缺页数
if(kk==pagenum)
{
kk=0;
}
}
}
lacknumber=pagenum+lacknumber;
cout<<"缺页率="<<lacknumber<<"/"<<total<<"="<<float(lacknumber)/float(total)<<endl;
}
热心网友
时间:2023-10-23 06:10
//FIFO
#include<iostream>
using namespace std;
int pagenum=0; ///内存的页面数
int total=0; ///要访问的叶面总数
int lacknumber=0; ///缺页的总数
void main()
{
int array[20]; //生成一个内存空间并进行分配,且初始化为空-1,不用0去初始化,是因为等待序列初始化是0
for(int x=0;x<20;x++)
{
array[x]=-1;
}
int seque[20]={0};//生成一个虚拟空间初始化为空,即等待队列
cout<<"请输入内存的页面数:";
cin>>pagenum;
cout<<"请输入页面的访问顺序(输入-1结束):";
//输入的页面访问序列,进入等待队列
for(int i=0;i<20;i++)
{
int num;
cin>>num;
if(num!=-1)
{
seque[i]=num;
total++;//计算总的进程数
}
else
{
seque[i]=num;
break;
}
}
cout<<"总的页面数为"<<total<<endl;//总的页面数
cout<<"---------进入FIFO页面调度----------------"<<endl;
int j=0;
for(i=0;i<pagenum;i++) //刚开始置换前pagenum个空页面
{
//刚开始,不存在内存中的,都算缺页
if(i<pagenum & array[i] != seque[i])
{
array[i]=seque[i];
cout<<"页面"<<seque[i]<<"进入内存"<<endl;
cout<<"缺页! 此时页面内容为";
for(int j=0;j<pagenum;j++)
{
cout<<array[j]<<" ";
}
cout<<"(-1代表没有内容)"<<endl;
}
cout<<endl;
}
//队列和进入页表内容比较
int kk=0;
for(i=pagenum;i<total;i++)//假如说分了三个内存页,从此开始三个内存页已被占满,就要考虑命中或替换了
{
int flag=0;//作为标志,如果=0说明不存在,则要进行替换,反之命中
for(int k=0;k<pagenum;k++)//此for循环实现的是把要进入内存的页和内存页中的数比较,看是否有
{ //若有则把flag置成1 。
if(array[k]==seque[i])
{
flag=1; //存在
break;
}
}
cout<<endl;
if(flag==1)//利用flag标志判断,若等于1则说明有,就不用替换了,
{
cout<<"页面"<<seque[i]<<"进入内存,命中!"<<endl;
cout<<"此时页面内容为";
for(int j=0;j<pagenum;j++)
{
cout<<array[j]<<" ";
}
}
cout<<endl;
if(flag==0)//另一种就是内存没有的情况了,就要把最先进的弹出
{
int tem=array[kk];//kk初始值为0,说明是内存分配页的那个数组,把数组的第一个,也就是0要单元的那个数替换
array[kk]=seque[i];
cout<<"页面"<<seque[i]<<"进入内存"<<endl;
cout<<"缺页!页面"<<tem<<"被替换"<<endl;
cout<<"此时页面内容为";
for(int j=0;j<pagenum;j++)
{
cout<<array[j]<<" ";
}
cout<<endl;
kk++; //kk++意思是:假如分配内存三个页面,每次进行kk++说明有一个要进入内存页中,刚开始kk=0,指内存页的第一个
//内存页,也就是最先进来的那个页被替换了,+1说明要把原来在数组二号中的数替换,+1说明要替换第三个了,
//而内存页也就三页,当下次再替换的时候就要替换第四页除以3的余了,而余就是0,也就是下边kk==pagenum把
//kk置0了。
lacknumber++; //缺页数
if(kk==pagenum)
{
kk=0;
}
}
}
lacknumber=pagenum+lacknumber;
cout<<"缺页率="<<lacknumber<<"/"<<total<<"="<<float(lacknumber)/float(total)<<endl;
}
热心网友
时间:2023-10-23 06:10
//FIFO
#include<iostream>
using namespace std;
int pagenum=0; ///内存的页面数
int total=0; ///要访问的叶面总数
int lacknumber=0; ///缺页的总数
void main()
{
int array[20]; //生成一个内存空间并进行分配,且初始化为空-1,不用0去初始化,是因为等待序列初始化是0
for(int x=0;x<20;x++)
{
array[x]=-1;
}
int seque[20]={0};//生成一个虚拟空间初始化为空,即等待队列
cout<<"请输入内存的页面数:";
cin>>pagenum;
cout<<"请输入页面的访问顺序(输入-1结束):";
//输入的页面访问序列,进入等待队列
for(int i=0;i<20;i++)
{
int num;
cin>>num;
if(num!=-1)
{
seque[i]=num;
total++;//计算总的进程数
}
else
{
seque[i]=num;
break;
}
}
cout<<"总的页面数为"<<total<<endl;//总的页面数
cout<<"---------进入FIFO页面调度----------------"<<endl;
int j=0;
for(i=0;i<pagenum;i++) //刚开始置换前pagenum个空页面
{
//刚开始,不存在内存中的,都算缺页
if(i<pagenum & array[i] != seque[i])
{
array[i]=seque[i];
cout<<"页面"<<seque[i]<<"进入内存"<<endl;
cout<<"缺页! 此时页面内容为";
for(int j=0;j<pagenum;j++)
{
cout<<array[j]<<" ";
}
cout<<"(-1代表没有内容)"<<endl;
}
cout<<endl;
}
//队列和进入页表内容比较
int kk=0;
for(i=pagenum;i<total;i++)//假如说分了三个内存页,从此开始三个内存页已被占满,就要考虑命中或替换了
{
int flag=0;//作为标志,如果=0说明不存在,则要进行替换,反之命中
for(int k=0;k<pagenum;k++)//此for循环实现的是把要进入内存的页和内存页中的数比较,看是否有
{ //若有则把flag置成1 。
if(array[k]==seque[i])
{
flag=1; //存在
break;
}
}
cout<<endl;
if(flag==1)//利用flag标志判断,若等于1则说明有,就不用替换了,
{
cout<<"页面"<<seque[i]<<"进入内存,命中!"<<endl;
cout<<"此时页面内容为";
for(int j=0;j<pagenum;j++)
{
cout<<array[j]<<" ";
}
}
cout<<endl;
if(flag==0)//另一种就是内存没有的情况了,就要把最先进的弹出
{
int tem=array[kk];//kk初始值为0,说明是内存分配页的那个数组,把数组的第一个,也就是0要单元的那个数替换
array[kk]=seque[i];
cout<<"页面"<<seque[i]<<"进入内存"<<endl;
cout<<"缺页!页面"<<tem<<"被替换"<<endl;
cout<<"此时页面内容为";
for(int j=0;j<pagenum;j++)
{
cout<<array[j]<<" ";
}
cout<<endl;
kk++; //kk++意思是:假如分配内存三个页面,每次进行kk++说明有一个要进入内存页中,刚开始kk=0,指内存页的第一个
//内存页,也就是最先进来的那个页被替换了,+1说明要把原来在数组二号中的数替换,+1说明要替换第三个了,
//而内存页也就三页,当下次再替换的时候就要替换第四页除以3的余了,而余就是0,也就是下边kk==pagenum把
//kk置0了。
lacknumber++; //缺页数
if(kk==pagenum)
{
kk=0;
}
}
}
lacknumber=pagenum+lacknumber;
cout<<"缺页率="<<lacknumber<<"/"<<total<<"="<<float(lacknumber)/float(total)<<endl;
}