Jump to content

algoritmo de planificacion FCFS en c


Recommended Posts

hola, tengo el siguiente codigo en c en el programa dev c ++ y nesesito ayuda con el codigo . por favor si algen sabe, aca les dejo el codigo : la idea es k le usuario ingrese los procesos , los tiempos de llegada y los tiempos de rafaga, para luego calcular los tiempos de espera y de retorno, aca esta solo la primera parte para que me muestre los procesos con cada tiempo inicial y tiempo de salida y es ai donde tengo el problema , no resulta el algoritmo. ..atenta a comentarios gracis por leer

 

 

#include <stdio.h>

#include <stdlib.h>

 

int main(int argc, char *argv[])

{

 

int p,i,t_llegada[7],t_rafaga[7],t_inicial[7],t_salida[7];

 

 

printf("ingrese la cantidad de procesos (Maximo 7): ");

scanf("%d",&p);

 

 

for(i=0;i<p;i++)

 

{

printf("ingrese valores para proceso %d\n ",i+1);

printf("tiempo llegada: ");

scanf("%d",&t_llegada);

printf("tiempo rafaga: ");

scanf("%d",&t_rafaga);

}

 

for(i=i+1;i<p;i++)

{

t_inicial=t_inicial+t_salida;

t_salida=t_salida+t_rafaga;

 

}

 

for(i=1;i<p;i++)

{

printf("\n");

printf("proceso %d \n",i+1);

printf("el tiempo inicial %d: ",t_inicial);

printf("y el tiempo de salida es %d ",t_salida);

}

printf("\n");

 

 

 

system("PAUSE");

return 0;

}

Link to comment
Share on other sites

Noooooooooooooooooooooooo :ohh:

Me trae malos recuerdos eso, osea ni tanto, pero igual, es que hace un tiempo nos hizo una tarea y teniamos que programar varios algoritmos de planificacion de procesos, algunos con bastante mas trabajo para programar que el FCFS.

 

Mira, a modo de idea de como fue lo que hice yo, por lo que recuerdo, en primer lugar lo hice en C++ para poder usar STL y ayudarme de los contenedores que tiene. Porque por ejemplo usaba listas de procesos, entonces cuando voy ingresando los procesos los voy ingresando a una lista, de manera ordenada por tiempos de cuando deberian ejecutarse. Luego voy con ayuda de la funciones de tiempo iterando cada 1 segundo, para poder apreciar el proceso, en tonces dependiendo del contador de tiempo durante la iteracion cada 1 segundo y ahi se pueden ir calculando lo que quieres, luego que pasa el tiempo que se tiene que ejecutar el proceso, lo saco de la lista, y continuo con el proceso siguiente

Link to comment
Share on other sites

No se usan hilos y semáforos en la resolución de estos problemas......recuerdo una vez hice algo parecido y lo resolvimos de esa forma....si es así como debes hacerlo te puedo ayudar.

 

Saludos :sigay:

Link to comment
Share on other sites

ahhh graciasss moderador... es una buena idea lo intentare con listas enlazadas.....

 

con respecto a warian_vip lo ideal es realiarlo sin semaforos ni punteros por eso mi programa esta asi si me peudes ayudar con el codigo seria ideal por eso lo inclui seguire revisando las cosas y el post

Link to comment
Share on other sites

printf("ingrese la cantidad de procesos (Maximo 7): ");

scanf("%d",&p);

 

 

for(i=0;i<p;i++)

 

{

printf("ingrese valores para proceso %d\n ",i+1);

printf("tiempo llegada: ");

scanf("%d",&t_llegada);

printf("tiempo rafaga: ");

scanf("%d",&t_rafaga);

}

 

for(i=i+1;i<p;i++)

{

t_inicial=t_inicial+t_salida;

t_salida=t_salida+t_rafaga;

 

}

El problema es bien evidente, digamos que el usuario le asigna a p el valor 5, al terminar el primer bucle i tendra el valor de 4, y en el segundo bucle i valdra 5 porque le sumas uno, entonces no cumple con tu condicion que i sea menor que p y no entra al for.

Deben rutear sus programas para saber que falla si es que no lo notan a simple vista

Link to comment
Share on other sites

gracias por responder...me estas diciendo que el programa no esta validado? claro aun no tengo las validaciones correctas , me estoy concentrando en realizar las opoeraciones, me habian dado una idea de comparar los vectores, comparar si el tiempo de salida del primero es mayor al tiempo de llegada y asi para signar valores asi que realizare esta idea y les comentare si resulta para que asi despues a futuro todos puedan ver este programa resuelto graciass!!!

Link to comment
Share on other sites

gracias por responder...me estas diciendo que el programa no esta validado? claro aun no tengo las validaciones correctas , me estoy concentrando en realizar las opoeraciones, me habian dado una idea de comparar los vectores, comparar si el tiempo de salida del primero es mayor al tiempo de llegada y asi para signar valores asi que realizare esta idea y les comentare si resulta para que asi despues a futuro todos puedan ver este programa resuelto graciass!!!

las validaciones se hacen al final, solo digo que si no te compila debes rutear el programa a mano si es que no ves el error a simple vista

Link to comment
Share on other sites

Si lo haces con listas estarás usando punteros XD....sigo pensando que quedaría mas realista con hilos....lo que tu haces es muy sincrónico.

 

 

Saludos :notonto:

Por lo que yo entiendo la idea es simular como deberia ser el funcionamiento, mas que de como se puede programar para que sea mejor, si bien uno podria claro usar semaforos como dices, si le sale mas facil hacerlo con listas, y puede simular el funcionamiento bkn. Si esto es una tarea dada por un profe, al fin la idea es comprender y entender el como funciona esa forma de planificación de procesos, mas que programar algo 100% correcto

Link to comment
Share on other sites

Si estamos hablando de procesos de cpu entonces debería ser asincrono, es sólo un decir, no soy dueño de la verdad XD.....si bien como tu dices lo bueno es que se entienda, mejr sería que se entendiese y se aplicase de una forma realista, no te parece...asi se investiga un poco y se aprenden cosas nuevas y la experiencia se enriquece...son puntos de vista distintos, sin desmerecer el uno del otro.

 

Ahora con la ayuda....usa la librería process.h

 

#include<stdio.h>
#include<conio.h>
#include<process.h>
void main()
{
char p[10][5];
int tot=0,wt[10],pt[10],i,n;
float avg=0;
clrscr();
printf("Ingresar numero de procesos:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Ingresar nombre del proceso%d :\n",i+1);
scanf("%s",&p[i]);
printf("Ingresar tiempo del proceso");
scanf("%d",&pt[i]);
}

wt[0]=0;
for(i=1;i<n;i++)
{
wt[i]=wt[i-1]+pt[i-1];
tot=tot+wt[i];
}
avg=(float)tot/n;
printf("proceso\t | tiempo proceso\t | espera\n");
for(i=0;i<n;i++)
printf("%s\t%d\t%d\n",p[i],pt[i],wt[i]);
printf("Tiempo de espera total=%d\n Tiempo de espera Promedio=%f",tot,avg);
getch();
}

 

 

Saludos :notonto:

 

PD: El código no es mío XD

Edited by rob_loser
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...