⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 操作系统调度.cpp

📁 Operating system dispatch
💻 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 + -