操作系统实验 页式地址变换机构模拟 c++

来源:互联网 发布:mac单机游戏怎么安装 编辑:程序博客网 时间:2024/06/06 04:38

 

#include <iostream>

#include <iomanip>

#define N 8

#define M 7

 

int array[M] = {3296, 2268, 1366, 1537, 9879, 6532, 7769};

 

using namespace std;

class pageForm

{

public:

 

       unsigned short int m_pageNum[N];

    short int m_allot_pageNum[N];

    unsigned short int m_memoryStatu[N];

 

public:

 

       void init_pageForm();

    void set_pageForm();

    int get_pageNum(int visit);

    int get_pageAdd(int visit);

    int get_phyAdd(pageForm &page1, int pageadd);

    void prt_pageForm();

       void addTrans(pageForm &page1);

};

 

void pageForm::init_pageForm()

{

 

       for (int i=0; i<N; ++i)

       {

              m_pageNum[i] = i;

        m_allot_pageNum[i] = -1;

        m_memoryStatu[i] = 0;

       }

 

 return ;

}

 

void pageForm::set_pageForm()

{

       m_allot_pageNum[0] = 5;

    m_allot_pageNum[1] = 9;

    m_allot_pageNum[2] = 10;

    m_allot_pageNum[3] = 7;

 

       for (int i=0; i<4; ++i)

       {

              m_memoryStatu[i] = 1;

       }

      

       return ;

}

 

int pageForm::get_pageNum(int visit)

{

       int pagenum;

    pagenum = visit >> 10;

   

       return pagenum;

}

 

int pageForm::get_pageAdd(int visit)

{

       int add;

    add = visit & 1023;

 

       return add;

}

 

int pageForm::get_phyAdd(pageForm &page1, int pageadd)

{

       int phyadd;

    for (int i=0; i<N; ++i)

       {

              if (page1.m_pageNum[i] == pageadd)

              {

                     phyadd = page1.m_allot_pageNum[i];

                     break;

              }

       }

       return phyadd;

}

 

void pageForm::prt_pageForm()

{

       cout<<endl;

    cout<<"当前页表情况"<<endl;

    cout<<"******************"<<endl;

    cout<<"|页号"<<setw(3)<<"|页面号"<<setw(3)<<"|内外"<<setw(1)<<"|"<<endl;

    cout<<"|----------------|"<<endl;

 

       for (int i=0; i<N; ++i)

       {

              cout<<"|"<<setw(2)<<m_pageNum[i]<<setw(3)<<"|"<<setw(4)<<m_allot_pageNum[i]

                     <<setw(3)<<"|"<<setw(3)<<m_memoryStatu[i]<<setw(2)<<"|"<<endl;

       }

 

       cout<<"******************"<<endl;

 

       return ;

}

 

void pageForm::addTrans(pageForm &page1)

{

      

       int pageadd;

    int pagenum;

    int phyadd;

    int visit;

 

       for (int i=0; i<M; ++i)

       {

              visit = array[i];

             

        pagenum = page1.get_pageNum(visit);

             

        if (0>pagenum || pagenum>7)

              {

                     cout<<"越界"<<"  "; 

              }

              else

                     if (page1.m_memoryStatu[pagenum])

                     {

                            pageadd = page1.get_pageAdd(visit);

                            phyadd = page1.get_phyAdd(page1, pagenum);  

                            cout<<(phyadd << 10)+pageadd<<"  ";        

                     }           

                     else

                     {

                            cout<<"缺页"<<"  ";   

                     }

       }

      

       return ;

}

 

pageForm page1;

 

 

int main()

{

       page1.init_pageForm();

    page1.set_pageForm();

    page1.prt_pageForm();

 

       cout<<"读入的访问串是:  ";

       for (int j=0; j<M; ++j)

    {

              cout<<array[j]<<"  ";

    }  

 

       cout<<endl<<"------------------------------------------------------------"<<endl;

       cout<<"地址变换的结果是:";

      

    page1.addTrans(page1);

    cout<<endl;

 

       return 0;

}