用C++语言编写FIFO页面置换算法代码

 我来答
qinger無岢冣笩
2016-06-06 · TA获得超过162个赞
知道小有建树答主
回答量:109
采纳率:85%
帮助的人:66.6万
展开全部
    
    分别使用FIFO、OPT、LRU三种置换算法来模拟页面置换的过程。(Linux、Windows下皆可)
    输入:  3  //页帧数
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1  //待处理的页
输出:页面置换过程中各帧的变化过程和出现页错误的次数
[cpp]
#include<iostream>  
using namespace std; 
int input[20]= {7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1}; 
class page 

public: 
    int num; 
    int mark; 
    page() 
    { 
        num=0; 
        mark=21; 
    } 
}; 
void FIFO() 

    cout<<"------FIFO-----------"<<endl; 
    int error=0; 
    page frame[3];//页帧  
    for(int i=0;i<3;i++)//处理前三个引用  
    { 
        frame[i].num=input[i]; 
        error++; 
        cout<<frame[i].num<<" | "; 
        for(int j=0;j<=i;j++) 
            cout<<frame[j].num<<' '; 
        cout<<endl; 
    } 
    for(int i=3;i<20;i++) 
    { 
        int j; 
        for(j=0;j<3;j++) 
            if(input[i]==frame[j].num) 
            { 
                cout<<input[i]<<endl; 
                break; 
            } 
        if(j==3) 
        { 
            error++; 
            frame[((error-1)%3)].num=input[i];//换掉最旧的页  
            cout<<input[i]<<" | "; 
            for(int k=0;k<3;k++) 
                cout<<frame[k].num<<' '; 
            cout<<endl; 
        } 
    } 
    cout<<"Frame Error:"<<error<<endl<<endl; 

void OPT() 

    cout<<"------OPT------------"<<endl; 
    int error=0; 
    page frame[3]; 
    for(int i=0;i<3;i++)//处理前三个引用  
    { 
        frame[i].num=input[i]; 
        error++; 
        cout<<frame[i].num<<" | "; 
        for(int j=0;j<=i;j++) 
            cout<<frame[j].num<<' '; 
        cout<<endl; 
    } 
    for(int i=3;i<20;i++) 
    { 
        int j; 
        for(j=0;j<3;j++) 
            if(input[i]==frame[j].num) 
            { 
                cout<<input[i]<<endl; 
                break; 
            } 
        if(j==3) 
        { 
            error++; 
            for(j=0;j<3;j++) 
            { 
                frame[j].mark=21; 
                for(int k=20;k>=i;k--)//向后遍历,找到最长时间不用的页  
                { 
                    if(frame[j].num==input[k]) 
                        frame[j].mark=k; 
                } 
            } 
            if(frame[0].mark>frame[1].mark&&frame[0].mark>frame[2].mark) 
                frame[0].num=input[i]; 
            else if(frame[1].mark>frame[0].mark&&frame[1].mark>frame[2].mark) 
                frame[1].num=input[i]; 
            else 
                frame[2].num=input[i]; 
            cout<<input[i]<<" | "; 
            for(int k=0;k<3;k++) 
                cout<<frame[k].num<<' '; 
            cout<<endl; 
        } 
    } 
    cout<<"Frame Error:"<<error<<endl<<endl; 

void LRU() 

    cout<<"------LRU------------"<<endl; 
    int error=0; 
    page frame[3]; 
    for(int i=0;i<3;i++)//处理前三个引用  
    { 
        frame[i].num=input[i]; 
        error++; 
        cout<<frame[i].num<<" | "; 
        for(int j=0;j<=i;j++) 
            cout<<frame[j].num<<' '; 
        cout<<endl; 
    } 
    for(int i=3;i<20;i++) 
    { 
        int j; 
        for(j=0;j<3;j++) 
            if(input[i]==frame[j].num) 
            { 
                cout<<input[i]<<endl; 
                break; 
            } 
        if(j==3) 
        { 
            error++; 
            for(j=0;j<3;j++) 
            { 
                frame[j].mark=0; 
                for(int k=0;k<=i;k++)//向前遍历,找到最近最少使用的  
                { 
                    if(frame[j].num==input[k]) 
                        frame[j].mark=k; 
                } 
            } 
            if(frame[0].mark<frame[1].mark&&frame[0].mark<frame[2].mark) 
                frame[0].num=input[i]; 
            else if(frame[1].mark<frame[0].mark&&frame[1].mark<frame[2].mark) 
                frame[1].num=input[i]; 
            else 
                frame[2].num=input[i]; 
            cout<<input[i]<<" | "; 
            for(int k=0;k<3;k++) 
                cout<<frame[k].num<<' '; 
            cout<<endl; 
        } 
    } 
    cout<<"Frame Error:"<<error<<endl<<endl; 

int main() 

    FIFO(); 
    OPT(); 
    LRU(); 
}
追问
可以解释一下代码的意思吗
越详细越好
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式