Programa de fresadora CNC Fanak O0001 G0G17G40G49G80G90 G91G30Z0
#include?"stdlib.h"
#include?"string.h"
estructura?PCB?{
char?NAME[10];?/* Nombre del proceso*/
int?ROUND;?/* Intervalo de tiempo de rotación del proceso*/
int? REACHTIME;?/* Hora de llegada del proceso*/
int?CPUTIME;?/*Tiempo de CPU del proceso*/
int?COUNT;?/* Contador**
int?NEEDTIME;?/* ¿Cuánto tiempo de CPU necesita el proceso para completarse
char?STATE;?/* El estado del proceso***
struct ?PCB?* NEXT;?/* Puntero de cadena*/
};
struct?LINK?{? /* Estructura de cadena de PCB**
struct ?PCB? *RUN;?/* Puntero al proceso actualmente en ejecución*/
struct?PCB?*READY;?/* Puntero de encabezado de cola listo**
struct?PCB ?*TAIL ;?/* Puntero de cola de cola lista***
struct?PCB?*FINISH;?/* Puntero de cabecera de cola de finalización**
};
void?INIT(LINK?*);?/* Inicializar la estructura de cadena de PCB*/
void?INSERT(LINK?*);?*/
void ?FIRSTIN( LINK?*);?/* Poner en funcionamiento el primer proceso en la cola listo*/
void?PRINT(LINK?*);?/* Imprimir todos los procesos después de cada intervalo de tiempo de ejecución Status*/
void?PR(PCB?*);?/* Imprimir el estado de un proceso*/
int?CREATE(LINK?*, int);?/ * Crear un nuevo proceso*/
void?ROUNDSCH(LINK?*);?/* Usar el método de rotación de intervalos de tiempo para programar el proceso*/
void?main()? {
ENLACE?pcbs;
int?i;
INIT(amp;pcbs);
i=0; p>
printf("Creando 5 procesos\n\n");
while(ilt; 5)?{
if(CREATE(amp; pcbs, i 1 )= =1)?{
printf("Proceso creado\n\n");
i;
}
else
printf("Error al crear el proceso\n\n");
}
FIRSTIN(amp;pcbs);
ROUNDSCH( amp;pcbs);
}
void?ROUNDSCH(LINK?*p)?{
PCB?*pcb;
while(p-gt;RUN!=NULL)?{
pcb=(PCB?*)malloc(tamaño de(PCB));
strc
py(pcb-gt;NOMBRE,p-gt;EJECUTAR-gt;NOMBRE);
pcb-gt;ROUND=p-gt;RUN-gt;ROUND;
pcb -gt;REACHTIME=p-gt;RUN-gt;REACHTIME;
pcb-gt;CPUTIME=p-gt;RUN-gt;CPUTIME;
pcb-gt;COUNT =p-gt;RUN-gt.COUNT;
pcb-gt;NEEDTIME=p-gt;RUN-gt;NEEDTIME;
pcb-gt;STATE=p-gt ;RUN-gt;ESTADO;
pcb-gt;NEXT=p-gt;RUN-gt.NEXT;
pcb-gt;CPUTIME;
pcb-gt; NECESITA TIEMPO--;
pcb-gt; COUNT;
if(pcb-gt; NECESITA TIEMPO==0)?{
pcb- gt; SIGUIENTE=p-gt; FINALIZAR-gt;
pcb-gt; ESTADO='F';
if(p-gt;READY!=p-gt;TAIL)
PRIMERO(p);
}
¿si no?{ p>
p-gt;RUN=pcb;
if(pcb-gt;COUNT==pcb-gt;ROUND)?{
pcb-gt;COUNT= 0;
if(p-gt;LISTO!=p-gt;TAIL)?{
pcb-gt;STATE='W';
INSERTAR(p);
PRIMERATIN(p);
}
}
}
}
}
}
IMPRIMIR(p);
}
}
}
void?INIT(LINK?*p)?{
p-gt; RUN=NULL
p-gt; ;LISTO=(PCB?*)malloc(tamañode(PCB));
p-gt;READY-gt;NEXT=NULL;
p-gt.FINISH=(PCB ?*)malloc(tamañode(PCB));
p-gt;FINISH-gt;NEXT=NULL;
}
int?CREATE(LINK ?*p, int?n)?{
PCB?*pcb, *q;
pcb=(PCB?*)malloc(tamañode(PCB));
flushall();
printf("Ingrese el nombre del proceso dth:\n", n);
gets(pcb-gt;NAME);
printf("Ingrese el número de intervalos de tiempo de rotación para el proceso dth:\n", n
scanf("d", amp; (pcb-gt; REDONDO));
printf("Por favor
ase introduzca la hora de llegada del proceso dth:\n",n);
Escanear f("d",amp;(pcb-gt;REACHTIME));
pcb -gt; CPUTIME=0;
pcb-gt; COUNT=0;
printf("Ingrese el número de intervalos de tiempo que el proceso dth necesita para ejecutarse:\n" , n);
scanf("d",amp;(pcb-gt;NEEDTIME));
pcb-gt;STATE='W';
pcb- gt;NEXT= NULL;
if(strcmp(pcb-gt;NAME,"")==0|||pcb-gt;ROUNDlt;=0|||pcb-gt;NEEDTIMElt;= 0)?/ * Error de entrada**
return?;
q=p-gt;READY;
while(q-gt;NEXT!= NULLamp;amp; q-gt;NEXT-gt;REACHTIMElt;=pcb-gt;REACHTIME)
q=q-gt;NEXT;
pcb-gt;NEXT=q -gt;SIGUIENTE ;
q-gt;SIGUIENTE=pcb;
if(pcb-gt;SIGUIENTE==NULL)
p-gt; COLA =pcb;
retorno?1;
}
void?FIRSTIN(LINK?*p)?{
PCB?*q; p>
q=p-gt;LISTO-gt;SIGUIENTE;
p-gt;LISTO-gt;SIGUIENTE=q-gt;SIGUIENTE;
q-gt ;SIGUIENTE=NULL ;
if(p-gt; LISTO- gt; SIGUIENTE==NULL)
p-gt; TAIL=p-gt;
q -gt; ESTADO='R';
p-gt; RUN=q;
}
void?INSERT(ENLACE?* p)?{
PCB?*pcb;
pcb=(PCB?*)malloc(tamaño de(PCB));
strcpy(pcb-gt ;NOMBRE,p -gt;RUN-gt;NOMBRE);
pcb-gt;ROUND=p-gt.RUN-gt;ROUND;
pcb-gt;REACHTIME= p-gt; RUN-gt;REACHTIME;
pcb-gt;CPUTIME=p-gt;RUN-gt;CPUTIME;
pcb-gt;COUNT=p-gt; EJECUTAR-gt; CONTAR;
pcb-gt;NEEDTIME=p-gt;EJECUTAR-gt;NEEDTIME;
pcb-gt;STATE=p-gt;EJECUTAR-gt; ESTADO;
PCB-gt; p>
PCB-gt; SIGUIENTE; =pcb;
p-gt ;TAIL=pcb;
p-gt; RUN=NULL;
pcb-gt='W';
}
¿nulo?IMPRIMIR(ENLACE?*p)?{
PC
B?*pcb;
printf("Estado de todos los procesos después de ejecutar un segmento de tiempo: \n/n");
if(p-gt; RUN!=NULL)
PR(p-gt;RUN);
if(p-gt;READY!=p-gt;TAIL)?{
pcb=p -gt;LISTO-gt;SIGUIENTE;
mientras(pcb!=NULL)?{
PR(pcb);
pcb=pcb-gt; SIGUIENTE;
}
}
pcb=p-gt;FINALIZAR-gt;SIGUIENTE;
mientras(pcb!=NULL )?{
PR(pcb);
pcb=pcb-gt;SIGUIENTE;
}
}
}
}
void?PR(PCB?*p)?{
printf("Nombre del proceso: s\n",p- gt; NAME);
printf("Tiempo de rotación del proceso: d\n", p-gt;ROUND);
printf("Tiempo de llegada del proceso: d\n" , p-gt;REACHTIME);
printf("Tiempo de CPU del proceso: d\n",p-gt;CPUTIME);
printf("Contador: d\n",p-gt ;COUNT);
printf("Tiempo de CPU restante para que se complete el proceso: d\n", p-gt; NEEDTIME);
printf("Estado de proceso: c\n\n",p-gt; ESTADO);
}