Red de conocimiento informático - Conocimiento sistemático - Programa de fresadora CNC Fanak O0001 G0G17G40G49G80G90 G91G30Z0

Programa de fresadora CNC Fanak O0001 G0G17G40G49G80G90 G91G30Z0

#include?"stdio.h"

#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;

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-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;

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);

}