Está en la página 1de 4

UNIVERSIDAD DEL VALLE

SISTEMAS Y TECNOLOGIA INFORMATICA


SISTEMAS OPERATIVOS – GUIA PRÁCTICA
CBBA – 23.MAYO – 2011

1.
Observa el siguiente fragmento de código donde los semáforos sem1 y sem2 están inicializados a cero,
un hilo ejecuta la función incrementa y otro la función decrementa. Describe los valores que, durante la
ejecución, puede adoptar la variable num así como las posibles situaciones de interbloqueo que
pudieran darse.

int num=10;
void ∗ incrementa(void ∗nada) { int i;
for (i=0;i<3;i++){ sem wait(&sem1);
num++;
printf("Inc. N´umero = %d\n",num);
sem post(&sem1);
}
sem post(&sem2);
sleep(random() %3);
sem wait(&sem2);
pthread exit(NULL);
}
void ∗ decrementa(void ∗nada){ int i;
for (i=0;i<3;i++){ sem post(&sem1);
sleep(random() %3);
sem wait(&sem2);
num--;
printf("Dec. N´umero = %d\n",num);
sem post(&sem2);
sem wait(&sem1);
}
sem wait(&sem1);
pthread exit(NULL);
}

2.
Disponemos de un disco duro de 20 GB de capacidad. Hay establecida sobre el una única partición que
contiene un sistema de ficheros del tipo FAT32 en el que cada agrupamiento (cluster) consta de 16
sectores de 512 bytes cada uno. ¿Cuántos sectores del disco se necesitaran para almacenar cada copia
de la FAT? Razona tu respuesta.
UNIVERSIDAD DEL VALLE
SISTEMAS Y TECNOLOGIA INFORMATICA
SISTEMAS OPERATIVOS – GUIA PRÁCTICA
CBBA – 23.MAYO – 2011

3.
La policía ha arrestado al sospechoso de un delito. Al analizar el contenido de su ordenador piensan que
pueden inculparle pues el contenido del mismo es el siguiente:

Como experto informático, pides consultar el contenido de la FAT, que es el siguiente:

¿Apoyarías la opinión de la policía? Razona tu respuesta.

4.
Lee las siguientes afirmaciones y razona si estás de acuerdo o no. Pon un ejemplo que apoye tu
respuesta.
i. En un sistema de paginación, utilizar una tabla de páginas de dos niveles suele producir un
ahorro en el consumo de memoria en comparación con el uso de una tabla de páginas de un
nivel.
ii. En un sistema de paginación, el número de páginas que como máximo se le puede asignar a un
proceso es mayor en el caso de utilizar una tabla de páginas de dos niveles que en el caso de
utilizar una única tabla de páginas
UNIVERSIDAD DEL VALLE
SISTEMAS Y TECNOLOGIA INFORMATICA
SISTEMAS OPERATIVOS – GUIA PRÁCTICA
CBBA – 23.MAYO – 2011

EJERCICIO RESUELTO PARA CONOCIMIENTO


Se tiene un grupo de procesos “trabajadores” capaces de procesar órdenes de trabajo provenientes de
diferentes clientes. En general, un trabajador trabaja en un ciclo de espera por una orden de trabajo
(ocioso), recibirla desde un cliente (sincronizarse) y procesarla (ocupado). Un cliente sólo debe esperar
en la entrega de una orden cuando no existen trabajadores ociosos. Un trabajador permanece ocioso si
no existen más órdenes que procesar.
Escriba en C (pseudo-código) un monitor capaz de coordinar la entrega de una orden de trabajo entre
un cliente y un trabajador, distribuyendo las órdenes en los trabajadores ociosos en orden FIFO.
a) Especifique la interfaz del monitor y en pseudo-código el comportamiento de un cliente y un
trabajador. Documente adecuadamente para entender su significado.
/****************************************************
La siguiente interfaz posee dos operaciones
1) procesarOrden: utilizada por clientes para enviar una orden de trabajo
2) solicitarOrden: utilizada por trabajadores para esperar la asignación de una nueva orden de
trabajo (modo ocioso)
**************************************************/
monitor CoordinadorTareas
{
void procesarOrden (Trabajo t); // clientes
Trabajo solicitarOrden (); // trabajadores
}
/* coordinador: Instancia compartida del monitor */
shared CoordinadorTareas coordinador;
void Cliente
{
Trabajo t;
while (1)
{
producir una orden de trabajo t;
coordinador.procesar(t);
}
}
void Trabajador
{
Trabajo t;
while (1)
{
t = Coordinador.solicitarOrden();
procesar t;
}
}
b) Especifique un programa principal que permita hacer partir “m” trabajadores y “n” clientes.
main ()
{
for (int i=0; i<m; i++)
fork Trabajador();
for (int i=0; i<n; i++)
fork Cliente();
}
UNIVERSIDAD DEL VALLE
SISTEMAS Y TECNOLOGIA INFORMATICA
SISTEMAS OPERATIVOS – GUIA PRÁCTICA
CBBA – 23.MAYO – 2011

c) Especifique el monitor, explicando cuáles variables de condición usará para sincronizar


procesos y escribiendo el código de cada procedimiento utilizado.
monitor CoordinadorTareas
{
condition nuevoTrabajo; // para que un trabajador se sincronice
condition trabajadorOcioso; // para sincronizar a los clientes
Trabajo trabajos[m]; // para entregar un trabajo a un trabajador
int ocupados; // número de trabajos en espera
int lleno; // próximo trabajo a consumir
int vacio; // próximo espacio libre
void procesarOrden (Trabajo t)
{
if (ocupados ==m)
trabajadorOcioso.wait();
trabajos[vacio] = t;
vacio = (vacio++)%m;
ocupados++;
nuevoTrabajo.signal(); // despierta a un posible trabajador
}
Trabajo solicitarOrden ()
{
Trabajo t;
if (ocupados==0)
nuevoTrabajo.wait();
t = trabajos[lleno];
lleno = (lleno++)%m
ocupados--;
trabajadorOcioso.signal(); // despierta a un cliente si lo hubiera
return t;
}
}
CoordinadorTareas ()
{ // inicialización
ocupados = lleno = vacio = 0;
}