如何用C语言编写:设计一个时间片轮转调度算法实现处理机调度的程序

作者&投稿:西侄 (若有异议请与网页底部的电邮联系)
用C语言编程模拟处理机调度(实现一种算法)~

#include
#include
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0


struct pcb { /* 定义进程控制块PCB */
char name[10];
char state;
int super;
int ntime;
int rtime;
struct pcb* link;
}*ready=NULL,*p;


typedef struct pcb PCB;


void sort() /* 建立对进程进行优先级排列函数*/
{
PCB *first, *second;
int insert=0;
if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者,插入队首*/
{
p->link=ready;
ready=p;
}
else /* 进程比较优先级,插入适当的位置中*/
{
first=ready;
second=first->link;
while(second!=NULL)
{
if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/
{ /*插入到当前进程前面*/
p->link=second;
first->link=p;
second=NULL;
insert=1;
}
else /* 插入进程优先数最低,则插入到队尾*/
{
first=first->link;
second=second->link;
}
}
if(insert==0) first->link=p;
}
}


void input() /* 建立进程控制块函数*/
{
int i,num;
system("cls"); /*清屏*/
printf("
请输入进程数: ");
scanf("%d",&num);
for(i=1;i<=num;i++)
{
printf("
进程号No.%d:
",i);
p=getpch(PCB);
printf("
输入进程名:");
scanf("%s",p->name);
printf("
输入进程优先数:");
scanf("%d",&p->super);
printf("
输入进程运行时间:");
scanf("%d",&p->ntime);
printf("
");
p->rtime=0;p->state='W';
p->link=NULL;
sort(); /* 调用sort函数*/
}
}


int space()
{
int l=0;
PCB* pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}


void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/
{
printf("
进程名 状态 优先数 需要运行时间 已经运行时间
");
printf("|%s",pr->name);
printf("|%c",pr->state);
printf("|%d",pr->super);
printf("|%d",pr->ntime);
printf("|%d",pr->rtime);
printf("
");
}


void check() /* 建立进程查看函数 */
{
PCB* pr;
printf("
**** 当前正在运行的进程是:
"); /*显示当前运行进程*/
disp(p);
pr=ready;
printf("
**** 当前就绪队列状态为:
"); /*显示就绪队列状态*/
while(pr!=NULL)
{
disp(pr);
pr=pr->link;
}
}


void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/
{
printf("
进程 [%s] 已完成.
",p->name);
free(p);
}


void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/
{
(p->rtime)++;
if(p->rtime==p->ntime)
destroy(); /* 调用destroy函数*/
else
{
(p->super)--;
p->state='W';
sort(); /*调用sort函数*/
}
}


void main() /*主函数*/
{
int len,h=0;
char ch;
input();
len=space();
while((len!=0)&&(ready!=NULL))
{
ch=getchar();
h++;
printf("-----------------------------------------------------");
printf("
现在是第%d次运行:
",h);
p=ready;
ready=p->link;
p->link=NULL;
p->state='R';
check();
running();
printf("
按任意键继续......
");
}
printf("

进程已经完成.
");
}

#include
int main()
{
int A,B; //标记进程A,进程B的到达时间
int cycA,cycB,serveA,serveB; //进程的周期时间和服务时间
float m;
int i,j,a=0,b=0,ka=0,kb=0; //ka,kb为开关,i,j,a,b为进程下标
int numa=0,numb=0; //服务累计时间
printf("输入进程A的周期时间,服务时间:");
scanf("%d%d",&cycA,&serveA);
printf("输入进程B的周期时间,服务时间:");
scanf("%d%d",&cycB,&serveB);
m=(float)serveA/cycA+(float)serveB/cycB;
for(int T=0;T<=100;T++)
{
if(m-1>1e-6)
{
printf("超出CPU的处理能力!
");
return 0;
}
if(numa==serveA) //进程A完成
{
numa=serveA+1;
printf("当T=%d时",T);
printf("进程A%d结束
",a);
if(numb<serveB)
{
printf(" 调用进程b%d
",b);
kb=1;
}
ka=0;
}
if(numb==serveB)
{
numb=serveB+1;
printf("当T=%d时",T);
printf("进程B%d结束
",b);
if(numa<serveA)
{
printf(" 调用进程A%d
",a);
ka=1;
}
kb=0;
}
if(T%cycA==0 && T%cycB==0)
{
A=B=T;
j=++a;
i=++b;
printf("当T=%d时,进程A%d和进程B%d同时产生,此时,",T,j,i);
if(cycA<=cycB)
{
printf("调用进程A%d,阻塞进程B%d
",j,i);
ka=1;
kb=0;
}
else
{
printf("调用进程B%d,阻塞进程A%d
",i,j);
ka=0;
kb=1;
}
numa=numb=0;
}
if(T%cycA==0&&T%cycB!=0)
{
A=T;
printf("当T=%d时",T);
printf("进程A%d产生 ",++a); //不可能与进程A竞争处理器
numa=0;
if(numb<serveB) //进程B没有完成
if(B+cycB>A+cycA) //若进程B最早截止时间大于进程A的
{
printf("进程A%d执行。
",a);
ka=1;
kb=0;
}
else //若进程B最早截止时间小于等于进程A的
printf("进程B%d继续执行。
",b);
else //进程B完成
{
printf("进程A%d执行。
",a);
ka=1;
}
}
if(T%cycA!=0&&T%cycB==0)
{
B=T;
printf("当T=%d时",T);
printf("进程B%d产生,",++b); //不可能与进程B竞争处理器
numb=0;
if(numa<serveA) //进程A没有完成
if(B+cycB>=A+cycA) //进程A的最早截止时间不小于B
printf("进程A%d继续执行。
",a);
else
{
printf("进程B%d执行。
",b);
kb=1;
ka=0;
}
else //进程A完成
{
printf("进程B%d执行。
",b);
kb=1;
}
}
if(ka)
numa++;
if(kb)
numb++;
}
}

实验三 进程调度

一、实验目的
在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理机数时,就必须依照某种策略来决定那些进程优先占用处理机。本实验模拟在单处理机情况下的处理机调度,帮助学生加深了解处理机调度的工作。

二、实验内容
设计一个时间片轮转调度算法实现处理机调度的程序。

三、实验指导
1.实验中使用的数据结构:
1)PCB进程控制块
其中包括参数①进程名name;②要求运行时间runtime;③优先数prior;④状态state;⑤已运行时间runedtime。
2)为简单起见,只设运行队列,就绪链表两种数据结构,进程的调度在这两个队列中切换,如图3.1所示。

图3.1PCB链表

2.运行结果,包括各个进程的运行顺序,每次占用处理机的运行时间

3.每个进程运行时间随机产生,为1~20之间的整数。
4.时间片的大小由实验者自己定义,可为3或5。

四、实验要求
1.在上机前写出全部源程序;
2.能在机器上正确运行程序。
五、程序清单
六、运行结果
七、调试分析及实验心得
我的回答和这位老兄的差不多


C语言设计一个简单的图形动画,用turboc2运行,怎样编写使图形动起来的...
1、首先,打开vc6.0,建立程序编写页面,建立C语言环境,声明两个整数型变量。2、随后,打出新的前三行,由于规律不明显,就用printf语句手动输入,要仔细观察模版。3、观察可得,中间三行相同,就可以使用for循环,循环三行,每行的个数要仔细计算,模版很重要。4、随后的七列逐渐减少,同样使用for...

如何用c语言编写一次函数
通过本试验初步培养计算机逻辑解题能力。熟练掌握赋值语句和if语句的应用;掌握switch多路分支语句和if嵌套语句的使用 实验原理和设计方案:1、函数头的选则,while循环语句,switch(case)语句,条件表达式,if else条件语句,自增运算符,设置复杂变量,输出随机操作数。2、变量要有分数变量和等级变量,要...

使用C语言编写程序,实现顺序表的基本运算——插入和删除。
typedef struct { int *elem;int length;int listsize;} Sqlist;status Create_sq(Sqlist *L,int n){ int i;L->elem=(int*)malloc(100*sizeof(int));if(!L->elem) return 0;for(i=0;i<n;i++)scanf("%d",&(L->elem[i]));L->length=n;L->listsize=100;return 1;} statu...

编写程序,由键盘输入10个整数,要求统计奇数的个数 用c语言
思路:for循环记录输入个数,每次输入并判断,如果是奇数则个数加一,输入结束输出奇数个数。参考代码:include <stdio.h>int main(){ int i,n,sum=0; for(i=0;i<10;i++){ scanf("%d",&n); if(n%2) sum++; } printf("奇数个数为:%d\\n",sum); return 0;...

大学c语言框架梳理基础知识要打牢
C语言7个编辑的步骤强烈推荐 第1步:定义程序目标 当你在开始写程序之前,你应对希望程序要做什么有一个清晰的想法。考虑程序需要的信息,程序需要进行的计算和操作,以及程序应该向你报告的信息。在这一规划阶段,你应该用一般概念来考虑问题,而不是一些具体的计算机语言术语来考虑。简单来说,我们所要思考的就是,这个...

用C语言编写
用C语言编写  我来答 首页 在问 全部问题 娱乐休闲 游戏 旅游 教育培训 金融财经 医疗健康 科技 家电数码 政策法规 文化历史 时尚美容 情感心理 汽车 生活 职业 母婴 三农 互联网 生产制造 其他 日报 日报精选 日报广场 用户 认证用户 视频作者 日报作者 知道团队...

用C语言编写一个二位数加减法测验程序,要求:
include "stdio.h"include "stdlib.h"void main(){ int a,b,answer,t;int score=0;int i=0;int total=0;int correct=0;while(score<100){ a=(rand()+10)%100;b=(rand()+10)%100;if((i++)%2){ printf("%d+%d=",a,b);scanf("%d",&answer);if(a+b==answer){ score+=...

什么是C语言?
C语言是目前世界上流行、使用非常广泛的高级程序设计语言。C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值...

用c语言编写:从键盘输入一个数,判断是否都能被3整除
1、打开软件,找到文件,新建项目,点击项目新建一个文件。2、会弹出这样的界面,选择为win32控制台程序,输入名称,然后点击确定。3、继续点击下一步 4、在源文件右键,添加,新建项目;然后跳出窗口选择C++文件(.cpp),最后点击添加。5、写一下代码 6、运行结果如下:...

1. 简答题 编程实现,使用C语言编写从屏幕上输出两句话: ①C 语言程序...
include<stdio.h> int main(){ printf("C 语言程序设计! \\n");printf("祝你学习顺利!\\n");return 0;}

琼海市13637269987: 时间片轮转调度算法用C实现 -
甘瑗佐益: #include "stdio.h" #include "stdlib.h" #include "string.h" typedef struct node { char name[10]; /*进程标识符*/ int prio; /*进程优先数*/ int round; /*进程时间轮转时间片*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要...

琼海市13637269987: 时间片轮转调度算法C语言实现 -
甘瑗佐益: 用定时器,比如定时10ms,当时间到时,就把当前PC压栈,然后跳转下一个任务的地址,依次类推,生死轮回

琼海市13637269987: 程序调度(时间片轮转算法)用C语言程序怎么写啊??谢谢 -
甘瑗佐益: #include<stdio.h> struct pcb { char name; int time; }; void main() { int n,i,j,flag=1; struct pcb a[100]; printf("输入程序个数:"); scanf("%d",&n); getchar();/*接收回车*/ for(i=0;i<n;i++) { printf("输入程序的名字:如A B C...\n"); scanf(...

琼海市13637269987: C语言编写时钟程序,,急急急急急急!!!! -
甘瑗佐益: 刚做好一个,功能比较简单(年,月,日,时,分,秒).喜欢的拿去用: #include "stdio.h" #include "time.h" #include "dos.h" #include "windows.h" #include "string.h" #include "ctype.h" int year_r(); //显示年 int month_h()...

琼海市13637269987: 怎样用C语言编写一个时钟,明天就要交了,急,求大神 -
甘瑗佐益: #include <stdio.h>#include <time.h> int main() { int i=1;for(i=0;i<20;i++) {shijian();//显示时间printf("%d秒后退出",20-i); sleep(1000);//等待 // printf("输入数字0结束"); system("cls");//清屏// scanf("%d",i); } system("pause"); ...

琼海市13637269987: C语言时钟设计 -
甘瑗佐益: #include<graphics.h> /* 引入graphic.h */ #include<math.h> /* 引入math.h */ #include<dos.h> /* 引入dos.h */ #define pi 3.1415926 /*定义pi=3.14159*/ #define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300; #define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240; #...

琼海市13637269987: STC单片机的秒表设计c语言怎么写,要求第一次按下STOP开始计时,当再次按下STOP时,秒表为计 -
甘瑗佐益: STOP按下一次K++; if(CLEAR==0) {K=0;T=0;} 这个要写在计时器中断程序里 if(K==0)不计时 if(K==1)启动计时器开始计时 设计时时间为T if(K==2)计数器停止计时 这三行写在主程序死循环里再加上显示程序就可以了

琼海市13637269987: 用C语言编写一个模拟windows自带的电子时钟程序 -
甘瑗佐益: 1.这是用windows api写的程序.所以要求是纯c的话就没有办法了2.其中定时用了两种方法.一种是用取消息.另一种是延时队列.这里只使用了取消息的方法.延时队列由于我机器上是vc6.0,CreateTimerQueue在本人机器上无法使用,需要新的sdk,所以没有加以验证,但取消息的方式是可行的.3.稍稍验证了下,基本满足要求.

琼海市13637269987: 用C语言编写AT89C51单片机程序,设计一个智能数字钟. -
甘瑗佐益: 基本要求:1.C语言程序要求是模块化设计.2.该闹钟基于AT89C51单片机及相关外围电路进行设计.3.该闹钟有6个数码管(共阳极),可分别显示时间(时、分、秒)、及定时时间(分、秒).4.该闹钟有4个按钮,S1是切换显示按键,该键按下时可分别实现切换正常走时显示、设定走时显示、设置定时时间,启动定时,回到正常状态等功能.S2是设定键,即该键按下,将分别选中需要设定的选项.S3键是加键,即按下去表示相应选项加1.S4键是减键,即按下去表示相应的选项减1.5.该闹钟可以定时时间到,LED将发出提示闪光,且持续30s.发挥要求:1.定时时间可被打断,即打断后恢复时继续计时.2.设置闹钟报警功能;3.能切换显示年月日等信息.

琼海市13637269987: linux下怎样用c语言编写一个时钟 -
甘瑗佐益: 我希望你只是需要如何知道时间,而不是写你一个时钟程序,那个太复杂了,如果只是想如何知道时间-#include <stdio.h>#include <time.h> int main(void) { struct tm *tm_ptr; time_t the_time; (void)time(&the_time); tm_ptr=localtime(&the_time); ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网