/* * Server initialization routine */ void init(void) { printf("Initializing... "); fflush(stdout); ipc_packet_data.ipc_method = SHMEM; ipc_packet_data.server = true; ipc_packet_data.reqresp = NULL; ipc_packet_data.shmem = NULL; setupSemaphores(); if(initIPC(&ipc_packet_data) < 0) { ipcerror("mtimesrv::init():initIPC() - failed"); exit(1); } status.just_started = true; status.ref_count = 0; if(ipc_packet_data.ipc_method == SHMEM) status.shm_id = ipc_packet_data.resource_id; printf("Done.\n"); fflush(stdout); }
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; }
/* * Init IPC, connect to the server and register within it. */ void connectTimeSrv(void) { /* Init client's IPC */ request_t register_cli; printf("Intializing IPC... "); setupSemaphores(); ipc_packet_data.ipc_method = SHMEM; ipc_packet_data.shmem = NULL; ipc_packet_data.extra = NULL; ipc_packet_data.reqresp = NULL; ipc_packet_data.server = false; if(initIPC(&ipc_packet_data) < 0) { ipcerror("microsh::connectTimeSrv():initIPC() - failed"); return; /* this is not fatal, client still may operate as a shell */ } /* Send register request */ requestPrepare(®ister_cli); register_cli.command = OPEN; if(sendRequest(&ipc_packet_data) < 0) { ipcerror("microsh::connectTimeSrv():sendRequest() - failed"); return; /* this is not fatal, client still may operate */ } status.connected = true; printf("Done.\n"); }