- 浏览: 99669 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
瞬眼千年:
十大WordPress MU管理员插件 -
e_soft:
非常有用,谢谢了
国外优秀开源PHP建站程序一览 -
liberD:
非常有用!谢谢分享!
国外优秀开源PHP建站程序一览 -
freemanlingli:
...
Jimdo全球领先的500M免费自助建站 -
freemanlingli:
这款免费的绿色软件snp建站系统,可以整站导出HTML,操作感 ...
Jimdo全球领先的500M免费自助建站
两种进程调度算法:1)优先数调度;2)循环轮转调度
①本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。 ②为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 ③在优先数算法中,优先数可以先取值为98,进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。 ④对于遇到优先数一致的情况,采用FIFO策略解决。
#include<stdio.h>
#include <dos.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream.h>
#define P_NUM 5
#define P_TIME 50
enum state{
ready,
execute,
block,
finish
};
struct pcb{
char name[4];
int priority;
int cputime;
int needtime;
int count;
int round;
state process;
pcb * next;
};
pcb * get_process();
pcb * get_process(){
pcb *q;
pcb *t;
pcb *p;
int i=0;
cout<<"input name and time"<<endl;
while (i<P_NUM){
q=(struct pcb *)malloc(sizeof(pcb));
cin>>q->name;
cin>>q->needtime;
q->cputime=0;
q->priority=P_TIME-q->needtime;
q->process=ready;
q->next=NULL;
if (i==0){
p=q;
t=q;
}
else{
t->next=q;
t=q;
}
i++;
} //while
return p;
}
void display(pcb *p){
cout<<"name"<<" "<<"cputime"<<" "<<"needtime"<<" "<<"priority"<<" "<<"state"<<endl;
while(p){
cout<<p->name;
cout<<" ";
cout<<p->cputime;
cout<<" ";
cout<<p->needtime;
cout<<" ";
cout<<p->priority;
cout<<" ";
switch(p->process){
case ready:cout<<"ready"<<endl;break;
case execute:cout<<"execute"<<endl;break;
case block:cout<<"block"<<endl;break;
case finish:cout<<"finish"<<endl;break;
}
p=p->next;
}
}
int process_finish(pcb *q){
int bl=1;
while(bl&&q){
bl=bl&&q->needtime==0;
q=q->next;
}
return bl;
}
void cpuexe(pcb *q){
pcb *t=q;
int tp=0;
while(q){
if (q->process!=finish){
q->process=ready;
if(q->needtime==0){
q->process=finish;
}
}
if(tp<q->priority&&q->process!=finish){
tp=q->priority;
t=q;
}
q=q->next;
}
if(t->needtime!=0){
t->priority-=3;
t->needtime--;
t->process=execute;
t->cputime++;
}
}
void priority_cal(){
pcb * p;
clrscr();
p=get_process();
int cpu=0;
clrscr();
while(!process_finish(p)){
cpu++;
cout<<"cputime:"<<cpu<<endl;
cpuexe(p);
display(p);
sleep(2);
clrscr();
}
printf("All processes have finished,press any key to exit");
getch();
}
void display_menu(){
cout<<"CHOOSE THE ALGORITHM:"<<endl;
cout<<"1 PRIORITY"<<endl;
cout<<"2 ROUNDROBIN"<<endl;
cout<<"3 EXIT"<<endl;
}
pcb * get_process_round(){
pcb *q;
pcb *t;
pcb *p;
int i=0;
cout<<"input name and time"<<endl;
while (i<P_NUM){
q=(struct pcb *)malloc(sizeof(pcb));
cin>>q->name;
cin>>q->needtime;
q->cputime=0;
q->round=0;
q->count=0;
q->process=ready;
q->next=NULL;
if (i==0){
p=q;
t=q;
}
else{
t->next=q;
t=q;
}
i++;
} //while
return p;
}
void cpu_round(pcb *q){
q->cputime+=2;
q->needtime-=2;
if(q->needtime<0) {
q->needtime=0;
}
q->count++;
q->round++;
q->process=execute;
}
pcb * get_next(pcb * k,pcb * head){
pcb * t;
t=k;
do{
t=t->next;
}
while (t && t->process==finish);
if(t==NULL){
t=head;
while (t->next!=k && t->process==finish){
t=t->next;
}
}
return t;
}
void set_state(pcb *p){
while(p){
if (p->needtime==0){
p->process=finish;
}
if (p->process==execute){
p->process=ready;
}
p=p->next;
}
}
void display_round(pcb *p){
cout<<"NAME"<<" "<<"CPUTIME"<<" "<<"NEEDTIME"<<" "<<"COUNT"<<" "<<"ROUND"<<" "<<"STATE"<<endl;
while(p){
cout<<p->name;
cout<<" ";
cout<<p->cputime;
cout<<" ";
cout<<p->needtime;
cout<<" ";
cout<<p->count;
cout<<" ";
cout<<p->round;
cout<<" ";
switch(p->process){
case ready:cout<<"ready"<<endl;break;
case execute:cout<<"execute"<<endl;break;
case finish:cout<<"finish"<<endl;break;
}
p=p->next;
}
}
void round_cal(){
pcb * p;
pcb * r;
clrscr();
p=get_process_round();
int cpu=0;
clrscr();
r=p;
while(!process_finish(p)){
cpu+=2;
cpu_round(r);
r=get_next(r,p);
cout<<"cpu "<<cpu<<endl;
display_round(p);
set_state(p);
sleep(5);
clrscr();
}
}
void main(){
display_menu();
int k;
scanf("%d",&k);
switch(k){
case 1:priority_cal();break;
case 2:round_cal();break;
case 3:break;
display_menu();
scanf("%d",&k);
}
}
发表评论
-
Visual C++ 编程辅助工具
2009-10-22 11:26 2420除了我们日常开发使用的Visual C++、Delphi、JB ... -
Visual Assist X 增强Microsoft开发环境
2009-10-11 19:11 1927Visual Assist X具有强大的编辑特色,提高了生产效 ... -
矩阵相加+重载运算符
2009-10-06 09:16 2432程序设计说明: 有两个均为3行3列的矩阵m1和m2 ... -
自定义拷贝构造函数
2009-10-05 19:38 764#include <iostream> #inc ... -
重载运算符
2009-10-04 17:43 655重载运算符“<<”和“>>” ... -
一个简单的图书馆管理程序
2009-10-03 16:18 1439程序说明:(1) 定义一个图书馆类Library,其主要功能 ... -
一个简单的学生信息管理程序
2009-10-01 17:05 995程序代码: #include <iostream& ... -
自定义拷贝构造函数
2009-09-29 20:34 820程序代码: #include <iostrea ... -
判断闰年
2009-08-25 11:26 848源程序: #include <iostrea ... -
将+、-(双目)重载为复数类的友元函数
2009-08-25 11:21 1468源程序: #include<iostream. ... -
运算符前置++和后置++重载为时钟类的成员函数
2009-08-25 11:18 1696源程序: #include<iostream. ... -
汉诺塔
2009-08-25 07:47 729源程序: #include < ... -
寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。
2009-08-25 07:29 2943所谓回文数是指其各位数字左右对称的整数,如121,676,94 ...
相关推荐
CPU调度算法的模拟实现课程设计.doc
CPU调度算法的javaswing实现,可以帮助学习CPU调度的同学
多种CPU调度算法模拟(操作系统实验) C++
非抢占短进程优先 优先级调度 多级反馈调度 运行环境 Visual Studio 2005 语言:C++
此CPU调度算法是自己精心做的,也是为了完成课程设计。
根据CPU调度算法实现!中间利用了时间片调度算法和优先级调度算法!
cpu调度算法的设计与实现课件cpu调度算法的设计与实现课件
包括FCFS算法,SJF算法,抢占式优先级算法,时间片轮转算法
这是操作系统中的调度问题,调度策略是动态优先级调度,仅是模拟
cpu调度算法程序设计(java)cpu调度算法程序设计(java)cpu调度算法程序设计(java)
提供了几种不同的cpu调度算法,包括FCFS,RR,JSP,优先级调度等算法。
操作系统课程实验 ,能直接运行,cpu调度算法集合
本人以前的做的操作系统实验——CPU调度算法,里面有很多缺陷,读者可以自己完善一下。代码比较简单,所以只适合对cpu调度算法不理解和刚接触编程的朋友,更复杂的设计读者朋友可以自己设计。如果在dos下面运行,则...
OS课设之CPU调度算法的模拟实现.pdfOS课设之CPU调度算法的模拟实现.pdfOS课设之CPU调度算法的模拟实现.pdfOS课设之CPU调度算法的模拟实现.pdfOS课设之CPU调度算法的模拟实现.pdfOS课设之CPU调度算法的模拟实现.pdf
单处理器CPU调度算法CPU调度处理从就绪队列中选择一个进程并为之分配CPU。
CPU调度算法.pdf
卫星操作系统由卫星端、地面端、用户端三部分组成。卫星端在空中起到中继站的作用,即把地面站发上来的电磁波放大后再返送到另一地面站...........本文提出的调度算法可以减少45%的响应延迟,并提高传输的可靠性
cpu常见的调度算法,有FCFS调度算法、PS调度算法、SJF调度算法、RR调度算法