码迷,mamicode.com
首页 > 其他好文 > 详细

内存的分配

时间:2016-06-17 21:17:14      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

实验四主存空间的分配和回收

1.    目的和要求

1.1.           实验目的

用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解。

1.2.           实验要求

采用连续分配方式之动态分区分配存储管理,使用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法4种算法完成设计。

(1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。采用分区说明表进行。

(2)或在程序运行过程,由用户指定申请与释放。

(3)设计一个空闲区说明表,以保存某时刻主存空间占用情况。

 

把空闲区说明表的变化情况以及各作业的申请、释放情况显示。

2.    实验内容

根据指定的实验课题,完成设计、编码和调试工作,完成实验报告

3.    实验环境

可以选用Visual C++作为开发环境。也可以选用Windows下的VB,CB或其他可视化环境,利用各种控件较为方便。自主选择实验环境。

3.    实验原理及核心算法参考程序段

#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX 24
#include<conio.h>

  #define Memory 1024
  struct partition{
      
     char pn[10];
      int begin;
     int size;
    int end;   ////////
     char status;  //////////内存状态
     };
 typedef struct partition PART;
 void Freesize();
 void nicefit();
 void restart();

 void firstfit();
 PART Free[MAX],User[MAX],addresses[MAX],t;//t是用于排序最优算法的变量
 int nFree;//空闲内存的数量
    int  nUsed;//使用的数量
     int naddresses;//地址数量
 

 void restart()//初始化
 {int j=0;
     
     nFree=0,nUsed=0,naddresses=0;
     
     strcpy(User[0].pn,"SYSTEM");
   
     User[0].begin=0;
     User[0].size=50;
  
nUsed++;

     

     
 
    printf("初始化,设内存总容量为1024k\n");
    printf("系统从低地址部分开始使用,占用50k\n\n已初始化");

 
 
    strcpy(Free[0].pn,"----");
     Free[0].begin=0;//开始系统占用50K
     Free[0].size=50;
     Free[0].status=n;//n表示再用
    
     nFree=4;
    naddresses++;
Free[1].size=40;
Free[1].status=f;
    Free[2].size=50;
Free[2].status=f;


Free[3].size=120;
Free[3].status=f;

Free[4].size=70;
Free[4].status=f;
Freesize();


    
 }
void Freesize(){
for(int j=1;j<nFree+1;j++)
{
    Free[j].begin=Free[j-1].begin+Free[j-1].size;

}
} 
 

 
void PT()//打印
{
    int i;
    printf("空闲区表Free\n");
    printf("\t\t\tNo.\tproname\tbegin\tsize\tstatus\n");
    for(i=0;i<=nFree;i++)
        printf("\t\t\tNo.%d\t%s\t%d\t%d\t%c\n",i,Free[i].pn,Free[i].begin,Free[i].size,Free[i].status);
    
    printf("已分配分区表Used\n");
    printf("\t\t\tNo.\tproname\tbegin\tsize\tstatus\n");
    for(i=0;i<=nUsed+1;i++)
        printf("\t\t\tNo.%d\t%s\t%d\t%d\t%c\n",i,User[i].pn,User[i].begin,User[i].size,User[i].status);

    printf("内存使用情况,:\n");
    printf("\t\t\tNo.\tproname\tbegin\tsize\tstatus\n");
    for(i=0;i<=naddresses;i++)
        printf("\t\t\tNo.%d\t%s\t%d\t%d\t%c\n",i,addresses[i].pn,addresses[i].begin,addresses[i].size,addresses[i].status);
}


void nicefit()
{int i=1;int j=0;int a=i;int num;int flag;
printf("插入几个进程\n");
scanf("%d",&num);
    for(i=1;i<num+1;i++){
    
    printf("名字为\n");
    scanf("%s",&User[i].pn);
printf("大小\n");
getchar();
scanf("%d",&User[i].size);

    }//输入进程

    //排序



  
  
  for(i=1;i<24;i++)
  {
    flag=0;
    for(j=1;j<24-i;j++)
    {
      if(Free[j].size>Free[j+1].size)    //将空间少交换到前边
      {
        t=Free[j];
        Free[j]=Free[j+1];
        Free[j+1]=t;
        flag=1;//交换
      }
    }
    if(flag==0)//如果一趟排序中没发生任何交换,则排序结束
    {
      break;
    }
  }
for(i=1;i<num+1;i++){
    for(j=1;j<24;j++)
    {
    if(User[i].size<Free[j].size && Free[j].status==f)
    {
    Free[j].size=Free[j].size-User[i].size;
    Freesize();
    User[i].begin=Free[j].begin;
 
    Free[j].status=n;break;
    }
    }
    }             
  
    PT(); }
void firstfit()
{int i=1;int j=0;int a=i;int num;
printf("插入几个进程\n");
scanf("%d",&num);
    for(i=1;i<num+1;i++){
    
    printf("名字为\n");
    scanf("%s",&User[i].pn);
printf("大小\n");
getchar();
scanf("%d",&User[i].size);

    }//输入进程
for(i=1;i<num+1;i++){
    for(j=1;j<24;j++)
    {
    if(User[i].size<Free[j].size)
    {
    Free[j].size=Free[j].size-User[i].size;
    Freesize();
    User[i].begin=Free[j].begin;
 
    Free[j].status=n;break;
    }
    }
    }             
  
    PT(); 
    }



     main(){
     int choice;
     restart();
     PT();
    
     printf("---------------------请选择算法----------------\n");
     printf("-----------------1.最先适应算法------------------------\n");
      printf("-----------------2.最优适应算法------------------------\n");
scanf("%d",&choice);
switch(choice)
{
     
     case 1: firstfit();break;
     case 2: nicefit();break;
     default:return;
}
     }

 

内存的分配

标签:

原文地址:http://www.cnblogs.com/bestmoment/p/5595112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!