求助,关于引用303。老是不对reqtable.remove(temp);不对注解可以运行。但撤销进程实现不了

ta790799213 ta790799213 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <list>
#include<ctime>
using namespace std;

#define random(x) (rand()%x)



//页表项结构
typedef struct _pagetableitem
{
int pagenum; //页号
int blocknum; //块号
}pgtabitem; //页表
typedef pgtabitem *pagetable;
//请求表结构
typedef struct _reqtable
{
unsigned pid; //进程号
unsigned reqpagenum; //请求页面数
pagetable pgtabadr; //页表始址
bool state; //状态
} reqtabitem;

list<reqtabitem> reqtable;


unsigned pagenum=random(80)+21; //内存页面数21-100
unsigned pagesize=random(16)+5; //页面大小 5-20
unsigned pnum=random(4)+5;//进程的个数5-8
int * mempage=new int[pagenum]; //用整数数组模拟内存页面数



/*初始化内存页面*/
void Init_Mempage(void)
{
int i=0;
for(i=0;i<int(pagenum);i++)
mempage[i]=0; //数组全部赋初值
}

/*获取内存的使用情况*/
int Get_Mempagenum(void)
{
int sum=0;
for(int i=0;i<int(pagenum);i++)
if(mempage[i]==0)
sum++;
return sum; //判断有多少内存页面已经被使用
}

/*初始化默认的请求表*/
void Init_Reqtable(void)
{

int i;
for(i=1;i<=int(pnum);i++)
{
reqtabitem preq;
preq.pid=i;
preq.reqpagenum=random(4)+2;//进程请求的页面大小-5
preq.state=false;
preq.pgtabadr=NULL;
reqtable.push_back(preq); //依次压入容器
}
}





/*为默认的进程分配内存*/
void Init_DistMem(void)
{
int reqpnum; //进程请求页面数
int i;

list<reqtabitem>::iterator pos=reqtable.begin();

for(;pos!=reqtable.end();pos++)
{
reqpnum=(*pos).reqpagenum;
if(reqpnum>int(Get_Mempagenum())) //判断请求的内存页面数目是否大于剩余的
{
cout<<"没有足够的内存!"<<endl;
cout<<endl;
}
else
{
(*pos).state=true;
pagetable temp = new pgtabitem[reqpnum]; //新建临时页表项数组
if(temp==NULL)
{
cout<<"内存分配失败!"<<endl;
exit(0);
}
(*pos).pgtabadr=temp;
for(i=0;i<reqpnum;i++)
{
temp[i].pagenum=i; //页表的页号

int randnum=random(pagenum)+1;//随机产生一个块号
while(mempage[randnum]==1) //寻找未被使用的物理块
randnum=random(pagenum)+1;
temp[i].blocknum=randnum;//页表的块号
mempage[randnum]=1;
}
}
}
}

/*手动创建进程,并分配内存*/
void Dist_Mem(void)
{
int i;
reqtabitem preq; //新创建进程记录
int pid; //进程号
int reqpnum; //请求页面数
bool flag=false;

do{
cout<<"请输入进程号:";
flag=false;
cin>>pid;
for(list<reqtabitem>::iterator pos=reqtable.begin();pos!=reqtable.end();pos++)
{
if((*pos).pid==pid)
{
flag=true;
cout<<"该进程号已经存在,请重新输入"<<endl;
cout<<endl;
break;
}
}
}while(flag==true); //循环直到输入的Pid满足条件
preq.pid=pid;
cout<<"请输入需要的页面数:";
cin>>reqpnum;
preq.reqpagenum=reqpnum;
preq.state=false;
preq.pgtabadr=NULL;


reqpnum=preq.reqpagenum;
if(reqpnum>Get_Mempagenum())
{
cout<<"没有足够的内存,进程创建失败!"<<endl;
cout<<endl;
}
else
{
preq.state=true;
pagetable temp = new pgtabitem[reqpnum];
if(temp==NULL)
{
cout<<"内存分配失败!"<<endl;
exit(0);
}
preq.pgtabadr=temp;
for(i=0;i<int(reqpnum);i++)
{
temp[i].pagenum=i; //页表的页号

int randnum=random(pagenum)+1;//随机产生一个块号
while(mempage[randnum]==1)
randnum=random(pagenum)+1;
temp[i].blocknum=randnum;//页表的块号
mempage[randnum]=1;
}
}
reqtable.push_back(preq); //将该进程的记录加入请求表
}

/*程序结束时,释放申请的动态内存*/
void Destroy(void)
{
list<reqtabitem>::iterator pos=reqtable.begin();
for(pos=reqtable.begin();pos!=reqtable.end();pos++)
{
if((*pos).state==true)
delete [](*pos).pgtabadr;
}
reqtable.clear();
}

/* 打印出进程请求表*/
void PrintReqtable(void)
{

cout<<endl;
cout<<"|--------------------------------------------------------------------|"<<endl;
cout<<"| 进程请求表 |"<<endl;
cout<<"|--------------------------------------------------------------------|"<<endl;
cout<<"|"<<setw(8)<<"进程号"
<<setw(16)<<"请求页面数"
<<setw(16)<<"页表起始地址"
<<setw(16)<<"页表长度"
<<setw(16)<<"状态 |"<<endl;
cout<<"|---------------------------------------------------------------------|"<<endl;
list<reqtabitem>::iterator pos=reqtable.begin();
for(pos=reqtable.begin();pos!=reqtable.end();pos++)
{

cout<<"|"<<setw(8)<<(*pos).pid
<<setw(16)<<(*pos).reqpagenum
<<setw(16)<<(*pos).pgtabadr
<<setw(16)<<((*pos).reqpagenum) * pagesize;

if((*pos).state)
cout<<setw(4)<<"已分配 |"<<endl;
else
cout<<setw(4)<<"未分配 |"<<endl;
if((*pos).pid!=reqtable.back().pid)
cout<<"|--------------------------------------------------------------------|"<<endl;
else
cout<<"|--------------------------------------------------------------------|"<<endl;
}

}

/*打印页表*/
void PrintPageTable(void)
{
unsigned pid;
int i;
bool flag=false;
cout<<"请输入进程号:";
cin>>pid;
list<reqtabitem>::iterator pos=reqtable.begin();
for(pos=reqtable.begin();pos!=reqtable.end();pos++)
{
if((*pos).pid==pid&&(*pos).state==true)
{
flag=true;
cout<<"|---------------------------|"<<endl;
cout<<"| 此进程的页表 |"<<endl;
cout<<"|---------------------------|"<<endl;
cout<<"|"<<setw(16)<<"页号"
<<setw(6)<<"块号 |"<<endl;
cout<<"|---------------------------|"<<endl;
int reqpagenum=(*pos).reqpagenum;
for(i=0;i<reqpagenum;i++)
{
cout<<"|"<<setw(16)<<(*pos).pgtabadr[i].pagenum
<<setw(6)<<(*pos).pgtabadr[i].blocknum<<" |"<<endl;
if(i!=reqpagenum-1)
cout<<"|---------------------------|"<<endl;
else
cout<<"|---------------------------|"<<endl;

}
}
}
if(flag==false)
cout<<"系统中不存在该进程或者该进程还没有被分配内存!\n";
cout<<endl;
}

void PrintMem(void)
{
cout<<"内存总块数为"<<pagenum<<",已经使用了"<<pagenum-Get_Mempagenum()<<"块!"<<endl;
cout<<"现在还有"<<Get_Mempagenum()<<"块内存区域空闲!"<<endl;
cout<<endl;
}

void PrintBlockSize(void)
{
cout<<"物理块大小为:"<<pagesize<<"KB"<<endl;
cout<<endl;
}

/*结束指定进程*/
void Kill()
{
bool flag;
int i;
reqtabitem temp;
list<reqtabitem>::iterator pos =reqtable.begin();
int pid;
do{
cout<<"请输入进程号:";
flag=false;
cin>>pid;
for(pos=reqtable.begin();pos!=reqtable.end();pos++)
{
if((*pos).pid==pid)
{
flag=true;
temp=*pos;
break;
}
}
if(flag==false)
cout<<"系统中不存在该进程!"<<endl;
cout<<endl;
}while(flag==false);
for(i=0;i<int(temp.reqpagenum);i++)
mempage[temp.pgtabadr[i].blocknum]=0;
reqtable.remove(temp);


//重新为没有分配到内存的进程分配内存
for(pos=reqtable.begin();pos!=reqtable.end();pos++)
{
if((*pos).state==false)
{
int reqpnum;
reqpnum=(*pos).reqpagenum;
if(reqpnum<=Get_Mempagenum())
{
(*pos).state=true;
pagetable temp = new pgtabitem[reqpnum];
if(temp==NULL)
{
cout<<"内存分配失败!"<<endl;
cout<<endl;
exit(0);
}
(*pos).pgtabadr=temp;
for(i=0;i<int(reqpnum);i++)
{
temp[i].pagenum=i; //页表的页号

int randnum=random(pagenum)+1;//随机产生一个块号
while(mempage[randnum]==1)
randnum=random(pagenum)+1;
temp[i].blocknum=randnum;//页表的块号
mempage[randnum]=1;
}
}
}
}
}

/*初始化系统*/
void InitSys(void)
{
cout.setf(ios::left);//左对齐
Init_Mempage();
Init_Reqtable();
Init_DistMem();
}
/*输出主菜单*/
void MainMenu(void)
{
cout<<"页式存储管理的分配与回收"<<endl;
cout<<"1.手动创建进程"<<endl;
cout<<"2.显示进程页表"<<endl;
cout<<"3.显示请求表"<<endl;
cout<<"4.撤销进程"<<endl;
cout<<"5.显示内存使用情况"<<endl;
cout<<"6.显示物理块大小"<<endl;
cout<<"7.退出系统"<<endl;
cout<<"请输入您的选择(0--7):";
}
/*选择函数*/
void MainChoice()
{
int choice;
do{
MainMenu();
cin>>choice;
switch(choice)
{
case 1:
Dist_Mem();
break;
case 2:
PrintPageTable();
break;
case 3:
PrintReqtable();
break;
case 4:
Kill();
break;
case 5:
PrintMem();
break;
case 6:
PrintBlockSize();
break;
case 7:
break;
default :cout<<"输入有误,请重新输入.\n";
cout<<endl;
break;
}
}while(choice!=7);
}


int main()
{
srand((int)time(0));
InitSys();//初始化系统
MainChoice();//输出系统菜单
Destroy();//释放申请的动态内存
return 0;
}
...全文

相关推荐

三相维也纳PFC整流器闭环仿真控制策略研究-中点电位平衡、无功补偿与双载波SVPWM(Simulink仿真实现)

内容概要:本文围绕三相维也纳PFC整流器的闭环仿真控制策略开展深入研究,重点聚焦中点电位平衡控制、无功功率补偿能力以及双载波SVPWM调制技术的集成与优化。通过Simulink平台构建30kW三相维也纳整流器的完整仿真模型,系统性地实现了基于零序电流注入法的中点电位主动平衡控制策略,有效抑制了直流侧中点电压偏移问题;同时设计了高性能的双闭环控制系统,实现了单位功率因数运行与无功功率的灵活动态调节。研究进一步引入双载波SVPWM调制技术(包含马鞍波与羊角波两种形式),提升了系统的电压利用率、调制效率及动态响应性能。全文涵盖了从主电路建模、控制算法设计、调制策略实现到仿真验证的全过程,为高效率、高功率密度的电力电子变换器系统设计提供了完整的理论依据与实践参考。; 适合人群:具备电力电子技术、自动控制理论及仿真建模基础,从事新能源发电、电力系统电能质量治理、工业自动化或电动汽车充电设施等相关领域研究的研发工程师与高校研究生。; 使用场景及目标:①深入掌握三相维也纳PFC整流器的工作机理与系统级控制架构设计;②学习并实现中点电位平衡、无功补偿等关键控制技术;③掌握双载波SVPWM调制策略的原理与仿真实现方法;④应用于新能源并网逆变器、储能变流器、高端电源等对电能质量和变换效率有严苛要求的电力变换系统开发与性能优化。; 阅读建议:建议结合Simulink仿真环境进行实践操作,重点关注控制器参数的整定过程、中点电位波动的抑制效果、无功指令的动态响应特性以及双载波调制波形的生成逻辑与频谱特性,应按照文中所述流程逐步搭建模型并调试,以深入理解各控制模块之间的耦合关系及系统的整体动态行为。

三伯

高校科研机构如何通过技术转移实现成果商业化?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

技术转移机构如何筛选高潜力合作项目?.docx

技术转移机构如何筛选高潜力合作项目?

BIZKEEN

政府如何利用科技数据分析提升园区营商环境与产业规划的科学性?.docx

政府如何利用科技数据分析提升园区营商环境与产业规划的科学性?

BIZKEEN

QYR-23900-2026年全球数字身份智能卡行业总体规模、主要企业国内外市场占有率及排名 Sample-zj.docx

QYR-23900-2026年全球数字身份智能卡行业总体规模、主要企业国内外市场占有率及排名 Sample-zj.docx

qyresearch报告
评论 2
收藏 已收藏
分享
返回顶部
ta790799213
C++ Builder 13,871 成员 102,696 内容