硬盘分区与操作系统的安装 实验报告

实验报告

姓名:_________  班级:____________   学号:______________

同组实验者:______________________________________________

 

第二篇:操作系统实验三实验报告动态分区分配算法

操作系统实验三

实验题目动态分区分配算法

实验目的

通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。

实验内容及要求

问题描述:

设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, … ,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1, … ,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。

程序要求:

1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。

2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。

3)输入:空闲分区个数n,空闲分区大小P1, … ,Pn,进程个数m,进程需要的分区大小S1, … ,Sm

4)输出:首次适应算法,循环首次适应算法,最佳适应算法,最坏适应算法,最终内存空闲分区的分配情况。

实现源代码:

#include<iostream>

#include<fstream>

#include<iomanip>

#include<string>

#define max 100

using namespace std;

int work_num;

int zone_num;

struct Data{

       int data;

       char  name;

};

Data *d=new Data[max];

struct Table{

       int data;

       char array[max];

       int length;

};

Table *T=new Table[max];

Table *temp=new Table[max];

void Init()

{

       ifstream   inf("DTFQ.txt");

       int i,j;

       char ch;

       inf>>work_num;

       cout<<"作业数:"<<work_num<<endl;

       inf>>zone_num;

       cout<<"空闲分区数:"<<zone_num<<endl;

       cout<<" 作业为 :";

       for(j=0;j<work_num;j++)

       {

              inf.get(ch);

              d[j].name=ch;

              cout<<setw(4)<<d[j].name;

       }

       cout<<endl;

       cout<<"作业大小:";

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

       {

              inf>>d[i].data;

              cout<<setw(4)<<d[i].data;

       }

       cout<<endl;

       cout<<"空闲分区:";

       for(j=0;j<zone_num;j++)

       {

              inf>>T[j].data;

              temp[j].data=T[j].data;

              T[j].length=0;

              temp[j].length=0;

              cout<<setw(4)<<T[j].data;

       }

       cout<<endl;

}

void renew()

{

       int j;

       for(j=0;j<zone_num;j++)

       {

              T[j].data=temp[j].data;

              T[j].length=temp[j].length;

       }

}

void re()

{

       int i;

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

       {

              T[i].array[T[i].length]='#';

       }

}

void show()

{

       int i,j;

       re();

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

       {

              if(T[i].data==temp[i].data)

                     cout<<setw(4)<<T[i].data;

              else

              {

                     cout<<setiosflags(ios::right)<<setw(4)<<T[i].data<<setw(1);

                     for(j=0;j<T[i].length;j++)

                     {

                            if(T[i].array[j]=='#')

                                   break;

                            else

                                   cout<<setiosflags(ios::right)<<T[i].array[j];

                     }

              }

       }

       cout<<endl;

}

void first_fit()

{

       renew();

       cout<<"fist fit:";

       int i,j;

       int tag=0;

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

       {

              for(j=0;j<zone_num;j++)

              {

                     if(d[i].data<=T[j].data)

                     {

                                   T[j].data=T[j].data - d[i].data;

                                   T[j].array[T[j].length]=d[i].name;

                                   T[j].length++;

                                tag=0;

                                break;

                                  

                     }

                     else

                            tag=1;

              }

              if(tag==1)

              {

                     cout<<"作业太大,无满足条件分区!"<<endl;

                     break;

              }

       }

       //re();

}

void next_fit()

{

       renew();

       cout<<"next fit:";

       int i,j;

       int m=0,tag=0,count=0;

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

       {

              for(j=m;j<zone_num;j++)

              {

                     if(d[i].data<=T[j].data)

                     {

                                   T[j].data=T[j].data - d[i].data;

                                   T[j].array[T[j].length]=d[i].name;

                                   T[j].length++;

                                tag=0;

                                   m=j;

                                break;

                                  

                     }

                     else

                     {

                            tag=1;

                            count++;

                     }

              }

              while(tag==1 && count<zone_num)

              {

                     for(j=0;j<m;j++)

                     {

                            if(d[i].data<=T[j].data)

                            {

                                   T[j].data=T[j].data - d[i].data;

                                   T[j].array[T[j].length]=d[i].name;

                                   T[j].length++;

                                tag=0;

                                break;

                                  

                            }

                            else

                            {

                                   tag=1;

                                   count++;

                            }

                     }

             

              }

              if(tag==1 && count==zone_num)

              {

                     cout<<"作业太大,无满足条件分区!"<<endl;

                     break;

              }

       }

       //re();

}

void best_fit()

{

       renew();

       cout<<"best fit:";

       int i,j,k,temp,m;

       int tag=0,n=0;

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

       {

              for(j=0;j<zone_num;j++)

              {

                     if(d[i].data<=T[j].data)

                     {

                                temp=T[j].data;

                    m=j;

                                   int tag1=0;

                                   for(k=m+1;k<=zone_num;k++)

                                   {

                                          if(T[k].data<temp)

                                          {

                                                 if(T[k].data>=d[i].data)

                                                 {

                                                        temp=T[k].data;

                                                        n=k;

                                                        tag1=1;

                                                 }

                                                

                                          }

                                          else if(tag1==0)

                                                 n=j;

                                   }

                                   T[n].data=temp - d[i].data;

                                   T[n].array[T[n].length]=d[i].name;

                                   T[n].length++;

                                   tag=0;

                                   break;

                     }

                     else

                            tag=1;

       }

              if(tag==1)

              {

                     cout<<"作业太大,无满足条件分区!"<<endl;

                     break;

              }

       }

       //re();

}

void worst_fit()

{

       renew();

       cout<<"worst fit:";

       int i,j,k,temp,m;

       int tag=0,n=0;

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

       {

              for(j=0;j<zone_num;j++)

              {

                     if(d[i].data<=T[j].data)

                     {

                                int tag1=0;

                                temp=T[j].data;

                    m=j;

                                   for(k=m+1;k<=zone_num;k++)

                                   {

                                          if(T[k].data>temp)

                                          {

                                                 if(T[k].data>=d[i].data)

                                                 {

                                                        temp=T[k].data;

                                                        n=k;

                                                        tag1=1;

                                                 }

                                                

                                          }

                                          else if(tag1==0)

                                                 n=j;

                                   }

                                   T[n].data=temp - d[i].data;

                                   T[n].array[T[n].length]=d[i].name;

                                   T[n].length++;

                                   tag=0;

                                   break;

                     }

                     else

                            tag=1;

       }

              if(tag==1)

              {

                     cout<<"作业太大,无满足条件分区!"<<endl;

                     break;

              }

       }

       //re();

}

void main()

{

       Init();

       first_fit();

    show();

    next_fit();

    show();

       best_fit();

    show();

       worst_fit();

       show();

       system("pause");

}

实验截图:

相关推荐