最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

实验报告 可变分区 主存分配回收

来源:动视网 责编:小OO 时间:2025-09-30 01:14:40
文档

实验报告 可变分区 主存分配回收

操作系统实验报告设计题目在可变分区管理方式下采用最先适应算法实现主存分配和实现主存回收一、设计内容主存储器空间的分配和回收。二、设计目的一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的
推荐度:
导读操作系统实验报告设计题目在可变分区管理方式下采用最先适应算法实现主存分配和实现主存回收一、设计内容主存储器空间的分配和回收。二、设计目的一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的


操作系统实验报告

设计题目在可变分区管理方式下采用最先适应算法实现主存分配和实现主存回收
一、设计内容

主存储器空间的分配和回收。

二、设计目的

一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的管理方式有关的,通过本实习帮助学生理解在不同的存储管理方式下应怎样实现主存空间的分配和回收。

三、设计过程

1、数据结构设计

#define m 10

#define n 10

#define Q 1024

 struct free

 {

     int ad;

     int len;

     char state;

 }fr[m];

       

 struct use

 {

     int ad;

     int len;

     char state;

 }us[10];

 struct free0

 {

     int ad;

     int len;

     char state;

 }f0[1];

2、算法设计

void creatf()//空闲分区表初始化

{int i;

for(i=0;i     {

          fr[i].ad=0;

          fr[i].len=0;

          fr[i].state='M';

     }

 }

void insertu(int i)

{

    int j,p;

    p=0;

    printf("\\n请输入第%d个作业的长度:\\n",i);

    scanf("%d",&us[i].len);

    us[i].ad=0;

    us[i].state='U';

    j=0;

    p=0;

    if(fr[0].ad==0)

    printf("\\n 所有空闲区已经全部分配完毕!\\n");

    while(fr[j].state!='M'&&p==0)

    {

if( us[i].len         {

             us[i].ad=fr[j].ad;

             fr[j].ad=us[i].len+fr[j].ad;             

             fr[j].len=fr[j].len-us[i].len;

             p=1;

             break;

         }

         if(us[i].len==fr[j].len)

         {

             fr[j].ad=0;

             fr[j].len=0;

             fr[j].state='M';

             sort1();

             p=1;

             break;

         }

        j++;

    }

       if(p==0)

       {

            us[i].state='N';

            printf("\\n没有适当的空间可以插入!\\n");

        }

       if(p!=0)

       {

           printf("\\n第%d个作业分配空间后,空闲表为:\\n",i);

           disp();

       }

}

void sort()

{

    int i,q,j;

    i=0;

    q=0;

     

    if(fr[0].ad!=0)

    { 

         do

         {

if(f0[0].ad>fr[i].ad)

             i=i+1;

             else q=1;

         }while(fr[i].state!='M'&&q==0);

   

for(j=m-1;j>i;j--)

         {

             fr[j].ad=fr[j-1].ad;

             fr[j].len=fr[j-1].len;

             fr[j].state=fr[j-1].state;

        }

        fr[i].ad=f0[0].ad;

        fr[i].len=f0[0].len;

        fr[i].state=f0[0].state;

   }

   if(fr[0].ad==0)

    {

        fr[0].ad=f0[0].ad;

        fr[0].len=f0[0].len;

        fr[0].state=f0[0].state;

    }

}

void sort1()

{

    int i;

    i=0;

    while(fr[i].state!='M')

    {i++;}

    if(fr[i+1].state!='M')

    {

        do

        {

            fr[i].ad=fr[i+1].ad;

            fr[i].len=fr[i+1].len;

            fr[i].state=fr[i+1].state;

            i++;

        }while(fr[i+1].state!='M');

        fr[i].ad=0;

        fr[i].len=0;

        fr[i].state='M';

    }

 

}

void disp()

{

    int i;

    printf("\\n\address\\length\\state\\n");

for(i=0;i    printf("\\n\%d\\%d\\  %c\\n",fr[i].ad,fr[i].len,fr[i].state);

}

void over()

     int d,i,j,p,k;

     p=0;

     i=0; 

     printf("\\n 输入要结束第几个作业:\\n");

     scanf("%d",&d);

     printf("\\n 要结束作业的信息为:\\n");

     printf("\\n\address\\length\\state\\n");

     printf("\\n\%d\\%d\\  %c\\n",us[d].ad,us[d].len,us[d].state);

     if(us[d].state=='N')//如果要结束作业的状态为'N',说明此作业没有被分配空间

     printf("\\n 此作业没有分配内存!\\n");

     if(us[d].state=='Y')//如果要结束作业的状态为'Y',说明此作业已经被结束

     printf("\\n 此作业已经结束 !\\n");

     if(us[d].state=='U')//如果要结束作业的状态为'U',说明此作业没有被结束

     { 

      while(fr[i].state!='M')

      {

         if(us[d].ad==fr[i].ad+fr[i].len)

         //如果被结束作业的起始地址和一个空闲分区的结束地址相邻,则合并两者

         {

             fr[i].len=fr[i].len+us[d].len;

             if(fr[i].ad+fr[i].len==fr[i+1].ad)

             //合并完之后的空闲分区的结束地址和相邻的空闲分区的起始地址也相连,则继续合并

             {

                 fr[i].len=fr[i].len+fr[i+1].len;

for(k=i+1;k                 {

                     fr[k].ad=fr[k+1].ad;

                     fr[k].len=fr[k+1].len;

                     fr[k].state=fr[k+1].state;

                 }

                 fr[m-1].ad=-1;

                 fr[m-1].len=-1;

                 fr[m-1].state='M';

             }

             us[d].state='Y';//修改已经结束作业的信息

             p=1;

             break;

         }

         if(us[d].ad+us[d].len==fr[i].ad)

         //如果被结束作业的结束地址和一个空闲分区的起始地址相邻,则合并两者

         {

             fr[i].len=us[d].len+fr[i].len;

             fr[i].ad=us[d].ad;

             fr[i].state='F';

             p=1;

             us[d].state='Y';

           break;

         }

if(us[d].ad         //如果结束作业不是以上两种情况,且介于两个空闲分区之间,则按起址的大小插入

         {

for(j=m-1;j>i;j--)

             {

                 fr[j].ad=fr[j-1].ad;

                 fr[j].len=fr[j-1].len;

                 fr[j].state=fr[j-1].state;

             }

             fr[i].ad=us[d].ad;

             fr[i].len=us[d].len;

             fr[i].state='F';    

             us[d].state='Y'; 

             break;            

         }

         i++;

     }

     if(p==0)//如果结束作业不是以上三种情况,且其址最大,则插入到空闲分区表的末尾

     {

         fr[i].ad=us[d].ad;

         fr[i].len=us[d].len;

         fr[i].state='F';

         us[d].state='Y';

     }

     disp();

    }

}

 #include "stdio.h" 

#include "stdlib.h" 

#include "dy.h"

#include "disp.h"

#include "creatf.h"

#include "sort.h"

#include "insertu.h"

#include "over.h"

int main()

{

    int i,j,k,p;

    i=1;

    k=0;

    p=1;

    printf("\\n*----------------------------------------------------------*\\n");

    printf("|*****************主存储存空间的分配和回收模拟***************|\\n");

    printf("*----------------------------------------------------------*\\n\\n");

    creatf();

    printf("\\n 请输入目前空闲分区表的信息:\n");

    while(p!=0)

    {

         printf("\\n 请输入空闲分区表某一行的起址和长度\n");

         scanf("%d%d",&f0[0].ad,&f0[0].len);

         f0[0].state='F';

         sort();

        // k++;

         printf("\\n 如果不在进行输入,则输入0\n");

         scanf("%d",&p);

     }

    printf("\\n 插入作业之前空闲分区表的信息如下:\n");

    disp(); 

    for(;;)

    { 

        printf("=================菜单===================\\n");

        printf("~~~~~~1:为作业分配空间;\n");

        printf("~~~~~~2:结束作业;\n");

        printf("~~~~~~3:退出程序;\n");

        printf("========================================\\n");

        printf("输入你的选择:\n"); 

        scanf("%d",&j);

        switch(j)

        {

            case 1:insertu(i);//为作业分配空间

                   i++;

                   break;

            case 2:over();//作业的回收

                   break;

            case 3:exit(0);

         }

     }

    return 0;

四、程序实现及运行结果

  

五、设计总结

  这次实验使用的主要是数组,通过这次实验是我对数组的一些用法和使用加深了印象。在刚开始做时,由于没有把题意给理解清初就开始做题,导致到快要让老师验收时才发现,不过还好,经过修整终于把实验给完成了。在实验过程中,也遇到了一些问题,比如:对于一些作业已经结束了,再一次回收还能插入到空闲表中,经过一番思考,对作业设置了一个标志位,每一次作业结束都对其进行检验和修改。同时通过这次实验我也对内存空间的分配和回收有了进一步的认识,熟悉了其工作过程和工作原理。

文档

实验报告 可变分区 主存分配回收

操作系统实验报告设计题目在可变分区管理方式下采用最先适应算法实现主存分配和实现主存回收一、设计内容主存储器空间的分配和回收。二、设计目的一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top