linux进程调度时间片算法,进程调度算法–时间片轮转调度算法
进程调度算法–时间片轮转调度算法
#include
#include
#include
#define time 2
typedef int datatype;
typedef struct link_node {
char name[20];
int arrive;
int start;
int finish;
int zhouzhuan;
float daizhou;
int service;
int count;
int t;
struct link_node *next;
} node;
typedef node *linklist;
linklist creatbyqueue() {
linklist head,r,s;
datatype arrive, server;
char str[20];
head = r = (linklist)malloc(sizeof(node));
head->next = NULL;
printf("当前时间片为两个单位时间,所有进程拥有相间的时间片n");
printf("输入进程名,到达时间,服务时间:n");
scanf("%s",str);
scanf("%d",&arrive);
scanf("%d",&server);
s = (linklist)malloc(sizeof(node));
s->t = 0;
s->arrive = arrive;
s->service = server;
strcpy(s->name, str);
s->count = s->service;
head->next = s;
s->next = NULL;
return head;
}
void print(linklist head, int i) {
linklist p=head->next,q;
while(p) {
if(p->arrive == i) {
printf("进程%s加入就绪队列n",p->name);
}
p = p->next;
}
p=head->next;
printf("当前运行的进程是%sn",head->next->name);
printf("就绪队列中有进程:");
while(p->next) {
p = p->next;
if(p->arrive <= i)
printf(" %s",p->name);
}
printf("n");
}
void delete(linklist head, int i) {
linklist p,q;
p = head->next;
q = p->next;
head->next = q;
free(p);
}
void insert(linklist head) {
linklist p;
char str[20];
datatype arrive, server;
linklist r = (linklist)malloc(sizeof(node));
p = head->next;
while(p->next) {
p = p->next;
}
scanf("%s",str);
scanf("%d",&arrive);
scanf("%d",&server);
strcpy(r->name,str);
r->arrive = arrive;
r->t = 0;
p->next = r;
r->service = server;
r->count = r->service;
r->next = NULL;
}
void sort(linklist head) {
linklist p,pre,r,m;
m = head;
r = pre = head->next;
p = pre->next;
while(r) {
while(p) {
if(pre->arrive > p->arrive) {
m->next = p;
pre->next = p->next;
p->next = pre;
p = pre;
pre = m->next;
}
m = m->next;
pre = pre->next;
p = p->next;
}
r = r->next;
}
}
void statistic(linklist head, int i) {
linklist p = head->next;
p->finish = i;
p->zhouzhuan = p->finish - p->arrive;
p->daizhou = p->zhouzhuan * 1.0/ p->service;
}
void finish(linklist run, int i) {
printf("进程%s任务完成n",run->next->name);
statistic(run, i);
printf("到达时间t开始时间t完成时间t周转时间t带权周转时间n");
printf("%5dt%12dt%12dt%12dtt%.3ftn",run->next->arrive, run->next->start, run->next->finish, run->next->zhouzhuan, run->next->daizhou);
delete(run,i);
if(run->next!=NULL)
if(run->next->service == run->next->count)
run->next->start = i;
if(run->next != NULL)
print(run,i);
}
int main() {
linklist head,p;
int i = 0;
head = creatbyqueue();
int flag = 1;
while(flag) {
printf("是否继续输入(1或0):");
scanf("%d",&flag);
if(flag) {
insert(head);
}
}
sort(head);
linklist run =(linklist)malloc(sizeof(node));
run->next = NULL;
linklist r = run;
while(head->next!=NULL ) {
printf("已经过单位时间%dn",i);
if(head->next->arrive > i && run->next == NULL) {
printf("当前无进程执行或就绪n");
}
else if(head->next->arrive == i) {
while(head->next) {
if(head->next->arrive == i) {
r->next = head->next;
head->next = head->next->next;
r = r->next;
r->next = NULL;
} else break;
}
if(run->next->count != 0) {
if(run->next->service==run->next->count)
run->next->start = i;
if(run->next->t != time) {
run->next->count--;
run->next->t++;
} else {
printf("进程%s的时间片用完n",run->next->name);
run->next->t = 0;
if(run->next->next != NULL) {
r->next = run->next;
run->next = run->next->next;
r = r->next;
r->next = NULL;
if(run->next->service==run->next->count)
run->next->start = i;
run->next->count--;
run->next->t++;
}
}
print(run,i);
} else {
finish(run,i);
if(run->next) {
run->next->count--;
run->next->t++;
}
}
} else {
if(run->next->count != 0) {
if(run->next->t != time) {
run->next->count--;
run->next->t++;
} else {
printf("进程%s的时间片用完n",run->next->name);
run->next->t = 0;
if(run->next->next != NULL) {
r->next = run->next;
run->next = run->next->next;
r = r->next;
r->next = NULL;
if(run->next->service==run->next->count)
run->next->start = i;
run->next->count--;
run->next->t++;
} else {
run->next->count--;
}
}
print(run,i);
} else {
finish(run,i);
if(run->next) {
run->next->count--;
run->next->t++;
}
}
}
i++;
}
while(run->next != NULL) {
printf("已经过单位时间%dn",i);
if(run->next->service==run->next->count)
run->next->start = i;
if(run->next->count != 0) {
if(run->next->t != time) {
run->next->count--;
run->next->t++;
} else {
printf("进程%s的时间片用完n",run->next->name);
run->next->t = 0;
if(run->next->next != NULL) {
r->next = run->next;
run->next = run->next->next;
r = r->next;
r->next = NULL;
if(run->next->service==run->next->count)
run->next->start = i;
run->next->count--;
run->next->t++;
} else {
run->next->count--;
}
}
print(run,i);
} else {
finish(run,i);
if(run->next) {
run->next->count--;
run->next->t++;
}
}
i++;
}
}
linux进程调度时间片算法,进程调度算法–时间片轮转调度算法相关推荐
- 操作系统实验一 进程调度 FCFS_SJF_HRRN_RR算法
FCFS先来先服务-SJF短作业优先-HRRN高响应比优先-RR时间片轮转算法的python实现 需要创建input.txt文件在程序目录下 格式如下 A, 0, 4 B, 1, 3 C, ...
- 操作系统实验二——时间片轮转调度算法(RR算法)(新进程放队首和队尾两种C++实现)
情况介绍 基本原理 系统将所有就绪进程按照FCFS的原则,排成一个队列依次调度. 把CPU分配给队首进程,执行一个时间片(10-100ms). 时间片用完后,系统计时器发出时钟中断,该进程将被剥夺CP ...
- 【Linux系统编程】进程常用调度算法
00. 目录 文章目录 00. 目录 01. 概述 02. 先来先服务调度算法 03. 时间片轮转调度法 04. 短作业(SJF)优先调度算法 05. 最短剩余时间优先 06. 高响应比优先调度算法 ...
- 操作系统--时间片轮转调度算法(RR算法)
操作系统–时间片轮转调度算法(RR算法) 实验内容: 模拟实现时间片轮转调度算法,具体如下: 设置进程体:进程名,进程的到达时间,服务时间,,进程状态(W--等待,R--运行,F--完成),进程间的链 ...
- c语言实现进程调度优先权调度算法和时间片轮转调度算法
** 1.算法原理 ** 时间片轮转调度算法 a.在时间片轮转调度算法中,系统根据先来先服务的原则,将所有的就绪进程排成一个就绪队列,并且每隔一段时间产生一次中断,激活系统中的进程调度程序,完成一次处 ...
- C++ 银行家算法与时间片轮转调度算法结合
一.实验目的 (1) 掌握 RR(时间片调度) 算法,了解 RR 进程调度 (2) 了解死锁概念,理解安全状态,并且理解银行家算法 (3) 利用 RR 进程调度与银行家算法结合,写出一个简单的项目 二 ...
- (7)Linux进程调度-O(1)调度算法
<(1)Linux进程调度> <(2)Linux进程调度器-CPU负载> <(3)Linux进程调度-进程切换> <(4)Linux进程调度-组调度及带宽控制 ...
- Java操作系统进程调度算法——时间片轮转(RR)算法
Java操作系统进程调度算法--时间片轮转(RR)算法 文章目录 Java操作系统进程调度算法--时间片轮转(RR)算法 前言 一.算法思想 二.数据结构 1.定义PCB进程控制块 2.实现思路 三. ...
- 【进程调度算法】时间片轮转调度算法、多级反馈队列调度算法(Java实现)
时间片轮转调度算法(RR)是十分简单的进程调度算法. 进程在执行时的情况 在该时间片内进程执行完毕,这种情况调度程序将立即把该进程弹出队列,并把CPU分配给新的队首进程 在该时间片内进程未执行完毕,调 ...
- 进程调度之时间片轮转调度算法(实验三)
在分时系统中,最简单最常用的就是基于时间片轮转调度算法,时间片轮转调度算法是非常公平的处理机分配方式,让就绪队列的每个进程每次仅运行一个时间片. 1.时间片轮转调度算法的基本原理 在时间片轮转调度算法 ...
最新文章
- Windows xp 无人值守远程安装部署
- unity不规则碰撞_Unity UGUI学习系列(二) ------ PolygonCollider2D实现不规则碰撞范围
- java jar包的路径
- 转载:SecureCRT 唯美配色方案
- Python中为什么推荐使用isinstance来进行类型判断?而不是type
- 1130 - Host ‘win7' is not allowed to connect to this mysql server
- 9012教你如何使用gulp4开发项目脚手架
- 如何在linq使用左连接
- 第8章 函数探索
- php 控制台打印_php调试利器:FirePHP的安装与使用
- Astute Graphics for Mac(ai创意插件合集)
- jQuery:ajax中form表单serialize()序列化方法
- 无盘服务器1410M,【说好的每周一贴】网维9系整套施工指南及常见问题与解决方法!!...
- knx智能照明控制系统电路图_智能照明控制系统(KNX)
- Wireshark中lua脚本介绍
- 从档案信息管理到档案知识管理
- python创建目录\文件夹
- 点焊机器人焊接超时_点焊机器人常见故障
- 20P75 pr预设模板840种扭曲缩放平移变形切割光效旋转无缝视频转场
- Exception in thread “main“java.lang.NoClassDefFoundError:org/apache/HBaseConfiguration
热门文章
- vue||简易版音乐播放器
- GitHub:新浪微博爬虫,用Python采集新浪微博数据
- Java短信平台实战第一天
- 高数篇:11.01多元函数求极限方法
- 【解决:Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2....Could not star】
- WES7创建系统恢复盘
- 小程序组件实现周日历功能,课程表、食谱等功能可能会用到的日历简单实现
- 408计算机考研交流群,考研初试复习经验分享(计算机408)
- IOS平台车牌识别技术简介
- 力士乐驱动器原理图_力士乐驱动器参考手册大全