📄 操作系统调度.cpp
字号:
//操作系统调度
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#define ed NULL
void diaodu(void);
void shifang(int);
typedef struct node_type{//内存链
int start,len,fenp;
struct node_type *next;
}link;
typedef struct dl_type{//队列
int ip,len;
}dls;
dls dl[20];//定义20个元素的队列
int dlz=0;
link *h,*p,*q;
int size,num;//定义内存总大小和进程数目
ofstream Output("output2.txt");
int main()
{
char* ch=" ";
int count;// 定义循环变量
int zj=0;
ifstream Input("read2.txt");
Input>>size>>num;
cout<<size<<" "<<num<<endl;
p=(link*)malloc(sizeof(link));
h=p;
p->start=0;
p->len=size;
p->next=ed;
for(count=0;count<num*2;count++)
{
Input>>ch;
if(strcmp(ch,"new")==0)
{
Input>>dl[dlz].ip>>dl[dlz].len;
cout<<ch<<" "<<dl[dlz].ip<<" "<<dl[dlz].len<<endl;
dlz++;
diaodu();
}
else if(strcmp(ch,"free")==0)
{
Input>>zj;
cout<<ch<<" "<<zj<<endl;
shifang(zj);
diaodu();
}
else
{
cout<<"输入错误!"<<endl;
exit(1);
}
}
cin>>count;
}
void diaodu()
{ int I,l,ff=0;
for(I=0;I<dlz;I++)
{
p=h;
do
{
if(p->len>=dl[I].len&&p->fenp==0)
{
q=(link*)malloc(sizeof(link));
q->next=p->next;
q->start=p->start+dl[I].len;
q->len=p->len-dl[I].len;
q->fenp=0;
p->fenp=dl[I].ip;
p->len=dl[I].len;
p->next=q;
cout<<" "<<p->fenp<<" "<<p->start<<endl;
Output<<p->fenp<<" "<<p->start<<endl;
for(l=I;l<dlz;l++)
{
dl[l].ip=dl[l+1].ip;
dl[l].len=dl[l+1].len;
}
dl[l+1].ip=0;
dl[l+1].len=0;
dlz--;
ff=1;
}
else p=p->next;
}while(p!=ed&&ff==0);
}
}
void shifang(int zj)
{
link* w;
int ff=0,I,l;
p=h;
q=h;
do
{
if(p->fenp==zj)
{
ff=1;
if(p==h&&p->next!=ed)
{
w=p->next;
if(w->fenp==0)
{
p->next=w->next;
p->len=p->len+w->len;
p->fenp=0;
free(w);
}
else
{
p->fenp=0;
}
}
if(p!=h&&p->next==ed)
{
q=h;
while(q->next!=p)
q=q->next;
if(q->fenp==0)
{
q->next=p->next;
q->len=q->len+p->len;
q->fenp=0;
free(p);
}
else
{
p->fenp=0;
}
}
if(p!=h&&p->next!=ed)
{
q=h;
while(q->next!=p)
q=q->next;
w=p->next;
if(q->fenp==0&&w->fenp==0)
{
q->next=w->next;
q->len=q->len+p->len+w->len;
q->fenp=0;
free(p);
free(w);
}
else if(q->fenp==0&&w->fenp!=0)
{
q->next=p->next;
q->len=q->len+p->len;
q->fenp=0;
free(p);
}
else if(q->fenp!=0&&w->fenp==0)
{
p->next=w->next;
p->len=p->len+w->len;
p->fenp=0;
free(w);
}
else
{
p->fenp=0;
}
}
}
else p=p->next;
}while(p!=ed&&ff==0);
//如果new还在队列里
if(ff==0)
{
for(I=0;I<dlz;I++)
{
if(zj==dl[I].ip)
{
for(l=I;l<dlz;l++)
{
dl[l].ip=dl[l+1].ip;
dl[l].len=dl[l+1].len;
}
dl[l+1].ip=0;
dl[l+1].len=0;
dlz--;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -