操作系统时间片轮转法进程CPU调度

原创 2015年07月10日 14:35:42
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct{
	char name[10];
	int arrtime;
	int worktime;
}DataType;

typedef struct node{
	DataType data;
	struct node *next;
}ListNode;

typedef ListNode *LinkList;

LinkList head;
void create_insert_LinkList(int flag1)
{
	ListNode *p1, *p2, *p;
	p = (ListNode*)malloc(sizeof(ListNode));
	head = p;
	p->next = NULL;
	while (flag1 > 0)
	{
		p = (ListNode*)malloc(sizeof(ListNode));
		cout << "进程名:";
		cin >> p->data.arrtime;
		cout << "运行时间:";
		cin >> p->data.worktime;
		cout << "***********" << endl;
		p->next = NULL;
		p1 = head;
		p2 = p1->next;
		while (p2->next != NULL&&p2->data.arrtime < p1->data.arrtime)
		{
			p1 = p2;
			p2 = p2->next;
		}
		p1->next = p;
		p->next = p2;
		flag1 = flag1 - 1;
	}
}

void pcb_LinkList(int flag2)
{
	LinkList H;
	ListNode *rear, *q, *p;
	int RR, rr, time, m, n;
	p = (ListNode*)malloc(sizeof(ListNode));
	p = NULL;
	H = p;
	cout << "定义时间片大小:";
	cin >> RR;
	cout << "****************";
	rr = RR;
	H = head->next;
	head->next = head->next->next;
	rear = H;
	rear->next = NULL;
	time = H->data.arrtime;
	while (flag2 != 0)
	{
		n = 0;
		while (rr != 0)
		{
			rr = rr - 1;
			time = time + 1;
			if (head->next != NULL)
			{
				if (head->next->data.arrtime <= time)
				{
					if (H = NULL)
					{
						H = head->next;
						head->next = head->next->next;
						rear = H;
						rear->next = NULL;
					}
					else
					{
						rear->next = head->next;
						head->next = head->next->next;
						rear = rear->next;
						rear->next = NULL;
					}
				}
			}
			if (H != NULL)
			{
				H->data.worktime = H->data.worktime - 1;
				m = 1;
				n = n + 1;
				if (H->data.worktime == 0)
				{
					cout << "在第" << time - n << "s" << endl;
					cout << "进程" << H->data.name << "运行" << n << "s" << "状态:C" << "完成时间:" << time << endl;
					cout << endl;
					H = H->next;
					flag2 = flag2 - 1;
					m = 0;
					n = 0;
				}
			}
		}
		if (m == 1)
		{
			cout << "在第" << time - n << "s" << endl;
			cout << "进程" << H->data.name << "运行" << n << "s" << "状态:R" << endl;
			cout << endl;
		}
		if (H == NULL)
		{
			if (head->next != NULL)
			{
				time = head->next->data.arrtime;
			}
		}
		else
		{
			if (H->next != NULL&&m == 1 && n == RR)
			{
				q = H;
				H = H->next;
				rear->next = q;
				rear = rear->next;
				rear->next = NULL;
			}
		}
		rr = RR;
	}
}
int main()
{
	cout << "时间片轮转法模拟" << endl;
	cout << endl;
	int flag;
	cout << "输入进程数目:";
	cin >> flag;
	cout << "***************" << endl;
	create_insert_LinkList(flag);
	pcb_LinkList(flag);
	cout << "运行结束" << endl;
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

【操作系统】学习笔记(三)基于时间片轮转的进程调度算法

本文主要用来分享基于时间片轮转的进程调度算法,但是在分享之前,我还是先来整理一下关于进程调度的基本理论。  调度是决定或者安排事物发展次序的策略。进程的调度就是决定哪个进程来使用处理机。 操作系统...
  • peiyao456
  • peiyao456
  • 2016年11月23日 20:58
  • 1544

进程调度:时间片轮转调度算法

一、实验目的 (1) 加深对进程的理解 (2) 理解进程控制块的结构 (3) 理解进程运行的并发性 (4) 掌握时间片轮转法进程调度算法 二、实验原理 (1)建立进程控制块 (2)...
  • FengNingXueChen
  • FengNingXueChen
  • 2016年11月24日 14:43
  • 6273

操作系统 时间片轮转调度算法

时间片轮转法(RR) 算法描述:用于分时系统中的进程调度。每次调度时,总是选择就绪队列的队首进程,让其在CPU上运行一个系统预先设置好的时间片。一个时间片内没有完成运行的进程,返回到绪队列末尾重新排队...
  • u013630349
  • u013630349
  • 2015年08月17日 21:34
  • 14945

【操作系统 - 2】时间片轮转RR进程调度算法

【操作系统 - 2】时间片轮转RR进程调度算法。学习至此,发现很多学了但很久没用的知识,久而久之,慢慢遗忘。等哪天还需要的话,却发现已经忘得差不多了,即使整理了文档(word等),还是得从头再学一遍。...
  • Houchaoqun_XMU
  • Houchaoqun_XMU
  • 2017年03月17日 23:56
  • 4330

c++模拟操作系统进程调度算法(优先数,时间片轮转)

实验一 进程调度 1.目的和要求 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念,体会了解优先数和时间片轮转调度...
  • Dove_MrQ
  • Dove_MrQ
  • 2015年04月27日 12:24
  • 3990

用C语言实现对N个进程的简单时间片轮转法Round Robin的调度模拟

/*****时间片轮转法进行CPU调度算法********/ #include #include #include #define N 10   //定义最大进程数 #define TIME...
  • heshangtiantian
  • heshangtiantian
  • 2014年11月05日 19:05
  • 1761

进程调度(二)——时间片轮转算法

一 定义时间片轮转算法是将所有的就绪进程按先来先服务的原则,排成一个队列,按时间片轮转。时间片的大小从几ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进...
  • qq_30091945
  • qq_30091945
  • 2017年03月12日 14:50
  • 1165

进程调度之时间片轮转调度算法(实验三)

在分时系统中,最简单最常用的就是基于时间片轮转调度算法,时间片轮转调度算法是非常公平的处理机分配方式,让就绪队列的每个进程每次仅运行一个时间片。 1.时间片轮转调度算法的基本原理    在时间片轮转调...
  • c1194758555
  • c1194758555
  • 2016年11月05日 20:53
  • 3359

Java模拟最短作业优先、时间片轮转、最高响应比三种进程调度算法

本次试验是使用程序来模拟操作系统中进程调度的三种不同的调度策略,分别为最短作业有限、时间片轮转、最高响应比。 模拟的情况下,进程数为8,进程所需执行时间为随机产生的整数,单位为1S,默认进程同时到达。...
  • qq_24369113
  • qq_24369113
  • 2016年12月09日 11:53
  • 4480

操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)

实验二 进程调度 一、     实验目的 1.       理解进程运行的并发性。  2.       理解处理器的三级调度。 3.       掌握先来先服务的进程调度算法。 4.    ...
  • GoodLuckAC
  • GoodLuckAC
  • 2016年05月26日 20:40
  • 6391
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:操作系统时间片轮转法进程CPU调度
举报原因:
原因补充:

(最多只允许输入30个字)