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

📄 cpu.cpp

📁 操作系统时间片轮转法
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#define N 5
/*Define Process Structure*/
typedef struct _proc {
	char name[32];
	int run_time;
	int req_time;/*required time*/
	int pri;/*priority*/
	enum {
		READY = 0X01,END	
	}state;/*process state*/
	struct _proc *next;
}PROC;

int g_TotalTimeSlices = 0;
PROC *g_Head = NULL, *g_Curr = NULL;
/*Define five process: Initialize*/

 
void Init()
{   
	int i=0;
	PROC *p, *p0;
	g_Head = (PROC*)malloc(sizeof(PROC));
	g_Head->next = NULL;
	if(i==0)
	{p = (PROC*)malloc(sizeof(PROC));
     printf("Please enter the %d program's\n name\t req_time(所需要的时间)\t priority(在时间片轮换法中无意义)\n" ,i+1);
     cin>>p->name>>p->req_time>>p->pri;
   	 p->run_time =0;
	 p->state =PROC.READY;
	 p->next = NULL;
	 g_Head->next = p;
	 p0 = p;
	 i=1;
	}
	for(i=1;i<N;i++)
	{p = (PROC*)malloc(sizeof(PROC));
     printf("Please enter the %d program's\n name\t req_time(所需要的时间)\t priority(在时间片轮换法中无意义)\n" ,i+1);
    cin>>p->name>>p->req_time>>p->pri;
   	p->run_time =0;
	p->state =PROC.READY;
	p->next = NULL;
	p0->next = p;
	p0 = p;}

	
	p0->next = g_Head;

}

/*Print process information*/
void PrintInfo()
{   
	int i=0;

	PROC *p;
		p = g_Head->next;
	printf("Time : %d\t Process Information\n", g_TotalTimeSlices);
	printf("name  run_time  req_time  pri  state\n");
	printf("------------------------------------\n");
	while(p!=g_Head){
			printf("%4s  %8d  %8d  %3d  %5s\n", p->name, p->run_time, p->req_time,
			p->pri, p->state == PROC.READY? "READY" : "END");
		p = p->next;
	}
	printf("Current process is %s\n", g_Curr->name);
	printf("-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n");
}

/*Process run*/
void Run()
{
	PROC *p_temp = g_Head;
	g_Curr = g_Head->next;
	PrintInfo();
	while(g_Head->next != g_Head){
		g_TotalTimeSlices++;
		g_Curr->run_time++;
		if(g_Curr->run_time >= g_Curr->req_time){
			g_Curr->state = PROC.END;
			PrintInfo();
			p_temp->next = g_Curr->next;
			free(g_Curr);
			g_Curr = p_temp->next;
		}
		else {
			PrintInfo();
			g_Curr = g_Curr->next;
			p_temp = p_temp->next;;
		}
		if(g_Curr == g_Head){
			g_Curr = g_Curr->next;
			p_temp = p_temp->next;
			p_temp->next = g_Curr;
		}
	}
}

int main(int argc, char* argv[])
{ 	Init();
	Run();
	free(g_Head);
	return 0;
}

⌨️ 快捷键说明

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