Esempio n. 1
0
/*
 * 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);
}
Esempio n. 2
0
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;
}
Esempio n. 3
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(&register_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");
}