📄 duanyeshi.cpp
字号:
//#include "stdafx.h"
#include "iostream.h"
#include"stdlib.h"
#include "string.h"
#include"stdio.h"
struct duan
{
long capacity;//该段的长度
long physicaddr;//物理地址
long realaddr;//该段实际地址
};
struct duanbiao
{
duan duans[10];
char biaoming[20];
int Isdiaoyong;
int num;
long total;
};
long neicun=0;
int duanbiaonum=0;
long kongbai=0;
long baseaddr=0;
duanbiao duanbiaos[10];
void show1(int );
void show();
void wait()
{
int j;
for(double i=100000;i>1; )
{
i=i-0.001;
j++;
j++;
}
}
void diaodu()
{
cout<<"您要调度的进程是:p";
int n;
cin>>n;
if(n>duanbiaonum)
cout<<"段表不存在!"<<endl;
else if(duanbiaos[n-1].Isdiaoyong==1)
cout<<"操作错误,该进程已经被调入到内存!"<<endl;
else if(duanbiaos[n-1].total>neicun-kongbai)
cout<<"内存空间不足,调度不成功!"<<endl;
else
{
cout<<"下面对进程"<<duanbiaos[n-1].biaoming<<"进行地址转化:"<<endl;
for(int j=0;j<duanbiaos[n-1].num;j++)
{
cout<<"正在进行第"<<j+1<<"段的地址转换,请稍后......"<<endl;
wait();
duanbiaos[n-1].duans[j].realaddr=duanbiaos[n-1].duans[j].physicaddr+kongbai;
cout<<"第"<<j+1<<"段的地址转换成功!"<<endl;
}
kongbai=kongbai+duanbiaos[n-1].total;
duanbiaos[n-1].Isdiaoyong =1;
cout<<"调度后的结果是:"<<endl;
show1(n-1);
}
}
void appneicun()
{
printf("请输入进程的名字:");
gets(duanbiaos[duanbiaonum].biaoming);
printf("请输入该进程的段数:");
cin>>duanbiaos[duanbiaonum].num;
int paddr=0;
for(int j=0;j<duanbiaos[duanbiaonum].num;j++)
{
cout<<"进程第"<<j+1<<"段的大小是:";
cin>>duanbiaos[duanbiaonum].duans[j].capacity ;
duanbiaos[duanbiaonum].duans[j].physicaddr=paddr;
paddr=paddr+duanbiaos[duanbiaonum].duans[j].capacity;
}
duanbiaos[duanbiaonum].Isdiaoyong=0;
duanbiaos[duanbiaonum].total=paddr;
duanbiaonum++;
}
void show1(int i)
{
cout<<"进程p"<<i+1<<":"<<endl;
cout<<"名字:"<<duanbiaos[i].biaoming<<endl;
cout<<"该进程所占用的存储空间:"<<duanbiaos[i].total<<endl;
if(duanbiaos[i].Isdiaoyong==0)
cout<<"进程状态:未调用"<<endl;
else
cout<<"进程状态:已调用"<<endl;
cout<<"____________________________________________"<<endl;
cout<<"段 号 物理始址 内存始址 大小"<<endl;
for(int j=0;j<duanbiaos[i].num;j++)
{
cout<<" "<<j+1<<" "<<duanbiaos[i].duans[j].physicaddr;
if(duanbiaos[i].Isdiaoyong==0)
cout<<" ";
else
cout<<" "<<duanbiaos[i].duans[j].realaddr;
cout<<" "<<duanbiaos[i].duans[j].capacity<<endl ;
}
cout<<"____________________________________________"<<endl;
}
void show()
{
for(int i=0;i<duanbiaonum;i++)
show1(i);
}
int main(int argc, char* argv[])
{
char c;
cout<<"请输入内存的大小:";
cin>>neicun;
cout<<"****************************************************************"<<endl;
cout<<"1:显示进程(s) 2:申请进程(a) 3:调度进程(d) 4:退 出(e)"<<endl;
cout<<"****************************************************************"<<endl;
while(1)
{
cout<<"请选择服务种类(s/a/e/d):";
cin>>c;
if(c=='e')
{
cout<<"服务完毕!"<<endl;
break;
}
else if(c=='a')
appneicun();
else if(c=='s')
show();
else if(c=='d')
diaodu();
else
cout<<"error!请重新输入!"<<endl;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -