Cap. 1 - Introdução aos Sistemas Operacionais

Lab. 1.2 - Ambiente de Processamento UNIX

 

1. Processo PAI invoca a chamada de sistema fork() para criar um processo FILHO e, em seguida, execl() para carregar o programa "hll-wrld" no espaco de enderecamento do processo filho. Neste ponto o processo PAI le a hora corrente e sincroniza seu termino com o processo FILHO atraves da chamada de sistema wait(). Quando o processo FILHO finaliza, o processo PAI le novamente a hora corrente, imprime o tempo gasto para o processo FILHO ser executado e finaliza sua execucao com a chamada exit().

Compile os programas com o comando: $ "gcc prc-envr.c -o prc-envr". Compile também o programa "hll-wrld.c" de modo que o executável "hll-wrld" seja gerado. Finalmente, invoque o comando: $ "prc-envr hll-wrld"

  
  /* prc-envr.c - ilustra os comandos fork, execl, wait e exit */

  /* **************************************** Includes */
  #include 
  #include 
  #include 

  /* ************************************************** Main Program */
  int main( int argc, char* argv[] )
  {
    int pid;
    struct timeval tv1, tv2;
    double t1, t2;

    if( argc != 2 ) {
      printf("Digite: prc-envr \"hll-wrld\" \n");
      exit(1);
    }

    pid = fork();
    if( pid == 0 ) execl( argv[1], NULL );
    else printf("Processo FILHO: \"%s\".\n", argv[1] );
  
    printf("Processo PAI: \"prc-envr\".\n");

    gettimeofday( &tv1, NULL );  /* Processo PAI continua */
    t1 = (double)(tv1.tv_sec) + (double)(tv1.tv_usec) / 1000000.00;
    wait( NULL );

    gettimeofday( &tv2, NULL );  /* Processo PAI continua */
    t2 = (double)(tv2.tv_sec) + (double)(tv2.tv_usec) / 1000000.00;
    printf("Processo PAI: sincroniza com termino do Processo FILHO.\n");
    wait( NULL );

    printf("O Tempo de Execucao de \"%s\" eh: %lf s.\n", argv[1], (t2 - t1));
    exit(0);
  }
 
  
  /* hll-wrld.c - imprime "Hellow World" */

  /* **************************************** Includes */
  #include 

  /* ************************************************** Main Program */
  int main( int argc, char* argv[] )
  {
    printf("Programa: \"Hello World\". \n");
    exit(0);
  }
 

 


Luís Fernando Faina
Last modified: Wed Sep 4 07:54:03 2002