毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 报告 >> 正文

操作系统存储管理实验 第4页

更新时间:2007-9-26:  来源:毕业论文

  class freetable//空闲区说明表

  {  public:

     int length;//从起始地址开始的一个连续空闲区的长度

     int startaddress;//空闲区的主存起始地址

        int statue;}//为时是未分配状态,0时是空表目状态

    freetable  t[max];

       void adjust()//用冒泡法排列,并将状态为未分配的栏放在前部分

       {  int  i=0;

          int  j ;

          int  temp;

          for(;i<max;i++)//是表格紧缩,让空表目集中在表格后面

          {if(t[i].statue==0)

              { j=1;

             for(;(j<max)&&(t[j].statue==0;j++)

                if(j==max)  break;

                t[i].startaddress=t[j].startaddress;

                t[i].length=t[j].lenth;

          t[i].statue=t[j].statue;

                t[j].statue=0;

              }

          }

 

       for(i=0;t[i].state==1;i++)//用冒泡法排序

              i--;

       for(;i>0;i--)

          for(j=0;j<=i-1;j++)

          { if(t[j].startaddress>t[j+1].startaddress)

                     {temp=t[j+1].startaddress;

             t[j+1].startaddress>t[j].startaddress;

             t[j].startaddress=temp;

             temp=t[j+1].lenth;

             t[j+1].startaddress>t[j].lenth;

             t[j].lenth=temp;

    void printtable()   //输出空闲表

       { int j;

            for(i=0;t[i].statue==1;i++)

               {cout<<"t["<<i<<"].startaddress="t[i].startaddress<<endl;

          cout<<"t["<<i<<"].length="t[i].length<<endl;

             cout<<"t["<<i<<"].statue="t[i].statue<<endl;

               }

       }

      

       int FF(int x)//最先适应算法分配主存空间

       {int address;

        int j=0;

        for(;j<max;j++)

        {if(t[j].statue==1)//未分配状态时

              {if(t[j].length==x)//刚好有与作业一样大小的空闲区

                     {t[j].statue==0;//把状态置为空表目

                adjust();

                      cout<<"作业分配后的空闲区说明表:"<<endl;

                      printtable();

                      ruturn(t[j].startaddress);}//返回作业在内存的首地址

                    

             if (t[j].length>x)//当空闲区的大小比作业的大

                {address=t[j].startaddress;//先保存作业在内存的首地址

                 t[j].lenth=t[j].lenth-x;//把空闲区分为两块

           t[j].startaddress=t[j].startaddress+x;

                 adjust();

                 cout<<"作业分配后的空闲区说明表:"<<endl;

                 printtable();

                 return(address);}

else   //当前空闲区不够大时

if(j==max)  {cout<<"作业不能装入"<<endl;return 0;break;}}

else  if(j==max)  {cout<<"作业不能装入"<<endl;return 0;break;}}}

void circle(int l,int s)

{int c,i;

for(c=0;(t[c].statue==1)&&(c<max);c++)

{if((t[c-1].startaddress==s+1)&&(t[c].starataddress+t[c].length==s)&&(c+1<max)//上下都临

{t[c+1].statue=0;     //把下临的空闲表状态置0

t[c].length=t[c].length+t[c+1].length+1;   //把上临的空闲区的长度置为3者之和

break;}

if((t[c].startaddress==s+1//下临

{ t[c].startaddress=s;

t[c].length=1-t[c].length;

break;}

if((t[c].startaddress+t[c].length==s))//上临

{t[c+1].statue=0;

t[c].length=t[c].length+1;

break;}}

if(t[c].statue==0)//上下都不临

for(i=0;i<=mac;i--)  //填入空表目中

if(t[i].statue==0)

{t[j].startaddress=s;

t[j].length=1;

t[i].statue=1;

break;}

adjust();//顺序调整和紧缩空闲区表

printtable();}//最先适应算法回收

void main()

{int i;

int x;

int ad[5];

for(i=0;i<max;i++)

t[i].statue=0;

ad[0]=5;

ad[1]=26;

ad[2]=0;

t[0].startaddress=14;//初始化

t[0].length=12;

t[0].statue=1;

t[1].startaddress=32;

t[1].length=96;

t[1].statue=1;

cout<<”原始表格为”<<endl;

printable();

cout<<”作业长度为”<<endl;

cin>>x;

ad[3]=FF(x);//调用分配函数

cout<<”作业3的归还量:4k”<<endl;

circle(4,ad[2]);//调用回收函数,回收作业3

cout<<”作业2的归还量:6k”<<endl;

circle(6,ad[1]);//调用回收函数,回收作业2

上一页  [1] [2] [3] [4] [5] 下一页

操作系统存储管理实验 第4页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。