Sistemas Operativos
Sistemas Operativos
Sistemas Operativos
b).- Automtica y explcita buffering - buffering automtico proporciona una cola de longitud indefinida;
asegurando as el remitente nunca tendr que bloquear la espera para copiar un mensaje. No hay
especificaciones cmo automtico buffering ser proporcionado; un rgimen pueden reservar suficientemente
grande de memoria donde gran parte de la memoria se pierde. Buffering explcita especifica qu tan grande es
el buffer. En esta situacin, el remitente puede ser bloqueado a la espera de espacio disponible en la cola. Sin
embargo, es menos probable memoria se desperdicia con buffering explcito.
c).- Enviar por copiar y enviar por referencia- Enviar por copia no permite que el receptor para alterar el estado
del parmetro; enviar por referencia no permitirlo. Un beneficio de envo por referencia es que permite que el
programador escriba una versin distribuida de una aplicacin centralizada. Java RMI proporciona tanto, sin
embargo pasar un parmetro por referencia requiere declarar el parmetro como un objeto remoto tambin.
d).- De tamao fijo y mensajes de tamao variable - Las implicaciones de esto son en su mayora relacionados
con amortiguacin cuestiones; con mensajes de tamao fijo, un tampn con un tamao especfico puede
contener un nmero conocido de mensajes. El nmero de mensajes de tamao variable que se puede mantener
por un tampn tal es desconocido. Considere cmo Windows 2000 controla esta situacin: con mensajes fijos
de tamao (algo <256 bytes), los mensajes se copian desde el espacio de direcciones del remitente en el
espacio de direcciones del proceso de recepcin. Mensajes ms grandes (es decir, mensajes de tamao
variable) utilizan memoria compartida para pasar el mensaje.
4.1.- PROPORCIONE DOS EJEMPLOS DE PROGRAMACIN EN LOS QUE LOS MECANISMOS
MULTIHILOS NO PROPORCIONEN UN MEJOR RENDIMIENTO QUE UNA SOLUCIN MONOHILO.
Cualquier tipo de programa secuencial no es un buen candidato para ser roscado. Un ejemplo de esto es un
programa que calcula una declaracin de impuestos individual.
Otro ejemplo es un programa de "shell", como el C-shell o shell Korn. Tal programa debe monitorear de cerca
su propio espacio de trabajo, tales como los archivos abiertos, variables de entorno, y el directorio de trabajo
actual.
4.2.- DESCRIBA LAS ACCIONES QUE TOMA UNA BIBLIOTECA DE HILOS PARA CAMBIAR EL
CONTEXTO ENTRE HILOS DE NIVEL DE USUARIO.
El cambio de contexto entre hebras de usuario es muy similar a la conmutacin entre los hilos del kernel, aunque
depende de la biblioteca de hilos y cmo los mapas de las discusiones de usuario al kernel hilos. En general, el
cambio de contexto entre subprocesos de usuario consiste en tomar un hilo de usuario de su LWP y
reemplazndolo con otro hilo. Este acto tpicamente implica guardar y restaurar el estado de los registros.
4.3.- BAJO QUE CIRCUNSTANCIAS UNA SOLUCION MULTIHILOS QUE USA MULTIPLES HILOS DEL
KERNEL PROPORCIONA UN MEJOR RENDIMIENTO QUE UNA SOLUCION DE UN SOLO HILO SOBRE
UN SISTEMA MONO-PROCESADOR?
Cuando un hilo del ncleo sufre un fallo de pgina, otro hilo del ncleo se puede cambiar en el momento de
utilizar el intercalado de manera til. Un proceso de un solo subproceso, por otro lado, no ser capaz de realizar
trabajo til cuando un error de pgina tiene lugar. Por lo tanto, en escenarios en los que un programa podra
sufrir fallos de pgina frecuentes o tiene que esperar a que otros eventos del sistema, una solucin multi-hilo
tendra un mejor desempeo, incluso en un sistema de un solo procesador.
4.4.- CUALES DE LOS SIGUIENTES COMPONENTES DEL ESTADO DE UN PROGRAMA SE COMPARTEN
ENTRE LOS HILOS DE UN PROCESO MULTIHILOS?
A).- VALORES DE LOS REGISTROS
B).- CUMULO DE MEMORIA
C).- VARIABLES GLOBALES
D).- MEMORIA DE PILA
Los hilos de una memoria compartida montn de proceso multiproceso y variables globales. Cada hilo tiene su
conjunto de valores de registro y una pila separada.
4.5.- PUEDE UNA SOLUCION MULTIHILO QUE UTILIZE MULTIPLES HILOS DE USUARIO CONSEGUIR
UN MEJOR RENDIMIENTO EN UN SISTEMA MULTIPROCESADOR QUE EN UN SISTEMA DE UN SOLO
PROCESADOR?
Un sistema multiproceso que consta de mltiples hilos a nivel de usuario no puede hacer uso de los diferentes
procesadores en un sistema multiprocesador simultneamente. El sistema operativo slo ve un nico proceso
y no programar los diferentes hilos de proceso en procesadores separados. En consecuencia, no hay ninguna
ventaja de rendimiento asociados con la ejecucin de mltiples hilos a nivel de usuario en un sistema
multiprocesador.
4.6.- COMO SE HA DESCRITO EN LA SECCION 4.5.2, LINUX NO DIFERENCIA ENTRE PROCESOS E
HILOS. EN SU LUGAR, LINUX TRATA DEL MISMO MODO A AMBOS, PERMITIENDO QUE UNA TAREA
SE ASEMEJE MAS A UN PROCESO O A UN HILO, EN FUNCION DEL CONJUNTO DE INDICADORES QUE
SE PASEN A LA LLAMADA DEL SISTEMA CLONE(). SIN EMBARGO, MUCHOS SISTEMAS OPERATIVOS,
COMO WINDOWS XP Y SOLARIS, TRATAN LAS HEBRAS Y LOS PROCESOS DE FORMA DEFERENTE.
NORMALMENTE, DICHOS SITEMASUSAN UNA NOTACION EN LA QUE LA ESTRUCTURA DE DATOS
PARA UN PROCESO CONTIENE PUNTEROS A LAS DISTINTAS HEBRAS PERTENECIENTES AL
PROCESO. COMPARE ESTOS DOS METODOS PARA EL MODELADO DE PROCESOS Y HEBRAS
DENTRO DEL KERNEL.
Por un lado, en los sistemas en los procesos y subprocesos son considerados como entidades similares, una
parte del cdigo del sistema operativo podra simplificarse. Un programador, por ejemplo, puede tener en cuenta
los diferentes procesos y subprocesos en igualdad de condiciones, sin necesidad de cdigo especial para
examinar los hilos asociados a un proceso durante cada paso de programacin. Por otro lado, esta uniformidad
podra hacer ms difcil para imponer limitaciones de recursos en todo el proceso de una manera directa. En
lugar de ello, se requiere cierta complejidad adicional para identificar qu hilos corresponden a qu proceso y
realizar las tareas de contabilidad pertinentes.
Windows XP y Solaris usa procesos e hilos para su cdigo ejecutable. Los procesos tienen un espacio de
direccin de memoria virtual e informacin usada para inicializar cada hilo, por ejemplo, una prioridad base y
una afinidad con uno o ms procesadores. Cada proceso tiene uno a ms hilos, cada uno de los cuales es una
unidad ejecutable despachada por el kernel. Linux tiene dos algoritmos de planificacin de proceso separados.
Uno es el algoritmo de la porcin de tiempo justa, planificacin expropiativa entre mltiples procesos; el otro es
designado para tareas de tiempo real, donde las prioridades absolutas son ms importantes que la
imparcialidad.
4.8.- CONSIDERE UN SISTEMA MULTIPROCESADOR Y UN PROGRAMA MULTIHILO ESCRITO USANDO
EL MODELO MUCHOS-A-MUCHOS. SUPONGA QUE EL NUMERO DE HILOS DE USUARIO EN EL
PROGRAMA ES MAYOR QUE EL NUMERO DE PROCESADORES DEL SISTEMA. EXPLIQUE EL IMPACTO
SOBRE EL RENDIMIENTO DE LOS SIGUIENTES ESCENARIOS:
A) EL NUMERO DE HEBRAS DEL KERNEL ASIGNADAS AL PROGRAMA ES MENOR QUE EL NUMERO
DE PROCESADORES
En este caso se estara desperdiciando los procesadores que no tengan asignada ninguna hebra ya que no
estara multiplexado ninguna hebra a ese procesador, pero en si el programa terminara su ejecucin en su
tiempo ptimo.
B) EL NUMERO DE HEBRAS DEL KERNEL ASIGNADAS AL PROGRAMA ES IGUAL QUE EL NUMERO DE
PROCESADORES
En este caso se estara utilizando los recursos del sistema al mximo y no habra desperdicio al estar
multiplexado por que todos los hilos kernel estaran trabando.
C) EL NUMERO DE HEBRAS DEL KERNEL ASIGNADAS AL PROGRAMA ES MAYOR QUE EL NUMERO
DE PROCESADORES, PERO MENOR QUE EL NUMERO DE HEBRAS DE USUARIO.
En este caso no sera posible ya que el nmero de hebras de kernell debe ser menor o igual alas del usuario.
4.7.- EL PROGRAMA MOSTRADO USA LA API DE PTHREADS. CUAL SERIA LA SALIDA DEL PROGRAMA
EN LA LINEA C Y EN LA LINEA P?
#include <pthread.h>
#include <stdio.h>
int value = 0;
void *runner(void *param); /*por el hilo*/
Int main(){
int pid;
pthread_t tid;
ptread_attr_t attr;
pid = fork();
if (pid == 0){ /*proceso hijo*/
pthread_attr_init(&attr);
pthread_create(&tid, &attr, runner, NULL);
pthread_join(tin, NULL);
printf(HIJO: valor = %d, value);
/*linea C*/
return -1;
{
else if (pid>0){ /*proceso padre*/
wait (NULL);
printf(PADRE: valor = %d, value);/*linea P*/
}
}
void *runner(void *param){
value = 5;
pthread_exit(0);
}
//Salida en la lnea C es 5. Salida en la lnea P es 0.