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

📄 rr.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

class rrKernel : public kernel
{
public:
	PCB* pcb;
	int JobStatus;
	int TimeSlice;

	rrKernel()
	{
		TimeSlice = 100;
	}

	void exec()
	{
		JobStatus = 1;
		char ch;
		printf("\n\n\n-------------------------------------------\n");
		printf(pcb->file);
		printf("\n-------------------------------------------\n");
		for(int i=0;i<TimeSlice;i++)
		{
			if( fread(&ch,1,1,pcb->fp) > 0)
			{
				printf("%c",ch);
			}
			else
			{
				ReadyQueue.delPCB(pcb);
				break;
			}
		}
		JobStatus = 0;
	}

	void changePCB(PCB *p)
	{
		pcb = p;
		exec();
	}

	void ReleaseControl()
	{
		JobStatus = 0;
	}
}rrKernel;

void getJobs();

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

	void start()
	{
		while(ReadyQueue.NoOfJobs)
		{
			if(!rrKernel.JobStatus)
			{
				PCB *p = NULL;
				for(int i=1 ; i<=ReadyQueue.NoOfJobs ; i++)
				{
					p = ReadyQueue.getPCB(i);
					if(p != NULL)
						rrKernel.changePCB(p);
					else
						getJobs();
				}
			}
			else
				break;
		}
	}

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

RoundRobin rr;

void getJobs()
{
	char command[100] = "";
	char file[10][100];
	int i=0,TimeSlice=0;
	printf("\nEnter TimeSlice for the Job: ");
	scanf("%d",&TimeSlice);
	rrKernel.TimeSlice = TimeSlice;
	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++)
				rr.addJob(file[j]);
			i = 0;
			rr.start();
		}
		else
		{
			strcpy(file[i],command);
			i++;
		}
		if(i>=10)
		{
			for(int j=0;j<i;j++)
				rr.addJob(file[j]);
			i=0;
			rr.start();
		}
	}
}

void main()
{
	rr = RoundRobin();
	getJobs();
}

⌨️ 快捷键说明

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