Está en la página 1de 2

Certamen 1 ELO-321 Parte 1

Profesor: Mauricio Araya


13 de octubre del 2022

Tiempo del certámen (parte 1): 50 minutos


Responder en una hoja separada cada pregunta.

1. El principal objetivo de un sistema operativo es ejecutar programas, pero


no es el único. Indique dos objetivos adicionales y explique brevemente
en qué entorno computacional cada objetivo serı́a particularmente rele-
vante (10p).
2. “Una API es una biblioteca especı́fica de un sistema operativo en particular
para hacer llamadas a sistema”. Comente brevemente sobre la veracidad
de dicha aseveración (10p).
3. Indique cuantas veces se imprime "Hola" por salida estándar dado el sigu-
iente código. Justifique con un diagrama tipo árbol de procesos (10p).

#include <stdio.h>
#include <unistd.h>
void main(){
int i;
for (i=0; i<3; i++)
fork();
print("Hola\n");
wait(NULL);
}

4. Una lı́nea férrea une dos ciudades A y B, donde existe una sección del
tramo que tiene una única vı́a, tal como se indica en la figura:

1
Existen trenes que viajan de A a B y de B a A. En la sección del tramo de
vı́a única se deben coordinar los trenes de manera que en un determinado
instante en la sección sólo existan trenes viajando en un solo sentido.
Elabore una estrategia de semáforos para simular y solucionar este prob-
lema, indicando los procesos existentes en su solución y cómo se coordinan.
Puede usar prosa, pseudo-código o código para explicar mejor su solución
si ası́ lo estima conveniente (10p).
N
X (−1)k
5. El siguiente código aproxima el valor de pi utilizando la serie, π ≈ 4 .
2k + 1
k=0
Cada elemento de la serie es tratada por una hebra.
#i n c l u d e <s t d i o . h>
#i n c l u d e <p t h r e a d . h>
#d e f i n e N 100
double p i ;
v o i d ∗ r u n n e r ( v o i d ∗ param ){
i n t ∗ v=( i n t ∗ ) param ;
i n t k=∗v ;
f l o a t v a l = 1 . 0 / ( 2 . 0 ∗ k +1);
i f ( k%2==1)
v a l=−v a l ;
p i+=v a l ;
}
i n t main ( ) {
p t h r e a d t workers [N ] ;
pthread attr t attr ;
p t h r e a d a t t r i n i t (& a t t r ) ;
p i =0;
f o r ( i n t i =0; i <N ; i ++){
p t h r e a d c r e a t e (& w o r k e r s [ i ] , & a t t r , r u n n e r ,& i ) ;
p t h r e a d j o i n ( w o r k e r s [ i ] , NULL ) ;
}
p r i n t f ( ”% l f \n” , 4 ∗ p i ) ;
}

Considere que al compilar el código, el contenido de runner se convierte en


40 instrucciones de máquina. Además, se sabe que el main se compila en
109 instrucciones de máquina, divididos en 40 instrucciones antes del for,
9 instrucciones en el for (inclusive) y 60 instrucciones después del for
(printf). Suponga que cada instrucción de máquina toma exactamente
el mismo tiempo. ¿Cuál es el speedup máximo que se podrı́a alcanzar
en un computador con 4 unidades de procesamiento (cores)? (considere
N = 100 como se indica en el código) (10p).

También podría gustarte