Encuentre el código completo en lenguaje C del algoritmo de programación de procesos por orden de llegada y el algoritmo de prioridad de proceso corto
/* (1) Programación de procesos
Los algoritmos de programación de procesos incluyen FIFO, algoritmo de programación de prioridades, algoritmo de programación de rotación de intervalos de tiempo, algoritmo de programación jerárquica,
Entrada: Archivo de flujo de proceso, que almacena una serie de procesos a ejecutar.
Cada trabajo incluye tres elementos de datos:
El número de prioridad de tiempo requerido para el nombre del proceso (el nivel 0 es el más alto). )
Salida:
Tiempo de espera del flujo de ejecución del proceso y tiempo de espera promedio
Este programa incluye: FIFO, algoritmo de programación de prioridades, algoritmo de programación de rotación de intervalos de tiempo p> p>
Archivo de flujo de proceso process_stream.txt
Datos de prueba:
p0 16 2
p1 5 1
p2 4 3
p3 8 0
p4 9 4
p5 7 6
La depuración de VC pasó
*/
#include lt;stdio.hgt;
#include lt;string.hgt;
#include lt;iostream.hgt;
#include lt;stdlib.hgt;
const int Quatum=2; //Defina la duración del intervalo de tiempo en 2 segundos
const int MAXPCB=100; //Definir el número máximo de procesos
//Definir la estructura del proceso
typedef struct node
{
char name[20] ; //Nombre del proceso
int time; //Tiempo de ejecución del proceso
int privilegio; //Prioridad del proceso (estático)
int //Proceso finalizado; indicador de finalización, 0 -No completado, 1-Completado
int wait_time; //Tiempo de espera del proceso
}pcb;
pcb pcbs[MAXPCB];
int quantiry; //El número total de procesos en el archivo de flujo de proceso
void inicial()
{
int i;
for (i=0;ilt;MAXPCB;i)
{
strcpy(pcbs[i].name, "");
pcbs[ i].time=0;
pcbs[i].privilege=0
pcbs[i].finished=0; p> PCB[i] .wait_time=0;
}
cantidad=0
}
int readData()<; /p>
{
ARCHIVO *fp;
char fname[20];
int i
coutlt; lt; "Ingrese el nombre del archivo de flujo del proceso: "lt;lt;endl;
cingt;gt;fname;
if ((fp=fopen(fname, "r" ))==NULL)
{
coutlt;lt;"Error, el archivo no se puede abrir, verifique el nombre del archivo"lt;lt;endl;
p>
}
else
{
mientras (!feof(fp))
{
fscanf(fp, "s d d d", pcbs[cantidad].nombre,
amp; pcbs[cantidad].tiempo, amp; pcbs[cantidad].privilegio
); quantiry;
}
//Salir los datos leídos
coutlt;lt;"Salir los datos leídos"lt;lt;endl;
coutlt;lt;"El número total de procesos en el archivo de flujo de proceso="lt;lt;quantirylt;lt;endl;
coutlt;lt;"El número de prioridad de tiempo requerido del proceso nombre "lt;lt;endl;
for (i=0;ilt;quantiry;i)
{
coutlt;lt;" "lt; lt ;pcbs[i].namelt;lt;" "lt;lt;pcbs[i].timelt;lt;" "lt;lt;pcbs[i].privilegelt;lt;endl; }
devuelve 1;
}
devuelve 0;
}
//Restablecer datos a Para uso por otro algoritmo
void init()
{
int i;
for (i=0; ilt; MAXPCB ; i )
{
pcbs[i].finished=0
pcbs[i].wait_time=0
}
}
void FIFO()
{
int i, j
int total <; /p>
//Flujo de ejecución del algoritmo FIFO de salida
coutlt;lt;endllt;lt;"--------------------- ----- ------------------------------------------"lt; lt;endl;
coutlt;lt;"Flujo de ejecución del algoritmo FIFO:"lt;lt;endl
coutlt;lt;"Tiempo de espera del nombre del proceso"lt;lt;endl; ;
for (i=0;ilt;quantiry;i)
{
coutlt;lt;" "lt;lt;pcbs[i]. namelt;lt; " "lt;lt;pcbs[i].wait_timelt;lt;endl;
for (j=i 1;jlt;quantiry;j)
{
pcbs[j].wait_time =pcbs[i].time
}
}
total=0; >
for (i=0;ilt;quantiry;i)
{
total =pcbs[i].w
ait_time;
}
coutlt;lt;"Tiempo total de espera: "lt;lt;totallt;lt;" "lt;lt;"Tiempo promedio de espera: "lt;lt ;total/quantirylt;lt;endl;
}
//Algoritmo de programación de prioridades
void privilegio()
{< / p>
int i, j, p;
int pass_time=0;
int total
int cola[MAXPCB];
p>
int current_privielege=1000;
for (i=0; ilt; cantidad; i )
{
current_privielege= 1000;
p>for (j=0;jlt;quantiry;j)
{
if ((pcbs[j].finished==0 )amp;amp;( pcbs[j].privilegelt; current_privilege))
{
p=j;
current_privielege=pcbs[j].privilege ;
}
}
cola[i]=p
PCB[p].finalizado=1; >
pcbs[ p].wait_time =passed_time;
passed_time =pcbs[p].time;
}
//Programación de números de prioridad de salida flujo de ejecución
coutlt;lt;endllt;lt;"-------------------------------- -------- ---"lt;lt;endl;
coutlt;lt;"Flujo de ejecución de programación de número de prioridad: "lt;lt;endl;
coutlt;lt;"Tiempo de espera del nombre del proceso"lt;lt;endl;
for (i=0;ilt;quantiry;i)
{
coutlt;lt;" "lt; lt;pcbs[cola[i]].namelt;lt;" "lt;lt;pcbs[cola[i]].wait_timelt;lt;"--"lt;lt;cola[ i]lt;lt;endl;
}
total=0
para (i=0; ilt; cantidad; i )
{
total =pcbs[i].wait_time;
}
coutlt;lt;"Tiempo total de espera: "lt;lt;totallt ;lt;" Tiempo de espera promedio: "lt;lt;total/quantirylt;lt;endl;
}
//Algoritmo de programación de rotación de intervalos de tiempo
temporizador vacío()
{
int
i, j, suma, bandera=1;
int pass_time=0;
int max_time=0
int round=0;
int cola[1000];
int total=0
mientras(bandera==1)
{
bandera=0;
for (i=0; ilt; cantidad; i )
{
if (pcbs[i].finished==0)
{
bandera=1
cola[total]=i
total
si (pcbs[i].timelt;=Quatum*(ronda 1))
pcbs[i].finished=1;
}
} p> p>
ronda;
}
coutlt;lt;endllt;lt;"----------------- ------------------------------------------------- -"lt;lt;endl ;
coutlt;lt;"Flujo de ejecución de programación de rotación de intervalos de tiempo:";
for(i=0;ilt;total;i) p>
{
coutlt;lt;pcbs[queue[i]].namelt;lt;" ";
}
coutlt;lt ;endl;
coutlt;lt;"Nombre del proceso hora de finalización tiempo de ejecución tiempo de espera"lt;lt;endl;
sum=0;
for ( i=0;ilt;quantiry ;i )
{
for(j=total-1;jgt;=0;j--)//Compare la secuencia del flujo de ejecución de de atrás hacia adelante para encontrar Se puede calcular el tiempo de finalización de un proceso con el mismo nombre
{
if (strcmp(pcbs[queue[j]].name, pcbs[i ].name)==0) p>
{
coutlt;lt;" "lt;lt;pcbs[i].namelt;lt;" "lt;lt;(j 1)*Quatumlt;lt;" ";
coutlt;lt;pcbs[i].timelt;lt;" "lt;lt;(j 1)*Quatum-pcbs[i].timelt; lt;endl;
suma =(j 1)*Quatum-pcbs[i].time
descanso
}
}
}
coutlt;lt;"Tiempo total de espera:"lt;lt;sumlt;lt;" "lt;lt;"Tiempo medio de espera: "lt;lt ;sum/quantirylt;lt;endl;
}
//Mostrar función de información de derechos de autor
void ver
sion()
{
coutlt;lt;endllt;lt;endl;
coutlt;lt;" ┏━━━━━━━━━ ━━━━━━━━━━━━━━┓"lt;lt;endl;
coutlt;lt;" ┃ Sistema de simulación de programación de procesos┃"lt;lt;endl;
coutlt;lt;" ┠─────────────────────┨"lt;lt;endl; " ┃ Versión 2011 ┃"lt;lt;endl;
coutlt;lt;" ┗━━━━━━━━━━━━━━━━━━━━━━━ ┛" lt;lt;endl;
coutlt;lt;endllt;lt;endl;
}
//Función principal
int principal()
{
int bandera;
versión();
inicial(); bandera=readData();
if(bandera==1){
FIFO();
init(); privilegio();
init();
temporizador();
}
coutlt;lt;endl;
sistema("pausa");
devuelve 0;