Subido por Pedro Omar Perez Urena

254057283-Sistemas-Operativos

Anuncio
3.1.- DESCRIBA LAS DIFERENCIAS ENTRE LA PLANIFICACION A CORTO PLAZO, LA PLANIFICACION
A MEDIO PLAZO, Y LA PLANIFICACION A LARGO PLAZO.
CORTO PLAZO: o planificador de trabajo, selecciona procesos de la cola y los carga en memoria para
ejecución, Selecciona de puestos de trabajo en la memoria aquellos trabajos que están listos para ejecutar y
asigna la CPU a ellos
MEDIO PLAZO: utilizado sobre todo en sistemas de tiempo compartido como un nivel intermedio de
programación. Un esquema de intercambio se lleva a cabo para eliminar los programas dirigidos parcialmente
de la memoria y restablecer más tarde para continuar donde lo dejaron.
LARGO PLAZO: determina que se ponen en la memoria para el procesamiento de trabajos.
3.2.- DESCRIBA LAS ACCIONES TOMADAS POR UN KERNEL PARA EL CAMBIO DE CONTEXTO ENTRE
PROCESOS.
El kernell (sistema operativo) guarda el estado del proceso en ejecución y restaurar el estado del proceso
programado para ser ejecutado el próximo. Guardar el estado de un proceso incluye típicamente los valores de
todos los registros de la CPU, además de la asignación de memoria. Los cambios de contexto también deben
realizar muchas operaciones específicas de la arquitectura, incluyendo datos para inodoros y cachés de
instrucciones.
3.3.- CONSIDERE EL MECANISMO DE LAS LLAMADAS RPC. DESCRIBA LAS CONSECUENCIAS NO
DESEABLES QUE SE PRODUCIRIAN SI NO SE FORZARA LA SEMANTICA “COMO MAXIMO UNA VEZ”
O EXACTAMENTE UNA VEZ. DESCRIBA LOS POSIBLES USOS DE UN MECANISMO QUE NO PRESENTE
NINGUNA DE ESTAS GARANTIAS
Si un mecanismo RPC no podía apoyar el «como máximo una vez" o "al menos una vez" la semántica, el
servidor RPC no puede garantizar que no se invocará a un procedimiento remoto múltiples ocurrencias.
Considere si un procedimiento remoto se retira dinero de una cuenta bancaria en un sistema que no apoyó esta
semántica. Es posible que una única invocación del procedimiento remoto podría dar lugar a múltiples retiradas
en el servidor.
Para un sistema de apoyo a cualquiera de esta semántica generalmente requiere que el servidor mantener
alguna forma de estado de cliente tales como la marca de tiempo se describe en el texto.
Si un sistema no pudieron apoyar cualquiera de estos semántica, a continuación, un sistema de este tipo sólo
podía proporcionar seguridad procedimientos remotos que no alteren los datos o proporcionan resultados
sensibles al tiempo. El uso de su cuenta bancaria como un ejemplo, sin duda obligados "a lo sumo una vez" o
"al menos una vez" semántica para realizar una retirada (o depósito!) Sin embargo, una investigación sobre un
saldo de cuenta u otra información de la cuenta, tales como nombre, dirección, etc no requiere esta semántica.
3.4.- USANDO EL PROGRAMA MOSTRADO EN LA FIGURA 3.24 EXPLICA CUAL SERA LA SALIDA DE
LA LINEA A?
La salida de la “linea A” seria 5 ¿porque? En el printf te dice “PARENT” y para que sea “padre” pid >0 ya que
el pid =fork(), y el fork() lo que hace es que el proceso hijo herede el espacio de dirección al padre, por lo tanto
el fork() le asigna un valor mayor que cero al pid y entra en la condición de pid>0. Por lo tanto el valor esperado
en la “Linea A” es 5
3.5.- CUALES SON LAS VENTAJAS E INCONVENIENTES EN CADA UNO DE LOS CASOS SIGUIENTES?
CONSIDERE TANTO EL PUNTO DE VISTA DEL SISTEMA COMO EL DEL PROGRAMADOR.
A).- COMUNICACIÓN SINCRONA Y ASINCRONA
B).- ALMACENAMIENTO DE BUFER AUTOMATICO Y EXPLICITO
C).- ENVIO POR COPIA Y ENVIO POR REFERENCIA
D).- MENSAJES DE TAMAÑO FIJO Y DE TAMAÑO VARIABLE
a).- Simétricos y asimétricos comunicación- Un beneficio de la comunicación simétrica es que permite un
encuentro entre el emisor y el receptor. Una desventaja de un envío de bloqueo es que una cita puede no ser
necesaria y el mensaje podría ser entregado de forma asíncrona; recibida en un punto de interés para el
remitente. Como resultado, los sistemas de paso de mensajes a menudo proporcionan ambas formas de
sincronización.
b).- Automática y explícita buffering - buffering automático proporciona una cola de longitud indefinida;
asegurando así el remitente nunca tendrá que bloquear la espera para copiar un mensaje. No hay
especificaciones cómo automático buffering será proporcionado; un régimen pueden reservar suficientemente
grande de memoria donde gran parte de la memoria se pierde. Buffering explícita especifica qué tan grande es
el buffer. En esta situación, el remitente puede ser bloqueado a la espera de espacio disponible en la cola. Sin
embargo, es menos probable memoria se desperdicia con buffering explícito.
c).- Enviar por copiar y enviar por referencia- Enviar por copia no permite que el receptor para alterar el estado
del parámetro; enviar por referencia no permitirlo. Un beneficio de envío por referencia es que permite que el
programador escriba una versión distribuida de una aplicación centralizada. Java RMI proporciona tanto, sin
embargo pasar un parámetro por referencia requiere declarar el parámetro como un objeto remoto también.
d).- De tamaño fijo y mensajes de tamaño variable - Las implicaciones de esto son en su mayoría relacionados
con amortiguación cuestiones; con mensajes de tamaño fijo, un tampón con un tamaño específico puede
contener un número conocido de mensajes. El número de mensajes de tamaño variable que se puede mantener
por un tampón tal es desconocido. Considere cómo Windows 2000 controla esta situación: con mensajes fijos
de tamaño (algo <256 bytes), los mensajes se copian desde el espacio de direcciones del remitente en el
espacio de direcciones del proceso de recepción. Mensajes más grandes (es decir, mensajes de tamaño
variable) utilizan memoria compartida para pasar el mensaje.
4.1.- PROPORCIONE DOS EJEMPLOS DE PROGRAMACIÓN EN LOS QUE LOS MECANISMOS
MULTIHILOS NO PROPORCIONEN UN MEJOR RENDIMIENTO QUE UNA SOLUCIÓN MONOHILO.
Cualquier tipo de programa secuencial no es un buen candidato para ser roscado. Un ejemplo de esto es un
programa que calcula una declaración 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 conmutación entre los hilos del kernel, aunque
depende de la biblioteca de hilos y cómo 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
reemplazándolo con otro hilo. Este acto típicamente 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 núcleo sufre un fallo de página, otro hilo del núcleo 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 página tiene lugar. Por lo tanto, en escenarios en los que un programa podría
sufrir fallos de página frecuentes o tiene que esperar a que otros eventos del sistema, una solución multi-hilo
tendría un mejor desempeño, 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 montón 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 múltiples hilos a nivel de usuario no puede hacer uso de los diferentes
procesadores en un sistema multiprocesador simultáneamente. El sistema operativo sólo 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 ejecución de múltiples 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 código del sistema operativo podría simplificarse. Un programador, por ejemplo, puede tener en cuenta
los diferentes procesos y subprocesos en igualdad de condiciones, sin necesidad de código especial para
examinar los hilos asociados a un proceso durante cada paso de programación. Por otro lado, esta uniformidad
podría hacer más difícil 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 código ejecutable. Los procesos tienen un espacio de
dirección de memoria virtual e información usada para inicializar cada hilo, por ejemplo, una prioridad base y
una afinidad con uno o más procesadores. Cada proceso tiene uno a más hilos, cada uno de los cuales es una
unidad ejecutable despachada por el kernel. Linux tiene dos algoritmos de planificación de proceso separados.
Uno es el algoritmo de la porción de tiempo justa, planificación expropiativa entre múltiples procesos; el otro es
designado para tareas de tiempo real, donde las prioridades absolutas son más 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 estaría desperdiciando los procesadores que no tengan asignada ninguna hebra ya que no
estaría multiplexado ninguna hebra a ese procesador, pero en si el programa terminaría su ejecución 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 estaría utilizando los recursos del sistema al máximo y no habría desperdicio al estar
multiplexado por que todos los hilos kernel estarían 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 sería posible ya que el número 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 línea C es 5. Salida en la línea P es 0.
Descargar