• 大小: 9KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: C/C++
  • 标签: 回收内存  

资源简介

操作系统中利用最佳适应算法 最坏适应算法 循环首次适应算法 首次适应算法实现动态内存的分配和回收内存

资源截图

代码片段和文件信息

#include 
#include 
using namespace std;
void begin();
int kongjian();
int pdname(char c);
void print();
void fenpei();
int ShouCi(char cint i);
void reclaim();
int huishou(char c);
int zuijia(char cint i);
int zuihuai(char cint i);
int xunhuan(char cint i);
extern int xh=0;//记录循环首次适应时的开始id
//主存大小为1024
//定义100个不定分区 可分配100工作 
struct used_table
{
int ID;//分区号
char WorkName;//工作名
int WorkSize;//工作空间
int address;//开始地址
bool state;//状态 1 可用 0 已用
}UT[100];
//主存表的初始化
void begin()
{
UT[0].ID=1; 
    UT[0].address =0;
UT[0].state =1;
UT[0].WorkName =NULL;
UT[0].WorkSize =1024;
for(int i=1;i<100;i++)
{
UT[i].ID =i+1;
UT[i].state =1;
UT[i].WorkName =NULL;
        UT[i].address =UT[i-1].address +UT[i].WorkSize ;
}
}
int kongjian()//返回空闲空间
{
int sizeAll=1024;//主存总空间
int sizeUse=0;//已用空间
int sizeKY;//可用工作空间
for(int i=0;i<100;i++)
{
if(UT[i].state==0)
sizeUse=sizeUse+UT[i].WorkSize ;
}
    sizeKY=sizeAll-sizeUse;
return sizeKY;//返回空空空间
}
//判断作业名
int pdname(char name)
{
for(int i=0;i<100;i++)
{
if(UT[i].WorkName ==name)
{
cout<<“输入工作名重复!“< return 0;
}
}
return 1;
}
//输出函数
void print()
{
cout< for(int i=0;i<100;i++)
{
cout< if(UT[i].state==1&&UT[i+1].state==1&&UT[i+2].state==1)
break;
}
}
//主存分配各函数
void fenpei()
{
char name;
int size;
int c=1;
cout<<“请输入工作名:“< cin>>name;
cout<<“请分配空间:“< cin>>size;
if(pdname(name))
{
cout<<“请选择要选的算法 1:首次适应算法 2:最佳适应算法:3:最坏适应算法 4 循环首次适应算法“<     cin>>c;
if(c!=1&&c!=2&&c!=3&&c!=4)
{
c=1;
}
    switch(c)
{
     case 1:
      ShouCi(namesize);break;
     case 2:
         zuijia(namesize);break;
case 3:
zuihuai(namesize);break;
case 4:
xunhuan(namesize);break;
}
}
}
//分配主存
int ShouCi(char nameint size)
{


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

     if(UT[i].WorkSize>=size&&UT[i].state==1)
{
int temp=UT[i].WorkSize;
int sum=UT[i+1].address ;
    UT[i].WorkSize =size;
         UT[i].WorkName =name;
         UT[i].address =UT[i-1].address +UT[i-1].WorkSize ;
         UT[i+1].address =UT[i].address +UT[i].WorkSize ;
         UT[i].state =0;
                if(temp>size)//将i项分成两项
{
for(int j=100;j>i+1;j--)
{
UT[j].address =UT[j-1].address;
UT[j].state =UT[j-1].state ;
UT[j].WorkName =UT[j-1].WorkName ;
UT[j].WorkSize =UT[j-1].WorkSize ;
}
UT[i+2].address =sum;
UT[i+1].state =1;
UT[i+1].WorkName =NULL;
UT[i+1].WorkSize =temp-size;
}
     cout<<“成功分配!“<      for(int j=i;j<100;j++)
     if(UT[j].state ==1&&UT[j+1].state ==1&&UT[j+2].state ==1)//查找以后表 条件

评论

共有 条评论