public static void main(String[] args) {
MyQueue myqueue = new MyQueue()//声明队列
PCB[] pcb = {new PCB(001,8,1),new PCB(002,7,9),new PCB(003,3,8),new PCB(004,1,7),new PCB(005,7,4)}
PCB para = new PCB()
for(int i=0i<pcb.lengthi++){//初始化后首先执行一次排序,这里使用的是选择排序,优先级高的先入队
for(int j=ij<pcb.lengthj++){
if(pcb[i].privilege <pcb[j].privilege){
para = pcb[i]
pcb[i] = pcb[j]
pcb[j] = para
}
}
}
System.out.println("初次入队后各进程的顺序:")
for(int i=0i<pcb.lengthi++){
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[] pc = new PCB[5]
PCB[] pc1 = new PCB[4]
PCB temp = new PCB()
public void enQueue(PCB process){//入队算法
if(index==5){
System.out.println("out of bounds !")
return
}
pc[index] = process
index++
}
public PCB deQueue(){//出队算法锋派
if(index==0)
return null
for(int i=0i<pc1.lengthi++){
pc1[i] = pc[i+1]
}
index--
temp = pc[0]
for(int i=0i<pc1.lengthi++){
pc[i] = pc1[i]
}
return temp
}
public void start(PCB[] pc){//显示进程表算法
while(pc[0].isNotFinish==true||pc[1].isNotFinish==true||pc[2].isNotFinish==true||pc[3].isNotFinish==true||pc[4].isNotFinish==true){
//*注意:||运算符,所有表达式都为false结果才为false,否则为true
for(int i=0i<pc.lengthi++){
pc[i].run(this)
}
System.out.println()
for(int i=0i<pc.lengthi++){//所有进程每执行完一次时间片长度的运行就重新按优先弊陵级租基戚排列一次
for(int j=ij<pc.lengthj++){
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.runtime = 2//时间片,这里设值为2
this.isNotFinish = true//是否执行完毕
System.out.println("初始值: processname : " + name + " totaltime : " + totaltime + " privilege :" + privilege )
System.out.println()
}
public void run (MyQueue mq){//进程的基于时间片的执行算法
if(totaltime>1){
totaltime-=runtime//在总时间大于1的时候,总时间=总时间-时间片
privilege--
System.out.println(" processname : " + name + " remaintime : " + totaltime + " privilege :" + privilege )
}else if(totaltime==1){
totaltime--//在总时间为1时,执行时间为1
privilege--
System.out.println(" processname : " + name + " remaintime : " + totaltime + " privilege :" + privilege )
}else{
isNotFinish = false//总时间为0,将isNotFinish标记置为false
}
if(isNotFinish==true){
mq.deQueue()
mq.enQueue(this)
}
}
}
这个只要调个队列就够了洞拿,主要的代码应枯碰该这样写就可以了:while(!que.empty()) //que是进程的队列
{
pid_t pid = fork()
switch(pid)
{
case -1 : printf("ERROR:cannot create the child process.\n") break
case 0: execlp(……); //这里execlp调用的是que.top(),这个进程要写在当前目录下
default : wait(NULL)
}
}
等待某一时间不能继续执行,可以没颤谈使wait函数的参数取具体的状态值,希望可以帮到你!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)