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

📄 time_priority.h

📁 时间片轮转——优先级调度 操作系统学习的课程中用c++编写的代码
💻 H
字号:
#include <stdio.h>
#include <iostream.h>

class Lin_pcb;
struct process
{
	char* name;//进程名称
	int time;//进程需要时间
	int priority;//进程优先级
	int state;//ready "0"; run "1"; finish "-1"
};

class pcb
{
	friend class Lin_pcb;
private:
	process data;
	pcb *next;
public:
	pcb(pcb *nextt=NULL)
	{
		next=nextt;
	}
	pcb(const process& item ,pcb *nextt=NULL)
	{
		data=item;
		next=nextt;
	}

	~pcb(void){}

	char* get_name(void);
    int get_time(void);
	int get_priority(void);
	int get_state(void);
	pcb* get_next(void);

	void alter_time(void);
	void alter_add_priority(void);
	void alter_sub_priority(int i);
	void alter_state(int i);

};


void pcb::alter_add_priority()
{
	data.priority++;
}

void pcb::alter_sub_priority(int i)
{
	data.priority=data.priority-i;
}


void pcb::alter_state(int i)
{
	data.state=i;
}

void pcb::alter_time()
{
	data.time--;
}

char* pcb::get_name(void)
{
	return data.name;
}

int pcb::get_priority()
{
	return data.priority;
}

int pcb::get_state()
{
	return data.state;
}

int pcb::get_time()
{
	return data.time;
}

pcb* pcb::get_next()
{
	return next;
}








class Lin_pcb
{
private:
	 pcb *head;
public:
	Lin_pcb(void);
	~Lin_pcb(void);
	
	void initial_insert(const process& item);
	void lunhuan_insert(const process& item);
	void alter_position(void);
	void lunhuan(void);
};

Lin_pcb::Lin_pcb(void)
{
	head=new pcb();
}

Lin_pcb::~Lin_pcb(void)
{}

void Lin_pcb::initial_insert(const process& item)
{
	pcb *p=head->next;
	pcb *q=head;
	while(p!=NULL)
	{
        q=q->next;
		p=p->next;
	}
	pcb *qq=new pcb(item,q->next);

	q->next=qq;
}

void Lin_pcb::lunhuan_insert(const process& item)
{	
	pcb *p=head;
	//pcb *q=p;
	
	for(int i=0;i<4;i++)
	{
       // q=p;
		p=p->next;
	}
	if((p->get_state()==-1))
	{
		p=head;
		
		while(p->next->get_state()!=-1)
		{
			p=p->next;
		}
    	pcb *qq=new pcb(item,p->next);

	    p->next=qq;

	}
	else
	{
		initial_insert(item);
	}
	
}

void Lin_pcb::alter_position(void)
{
	pcb *s , *p=head;
	s=p->next;
	p->next=p->next->next;
	process x=s->data;
	delete s;

    lunhuan_insert(x);

}
void Lin_pcb::lunhuan(void)
{
	while((head->next!=NULL) && (head->next->get_state()==0))
	{
		head->next->alter_time();
		head->next->alter_state(1);
		pcb *p=head->next;
		int i=0;
		while(p->next!=NULL&&p->next->get_state()!=-1)
		{
			p->next->alter_add_priority();//////////
			p=p->next;
			i++;
		}
		head->next->alter_sub_priority(i);//////////
		if(head->next->get_time()==0)
		{
			head->next->alter_state(-1);
			alter_position();
		}
		else
		{	
			head->next->alter_state(0);
            alter_position();
		}
		
		pcb *q=head;
		for(i=0;i<5;i++)
		{
			cout<<q->next->get_name()<<"        "<<q->next->get_priority()<<"       "<<q->next->get_state()<<"       "<<q->next->get_time()<<endl;
			q=q->next;
		}
		cout<<endl<<endl;

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -