#include

#include

#define MAX 5   //进程数量

#define RR 2   //时间片大小

/*时间片轮转算法*/

struct pro

{

int num;

int arriveTime;

int burst;

int rt;   //记录进程被运行的次数

struct pro *next;

};

int TOTALTIME;   //记录所有进程的总时间

//函数声明

struct pro* creatList();

void insert(struct pro *head,struct pro *s);

struct pro* searchByAT(struct pro *head,int AT);

void del(struct pro* p);

int getCount(struct pro *head,int time);

struct pro* searchEnd(struct pro *head);

void move(struct pro *headF,struct pro *headT,int n);

struct pro* creatList()   //创建链表,按照进程的到达时间排列,记录所有进程的信息

{

struct pro* head=(struct pro*)malloc(sizeof(struct pro));

head->next=NULL;

struct pro* s;

int i;

TOTALTIME=0;

for(i=0;i

{

s=(struct pro*)malloc(sizeof(struct pro));

printf("请输入进程名:\n");

scanf("%d",&(s->num));

printf("请输入到达时间:\n");

scanf("%d",&(s->arriveTime));

printf("请输入运行时间:\n");

scanf("%d",&(s->burst));

TOTALTIME+=s->burst;   //计算总时间

s->rt=1;   //rt的初始值为1

s->next=NULL;

insert(head,s);

}

return head;   //到达队列中的进程按照其到达时间的先后顺序排列

}

void insert(struct pro *head,struct pro *s)   //插入节点

{

struct pro *p=searchByAT(head,s->arriveTime);

s->next=p->next;

p->next=s;

return;

}

struct pro* searchByAT(struct pro *head,int AT)   //查找第一个到达时间大于等于AT的节点,返回其前一个指针

{

struct pro *p,*q;

p=head;

q=head->next;

while(q!=NULL&&q->arriveTime<=AT)

{

p=q;

q=q->next;

}

return p;

}

void del(struct pro* p)   //删除p的下一个节点

{

struct pro *tmp;

tmp=p->next;

p->next=tmp->next;

free(tmp);

return;

}

int getCount(struct pro *head,int time)   //察看在time之前到达但未移动到运行队列的进程数量

{

int count=0;

struct pro *s,*t;

s=head;

t=s->next;

while(t!=NULL&&t->arriveTime<=time)

{

s=t;

t=t->next;

count++;   //count记录当前时刻到达的进程数

}

return count;

}

struct pro* searchEnd(struct pro *head)   //查找并返回循坏队列的尾节点的前一个节点

{

struct pro *p,*q;

p=head;

q=head->next;

while(q->next!=head)

{

p=q;

q=q->next;

}

return p;

}

void move(struct pro *headF,struct pro *headT,int n)   //将headF后的n个节点移动到循环队列headT中

{

struct pro *r,*s,*t;

s=headF;

t=s->next;

r=t;   //r记录要移动的第一个节点

while(n>1)

{

t=t->next;

n--;

}

s->next=t->next;   //以上完成从原队列中摘除相关节点,r,t分别为第一个和最后一个节点

s=searchEnd(headT);

t->next=s->next;

s->next=r;

}

void run(struct pro *head)

{

int time=0;   //记录当前时间

int newarrive;//新到达进程数

struct pro *runhead=(struct pro*)malloc(sizeof(struct pro));

runhead->next=runhead;   //创建新的循环链表,存放当前就绪队列中的进程

struct pro *p,*q;

p=runhead;

q=p->next;   //q记录当前应当运行的进程

while(time<=TOTALTIME)

{

newarrive=getCount(head,time);

if(newarrive>0)

move(head,runhead,newarrive);   //将head后的newarrive个节点移动到runhead队列中

if(runhead->next==runhead)   //就绪队列中没有进程

time++;

else if(q==runhead)

{

p=q;

q=q->next;

}

else

{

printf("进程名:%d\n",q->num);

printf("到达时间:%d\n",q->arriveTime);

if(q->rt==1)

printf("响应时间:%d\n",time-q->arriveTime);

else

printf("第%d次运行开始时间:%d\n",q->rt,time);

if(q->burst<=RR)

{

time+=q->burst;

printf("第%d次运行结束时间:%d\n",q->rt,time);

printf("周转时间:%d\n",time-q->arriveTime);

printf("************************************\n");

struct pro *tmp=q;

q=q->next;

p->next=q;

free(tmp);

}

else   //q->burst>RR

{

time+=RR;

printf("第%d次运行结束时间:%d\n",q->rt,time);

printf("************************************\n");

q->burst-=RR;

q->rt++;

p=q;

q=q->next;

}

}

}

}

void main()

{

struct pro *head=creatList();

printf("当前时间片大小为:%d\n",RR);

run(head);

}

作业调度进程c语言代码,进程调度 时间片轮转调度算法源代码(C语言)相关推荐

  1. java语言实现的时间片轮转调度算法和动态优先级调度算法

    java语言实现的时间片轮转调度算法和动态优先级调度算法 一.代码: 二.程序运行演示 总结 贪方便用java实现老师的作业,虽然写的乱七八糟的,但是也想发出来给人看看,评论喷我吧!. 一.代码: 作 ...

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

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

  3. 弹力球c语言代码运行,弹力球游戏c语言代码

    弹力球游戏c语言代码 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 #include #include #include #inc ...

  4. 5阶魔方阵c语言程序设计,五阶魔方阵源代码c语言课到程设计.docx

    五阶魔方阵源代码c语言课到程设计 主函数 #include #include #include # include "wenjian.c" # include "sanj ...

  5. 5阶魔方阵c语言程序设计,五阶魔方阵源代码c语言时课程设计.docx

    五阶魔方阵源代码c语言时课程设计 主函数 #include #include #include # include "wenjian.c" # include "sanj ...

  6. c语言代码存放的区域 堆栈,C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)...

    BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 :数据 ...

  7. mcem r语言代码_生态学数据处理常用R语言代码

    使用R来处理生态学数据越来越受到科研工作者的青睐,语义编程风格.漂亮的出图效果,能直接俘获众多用户.本文将生态学数据处理中经常会使用到的功能做个搜集整理. 本文假设读者有一些R的基础知识,对于R的编程 ...

  8. 组态中常用c语言代码,工业组态软件中CFC语言的设计实现及语言转换的研究

    摘要: 近年来随着IEC61131-3国际标准的正式公布与推广,基于此标准的工业自动化领域的组态软件,经过不断完善已日趋成熟并获得了广泛的应用组态软件作为DCS PLC SCADA等控制系统的上位机软 ...

  9. c语言代码 linux 关机_linux下c语言关机程序

    linux下c语言关机程序 /* Offtimer.c.For auto halt. */ #include #include #include #define DELAY 60/* Time of ...

最新文章

  1. Error running query: MetaException(message:Got exception: java.net.ConnectException Call From XXXX
  2. win10蓝牙开关不见了_Win8系统电脑蓝牙图标不见了的解决方法
  3. 武汉数字工程研究所计算机软件分数,武汉数字工程研究所2017考研成绩查询时间:2月16日...
  4. solaris10下允许root通过telnet远程登录
  5. c#winform演练 ktv项目 实现播放完了一曲自动播放下一曲的功能
  6. 调查 10,500 名 Java 开发者发现,收费的 OracleJDK 仍是主流、IntelliJ IDEA 最受欢迎...
  7. 【Embedding】fastText:极快的文本分类工具
  8. java 区间api_Java 常用API(一)
  9. C#网络编程----(二)启动、停止和观察进程
  10. 端口扫描实验和Dos攻击实验
  11. html+css唯美登录页面,代码提供(效果展示)
  12. RGB颜色透明度转换
  13. Android之获取手机基本信息、内存信息、网路信息、电池信息,等一共18项数据
  14. 【光学】基于matlab涡旋光产生【含Matlab源码 1927期】
  15. 磁盘计算机管理扩大,电脑磁盘存储空间怎么增大
  16. 【身份证识别】形态学二代身份证号码识别系统【含GUI源码 948期】
  17. 输入框【普通输入框,邮箱输入框,验证码输入框,手机号码输入框】测试用例
  18. Perl正则表达式详解
  19. 中国联通短信网关接入程序源代码(SGIP1.2协议)
  20. JS-scroll和scrollTop

热门文章

  1. 公众号下载资源汇总(一)
  2. 树莓派的ssh远程登录操作(图文)
  3. 贝壳宣布内部调查实质性完成
  4. 苹果“造车梦”要碎?造车项目前负责人跳槽到福特汽车
  5. 库克用iPhone12 Pro Max发中秋祝福 网友调侃:库克也没抢到iPhone13?
  6. 索尼斥资11.7亿美元收购AT&T动漫业务Crunchyroll
  7. 贝佐斯正接受14小时训练 以为周二进行的首次太空飞行做准备
  8. 美团自研无人机登场:15分钟配送到家
  9. 美柚或赴境外IPO 阿里京东等为其客户
  10. 泡泡玛特通过港交所聆讯 上半年总收益8.18亿元