模拟在单处理器多进程操作系统的CPU调度

本文介绍了模拟单处理器多进程操作系统中的CPU调度,包括先来先服务(FCFS)和短作业优先(SJF)算法。通过进程PCB结构描述进程状态,并展示在VC++环境下运行的结果,验证了算法的正确性。
摘要由CSDN通过智能技术生成

 模拟在单处理器多进程操作系统的CPU调度。本实验为模拟实验,不要求实现真正的进程创建与进程调度。主要实现各种调度算法。

进程PCB结构:标识符、进程名称、到达时间、服务时间、剩余运行时间、已使用时间、进程状态。其中进程状态有三种:就绪R,运行E,结束F。

剩余运行时间和已使用时间两个属性用于时间片轮转算法和多级反馈队列算法。进程每使用完一个时间片,已使用时间就会增加一个时间片的长度,剩余运行时间=服务时间 – 已使用时间。


仅完成了先来先服务算法的调度和短作业优先算法:

在linux中因缺少conio包无法运行,可自行修改后 就能运行。我在VC++软件中运行如下代码:

#include "stdio.h"
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<string.h>
#include <iostream.h>
#define getpch(type) (type*)malloc(sizeof(type))
typedef struct pcb PCB;

//定义进程控制块的PDB
struct pcb{

	int id; 	//标识符

	char name[10];	//名称

	int time_start;	//到达时间

	int time_need;	//服务时间
	
	int time_left;//剩余运行时间

	int time_used;	//已使用的CPU时间

	char state;	//进程状态
};

//系统函数

//停顿几秒
void _sleep(int n){
	clock_t goal;
	goal = (clock_t)n * CLOCKS_PER_SEC + clock();
	while(goal>clock());
}

//按任意键继续
char _keygo(){
	char c;
	printf("按任意键继续.......\n");
	c = getch();
	return c;
}

///用户函数///

//数据设置区域



int time_unit = 2;//时间片长度

const maxnum = 10;//最大进程数量

int num = 5;//实际进程数量
PCB pcbdata[maxnum] = {
	{1000,"A",0,4,4,0,'R'},
	{1001,"B",2,5,3,0,'R'},
	{1002,"C",5,3,5,0,'R'},
	{1003,"D",4,2,2,0,'R'},
	{1004,"E",1,1,4,0,'R'},

};

//就绪队列,存放进程的pcb
int ready[maxnum];
//记录排序使用哪个数值作为排序对象
int order[maxnum];

//手工输入数据
void input(){
	int i;
	printf("进程总数为:");
	scanf("%d",&num);
	for(i = 0; i< num; i++){
		//系统自动分配标识符
		pcbdata[i].id = 1000 + i;
		printf("输入第%d个进程名:"
编写一个处理机下的进程调度程序,模拟操作系统进程调度要求: 1.能够建指定数量的进程,每个进程由一个进程控制块表示。 2.实现先来先服务调度算法进程到达时间可由进程建时间表示。 3.实现作业优先调度算法:可指定进程要求的运行时间。(说明:对不可剥夺的作业优先算法,当作业运行时间相等时,优先调度进程号小的进程执行;对可剥夺式的作业优先算法,即选最剩余时间的进程进行运行,在剩余时间相同的情况下,选择到达时间早的进程进行运行) 4. 实现时间片轮转调度算法:可指定生成时间片大小。(说明:新进程到来时插入到就绪队列的队尾,当进程P运行完一个时间片时,若同时有进程Q到达,则先在就绪队列队尾插入新到达的进程Q,之后再插入进程P) 5.实现动态优先调度算法:可指定进程的初始优先级(优先级与优先数成反比,优先级最高为0),优先级改变遵循下列原则:进程在就绪队列中每停留一个时间片,优先级加1,进程每运行一个时间片,优先级减3。(说明:本算法优先级相同的情况下,选择到达时间早的进程进行运行) 测试用例格式如下: 输入:调度算法    进程号/到达时间/运行时间/优先级/时间片 输出:调度顺序/进程号/开始运行时间/结束运行时间/优先级 其中调度算法选项为:1----先来先服务,2----作业优先,3----最剩余时间优先,4----时间片轮转,5----动态优先
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值