Está en la página 1de 8

10 Pts

5pts

5pts
De estas 4 partes que componen un proceso en la memoria,
indicar cómo ellas corresponden al CÓDIGO de programa,
variables GLOBALES, variables LOCALES, y memoria
reservada dinámicamente.

1
20 Pts
Considere el siguiente código y responda:
(a) 5pts Incluido el proceso padre inicial, ¿cuantos procesos se crean en total en el
programa?
(b) 5 pts Dibuje un simple árbol jerárquico que refleje la creación de los procesos.
(c) 5pts ¿Qué se imprimirá por pantalla al ejecutar este programa? Justifique su respuesta.
(d) 5pts ¿Es posible aquí tener procesos zombies y/o huerfanos? Justifique su respuesta y
de ser necesario, agregue al código la(s) línea(s) que corresponde para evitar tal situación.

2
10 Pts
(a) Explique qué podría imprimir por pantalla el siguiente código.
(b) Modifique el código necesario para que el número impreso sea siempre 10.

#define NTHREADS 10
void *thread_function(void *);
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
int counter = 0;

void main()
{
pthread_t thread_id[NTHREADS];
int i, j;

for(i=0; i < NTHREADS; i++)


{
pthread_create( &thread_id[i], NULL, thread_function, NULL);
}

printf("Final counter value: %d\n", counter);


}

void *thread_function(void *dummyPtr)


{
pthread_mutex_lock( &mutex1 );
counter++;
pthread_mutex_unlock( &mutex1 );
} 3
10 Pts
int glob = 0;
Consideren este apartado de código donde 2
threads incrementan el valor de la variable glob.
void* threadFunc (void* arg){
int loc, j;
Compilamos el siguiente programa con valor
int loops = atoi (arg); loops = 2000 y el programa imprimió glob value
= 2000. Sin embargo, al probar con valor loops =
for(j=0 ; j < loops ; j++){ 1000000, cada vez que lo ejecutamos el
loc = glob;
loc++; programa imprime algo diferente, como por
glob = loc; ejemplo glob value = 1651765…
}
}
a) Explique en breve a qué se debe este
comportamiento.
int main (){ b) Indique cómo se debería modificar el código
para solucionar este problema.
pthread_t t1, t2;
int loops = __________ ;

pthread_créate(&t1, NULL, threadFunc, &loops);


pthread_créate(&t2, NULL, threadFunc, &loops);

pthread_join(t1, NULL);
pthread_join(t2, NULL);

printf(“glob value = %d\n”, glob);


return EXIT_SUCCESS;
} 4
16 Pts
Considere los siguientes 4 procesos con sus tiempos de llegada y CPU bursts
dados.
Proceso Momento de llegada Burst time
P1 0 10
P2 1 8
P3 2 6
P4 3 4

Asumiendo que la CPU estuvo sin usar (idle) durante las primeras 3 unidades de
tiempo, y con una política de planificación (scheduling) Round Robin - RR con
time quantum = 4:

a) Dibuje la carta Gantt correspondiente.


b) Calcule el average wait time.
c) Calcule el average turnaround time.
d) Calcule el throughput.

5
14 Pts

6
10 Pts

Considere la siguiente situación actual de un sistema.

Si llega una solicitud del proceso P1 para (A, B, C, D) = (0, 4, 2, 0) recursos,


evalúe si puede ser aceptada inmediatamente o no, utilizando el algoritmo
del banquero (Banker´s algorithm).

7
10 Pts

Justifique su respuesta.

También podría gustarte