资源简介

用C++语言实现操作系统中关于动态空闲空间的分配与回收,用首次适应算法实现。简单的小程序,只用结构体和数组实现。适用于初学者。

资源截图

代码片段和文件信息

#include 
using namespace std;
void begin();
int panduan(int i);
int kongjian();
int pdname(char c);
void print();
void fenpei();
int assign(char cint i);
void reclaim();
int huishou(char c);
void shiying(char cint i);
//主存大小为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 panduan(int size)//判断分配工作时 剩余主存大小是否可够工作空间存入
{
int sizeAll=1024;
int sizeUse=0;
for(int i=0;i<100;i++)
{
if(UT[i].state==0)
sizeUse=sizeUse+UT[i].WorkSize ;
}
    if((size+sizeUse)>sizeAll)
{
cout<<“工作空间太大,不能存入“;
return 0;
}
return 1;
}
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<<“       “;
cout< cout<<“       “;
cout< cout<<“       “;
cout< cout<<“       “;
cout< cout<<“       “;
cout< cout<<“       “;
        cout< //if(UT[i+3].state==1&&UT[i+4].state==1&&UT[i+2].state==1)
// break;
}
}
//主存分配各函数
void fenpei()
{
char name;
int size;
int c=1;
cout<<“请输入工作名:“< cin>>name;
cout<<“请分配空间:“< cin>>size;
//cout<<“请选择要选的算法 1:首次适应算法 2:最佳适应算法:“;
//cin>>c;
//switch(c)
//{
//case 1:
assign(namesize);//break;
//case 2:
//    shiying(namesize);//break;
//}
}
//分配主存
int assign(char nameint size)
{
if(pdname(name))
{
     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<<“成功分配!

评论

共有 条评论