Está en la página 1de 2

Sistemas Operativos - Recuperatorio del Primer Parcial

21/06 - Primer Cuatrimestre de 2016


Aclaraciones 1) Numere las hojas entregadas. Esta hoja se entrega y es la hoja cero. Complete en la primera hoja
la cantidad total de hojas entregadas (sin contar el enunciado). 2) Realice cada ejercicio en hojas separadas y escriba
apellido, nombre y l.u. en cada una. 3) Cada ejercicio se califica con Bien, Regular o Mal. La división de los ejercicios
en incisos es meramente orientativa. Los ejercicios se califican globalmente. El parcial se aprueba con 2 ejercicios bien y a
lo sumo 1 mal/incompleto. 4) El parcial NO es a libro abierto.

Justifique adecuadamente cada una de sus respuestas.

Ejercicio 1) Se tiene un programa que cada vez que se lo ejecuta (sin parámetros) produce la siguiente
salida:
Próximo !! Soy 0 y Tengo el token
Soy 2 y Tengo el token Próximo !!
Próximo !! Iupiii terminamos !. Salgo: 1
Soy 1 y Tengo el token Iupiii terminamos !. Salgo: 2
Próximo !! Iupiii terminamos !. Salgo: 0

y al correrlo con strace se obtiene la siguiente salida (se omiten las partes irrelevantes):
e x e c v e ( ” . / e s t r e l l a ” , [ ” . / e s t r e l l a ” ] , [ / ∗ 75 v a r s ∗ / ] ) = 0 27717 w r i t e ( 1 , ”Soy 1 y Tengo e l t o k e n \n ” , 2 4 ) = 24
c l o n e ( P r o c e s s 27716 a t t a c h e d , . . . , 27717 k i l l ( 2 7 7 1 5 , SIGINT ) = 0
SIGCHLD , c h i l d t i d p t r =0x a 5 e b 5 0 ) = 27716 27717 r t s i g r e t u r n () = 0
27716 g e t p p i d ( ) = 27715 27715 −−− SIGINT { s i s i g n o =SIGINT , s i c o d e=SI USER ,
27716 r t s i g a c t i o n ( SIGINT , {0 x40105e , [ INT ] , s i p i d =27717 , s i u i d =1000} −−−
0 x 4 0 6 c 6 0 } , { SIG DFL , [ ] , 0 } , 8 ) = 0 27718 r t s i g r e t u r n ( < u n f i n i s h e d . . . >
27716 r t s i g a c t i o n ( SIGHUP , {0 x 4 0 1 1 4 f , [ HUP ] , . . . , 27715 w r i t e ( 1 , ”Pr \303\263 ximo ! ! \n ” , 1 3 ) = 13
0 x 4 0 6 c 6 0 } , { SIG DFL , [ ] , 0 } , 8 ) = 0 27715 k i l l ( 2 7 7 1 6 , SIGINT < u n f i n i s h e d . . . >
27715 c l o n e ( . . . ) = 27717 27716 −−− SIGINT { s i s i g n o =SIGINT , s i c o d e=SI USER ,
27715 c l o n e ( . . . ) = 27718 s i p i d =27715 , s i u i d =1000} −−−
27715 r t s i g a c t i o n ( SIGINT , {0 x4010a2 , [ INT ] , . . . , 27715 < . . . k i l l resumed> ) = 0
0 x 4 0 6 c 6 0 } , { SIG DFL , [ ] , 0 } , 8 ) = 0 27715 r t s i g r e t u r n ( ) = 0
27715 r t s i g p r o c m a s k ( SIG BLOCK , [ CHLD ] , [ ] , 8 ) = 0 27716 f s t a t ( 1 , { s t m o d e=S IFCHR | 0 6 2 0 , . . . } ) = 0
27715 r t s i g a c t i o n ( SIGCHLD , NULL , { SIG DFL , [ ] , 0 } , 8 ) = 0 27716 mmap(NULL , 4 0 9 6 , . . . , −1, 0 ) = 0 x 7 f 2 3 4 1 8 b 2 0 0 0
27715 r t s i g p r o c m a s k ( SIG SETMASK , [ ] , NULL , 8 ) = 0 27716 w r i t e ( 1 , ”Soy 0 y Tengo e l t o k e n \n ” , 2 4 ) = 24
27715 n a n o s l e e p ( { 5 , 0 } , P r o c e s s 27718 a t t a c h e d 27716 k i l l ( 2 7 7 1 5 , SIGINT ) = 0
P r o c e s s 27717 a t t a c h e d 27716 r t s i g r e t u r n ( ) = 0
<u n f i n i s h e d ... > 27718 < . . . r t s i g r e t u r n resumed> ) = 0
27717 g e t p p i d ( ) = 27715 27715 −−− SIGINT { s i s i g n o =SIGINT , s i c o d e=SI USER ,
27717 r t s i g a c t i o n ( SIGINT , {0 x40105e , [ INT ] , s i p i d =27716 , s i u i d =1000} −−−
. . . , 0 x 4 0 6 c 6 0 } , { SIG DFL , [ ] , 0 } , 8 ) = 0 27715 w r i t e ( 1 , ”Pr \303\263 ximo ! ! \n ” , 1 3 ) = 13
27717 r t s i g a c t i o n ( SIGHUP , {0 x 4 0 1 1 4 f , [ HUP ] , 27715 k i l l ( 2 7 7 1 6 , SIGHUP ) = 0
. . . , 0 x 4 0 6 c 6 0 } , { SIG DFL , [ ] , 0 } , 8 ) = 0 27715 k i l l ( 2 7 7 1 7 , SIGHUP ) = 0
27718 g e t p p i d ( ) = 27715 27715 k i l l ( 2 7 7 1 8 , SIGHUP ) = 0
27718 r t s i g a c t i o n ( SIGINT , {0 x40105e , [ INT ] , 27718 −−− SIGHUP { s i s i g n o =SIGHUP , s i c o d e=SI USER ,
. . . , 0 x 4 0 6 c 6 0 } , { SIG DFL , [ ] , 0 } , 8 ) = 0 s i p i d =27715 , s i u i d =1000} −−−
27718 r t s i g a c t i o n ( SIGHUP , {0 x 4 0 1 1 4 f , [ HUP ] , 27717 −−− SIGHUP { s i s i g n o =SIGHUP , s i c o d e=SI USER ,
. . . , 0 x 4 0 6 c 6 0 } , { SIG DFL , [ ] , 0 } , 8 ) = 0 s i p i d =27715 , s i u i d =1000} −−−
27715 < . . . n a n o s l e e p resumed> 0 x 7 f f e 5 5 d 3 3 4 7 0 ) = 0 27715 r t s i g p r o c m a s k ( SIG BLOCK , [ CHLD ] , [ INT ] , 8 ) = 0
27715 f s t a t ( 1 , { s t m o d e=S IFCHR | 0 6 2 0 , . . . } ) = 0 27715 r t s i g a c t i o n ( SIGCHLD , NULL , { SIG DFL , [ ] , 0 } , 8 ) = 0
27715 mmap(NULL , 4 0 9 6 , PROT READ | PROT WRITE , 27715 r t s i g p r o c m a s k ( SIG SETMASK , [ INT ] , NULL , 8 ) = 0
MAP PRIVATE |MAP ANONYMOUS, −1, 0 ) = 0 x 7 f 2 3 4 1 8 b 2 0 0 0 27715 n a n o s l e e p ( { 2 , 0 } , < u n f i n i s h e d . . . >
27715 w r i t e ( 1 , ”Pr \303\263 ximo ! ! \n ” , 1 3 ) = 13 27717 w r i t e ( 1 , ” I u p i i i t e r m i n a m o s ! . S a l g o : 1\ n ” , 3 0 ) = 30
27715 k i l l ( 2 7 7 1 8 , SIGINT ) = 0 27717 e x i t g r o u p ( 0 ) = ?
27718 −−− SIGINT { s i s i g n o =SIGINT , s i c o d e=SI USER , 27716 −−− SIGHUP { s i s i g n o =SIGHUP , s i c o d e=SI USER ,
s i p i d =27715 , s i u i d =1000} −−− s i p i d =27715 , s i u i d =1000} −−−
27718 f s t a t ( 1 , { s t m o d e=S IFCHR | 0 6 2 0 , . . . } ) = 0 27718 w r i t e ( 1 , ” I u p i i i t e r m i n a m o s ! . S a l g o : 2\ n ” , 30 < u n f i n i s h e d . . . >
27718 mmap(NULL , 4 0 9 6 , . . . , −1, 0 ) = 0 x 7 f 2 3 4 1 8 b 2 0 0 0 27716 w r i t e ( 1 , ” I u p i i i t e r m i n a m o s ! . S a l g o : 0\ n ” , 3 0 ) = 30
27718 w r i t e ( 1 , ”Soy 2 y Tengo e l t o k e n \n ” , 2 4 ) = 24 27716 e x i t g r o u p ( 0 ) = ?
27718 k i l l ( 2 7 7 1 5 , SIGINT ) = 0 27715 < . . . n a n o s l e e p resumed> { 1 , 9 9 7 5 8 4 4 2 4 } ) = ?
27715 −−− SIGINT { s i s i g n o =SIGINT , s i c o d e=SI USER , 27718 e x i t g r o u p ( 0 ) = ?
s i p i d =27718 , s i u i d =1000} −−− 27715 −−− SIGCHLD { s i s i g n o =SIGCHLD , s i c o d e=CLD EXITED ,
27715 w r i t e ( 1 , ”Pr \303\263 ximo ! ! \n ” , 1 3 ) = 13 s i p i d =27717 , s i s t a t u s =0 , s i u t i m e =335 , s i s t i m e =0} −−−
27715 k i l l ( 2 7 7 1 7 , SIGINT ) = 0 27715 r e s t a r t s y s c a l l ( < . . . r e s u m i n g i n t e r r u p t e d c a l l . . . > < u n f i n i s h e d . . . >
27717 −−− SIGINT { s i s i g n o =SIGINT , s i c o d e=SI USER , < . . . r e s t a r t s y s c a l l resumed> ) = ?
s i p i d =27715 , s i u i d =1000} −−− −−− SIGCHLD { s i s i g n o =SIGCHLD , s i c o d e=CLD EXITED , s i p i d =27718 ,
27715 r t s i g r e t u r n ( ) = 0 s i s t a t u s =0 , s i u t i m e =287 , s i s t i m e =0} −−−
27717 f s t a t ( 1 , { s t m o d e=S IFCHR | 0 6 2 0 , ...}) = 0 r e s t a r t s y s c a l l ( <... resuming i n t e r r u p t e d c a l l ... >) = 0
27717 mmap(NULL , 4 0 9 6 , . . . , −1, 0 ) = 0 x 7 f 2 3 4 1 8 b 2 0 0 0 exit group (0) = ?

Se pide escribir un programa que posea un comportamiento similar al observado. Es decir que, al
ejecutarlo, produzca la misma salida y que la secuencia de syscalls observadas al correrlo con strace sea
la misma que se muestra aquı́. No es necesario que el código escrito compile.

1/2
Sistemas Operativos - DC - UBA 1er cuatrimestre de 2016
Ejercicio 2) Se tienen las siguientes tareas

TaskCPU 16
TaskAlterno 2 5 6
@7
TaskCPU 3

Y un scheduler que genera la siguiente salida

1. Calcular el waiting time y el turnaround promedios. Escriba el razonamiento de resolución para


que pueda ser seguido.
2. Indique con cuántos procesadores se cuenta y cómo llega a esa conclusión
3. Indique qué tipo de scheduler y sus caracterı́sticas. Indique claramente porqué llega a esa conclu-
sión.

Ejercicio 3) Desarrollar en C un programa que dados N parámetros, con N > 1, los interprete como
comandos de shell a ejecutar. Luego los ejecute en procesos paralelos. El primero de ellos tomará la
entrada estándar. El resto tomarán la salida del primero. Al terminar, se mostrará en la salida estándar
la salida de los N − 1 (el primero entregaba sus datos al resto) ordenadas según el óden en la lı́nea
de comandos de los programas anteriores. Por simplicidad asuma que la suma de todas las salidas no
superarán los 100 bytes.
HINT: Utilizar PIPES. También puede utilizar la función int dup2(int oldfd, int newfd) que hace que el file descriptor newfd sea la
copia de oldfd, cerrando primero newfd si es necesario. Recordar que 0 es el file descriptor de la entrada estándar y 1 de la salida estándar.

Ejercicio 4)
AlmuerSo es un nuevo sistema de simulación para feedlots. Un feedlot es un lugar de alimentación
intensivo de animales. El sistema estará compuesto por los procesos Vaca() (que hay múltiples), un
proceso Feedlot(int capacidad ) y un proceso Reloj() que maneja tiempos de alimentación.
Las vacas van llegando al feedlot y esperan a que se abra la puerta, ejecutando el feedlot la función
abretePorfa(). Al abrirse, y luego de ejecutar la operación tragarSaliva(), irán ingresando de a una y
en órden de llegada. Tener en cuenta no pasar de la capacidad del feedlot. Las vacas que quedan afuera,
quedarán en el limbo del las vacas salvajes. Luego las vacas ejecutan la operación int greenMile()
que les devuelve (automágicamente) un número de 0 a N − 1, que indica a qué lugar del comedero les
corresponde ir.
Una vez que todas las vacas lleguen a su puesto correspondiente (cada una puede tardar un tiempo
arbitrario), el reloj ejecutrá la función aComerrr(), luego de la cual el feedlot comenzará a alimentar las
vacas.
En una ronda de alimentación, el feedlot le irá dando a cada vaca comida, según el número 0 a N − 1
asignado. Cada una luego comerá mediante la función bloqueante engorde(). Al terminar de comer, el
feedlot le pasará la comida a la vaca siguiente.
El reloj llamará a una función soyDios() que si devuelve false, le indicará que debe generar una nueva
ronda de alimentación (ejecutará nuevamente aComerrr()), pero si devuelve true, liberará la famosa agua
fatal mediante la función tomateEsta().
Las vacas beberán dicha agua (mediante la función beber()) en cualquier orden, incluso hacerlo todas
al mismo tiempo. Cuando terminan de beber quedarán listas para el asado.
Al quedar todas listas, el feedlot llamará al equipo de limpieza mediante la función limpieza() y en
unos meses las tendremos en nuestro asado.

2/2