Resueltos c1
Resueltos c1
Resueltos c1
Departamento de Computación
SISTEMAS OPERATIVOS
PROBLEMAS RESUELTOS
Pregunta Nº1
Un sistema computacional que incorpora DMA permite una realización eficiente de la
multiprogramación. Si un proceso en promedio usa sólo el 23% de su tiempo la CPU y el
resto está en entrada y salida (E/S) y suponiendo que toda operación de E/S se realiza por
DMA. ¿Estime qué utilización del procesador y del canal de DMA se logra, si se tiene un
grado de multiprogramación de 6 procesos?
Se tiene:
Ue/s(1) = 0,77
Se demuestra que:
Ucpu(n) = 1 – Ue/s(1)6
Luego:
Problema Nº2
Suponga que se tiene el siguiente conjunto de procesos:
1 0 3
2 1 5
3 3 2
4 9 5
5 12 5
Facultad de Ciencias
Departamento de Computación
Analice cuál es el tiempo de tránsito para cada proceso y calcule el tiempo de tránsito promedio para todos los
procesos en los siguientes casos:
a) FCFS (First Come First Serve)
b) Round-Robin con quantum de tiempo q = 1
c) SRTF (Shortest Remaining Time First), con expropiación
RESPUESTA:
El tiempo de tránsito en FCFS está dado por la duración del proceso y del momento en el que comienza a
ejecutarse, por lo cual se puede resumir los resultados de una ejecución FCFS para el presente caso en la
siguiente tabla:
En donde Llegada marca el tiempo de llegada del proceso a la cola, y Salida marca la última unidad de
tiempo en el cual el proceso hace abandono del planificador. El tiempo de Tránsito se obtiene por la
siguiente expresión:
T. Tránsito = (T. Salida - T. Llegada) + 1
Para el desarrollo de este problema se considera una mayor prioridad en el ingreso a la cola listo de los
procesos que vienen llegando, por sobre aquellos procesos que vienen terminando su cuanto de tiempo. A
continuación se presenta una tabla con el comportamiento de los procesos ante esta política de
ordenamiento:
Con los resultados de la tabla anterior se puede generar la siguiente tabla que contiene la
información solicitada:
En SRTF el proceso con un tiempo restante de duración inferior es el primero, para poder desarrollar este
esquema, se presenta la siguiente tabla que resume el comportamiento de estos procesos ante esta política:
De la tabla anterior ya se puede obtener la información necesaria para generar la siguiente tabla resumen con los
tiempos de tránsito para cada proceso así como el tiempo de tránsito promedio:
Pregunta N°3
Suponga que se tiene un monitor que permite sincronizar dos procesos de la siguiente manera.
• El primer proceso va incrementando periódicamente una variable protegida en una cierta cantidad
positiva constante igual a ∆t.
• El segundo proceso llama al monitor en algún instante con un parámetro T, instante en que se
iguala a 0 la variable protegida. Este proceso permanece bloqueado hasta que la variable supere el
valor de T, después de una o más llamadas del primer proceso.
// INTERFAZ
const int delta = ??; // definir valor entre llamados
monitor Timer {
int Time;
public:
void tic(); /* se llama cada vez que transcurre delta */
void sleep(int T); /* permite bloquearse por un tiempo T */
Timer(); /* el constructor */
}
// Implementando el monitor:
monitor Timer {
int Time;
condition sync;
int timeout;
boolean activo;
public:
void tic() {
if (activo) {
Time += delta;
if (time >= timeout) {
sync.signal;
activo = FALSE;
}
}
}
void sleep(int T) {
Time = 0;
Timeout = T;
activo = TRUE;
Sync.wait;
}
Timer() {
Time = 0;
Activo = FALSE;
}
}
Facultad de Ciencias
Departamento de Computación
Problema N°4
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.
/****************************************************
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
}
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;
}
}
Facultad de Ciencias
Departamento de Computación
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();
}
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
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;
}