两种进程调度算法:1)优先数调度;2)循环轮转调度

①本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。

②为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。

③在优先数算法中,优先数可以先取值为98,进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。

④对于遇到优先数一致的情况,采用FIFO策略解决。

#include

#include

#include

#include

#include

#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<

while (i

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;

}

voiddisplay(pcb *p){

cout<

while(p){

cout<name;

cout<

cout<cputime;

cout<

cout<needtime;

cout<

cout<priority;

cout<

switch(p->process){

case ready:cout<

case execute:cout<

case block:cout<

case finish:cout<

}

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(tppriority&&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<

cpuexe(p);

display(p);

sleep(2);

clrscr();

}

printf("All processes have finished,press any key to exit");

getch();

}

void display_menu(){

cout<

cout<

cout<

cout<

}

pcb * get_process_round(){

pcb *q;

pcb *t;

pcb *p;

int i=0;

cout<

while (i

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<

while(p){

cout<name;

cout<

cout<cputime;

cout<

cout<needtime;

cout<

cout<count;

cout<

cout<round;

cout<

switch(p->process){

case ready:cout<

case execute:cout<

case finish:cout<

}

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<

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);

}

}

进程调度算法java,CPU调度算法 - 计算机札记大全 - JavaEye技术网站相关推荐

  1. java 域模型_基于Spring实现领域模型模式 - RUP实践者指南 - JavaEye技术网站

    事务脚本.领域模型及表模块是Martin Fowler在<企业应用架构模式>中总结的三种领域逻辑组织模式.各有各的优点和缺点,这里不打算讨论它们各自的适用场景,只简单总结一下在应用领域模 ...

  2. java抓取工具_抓取工具Web-Harvest - dayang2001911 - JavaEye技术网站

    Overview 总览 This section describes the motive, the notions and concepts used in Web-Harvest. 本章描述了在W ...

  3. java hook技术_API Hook基本原理和实现 - - JavaEye技术网站

    hook是什么? windows系统下的编程,消息message的传递是贯穿其始终的.这个消息我们可以简单理解为一个有特定意义的整数,正如我们看过的老故事片中的"长江长江,我是黄河" ...

  4. Java中mediaplayer_MediaPlayer 用法(一) - 一切皆有可能 - JavaEye技术网站

    使用SurfaceView播放视频,其实很简单,但是经常会碰见有声音没图像的问题. 其实使用SurfaceView播放视频只需要主要下面几个地方就可以了 1. surfaceChanged也就是Suf ...

  5. java寄存器_汇编学习 1 寄存器的作用 寻址方式 - DraculaW - JavaEye技术网站

    首先 是寄存器的介绍 寄存器名     说明                            功能 eax:            累加器                 加法乘法指令的缺省寄存 ...

  6. java线程看门狗,ARM之看门狗~! - junjun - JavaEye技术网站 - 小陈的日志 - 网易...

    看门狗(watchdog)包括一个4分频的预分频器和一个32位的计数器,时钟通过预分频器输入定时器.定时器递减计数,递减的最小值为0XFF.如果设置一个小于0XFF的值,系统会将0XFF装入计数器,因 ...

  7. 操作系统:Java模拟CPU调度算法(非抢占短进程优先、可抢占优先权调度、多级反馈队列调度)

    本人是个普通学生,写下博客用于自我复习.自我总结. 本人编写算法水平不高,仅供各位参考. 首先,先简述一下各个算法的定义.因为我个人在查阅算法相关信息时,发现这些算法在某种程度上来说,可能会存在一些歧 ...

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

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

  9. 操作系统CPU调度算法

    前言 什么是调度算法 在操作系统中调度是指一种资源分配的过程,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法.对于不同的的系统和系统目标,通常采用不同的调度算法 为什么需要调度算法 计算 ...

最新文章

  1. 程序的编译、链接和执行
  2. SAP 批次管理(Batch management)
  3. 20-forEach循环语句
  4. 删除win7多余的系统还原点_【Win7封装教程2019版】系列(二)必要的系统调整
  5. Java9中使用jpa,jpa – eclipselink在Java 9上使用final字段进行静态编织
  6. MySQL之TCL(事务控制)语句
  7. iOS 5 Storyboard 学习之 Tabbar Controller,Navigation Controller
  8. 生成0到9之间的随机整数
  9. make *** 没有指明目标并且找不到 makefile。 停止。_“关系红利”时代《请停止无效社交》,关键朋友是你的价值选择...
  10. 想跟大家一起做件小事
  11. C刷题记录-1017
  12. 三维空间中的Pitch、Yaw、Roll值
  13. Android 高德地图 Native method not found: com.autonavi.amap.mapcore.MapCore.nativeNewInstance:(Ljava/lan
  14. PHP货币转中文大写函数
  15. 【C语言基础学习笔记】一、初始C语言(2)
  16. 化妆品公司mysql_化妆品网站销售管理系统的设计与实现(SSH,MySQL)(含录像)
  17. 数字化时代-15:从商品交换过程解剖淘宝电商
  18. 驱动器空间、关节空间与笛卡尔空间
  19. office2020与2016版的不同_Office2016与Office2013有什么区别?Office2016评测
  20. 在线扫描php后门_webshell后门扫描-PHP版

热门文章

  1. SQL Server2019的Microsoft SQL Server Management Studio2019使用教程(小知识点、名词、使用软件进行数据库和表操作)
  2. Hive开发人员如何提升?
  3. 让工业设计软件在国产操作系统兼容运行
  4. multisim仿真 74LS147D级联芯片
  5. MOS管用作开关时在电路中的连接方法
  6. 《软件测试》第五章 带上眼罩测试软件
  7. 学Java的第一步--感jio不太行
  8. 计算机cad职称考试模拟题,2017职称计算机CAD模拟试题「有答案」
  9. 江苏省计算机二级在线报名,2020年秋季江苏省计算机等级考试报名通知
  10. 联想计算机怎么连接无线网络,联想笔记本电脑如何放光盘 联想笔记本电脑连wifi方法【详解】...