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

#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进程调度时间片算法,进程调度算法–时间片轮转调度算法相关推荐

  1. 操作系统实验一 进程调度 FCFS_SJF_HRRN_RR算法

    FCFS先来先服务-SJF短作业优先-HRRN高响应比优先-RR时间片轮转算法的python实现 需要创建input.txt文件在程序目录下 格式如下 A,  0,   4 B,  1,   3 C, ...

  2. 操作系统实验二——时间片轮转调度算法(RR算法)(新进程放队首和队尾两种C++实现)

    情况介绍 基本原理 系统将所有就绪进程按照FCFS的原则,排成一个队列依次调度. 把CPU分配给队首进程,执行一个时间片(10-100ms). 时间片用完后,系统计时器发出时钟中断,该进程将被剥夺CP ...

  3. 【Linux系统编程】进程常用调度算法

    00. 目录 文章目录 00. 目录 01. 概述 02. 先来先服务调度算法 03. 时间片轮转调度法 04. 短作业(SJF)优先调度算法 05. 最短剩余时间优先 06. 高响应比优先调度算法 ...

  4. 操作系统--时间片轮转调度算法(RR算法)

    操作系统–时间片轮转调度算法(RR算法) 实验内容: 模拟实现时间片轮转调度算法,具体如下: 设置进程体:进程名,进程的到达时间,服务时间,,进程状态(W--等待,R--运行,F--完成),进程间的链 ...

  5. c语言实现进程调度优先权调度算法和时间片轮转调度算法

    ** 1.算法原理 ** 时间片轮转调度算法 a.在时间片轮转调度算法中,系统根据先来先服务的原则,将所有的就绪进程排成一个就绪队列,并且每隔一段时间产生一次中断,激活系统中的进程调度程序,完成一次处 ...

  6. C++ 银行家算法与时间片轮转调度算法结合

    一.实验目的 (1) 掌握 RR(时间片调度) 算法,了解 RR 进程调度 (2) 了解死锁概念,理解安全状态,并且理解银行家算法 (3) 利用 RR 进程调度与银行家算法结合,写出一个简单的项目 二 ...

  7. (7)Linux进程调度-O(1)调度算法

    <(1)Linux进程调度> <(2)Linux进程调度器-CPU负载> <(3)Linux进程调度-进程切换> <(4)Linux进程调度-组调度及带宽控制 ...

  8. Java操作系统进程调度算法——时间片轮转(RR)算法

    Java操作系统进程调度算法--时间片轮转(RR)算法 文章目录 Java操作系统进程调度算法--时间片轮转(RR)算法 前言 一.算法思想 二.数据结构 1.定义PCB进程控制块 2.实现思路 三. ...

  9. 【进程调度算法】时间片轮转调度算法、多级反馈队列调度算法(Java实现)

    时间片轮转调度算法(RR)是十分简单的进程调度算法. 进程在执行时的情况 在该时间片内进程执行完毕,这种情况调度程序将立即把该进程弹出队列,并把CPU分配给新的队首进程 在该时间片内进程未执行完毕,调 ...

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

    在分时系统中,最简单最常用的就是基于时间片轮转调度算法,时间片轮转调度算法是非常公平的处理机分配方式,让就绪队列的每个进程每次仅运行一个时间片. 1.时间片轮转调度算法的基本原理 在时间片轮转调度算法 ...

最新文章

  1. Windows xp 无人值守远程安装部署
  2. unity不规则碰撞_Unity UGUI学习系列(二) ------ PolygonCollider2D实现不规则碰撞范围
  3. java jar包的路径
  4. 转载:SecureCRT 唯美配色方案
  5. Python中为什么推荐使用isinstance来进行类型判断?而不是type
  6. 1130 - Host ‘win7' is not allowed to connect to this mysql server
  7. 9012教你如何使用gulp4开发项目脚手架
  8. 如何在linq使用左连接
  9. 第8章 函数探索
  10. php 控制台打印_php调试利器:FirePHP的安装与使用
  11. Astute Graphics for Mac(ai创意插件合集)
  12. jQuery:ajax中form表单serialize()序列化方法
  13. 无盘服务器1410M,【说好的每周一贴】网维9系整套施工指南及常见问题与解决方法!!...
  14. knx智能照明控制系统电路图_智能照明控制系统(KNX)
  15. Wireshark中lua脚本介绍
  16. 从档案信息管理到档案知识管理
  17. python创建目录\文件夹
  18. 点焊机器人焊接超时_点焊机器人常见故障
  19. 20P75 pr预设模板840种扭曲缩放平移变形切割光效旋转无缝视频转场
  20. Exception in thread “main“java.lang.NoClassDefFoundError:org/apache/HBaseConfiguration

热门文章

  1. vue||简易版音乐播放器
  2. GitHub:新浪微博爬虫,用Python采集新浪微博数据
  3. Java短信平台实战第一天
  4. 高数篇:11.01多元函数求极限方法
  5. 【解决:Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2....Could not star】
  6. WES7创建系统恢复盘
  7. 小程序组件实现周日历功能,课程表、食谱等功能可能会用到的日历简单实现
  8. 408计算机考研交流群,考研初试复习经验分享(计算机408)
  9. IOS平台车牌识别技术简介
  10. 力士乐驱动器原理图_力士乐驱动器参考手册大全