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

资源简介

能够输入给定的内存大小,进程的个数,每个进程的段数及段大小; 要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后有关内存空间使用的数据(注意回收后的合并)。

资源截图

代码片段和文件信息

#include
#include
#include
#define  neicun  1024
using namespace std;
struct kongxian{
unsigned int length;
unsigned int addr;
        int flag;
        kongxian *next;
};
struct Duanbiao{
int jincheng;
unsigned int duannum;
unsigned int addr;
unsigned int length;
int flag; //标识所请求的段在内存还是外存中
        Duanbiao *next;
};
kongxian *Khead;//空闲链表头指针
kongxian *creatK();//创建初始空闲区
Duanbiao *Dhead;//请求段表头指针
Duanbiao *Dfenpei;//已分配链表头指针
Duanbiao *qingqiuD(Duanbiao *head);//输入请求的进程及各段
kongxian *zuixian(Duanbiao* head);
kongxian* sort(kongxian *head);
int huishou();
int select;
char ch;
int jinchengming;
int jinchenghuishou();
int duanhuishou();
int Display();
void space(int n);
int main()
{
cout<<“\t******************************************************“<    cout<<“\t***        模拟段式存储管理的分配与回收!           ***“<    cout<<“\t******************************************************“< Dfenpei=NULL; //已分配链表头指针
Khead=NULL;  //空闲链表头指针
Khead=creatK();  //创建初始空闲区
Dhead=NULL;  //请求段表头指针
do
{
cout< space(5);
cout<<“1.分配存储空间“< space(5);
cout<<“2.回收存储空间“< space(5);
cout<<“3.显示存储资源状况“<        space(5);
cout<<“4.退出“<
cin>>select;
switch( select )
{
case 1:
Dhead=qingqiuD(Dhead);//创建申请链表
Khead=zuixian(Dhead);//为申请链表分配空间
break;
case 2:
huishou();
break;
case 3:
Display();
break;
case 4:
break;
default:
cout<<“输入错误请重新选择操作!“< break;
}
}while(select!=4);
return 0;
}

kongxian *creatK()
{
kongxian *p=new kongxian;
p->length=neicun;
p->addr=0;
p->flag=0;
p->next=NULL;
return p;
}

Duanbiao* qingqiuD(Duanbiao* head)
{
Duanbiao *p1*p2;
p1=p2=new Duanbiao;
cout<<“请输入请求资源的进程号:“;
cin>>jinchengming;
cout<<“请输入段号及长度\n“;
cout<<“段号“< cin>>p1->duannum>>p1->length;
p1->next=NULL;
if(head!=NULL)
{
p2=head;
while(p2->next!=NULL)p2=p2->next;//p2指向已分配表的最后一个结点
}
while(p1->duannum!=-1)
{
p1->jincheng=jinchengming;
p1->flag=0;
if(head==NULL)head=p1;
else p2->next=p1;
p2=p1;
p1=new Duanbiao;
p1->next=NULL;
        cin>>p1->duannum>>p1->length;
}
delete p1;
return head;
}

kongxian *zuixian(Duanbiao* head)
{
kongxian *pK;//空闲链表头指针
Duanbiao *p1*p2;  //已分配链表结点
Duanbiao *pD=head;//请求段表头指针
Duanbiao *pf=Dfenpei;
p1=p2=new Duanbiao;
p1->next=NULL;
if(Dfenpei!=NULL)
{
p2=Dfenpei;
while(p2->next!=NULL)p2=p2->next;//p2指向已分配表的最后一个结点
}
for(pD;pD!=NULL;pD=pD->next)
{  
pK=Khead;
for(pK;pK!=NULL;pK=pK->next)//从空闲区表顺序查找
{
if(pK->length>=pD->length)
{
p1->flag=1;//表示在内存中
p1->jincheng=pD->jincheng;
p1->duannum=pD->duannum;
p1->addr=pK->addr;
p1->length=pD->length;
if(Dfenpei==NULL)Dfenpei=p1;
else p2->next=p1;
p2=p1;
p1=new Duanbiao;
p1->nex

评论

共有 条评论

相关资源