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
-
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.
-
¿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.
-
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
- 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.
- 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.
- 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.
- ¿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)