Volver al temario
Tema 03 · 54 páginas

La gestión de procesos

Tema completo Modo estudio
TEXTO ORIGINAL · Páginas 4750 Ver PDF

Ejercicios de autoevaluacion

Texto íntegro de la conversión. Las figuras y la disposición de las notas se pueden consultar en el PDF.

Ejercicios de autoevaluación

  1. Dentro del diagrama de estados de los procesos que se muestra en el subapartado de estados de un proceso, ¿dónde colocaríais el estado zombie de UNIX? Justificad la respuesta.

  2. ¿Cómo se podrían redireccionar las entradas/salidas de los procesos hijos en un sistema en el que la llamada crear_proceso fuerza el cambio de imagen? Justificad la respuesta.

  3. Después de ejecutar "primero", ¿qué salidas obtendremos y por qué canal saldrán? Justificad la respuesta.

Primero

main() { char a;

a = 'A'; if (write(1,&a,1) == -1) { /error/ write(2,"error",5); } close(1); execl("segundo","segundo",0); if (write(2,&a,1) == -1) { /error/ exit(1); } }

Segundo

main() { char a;

if (write(1,&a,1) == -1) { /error/ write(2,"error",5); } if (write(2,&a,1) == -1) { /error/ exit(1); } a = 'B'; if (write(2,&a,1) == -1) { /error/ exit(1); } }

Página 48

Selección

  1. Cuando se lleva a cabo un cambio de contexto entre dos procesos, el sistema debe guardar los valores que configuran el estado del proceso que deja el procesador con el fin de poder reemprender su ejecución más adelante. Decid cuáles de los elementos siguientes que configuran un proceso deben ser guardados explícitamente en el momento del cambio:

a) El contador de programa.

b) Los segmentos de memoria.

c) Los dispositivos virtuales.

d) El identificador del proceso.

e) Los registros del procesador.

Justificad la respuesta.

  1. Cuál de los resultados siguientes creéis que producirá la ejecución del programa siguiente:

main() { int fd, pid; char buff[2];

fd = open("fichero",O_RDONLY); if (read(fd,buff,2) == -1){ /error/ exit(1); } write(1,buff,2); pid = fork(); switch(pid){ case 0: if (read(fd,buff, 1) == -1){ /error o fin de fichero/ exit(1); } write(1,buff,1); exit(0);

default: if (read(fd,buff,1) == -1){ /error o fin de fichero/ exit(1); } write(1,buff,1); exit(0); } }

Figura 17

a) ABCD.

b) AABBCCDD.

c) ABCCDD.

d) ABDC.

e) Las opciones a o d indistintamente.

Página 49

Justificad la respuesta.

  1. Decid cuál de los resultados siguientes creéis que producirá la ejecución del programa que presentamos a continuación:

main() { int num, pid;

num = 3; pid = fork(); switch(pid) { case 0: default: } }

a) "Hijo: num = 4", "padre: num = 6".

b) "Hijo: num = 4", "padre: num = 5".

c) "Hijo: num = 1", "padre: num = 2".

d) "Hijo: num = 4", "padre: num = 5".

e) El valor de num no está definido en el hijo y el padre efectúa la salida: "padre: num = 5".

Justificad la respuesta.

  1. ¿Cuál de los diagramas de tiempo es el que representa la ejecución del código siguiente?

Justificad la respuesta.

main() { int pid1, pid2, estado;

A pid1 = fork(); switch(pid1) { case 0: default: } }

a)

Notas y pies de figura de la fuente

num = num + 1; printf("hijo: num = %d\n",num); num = num + 2; printf("padre: num = %d\n",num); B pid2 = fork(); switch(pid2) { case 0: C default: while (pid1 != wait(&estado)); while (pid2 != wait(&estado)); D }

Página 50

b)

c)

d)

Ver fragmento extraído sin normalizar
Ejercicios de autoevaluación

1. Dentro del diagrama de estados de los procesos que se muestra en el subapartado de estados
de un proceso, ¿dónde colocaríais el estado zombie de UNIX? Justificad la respuesta.

2. ¿Cómo se podrían redireccionar las entradas/salidas de los procesos hijos en un sistema
en el que la llamada crear_proceso fuerza el cambio de imagen? Justificad la respuesta.

3. Después de ejecutar "primero", ¿qué salidas obtendremos y por qué canal saldrán? Justifi-
cad la respuesta.

Primero

    main() {
            char a;

            a = 'A';
            if (write(1,&a,1) == -1) {
                      /*error*/
                      write(2,"error",5);
            }
            close(1);
            execl("segundo","segundo",0);
            if (write(2,&a,1) == -1) {
                      /*error*/
                      exit(1);
            }
    }

Segundo

    main() {
            char a;

            if (write(1,&a,1) == -1) {
                      /*error*/
                      write(2,"error",5);
            }
            if (write(2,&a,1) == -1) {
                      /*error*/
                      exit(1);
            }
            a = 'B';
            if (write(2,&a,1) == -1) {
                      /*error*/
                      exit(1);
            }
    }

## Página 48

<!-- source-page: 48 -->

GNUFDL • PID_00214802                                                                                  48                                                                                                      La gestión de procesos

Selección

4. Cuando se lleva a cabo un cambio de contexto entre dos procesos, el sistema debe guardar
los valores que configuran el estado del proceso que deja el procesador con el fin de poder
reemprender su ejecución más adelante. Decid cuáles de los elementos siguientes que confi-
guran un proceso deben ser guardados explícitamente en el momento del cambio:

a) El contador de programa.

b) Los segmentos de memoria.

c) Los dispositivos virtuales.

d) El identificador del proceso.

e) Los registros del procesador.

Justificad la respuesta.

5. Cuál de los resultados siguientes creéis que producirá la ejecución del programa siguiente:

    main() {
       int fd, pid;
       char buff[2];

       fd = open("fichero",O_RDONLY);
       if (read(fd,buff,2) == -1){
          /*error*/
          exit(1);
       }
       write(1,buff,2);
       pid = fork();
       switch(pid){
          case 0: if (read(fd,buff, 1) == -1){
                   /*error o fin de fichero*/
                   exit(1);
                }
                write(1,buff,1);
                exit(0);

          default: if (read(fd,buff,1) == -1){
                   /*error o fin de fichero*/
                   exit(1);
                }
                write(1,buff,1);
                exit(0);
       }
    }



















Figura 17

a) ABCD.

b) AABBCCDD.

c) ABCCDD.

d) ABDC.

e) Las opciones a o d indistintamente.

## Página 49

<!-- source-page: 49 -->

GNUFDL • PID_00214802                                                                                  49                                                                                                      La gestión de procesos

Justificad la respuesta.

6. Decid cuál de los resultados siguientes creéis que producirá la ejecución del programa que
presentamos a continuación:

    main() {
              int num, pid;

              num = 3;
              pid = fork();
              switch(pid) {
                           case 0:
                                   num = num + 1;
                                   printf("hijo: num = %d\n",num);
                           default:
                                   num = num + 2;
                                   printf("padre: num = %d\n",num);
              }
    }

a) "Hijo: num = 4", "padre: num = 6".

b) "Hijo: num = 4", "padre: num = 5".

c) "Hijo: num = 1", "padre: num = 2".

d) "Hijo: num = 4", "padre: num = 5".

e) El valor de num no está definido en el hijo y el padre efectúa la salida: "padre: num = 5".

Justificad la respuesta.

7. ¿Cuál de los diagramas de tiempo es el que representa la ejecución del código siguiente?

Justificad la respuesta.

    main() {
             int pid1, pid2, estado;

             A
             pid1 = fork();
             switch(pid1) {
                           case 0:
                                   B
                           default:
                                   pid2 = fork();
                                   switch(pid2) {
                                                 case 0:
                                                         C
                                                 default:
                                                         while (pid1 != wait(&estado));
                                                         while (pid2 != wait(&estado));
                                                         D
                                   }
            }
    }








a)

## Página 50

<!-- source-page: 50 -->

GNUFDL • PID_00214802                                                                                  50                                                                                                      La gestión de procesos



b)














c)




















d)

Descargar Markdown originalEstudiar este apartado