网站首页 > 文章中心 > 其它

java程调度算法代码

作者:小编 更新时间:2023-08-16 10:59:36 浏览量:22人看过

求磁盘调度算法scan算法的java代码

①.、先来先服务算法(FCFS)First Come First Service

这是一种比较简单的磁盘调度算法.它根据进程请求访问磁盘的先后次序进行调度.此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况.此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小.

[java] view plain copy print?

优先级调度算法如何用JAVA实现

没java的 发段源代码给你 有兴趣自己慢慢理解

#include time.h

#include dos.h

#include math.h

#include conio.h

#include stdio.h

#include stdlib.h

#include graphics.h

#define ESC 0x1b

#define ENTER 0x0d

#define TRUE 1

#define FALSE 0

/*每隔TIME秒就变换一次优先级*/

/*数据结构*/

/****************************************************************/

enum _Status/*进程状态枚举*/

{

READY =0,/*就绪*/

RUN,/*执行中*/

SUSPEND,/*挂起*/

};

typedef enum _Status Status;

struct _Pcb/*进程结构*/

int PID;/*进程ID,ID为负数的进程为系统后备队列的作业*/

int Time;/*进程运行需要的时间*/

int Prior;/*进程的优先级,越大越优先*/

Status Sts;/*状态*/

struct _Pcb *Next;/*指向本进程队列中下个进程的PCB*/

typedef struct _Pcb PCB;

struct _Batch/*多道处理中的道结构*/

PCB *pcb;/*该道当前正在处理的进程*/

struct _Batch *Next;/*下一道*/

typedef struct _Batch Batch;

/*多道系统相关全局变量*/

PCB *ProcQueue = NULL;/*进程链表,按优先级从大到小排列*/

Batch *BatchQueue = NULL;/*系统多道链表*/

/*动态优先权抢占式调度算法及相关函数声明*/

int InitBatchs(int n);/*初始化多道系统,n为道数*/

int InsertProc(int prior, int time);/*向进程链表中按优先级大小插入一个新进程*/

int InsertIDLE();/*向进程队列中加入后备进程,当系统空闲时将被调入*/

int SortProcQueue();/*将进程链表按优先级从大到小排列*/

int AddBatch();/*增加系统道数*/

int DeleteBatch();/*减少系统道数*/

int UnSuspendProc(int id);/*解除ID为id的进程的挂起状态*/

int UpdateBatchs();/*多道系统根据进程链表进行更新,并将执行完毕的进程删除*/

int PassSeconds(int n);/*系统经过n秒后计算数据并进行优先级调度*/

/*各函数的定义*/

int InitBatchs(int n)

int i;

for (i=0; in; ◆◆i)

AddBatch();

}

return (UpdateBatchs());

int InsertProc(int prior, int time)

static int sysid = 0;/*该系统已经加入过多少进程,此值将是新进程的ID*/

PCB *last,*now,*pcb;

pcb = (PCB*)malloc(sizeof(PCB));

if (pcb == NULL) return FALSE;

pcb-Prior = prior;

pcb-Time = time;

pcb-PID = (◆◆sysid);

pcb-Sts = READY;

if (ProcQueue == NULL)/*如果进程队列为空*/

ProcQueue = pcb;

pcb-Next = NULL;

return TRUE;

last = ProcQueue;

now = last-Next;

if (pcb-Prior last-Prior)/*pcb将排在队头*/

pcb-Next = ProcQueue;

while ((now != NULL) (pcb-Prior now-Prior))/*寻找插入位置*/

last = now;

last-Next = pcb;

pcb-Next = now;

int InsertIDLE()

PCB *now = ProcQueue;

PCB *idle = (PCB*)malloc(sizeof(PCB));

if (idle == NULL) return FALSE;

idle-PID = -1;

idle-Prior = -1;

idle-Sts = SUSPEND;

idle-Time = -1;

idle-Next = NULL;

if (ProcQueue == NULL)

ProcQueue = idle;

while(now-Next != NULL)

now = now-Next;

now-Next = idle;

int SortProcQueue()

{ /*冒泡排序*/

PCB *last, *now;

int b = FALSE;/*上次遍历是否无交换产生*/

if (ProcQueue==NULL || ProcQueue-Next==NULL)/*如果链表中无进程或只有一个进程*/

return FALSE;

while (!b)

b = TRUE;

last=ProcQueue;

now=last-Next;

if (last-Prior now-Prior)

ProcQueue = now;

last-Next = now-Next;

now-Next = last;

b = FALSE;

while (now-Next!=NULL)

if ((now-Prior)(now-Next-Prior))

now-Next = now-Next-Next;

last-Next-Next = now;

else

last = last-Next;

int AddBatch()

Batch *bt = (Batch*)malloc(sizeof(Batch));

if (bt==NULL) return FALSE;

bt-Next = BatchQueue;

BatchQueue = bt;

bt-pcb = NULL;

return (InsertIDLE());

int DeleteBatch()

Batch *bt = BatchQueue;

if (BatchQueue==NULL || BatchQueue-Next==NULL)/*如果只剩最后一道则不删除*/

if (ProcQueue==NULL || ProcQueue-Next==NULL)/*如果只有最后一个后备空闲进程*/

return FALSE;/**/

while (now-Next != NULL)/*查找到最后一个进程,该进程必定是后备空闲进程*/

if (now==NULL || now-PID=0)/*未查找到后备进程*/

free(now);

last-Next = NULL;

BatchQueue = BatchQueue-Next;

free(bt);

int UnSuspendProc(int id)

if (ProcQueue==NULL) return FALSE;

while (now != NULL)

if (now-PID == id)

now-Sts = READY;

int UpdateBatchs()

PCB *last = ProcQueue, *now;

while (bt != NULL)

bt = bt-Next;

if (ProcQueue == NULL) return TRUE;

while (last-Sts==RUN last-PID=0 last-Time=0)

ProcQueue = ProcQueue-Next;

free(last);

if (now-Sts==RUN now-PID=0 now-Time=0)/*如果该进程是运行中的一般进程并已执行完毕*/

bt = BatchQueue;

now = ProcQueue;

while (bt != NULL now != NULL)

bt-pcb = now;

now-Sts = RUN;

if (now-Sts == RUN)

now-Sts = SUSPEND;

int PassSeconds(int n)

static int time = 0;

int i=0, ProcEnd = FALSE;

PCB *pcb = ProcQueue;

if (bt == NULL) return FALSE;

time ◆= n;

if (time=TIME)

i = time/TIME;/*经过多少时间段*/

time = time%TIME;

while (bt != NULL)/*更新进程运行时间*/

if (bt-pcb-PID=0)

bt-pcb-Time -= n;

if (bt-pcb-Time = 0)/*进程结束*/

ProcEnd = TRUE;

if (i 0)

while (pcb != NULL)/*更新进程优先权(动态优先权)*/

if (pcb-Sts == RUN pcb-PID=0)/*运行的进程优先权降低*/

pcb-Prior -= i;

if (pcb-Prior 0)

pcb-Prior = 0;

else if (pcb-Sts == SUSPEND pcb-PID=0)/*挂起的进程优先权升高*/

pcb-Prior ◆= i;

pcb = pcb-Next;

if (i0)

SortProcQueue();/*如果优先级有变动则重新排序*/

if (ProcEnd || i0)

UpdateBatchs();/*更新多道进程*/

/*图形界面相关函数*/

/*表格的单位宽度和高度*/

void *black=NULL;/*背景色方格,使用它擦出表格中的图形*/

int InitGraph()/*初始化图形界面*/

int GraphDriver; /* The Graphics device driver */

int GraphMode; /* The Graphics mode value */

int ErrorCode;

GraphDriver = DETECT; /* Request auto-detection */

initgraph( GraphDriver, GraphMode, "" );

ErrorCode = graphresult(); /* Read result of initialization*/

if( ErrorCode != grOk )

{ /* Error occured during init */

printf(" Graphics System Error: %s\n", grapherrormsg( ErrorCode ) );

getch();

cleardevice();

black = (void*)malloc(imagesize(1,1,WIDTH-1,HEIGHT-1));

getimage(1,1,WIDTH-1,HEIGHT-1,black);

DrawFrame();

DrawData();

int DrawFrame()/*画边框和表头*/

settextjustify(CENTER_TEXT, CENTER_TEXT);

settextjustify(LEFT_TEXT, TOP_TEXT);

moveto(0,HEIGHT);

lineto(0,HEIGHT);

int DrawData()/*绘制系统数据*/

int numRun=0, numSus=0, numRed=0;/*运行挂起和就绪的进程各有多少*/

PCB* now = ProcQueue;

int x=0, y=0;

switch(now-Sts)

case RUN:

x = WIDTH*1;

break;

case SUSPEND:

case READY:

if (now-Sts==RUN)/*该进程为正在运行的进程*/

putimage(x-WIDTH◆1,y◆1,black,COPY_PUT);

if (now-PID=0)/*该进程不是后备进程*/

putimage(x◆1,y◆1,black,COPY_PUT);

putimage(x◆1◆WIDTH,y◆1,black,COPY_PUT);

int DlgGetNum(char *buf,int l,int t,int r,int b,int gettime)

char ch;

int pos=0;

bar(l,t,r,b);

if (gettime)

while (1)

ch = getch();

if (ch == ENTER)/*如果输入了回车键*/

if(pos!=0)/*如果位置不在第一位(回车键不准第一个输入)*/

buf[pos]='\0';

buf[pos◆◆]=ch;

else if (ch == ESC)

else/*其他按键均按BackSpace处理*/

--pos;

if (pos0)

{ pos=0; buf[pos]='\0';}

int NewProcDlg()

PCB *pcb;

void* bg = (void*)malloc(imagesize(l,t,r,b));

getimage(l,t,r,b,bg);

flushall();

/*******输入优先级**********/

if (!DlgGetNum(buf,l,t,r,b,FALSE))

goto exit;

prior = atoi(buf);

/*******输入时间**********/

pos=0;

if (!DlgGetNum(buf,l,t,r,b,TRUE))

time = atoi(buf);

InsertProc(prior, time);

exit:

putimage(l,t,bg,COPY_PUT);

free(bg);

int gprintf( int xloc, int yloc, char *fmt, ... )/*图形系统中的格式输出*/

va_list argptr; /* Argument list pointer */

int cnt; /* Result of SPRINTF for return */

va_start( argptr, format ); /* Initialize va_ functions */

cnt = vsprintf( str, fmt, argptr ); /* prints string to buffer */

outtextxy( xloc, yloc, str ); /* Send string in graphics mode */

va_end( argptr ); /* Close va_ functions */

return( cnt ); /* Return the conversion count */

/*main函数*/

int main()

clock_t start=0, end=0;

char kb;

InitGraph();

start = end = clock();

while (!kbhit())

start = clock();

PassSeconds(1);

kb = getch();

switch (kb)

case ESC:

closegraph();

return 0;

case 'w':

UpdateBatchs();

case 's':

DeleteBatch();

case 'i':

NewProcDlg();

用JAVA实现时间片轮转调度算法

你先用C◆◆写,然后做成DLL.

再用java去调就好了.

一般java做底层控制和调用都会这么做.

就像io什么的,都是去调用C的代码完成的

一般java调用c写的dll代码都比较方便.

c调用java的代码几乎不可能.

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

public static void main(String[] args) {

int sum = 0;

for (int i = 1; i = 100; i◆◆) {

continue;

sum ◆= i;

System.out.println(sum);

求一个先来先服务调度算法的程序 java编的

import java.util.ArrayList;

import java.util.List;

public class Question {

// 调度总站

class DiaoDuZhan{

private ListClient list;

public Client getClient(){// 获得客户

if(list != null list.size() 0){

Client client = list.get(0);

list.remove(client);

return client;

}else{

return null;

public void addClient(Client client){

if(list == null){

list = new ArrayListClient();

list.add(client);

// 客户

interface Client{

public void setService(Service service);

public Service getSerive();

// 服务

interface Service{

public void doService();

// 服务员

class waiter{

DiaoDuZhan diaoduzhan;

public DiaoDuZhan getDiaoduzhan() {

return diaoduzhan;

public void setDiaoduzhan(DiaoDuZhan diaoduzhan) {

this.diaoduzhan = diaoduzhan;

public void doNext(){

Client client = diaoduzhan.getClient();

if(client != null)

client.getSerive().doService();

进程调度算法模拟程序设计

public class PrivilegeProcess {

MyQueue myqueue = new MyQueue();//声明队列

PCB para = new PCB();

for(int i=0;ipcb.length;i◆◆){//初始化后首先执行一次排序,这里使用的是选择排序,优先级高的先入队

for(int j=i;jpcb.length;j◆◆){

if(pcb[i].privilege pcb[j].privilege){

para = pcb[i];

pcb[i] = pcb[j];

pcb[j] = para;

System.out.println("初次入队后各进程的顺序:");

for(int i=0;ipcb.length;i◆◆){

System.out.println("初次入队后 # processname : " ◆ pcb[i].name ◆ " totaltime : " ◆ pcb[i].totaltime ◆ " privilege :" ◆ pcb[i].privilege);

System.out.println();

myqueue.start(pcb);

class MyQueue {

int index = 0;

PCB temp = new PCB();

public void enQueue(PCB process){//入队算法

System.out.println("out of bounds !");

return;

pc[index] = process;

index◆◆;

public PCB deQueue(){//出队算法

if(index==0)

for(int i=0;ipc1.length;i◆◆){

pc1[i] = pc[i◆1];

index--;

temp = pc[0];

pc[i] = pc1[i];

return temp;

public void start(PCB[] pc){//显示进程表算法

//*注意:||运算符,所有表达式都为false结果才为false,否则为true

for(int i=0;ipc.length;i◆◆){

pc[i].run(this);

for(int i=0;ipc.length;i◆◆){//所有进程每执行完一次时间片长度的运行就重新按优先级排列一次

for(int j=i;jpc.length;j◆◆){

if(pc[i].privilege pc[j].privilege){

temp = pc[i];

pc[i] = pc[j];

pc[j] = temp;

class PCB {//声明进程类

int name,totaltime,runtime,privilege;

boolean isNotFinish;

public PCB(){

public PCB(int name, int totaltime, int privilege){

this.name = name;//进程名

this.totaltime = totaltime;//总时间

this.privilege = privilege;//优先级别

this.isNotFinish = true;//是否执行完毕

System.out.println("初始值: processname : " ◆ name ◆ " totaltime : " ◆ totaltime ◆ " privilege :" ◆ privilege );

public void run (MyQueue mq){//进程的基于时间片的执行算法

if(totaltime1){

totaltime-=runtime;//在总时间大于1的时候,总时间=总时间-时间片

privilege--;

System.out.println(" processname : " ◆ name ◆ " remaintime : " ◆ totaltime ◆ " privilege :" ◆ privilege );

}else if(totaltime==1){

totaltime--;//在总时间为1时,执行时间为1

isNotFinish = false;//总时间为0,将isNotFinish标记置为false

if(isNotFinish==true){

mq.deQueue();

mq.enQueue(this);

以上就是土嘎嘎小编为大家整理的java程调度算法代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章