Java调度算法 来个大神写程序 选择一个调度算法,实现处理器调度。

Java调度算法 来个大神写程序 选择一个调度算法,实现处理器调度。,第1张

public class CLSS_ch2 {

public static void main(String[] args) {

int sum = 0;

for (int i = 1; i <= 100; i++) {

if (i % 10 == 3)

continue;

sum += i;

}

Systemoutprintln(sum);

}

}

计算机图形技术组的成员在1993年开发出了 Lua。它被设计成为脚本语言,是一种不可获取的过程式编程语言,以简单而强大而闻名。

/建立一座两层楼,一部电梯的模拟程序。为简化起见,每部电梯限乘一人,电梯每天在一楼关门等待

模拟程序包括一个时钟,每天从零开始。模拟程序得调度器组件随机设置每一层第一个人到来的时间,当时钟的时间等于第一个人到来的时间时,模拟程序生成一个新到的人将该人放到这一层。然后这个人按下按钮,请求电梯开门。这个人的目的地楼层不能与他上电梯的楼层相同。

如果第一个人到达第一层,则可以在按下按钮、等待电梯开门之后立即进入电梯。如果第一个人在第2层,则电梯要升到第2层去接他。电梯从1层移到2层需要5秒。

电梯到达一层时,打开电梯门上的灯,并在电梯内发出铃声,该层的按钮和电梯中表示该层的按钮复位,电梯门打开,乘客走出电梯(如果有到该层的乘客)。另一乘客(如果该层有人等待)进入电梯按下目的层按钮,电梯们关上。电梯移动前确定移动方向(两层很容易判断),为简单起见,电梯到达一层直到关门所花时间为0。

任何时间每层最多只能有一人等待,如果新到的人(不在电梯中)要到达该层时该层被占用,则一秒后才能安排新到达者。假设每隔5到20秒人们随机到达每层/

#include < iostream >

#include < ctime >

#include < iomanip >

#include < string >

#include <stdlibh>

#include < windowsh >

using namespace std;

class person

{

public:

string sex; //定义人员类

person();

void newset();

};

person::person()

{ sex="man"; }

void person::newset()

{

int i;

srand((unsigned)time(NULL));

for(i=0;;i++)

{

if(rand()==1)

{sex="man"; break; }

if(rand()==2)

{sex="woman"; break; }

}

}

class elevator

{

public:

int now; //定义电梯类

elevator();

};

elevator::elevator()

{ now=1; }

class Time

{

public:

static void outtime() //定义时间类,用于输出电梯每次运行时的时间

{

SYSTEMTIME t;

GetLocalTime(& t);

cout<<" //"<<twYear<<""<<twMonth<<""<<twDay<<" "<<twHour<<":"<<twMinute<<":"<<twSecond<<endl;

}

};

void last(long n) //用于等待时输出的函数

{

long i;

i=n/500;

for(i=0;i<n/500;i++)

{

cout<<''; Sleep(500);

}

cout<<endl;

}

void waiting()

{ long m; //模拟随机等待的时间函数

srand((unsigned)time(NULL));

cout<<"elevator waiting";

for(int i=0;i<1000;i++)

m=rand()%(20000-5000+1)+5000;

last(m);

}

void output(long t,person & p,elevator & e) //电梯模拟函数

{

static n=1; //定义乘客的个数

if( t==1) //有人在一楼按铃

{

pnewset();

if(enow!=1) //但是此时电梯停留在二楼

{

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") arrived floor 1"; //输出有人到达一楼

Time::outtime(); //输出此时的准确时间

cout<<"elevator running";

last(5000);

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") enters elevator"; //输出乘客进入电梯

Time::outtime(); //输出此时的准确时间

cout<<"elevator running";

last(5000);

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") arrives floor 2"; //输入乘客到达二楼

Time::outtime(); //输出此时的准确时间

enow=2;

n++;

system("color 0C"); waiting(); system("color 0F");

}

else //此时电梯就是一楼

{

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") arrives floor 1"; //输出有人到达一楼

Time::outtime(); //输出此时的准确时间

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") enters elevator"<<endl;

cout<<"elevator running";

last(5000);

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") arrives floor 2";

Time::outtime();

enow=2;

n++;

system("color 0C"); waiting(); system("color 0F");

}

}

if(t==2) //有人在二楼按铃

{

if(enow!=2) //但是电梯此时不在二楼

{

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") arrived floor 2";

Time::outtime();

cout<<"elevator running";

last(5000);

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") enters elevator";

Time::outtime();

cout<<"elevator running";

last(5000);

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") arrives floor 1";

Time::outtime();

enow=1;

n++;

system("color 0C"); waiting(); system("color 0F");

}

else //此时电梯就是二楼

{

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") arrives floor 2";

Time::outtime();

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") enters elevator";

Time::outtime();

cout<<"elevator running";

last(5000);

cout<<"person "<<n<<"(a "<<setw(5)<<psex<<") arrives floor 1";

Time::outtime();

enow=1;

n++;

system("color 0C"); waiting(); system("color 0F");

}

}

}

int main()

{

coutfill('');

cout<<setw(80)<<'';

coutfill(' ');

system("color 0C");

cout<<setw(50)<<"欢迎使用电梯模拟程序"<<endl; //输出头菜单

coutfill('');

cout<<setw(80)<<'';

coutfill(' ');

int i;

person p;

elevator e;

srand((unsigned)time(NULL)); //定义随机数种

waiting();

system("color 0F");

for(i=0;;i++)

output(rand(),p,e); //调用电梯模拟函数

return 0;

}

参考一下吧。可能有一些错误,但这种想法是完全正确的。

优先级调度算法

的#include“stdioh中”

包括“stdlibh中”

“stringh中”

typedef结构节点BR /> {

字符名称[10]; / 进程标识符 /

诠释PRIO; / 进程的优先级号码 /

int的圆; / 处理时间的旋转时间片 /

诠释CPUTIME; / 进程的CPU时间 /

诠释needtime; / 进程还需要时间来完成 /

诠释计数; / 计数器 /

字符状态; / 进程状态 /

结构节点下; / 链指针 /

} PCB;

PCB 完成准备好了,尾巴运行/ 队列指针 /

整数N; / 进程数 /

/ 将就绪队列中的投入运行/

firstin的第一道工序,()

运行做好了准备; / 就绪队列的头指针分配给正在运行的头指针 /

运行状态='R'/ 进程的状态更改为运行状态 /

准备准备>下; / 准备加工后移动到下一列头指针 /

}

/ 标题输出功能 /

无效PRT1(字符) BR /> {

(TOUPPER()=='P')/ 优先数的方法 /

printf的(“名称的CPU时间needtime优先状态\ n”);

其他 BR />输出(“名CPUTIME needtime数轮状态\ N”);

}

/ 进程PCB输出 /

无效PRT2(CHAR一,PCB Q)

> {

(TOUPPER()=='P')/ 输出优先数 /

printf的(“%10%-10D%-10D - 10D%C \ N”, Q->名称,

Q-> CPU时间,Q-> needtime,Q-> PRIO,Q->状态);

其他/ 旋转法输出 /

printf(“请% 10%10D%-10D%-10D-10D-C \ n“,Q->名称,

Q-> CPU时间,Q-> needtime,Q->计数,Q->轮, Q->状态);

}

/ 输出函数 /

无效PRT(炭算法)

{

PCB p;

PRT1 (算法); / 输出头 /

(run! = NULL)/ 如果你运行的指针不为空 /

PRT2(算法,运行); / PCB输出电流运行 /

P =准备; / 输出就绪队列PCB /

(p! = NULL)

{

PRT2(算法,P);

p =>下;

}

P =完成; / 输出完成队列PCB /

(p! = NULL)

{

PRT2(算法,P);

P = P->下;

}

的getch(); / 按任意键继续 /

}

/ 优先数量的插入算法/

insert1(PCB Q)

{

PCB P1, S R;

INT B;

= Q; / 的PCB指针,是要插入 /

P1 =准备; / 就绪队列的头指针 /

R = P1; / R P1前体的指针 /

B = 1;

((p1! = NULL)&& B)/ 优先数来确定插入的位置 /

(P1-> PRIO = S-> PRIO)

{

R = P1;

P1 = P1->下;

}

其他

B = 0;

(r! = P1)/ 如果条件成立之间插入R和P1 /

{

R->下;

S-> = P1;

}

其他

{

S-> = P1; / 否则插入就绪队列中的头 /

准备;

}

}

/ 的轮转插入功能 /

insert2(PCB P2)

{

尾巴 - > = P2; / 新的PCB插入在当前的就绪队列尾部 /

尾= P2;

P2->下一个= NULL;

}

/ 创建初始PCB信息优先数 /

无效create1 (CHAR ALG)

{

PCB p;

我的时间;

字符不适用10];

准备= NULL; / 就绪队列的头指针 /

完成= NULL; / 完成队列的头指针 /

“运行=”NULL; / 运行队列的指针。 /

printf的(“请输入名称和时间的流程\ n”); / 输入进程ID和所需要的时间创建一个PCB /

为(i = 1; <= N; + +)

{

p =的malloc(sizeof(PCB)的);

scanf的(“%s”的,NA);

scanf的(“%d的,与时间);

使用strcpy(P->名称,NA);

P-> CPU时间= 0;

P-> needtime的=时间;

P->状态='W'

P-> PRIO = 50;

如果(ready! = NULL)/ 就绪队列是没有空调的插入功能插入 /

insert1(P); BR />其他

{

P-> =准备就绪; / 创建一个就绪队列PCB /

准备=;

}

} <BR / clrscr();

printf(“请优先输出:\ n”);

printf(“请 \ n“);

PRT(ALG); / 输出过程PCB / />运行=准备就绪; / 就绪队列的处理 *** 作 /

准备=准备就绪 - >下;

运行 - >状态='R';

}

/ 旋转的方法来创建进程PCB /

的无效create2(字符ALG)

{

PCB p;

我,时间;

字符娜[10] ;

准备好= NULL;

完成= NULL;

运行= NULL;

printf的(“输入姓名和时间的圆化处理\ n”);

(我= 1 <= N + +)

{

P =的malloc(sizeof(PCB)的);

scanf函数(“%s”,NA)</ scanf函数(“%d”,&时间);

使用strcpy(P->名称,NA); P-> CPU时间= 0;

p->的needtime时间;

> P->计数= 0; / 计数器 /

的p-state ='W';

P->圆= 2; / 时间片 /

(准备好了!= NULL)

insert2(P);

其他

{

P-> =准备就绪;

准备=;

尾= P

}

}

clrscr();

printf(“请输出轮\ n”);

printf的(“ \ n“);

PRT (ALG); / 输出过程PCB信息 /

运行准备; / 队列的过程将在地方并投入运行 /

准备准备下;

>运行 - >状态='R';

}

/ 的优先级调度算法 /

优先(字符ALG)

{

而(跑!= NULL)/ 当运行队列不为空,正在运行的进程 /

运行 - > CPU时间=运行 - > CPUTIME +1;

运行> needtime运行 - > needtime-1;

运行 - > PRIO =运行 - > PRIO-3; / 每次的运行优先级降低3个单位的数量 /

(运行 - > needtime == 0)/ 如果已完成0插入队列 /

{

运行 - >下=完成;

完成运行;

运行所需的时间 - >状态='F'; / 设置状态来完成的状态 /

运行= NULL; / 运行队列的头指针是空 /

(ready! = NULL)/ 如就绪队列不为空 /

firstin(); / 将制定一个过程,列 *** 作 /

}

/ 没有运行完成,而给优先数是不是最大的,然后把它变成就绪状态,插入就绪队列 /

((ready! = NULL)&&(运行 - > PRIO PRIO))

{

运行状态='W';

insert1(运行);

firstin(); / 就绪队列的第一个进程运行 /

>}

PRT(ALG); / 输出过程PCB信息 /

}

}

/ round-robin方法 /

roundrun(CHAR ALG)

{

(run! = NULL)

{

运行 - > CPU时间=运行 - > CPUTIME +1;

运行 - > needtime =运行 - > needtime -1;

运行计数运行计数+1;

(运行 - > needtime == 0)/ 运行后把它变成一个完整的状态,插入完成队列 /

{全部

运行 - >下=完成;

完成运行;

运行状态='F';

运行= NULL

(ready! = NULL)

firstin(); / 准备列不为空,第一道工序的 *** 作 /

}

其他

(运行 - >数==运行 - >圆)/ 如果时间片 /

{

运行 - >计数= 0; / 计数器设置为0 /

(ready! = NULL)/ 就绪队列不空 /

{

运行状态='W'; / 将其插入就绪队列中等待旋转 / /> insert2(运行);

firstin(); / 将准备投入列正在运行的进程 /

}

}

PRT(ALG) / 输出过程的信息 /

}

}

/ 主函数 /

()

{

字符算法; / 算法标记 /

Clrscr();

printf的(“类型的算法:P / R(优先/ ROUNDROBIN)\ n”); scanf的(“%c”的算法); / 输入字符确定算法 /

printf的(“请输入进程号\ n”);

scanf的(“%d”,&N); / 输入的进程数 / BR />(算法=='P'| |算法=='P')

{

create1(算法); / 优先数 /

优先级(算法);

}

其他

(算法=='R'| |算法=='R')

{

create2(算法); / 一轮循环 /

roundrun(算法);

}

}赞同26 |评论

试试这个,以前我编的时间片轮转

#include<iostreamh>

typedef struct node

{

char name [10];

struct node next;

int needtime;

int servetime;

char state;

};

void IniPCB(int n,node &head,node &finish)

{

node ready=new struct node;

ready=NULL;

for(int i=0;i<n;i++)

{

node p=new struct node;

cout<<"输入进程名:";

cin>>p->name;

cout<<"输入进程需要运行的时间:";

cin>>p->needtime;

p->servetime=0;

p->state='R';

if(ready==NULL)

{

ready=p;

head=p;

}

else

{

ready->next=p;

ready=p;

}

finish=p;

}

finish->next=head;

}

void DoPCB(int n,node &head,node &finish,node &run)

{

run=head;

bool end=0;

node check=new struct node;

cout<<"执行结果如下:"<<endl;

cout<<"进程名"<<" "<<"运行时间"<<" "<<"需要时间"<<" "<<"状态"<<endl;

for(int j=0;j<n;j++)

{

cout<<" "<<head->name<<" "<<head->servetime<<" "<<head->needtime<<" "<<head->state<<endl;

head=head->next;

}

cout<<endl;

int count=0;

while(end!=1)

{

if(run->state=='R')

{

(run->servetime)++;

if((run->servetime)==(run->needtime))

{

run->state='E';

}

count++;

cout<<"第"<<count<<"个时间片:"<<endl;

head=finish->next;

for(int k=0;k<n;k++)

{

cout<<" "<<head->name<<" "<<head->servetime<<" "<<head->needtime<<" "<<head->state<<endl;

head=head->next;

}

cout<<endl;

}

check=run;

for(int x=0;x<n;x++)

{

if(check->state=='E')

check=check->next;

}

if(check==run&&run->state=='E')

{

end=1;

}

run=run->next;

}

}

void main()

{

cout<<"输入进程个数:";

int n;

cin>>n;

node run=new struct node;

node head=new struct node;

node finish=new struct node;

run=NULL;

head=NULL;

finish=NULL;

IniPCB(n,head,finish);

DoPCB(n,head,finish,run);

}

以上就是关于Java调度算法 来个大神写程序 选择一个调度算法,实现处理器调度。全部的内容,包括:Java调度算法 来个大神写程序 选择一个调度算法,实现处理器调度。、求一个电梯的调度管理程序,c++的、求大师帮忙用C#语言写个程序:可视化 作业调度模拟( 短作业优先算法实现)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10220081.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存