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.