Hola a todos, estoy intentando simular el algoritmo dekker 1 (alternancia estricta), llamo al proceso 1, y su seccion_critica inicia el bucle for empieza corriendo bien pero al retomar el bucle for despues de la primera interrupcion ya no lo realiza, el for deberia llegar a 7000 porque aumento el acumulador de los procesos
struct PCB{
int id; //id del proceso
char nombre[16];//nombre
int tareas_iniciales; //duracion de las tareas iniciales
int duracion; //cuanto durara el proceso
int quantum; //contador de interrupciones
int acumulador;//valor antes de la interrupcion
};
PCB p1;
PCB p2;
void crear_procesos(){ /***********************************/
p1.id=1; // RELLENA DATOS A LAS
strcpy(p1.nombre,"PWRDVD"); // ESTRUCTURAS
p1.duracion=7000; // DE TIPO PCB
p1.quantum=0; //
p1.acumulador=0; // //
p1.tareas_iniciales=2000; // P1 ES PARA PROCESO1
//
p2.id=2; //
strcpy(p2.nombre,"DVDRIPPER");// P2 ES PARA PROCESO2
p2.duracion=7000; //
p2.quantum=0; //
p2.acumulador=0; // //
p2.tareas_iniciales=2000; /*****************************/
}
int seccion_critica(int id){
cout<<"\nSeccion Critica: Proceso "<<id;
if(id==1){
for(int i=p1.acumulador; i<=p1.duracion; i=i+1000){
p1.acumulador=i;
if(i==3000||i==6000||i==9000){
return 1; /*** ENTRO AL BUCLE DEL QUANTUM ***/
Sleep(2000);
break;
} //if
}//for
}//if principal
else{
for(int i=p2.acumulador; i<=p2.duracion; i=i+1000){
p2.acumulador=i;
if(i==3000||i==6000||i==9000){
return 1; /*** ENTRO AL BUCLE DEL QUANTUM***/
Sleep(2000);
break;
} //if
}//for
}//else
Sleep(2000);
}
la interrupcion se da a los 3000 lo cual si funciona, se interrumpe pero como es alternancia estricta regresa hacia la seccion_critica porque no ha terminado, en teoria la siguiente seria en 6000, pero despues de la primera interrupcion se vuelve a llamar a la sección critica del proceso 1 pero el ciclo for ya no hace nada solo se inicia en 3000 pero ya no sigue contando, aunque p1.duracion sigue siendo 7000, agradecere sus aportes
Hmm, te hago una pregunta..
Lo estas haciendo con mutex y threads como el algoritmo de dekker implica verdad?
De ser asi, podrias postear el codigo entero para futuras referencias?
es solo simulacion y no he utilizado threads, esto es para comprender como se manejan las interrupciones y funcionamiento segun los algoritmos de dekker, al final encontre una solucion al problemap1.acumulador=p1.acumulador+1000;
al principio asignaba lo que tenia i pero no se porque razon no corria bien