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

📄 priority.cpp

📁 CPU调度算法---模拟OS所使用的所有调度算法,包括创建一个kernel,PCB,队列
💻 CPP
字号:
# if !defined(__PCB_H)
	#include "CPU\PCB.h"
# endif

# if !defined(__KERNEL_H)
	#include "CPU\Kernel.h"
# endif

# if !defined(__READYQUEUE_H)
	#include "CPU\ReadyQ~1.h"
# endif

# if !defined(__SCHEDULER_H)
	#include "CPU\Schedu~1.h"
# endif

# if !defined(__DOS_H)
	#include <dos.h>
# endif

void getJobs();

class Priority : public Scheduler
{
public:
	Priority()
	{
	}

	void start()
	{
		while(ReadyQueue.NoOfJobs)
		{
			if(!Kernel.JobStatus)
			{
				long min = 0xffffff;
				PCB *p = NULL;
				PCB *p1 = p;
				for(int i=1 ; i<=ReadyQueue.NoOfJobs ; i++)
				{
					p = ReadyQueue.getPCB(i);
					if(p->Priority < min)
					{
						p1 = p;
						min = p->Priority;
					}
				}
				if(p != NULL)
					Kernel.changePCB(p1);
				else
					getJobs();
			}
			else
				break;
		}
	}

	void addJob(char * filename,unsigned short priority)
	{
		PCB *p = new PCB(filename,priority);
		ReadyQueue.addPCB(p);
	}
};

Priority pri;

void getJobs()
{
	char command[100] = "";
	unsigned short priority[10]={0};
	char file[10][100];
	int i=0;
	while( (strcmp(command,"e")!=0) && (strcmp(command,"E")!=0) )
	{
		printf("\nPrompt >");
		scanf("%s",command);
		if( (strcmp(command,"s") ==0) || (strcmp(command,"S")==0) )
		{
			for(int j=0;j<i;j++)
				pri.addJob(file[j],priority[j]);
			i = 0;
			pri.start();
		}
		else
		{
			printf("Enter proioity for %s (0-9):",command);
			scanf("%d",&priority[i]);
			priority[i] = priority[i] % 10;
			strcpy(file[i],command);
			i++;
		}
		if(i>=10)
		{
			for(int j=0;j<i;j++)
				pri.addJob(file[j],priority[j]);
			i=0;
			pri.start();
		}
	}
}

void main()
{
	pri = Priority();
	getJobs();
}

⌨️ 快捷键说明

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