) Utilice programación en lenguaje C (u otros lenguajes, como Java) para implementar un determinado algoritmo de programación de procesos (como la programación dinámica de prioridades) para N procesos.
Público: class PrivilegeProcess {
Público *** static void main(String[] args) {
MiQueue MiQueue new MiQueue ( //Declaración); Cola
Placa de circuito impreso [PCB = {nueva PCB(001,8,1), nueva PCB(002,7,9), nueva PCB(003,3, 8), nueva PCB (004, 1, 7), nueva PCB (005, 7, 4)};
gt; segmento de PCB = nueva PCB ();
(INT I = 0; lt; pcb. length; ) {// La inicialización se ordena primero y la clasificación de selección aquí utiliza el primer equipo de alta prioridad
(J = I; lt; pcb. length; J) {
(PCB[I]. Privilegio; PCB[J]. Privilegio) {
Segmento = PCB[1];
PCB[I] = PCB[J]; p>
PCB[J] = segmento;
}
}
}
Sistema. por out.println("Orden de los procesos después de poner en cola la primera vez:");
(int i = 0; lt; pcb.length; ) {
Llamada .out del sistema println(primer puesto en cola # nombre del programa: "pcb[i].name totaltime: "pcb[i].totaltime" of "privilege" PCB[i].privilege); }
(); p>
myqueue.start(PCB);
}
}
Clase MyQueue {
INT índice = 0;
PCB [] PC = nueva PCB [5];
PCB [] PC1 = nueva PCB [4]
Temperatura de PCB = nueva PCB () br /gt; public *** cola no válida (proceso PCB) { // Algoritmo de cola
(índice == 5) {
("¡Fuera de límites!"); /p>
Regresar
}
PC [índice] = proceso
Índice
}
Público***:PCB DEQUEUE(){//Algoritmo de eliminación de la cola (índice == 0)
Devuelve vacío
( INT I = 0; lt; pc1. longitud; ) {
PC1[I] = PC[1];
}
Índice -
Temperatura = PC[0 ];
(INT I = 0; lt; pc1.longitud; ) { BR /gt; PC[I] = PC1[I]
}
Condiciones del informe;
}
Público *** Inicio no válido (PCB [] PC) {//Algoritmo de tabla de proceso
(PC[0] .isNotFinish==True||PC[1 isNotFinish==True||PC[2 isNotFinish==True||PC[3].
cuando isNotFinish == Verdadero | PC[4]. isNotFinish ==) {
// *Nota: | los operadores son falsos, todos los resultados de las expresiones son falsos; de lo contrario, son verdaderos
(INT I = 0; lt; longitud de la PC;) {
PC[I]. run(this); /gt; } System.out.println();
(int i = 0; lt; pc.length;) { // Maneja cada ejecución una vez por prioridad de reordenamiento de longitud de segmento de ejecución una vez
(j = i;lt;pc.length;J) {
if (PC[I]privilegelt;PC[J].privilege ) {
Temperatura = PC[I];
PC[I] = PC[J]
PC[J] = Temperatura
}
p>}
}
}
}
}
clase PCB { // Declaración de nivel de procedimiento
y nombre int, tiempo total, privilegios de tiempo de ejecución
boolean isNotFinish
public PCB() {
}
public PCB (nombre, int privilegio de tiempo total) {
this.name = nombre; // nombre del proceso
this.totaltime = totaltime; /p>
this.privilege = Privilege; //Prioridad de tiempo total this.runtime = 2; //El valor del intervalo de tiempo es 2
this.isNotFinish = true // Si se completó la ejecución<; /p>
("Valor inicial: nombre del programa:" nombre "tiempo total:" privilegio "privilegio" de tiempo total);
System.out. Llamar a println();
}
MyQueue MQ public *** invalid run() { // Procesamiento basado en el algoritmo de intervalo de tiempo implementado
(totalTimegt ; 1) { totaltime = running; // El tiempo total es mayor que 1, tiempo total = tiempo total - segmento de tiempo
Privilegios -
("Nombre del programa: "nombre" tiempo restante : ""privilegio"); tiempo total
} else if (tiempo total == 1) {
tiempo total -; // Cuando el tiempo total es 1, el tiempo de ejecución es 1
gt; privilegio -
("nombre del programa:" nombre "remaintime:" privilegio de "privilegio" de tiempo total
}otro{
<); p> isNotFinish = false; // 0, establece el indicador isNotFinish en falso}
if (isNotFinish == true) { br mq.deQueue(); p> mq.enQueue (este);
}
}
}