int main(int argc, char** argv) { setvbuf(stdout, NULL, _IONBF, 0); readConfig(argv[1]); log_kernel = log_create(argv[2], "KERNEL", false, LOG_LEVEL_TRACE); log_info(log_kernel, "Se inicio el Kernel"); initializateCollections(); setupSemaphores(); fillDictionaries(); startCommunicationWithUMV(); pthread_t hilo_PLP; pthread_t hilo_PCP; pthread_create(&hilo_PLP, NULL, *threadPLP, NULL ); pthread_create(&hilo_PCP, NULL, *threadPCP, NULL ); actualizarEstado(); t_nodo_proceso* nodoAListo; while (1) { sem_wait(&sem_multiprog); sem_wait(&sem_listaNuevos); pthread_mutex_lock(&mutex_listaNuevos); nodoAListo = list_remove(listaNuevos, 0); pthread_mutex_unlock(&mutex_listaNuevos); log_info(log_kernel, "Moviendo PID %d a la lista de Listos", nodoAListo->pcb.pid); pthread_mutex_lock(&mutex_listaListos); queue_push(listaListos, nodoAListo); pthread_mutex_unlock(&mutex_listaListos); sem_post(&sem_listaListos); actualizarEstado(); } pthread_join(hilo_PLP, NULL ); pthread_join(hilo_PCP, NULL ); return 0; }
int main() { FILE *archEnt, *archSal = fopen("SALIDA.txt","wt"); t_arbol arbol; int linea=1; t_reg registros; crearBinario(); crearArbol(&arbol); if(abrirArchivo(&archEnt, n_arch, "r+b", CON_MSJ)) mostrarArchivo(archEnt); while(!feof(archEnt)) { fread(®istros, sizeof(t_reg), 1, archEnt); if(registros.saldo==0.0 || registros.estado!='B') //Condiciones para guardar en arbol { ponerEnArbol(&arbol,®istros,linea); actualizarEstado(archEnt, registros); } linea++; } if(abrirArchivo(&archEnt, n_arch, "r+b", CON_MSJ)) mostrarArchivo(archEnt); enOrden(&arbol, archSal); fclose(archSal); fclose(archEnt); return 0; }
void encolarPCB(t_pcb * pcbNuevo, int peso, int socketCliente) { t_nodo_proceso * nodoNuevo = malloc(sizeof(t_nodo_proceso)); nodoNuevo->pcb = *pcbNuevo; nodoNuevo->peso = peso; nodoNuevo->soquet_prog = socketCliente; pthread_mutex_lock(&mutex_listaNuevos); list_add(listaNuevos, (void*) nodoNuevo); list_sort(listaNuevos, algoritmoSJF); pthread_mutex_unlock(&mutex_listaNuevos); sem_post(&sem_listaNuevos); actualizarEstado(); }
int atenderMensajePlanificador(int sockfd) { header_t h; t_list* asignados; int nbytes = validarRecive(sockfd, &h); if (nbytes) { char* data = malloc(h.length); switch (h.type) { case NOTIFICAR_DATOS_PERSONAJE: nbytes = recv(sockfd, data, h.length, MSG_WAITALL); tratarNuevoPersonaje(data); break; case UBICACION_CAJA: nbytes = recv(sockfd, data, h.length, MSG_WAITALL); tratarSolicitudUbicacionCaja(data); break; case NOTIFICACION_MOVIMIENTO: nbytes = recv(sockfd, data, h.length, MSG_WAITALL); tratarMovimiento(data); break; case SOLICITAR_RECURSO: nbytes = recv(sockfd, data, h.length, MSG_WAITALL); tratarSolicitudRecurso(data); break; case PERSONAJE_FINALIZO: nbytes = recv(sockfd, data, h.length, MSG_WAITALL); tratarFinalizacionPersonaje(data); break; case NOTIFICACION_RECURSOS_ASIGNADOS: // nbytes = recv(sockfd, data, h.length, MSG_WAITALL); asignados = esperarRecursosAsignados(h); actualizarEstado(asignados); list_destroy(asignados); dibujar(); break; default: log_error(logFile, "Protocolo invalido (%d) para comunicarse con el nivel", h.type); break; } free(data); } return nbytes; }