Download UNIDAD3 - hola, este es el servidor de chacharas el nido

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Transcript
UNIDAD
3. ADMINISTRACIÓN DEL PROCESADOR
3.1 PLANEACIÓN DE TRABAJOS(JOB SHEDULING)
3.2 CONCEPTOS BÁSICOS
3.3 TIPOS DE PLANEACIÓN
3.3.1 First In First Out(FIFO)
3.3.2 Round Robin(RR)
3.3.3 Shortest Job First(SJF)
3.3.4 Shortest Remaining Time(STR)
3.3.5 Highest Response Ratio Next(HNR)
3.4 MULTIPROCESAMIENTO
3.5 CONCEPTOS BÁSICOS
3.6 PARALELISMO
3.7 SISTEMAS MULTIPROCESAMIENTO
3.8 ORGANIZACIÓN DEL MULTIPROCESADOR
3.9 SISTEMAS OPERATIVOS DEL MULTIPROCESADOR
PLANEACIÓN DE TRABAJOS
3.2 CONCEPTOS BÁSICOS
Cuando hay más de un proceso ejecutable, el sistema operativo debe decidir cuál
ejecutará primero. La parte del sistema operativo que toma esta decisión se denomina
planificador; el algoritmo que usa se denomina algoritmo de planificación.
Antes de examinar algoritmos de planificación específicos, debemos pensar en qué está
tratando de lograr el planificador. Después de todo, éste se ocupa de decidir una política,
no de proveer un mecanismo. Se nos ocurren varios criterios para determinar en qué
consiste un buen algoritmo de planificación. Entre las posibilidades están:
1. Equitatividad —asegurarse de que cada proceso reciba una parte justa del tiempo de
CPU.
2. Eficiencia —mantener la CPU ocupada todo el tiempo.
3. Tiempo de respuesta —minimizar el tiempo de respuesta para usuarios interactivos.
4. Retorno —minimizar el tiempo que los usuarios por lotes tienen que esperar sus
salidas.
5. Volumen de producción —maximizar el número de trabajos procesados por hora.
3.3 TIPOS DE PLANEACIÓN
3.3.1 First In First Out(FIFO)
Primero en Llegar, Primero en ser Servido
La política más simple de planificación es la de primero en llegar/primero en servirse
(FCFS, First-come, First-served), también llamada primero en entrar/primero en salir
(FIFO, First-in, First-out). Cada vez que un proceso esté listo para ejecutar, se incorpora
a la cola de Listos. Cuando el proceso actual cesa su ejecución, se selecciona el
proceso más antiguo de la cola.
La figura 8.5 muestra las pautas de ejecución del ejemplo propuesto para un ciclo y la
tabla 8.4 indica algunos resultados importantes. Primero, se determina el tiempo de
finalización
de cada proceso.
A partir de él, es posible determinar el tiempo de retorno. En términos del modelo de
colas, el tiempo de retorno (TAT) es el tiempo de estancia Tr o tiempo total que el
elemento
consume en el sistema (tiempo de espera más tiempo de servicio). Un valor más útil es
el tiempo de retorno normalizado, que es la razón entre el tiempo de retorno y el tiempo
de servicio. Este valor indica el retardo relativo experimentado por un proceso.
Normalmente, cuanto mayor es el tiempo de ejecución, mayor es el retardo absoluto que
puede tolerarse. El valor mínimo para esta proporción es de 1.0; los valores mayores
corresponden a niveles decrecientes del servicio [FINK88]:
El tiempo de espera normalizado para el proceso C no es tolerable: El tiempo total que
pasa en el sistema es 100 veces el tiempo necesario de procesamiento. Tan larga
espera tiene lugar cada vez que un proceso corto llega justo después de uno largo. Por
otro lado, incluso en este ejemplo extremo, a los procesos largos no les va del todo mal.
El proceso D obtiene un tiempo de retorno que es aproximadamente el doble que el de
C, pero su tiempo de espera normalizado está por debajo de 2,0.
Otro problema del FCFS es que tiende a favorecer a los procesos con carga de CPU
frente
los
que
tienen
carga
de
E/S.
Supóngase un conjunto de procesos, uno de los cuales usa principalmente la CPU
y los otros se dedican a hacer E/S. Cuando un proceso con carga de CPU está
ejecutando, todos los que tienen carga de E/S deben esperar. Algunos de ellos pueden
estar en colas de E/S (estado bloqueado) pero puede ser que regresen a la cola de
Listos mientras el de la carga de CPU todavía está ejecutando. Llegado este momento,
todos o la
mayoría de los dispositivos de E/S estarán ociosos,
a pesar de que,
posiblemente, haya trabajo para ellos. Cuando el proceso que está actualmente en
ejecución abandone el estado Ejecutando, los procesos Listos con carga de E/S
pasaran rápidamente por el estado de Ejecución y volverán a bloquearse por sucesos de
E/S. Si el proceso con carga de CPU también está bloqueado, el procesador pasa a
estar desocupado. Así pues, FCFS puede dar como resultado un uso ineficiente
tanto
del
procesador
como
de
los
dispositivos
de
E/S.
Sin embargo, se combina a menudo con un esquema de prioridades para obtener un
planificador efectivo. Así pues, el planificador puede mantener un conjunto de colas, una
para cada nivel de prioridad y expedir cada cola con un algoritmo primero en
llegar/primero en servirse. Más tarde se planteará un ejemplo de este sistema, en el
apartado "Planificación realimentada".
3.3.2 Round Robin(RR)
Planificación round robin (de torneo)
Examinemos ahora algunos algoritmos de planificación específicos. Uno de los más
antiguos, sencillos, equitativos y ampliamente utilizados es el de round robin. A cada
proceso se le asigna un intervalo de tiempo, llamado cuanto, durante el cual se le
permite ejecutarse. Si el proceso todavía se está ejecutando al expirar su cuanto, el
sistema operativo se apropia de la CPU y se la da a otro proceso. Si el proceso se
bloquea o termina antes de expirar el cuanto, la conmutación de CPU naturalmente se
efectúa cuando el proceso se bloquee. El round robin es fácil de implementar. Todo lo
que el planificador tiene que hacer es mantener una lista de procesos ejecutables, como
se muestra en la Fig. 2-22(a). Cuando un proceso gasta su cuanto, se le coloca al final
de la lista, como se aprecia en la Fig. 2-22(b).
La única cuestión interesante cuando se usa el round robin es la duración del cuanto. La
conmutación de un proceso a otro requiere cierto tiempo para llevar a cabo las tareas
administrativas: guardar y cargar registros y mapas de memoria, actualizar diversas
tablas y listas, etc. Su pongamos que esta conmutación de proceso o conmutación de
contexto requiere 5 ms.
Supongamos también que usamos cuantos de 20 ms. Con estos parámetros, después
de realizar trabajo útil durante 20 ms, la CPU tendrá que ocupar 5 ms en la conmutación
de procesos. Se desperdiciará el
20% del tiempo de CPU en gastos extra administrativos.
A fin de mejorar la eficiencia de la CPU, podríamos usar cuantos de, digamos, 500 ms.
Ahora el tiempo desperdiciado es de menos del 1%, pero consideremos lo que sucede
en un sistema de tiempo compartido sil0 usuarios interactivos pulsan la tecla de retomo
de carro aproximadamente al mismo tiempo: diez procesos se pondrían en la lista de
procesos ejecutables. Si la CPU está ociosa, el primero se iniciará de inmediato, el
segundo podría no iniciarse hasta cerca de medio segundo después, y así
sucesivamente. El pobre proceso que le haya tocado ser último podría tener que esperar
5 segundos antes de tener su oportunidad, suponiendo que los demás procesos utilizan
su cuanto completo. Para casi cualquier usuario, un retardo de 5 segundos en la
respuesta a un comando corto sería terrible. El mismo problema puede presentarse en
una computadora personal que maneja multiprogramación.
La conclusión puede formularse así: escoger un cuanto demasiado corto causa
demasiadas Conmutaciones de procesos y reduce la eficiencia de la CPU, pero
escogerlo demasiado largo puede dar pie a una respuesta deficiente a solicitudes
interactivas cortas. Un cuanto de cerca de 100 ms suele ser un término medio razonable.
3.3.3 Shortest Job First(SJF)
Primero el proceso más corto
Otra forma de reducir el sesgo favorable al proceso más largo inherente al FCFS es la
política de primero el proceso más corto (SPN, Shortest Process Next). Esta es una
política no preferente en la que se selecciona el proceso con menor tiempo esperado de
ejecución. Así pues, un proceso corto saltará a la cabeza de la cola, sobrepasando a
trabajos largos.
La figura 8.5 y la tabla 8.4 muestran los resultados para el ejemplo. Nótese que el
proceso 5 recibe servicio mucho antes que con FCFS. La mejora del rendimiento global
es significativa en términos de tiempo de respuesta. Sin embargo, se incrementa la
variabilidad de los tiempos de respuesta, especialmente para procesos largos,
reduciendo así la previsibilidad.
Una dificultad que plantea la política SPN es la necesidad de conocer o, por lo menos,
estimar, el tiempo exigido por cada proceso. Para trabajos por lotes, el sistema puede
solicitar al programador que estime el valor y se lo proporcione al sistema operativo. Si la
estimación del programador está considerablemente por debajo del tiempo de ejecución
real, el sistema puede abandonar el trabajo En un entorno real de producción, se
ejecutan frecuentemente los mismos trabajos y se pueden calcular estadísticas. Para los
procesos interactivos, el sistema operativo puede mantener calculada una media para
las ráfagas de cada proceso. El cálculo más sencillo podría ser el siguiente:
Para evitar volver a calcular la suma completa cada vez, se puede reescribir esta
ecuación como:
Nótese que esta fórmula da el mismo peso a todos los casos. Normalmente, resulta
más conveniente dar un peso mayor a los casos más recientes, ya que es más probable
que reflejen el comportamiento futuro. Por ello, una técnica habitual de predicción de
los valores futuros a partir de una serie de valores pasados es usar un promediado
exponencial.
Compárese esta ecuación con la (2). Empleando un valor constante de a (0 < α < 1),
independiente del número de observaciones pasadas, se llega a una situación en la que
se tienen en cuenta todos los valores pasados, pero los más distantes reciben un peso
menor. Para verlo con más claridad, considérese el siguiente desarrollo de la ecuación
(3):
Como α y (1 - α) son menores que uno, cada uno de los sucesivos términos de la
ecuación es más pequeño. Por ejemplo, para α = 0,8, la ecuación (4) se convierte en:
Cuanto más antigua es la observación, su peso cuenta menos en la media.
El tamaño del coeficiente, en función de su posición en el desarrollo, se muestra en la
figura 8.9. Cuanto mayor es el valor de a, mayor es el peso dado a las observaciones
más recientes.
Para α = 0,8, prácticamente todo el peso lo reciben las cuatro observaciones más
recientes, mientras que para α = 0,5, la media se distribuye sobre los valores de las
ocho observaciones más recientes, más o menos. La ventaja de emplear un valor a
cercano a 1 es que la media reflejará rápidamente los cambios repentinos en la
cantidad observada. La desventaja es que si se produce un breve aumento en los
valores observados y después se vuelve a estabilizar en algún valor medio, el empleo
de un valor grande de a generará cambios bruscos en la media.
En la figura 8.10 se comparan el promediado simple con el exponencial (para dos
valores diferentes de a). En la parte (a) de la figura, el valor observado comienza siendo
1, crece gradual- mente hasta 10 y se estabiliza. En la parte (b), el valor observado
parte de 20, desciende gradualmente hasta 10 y se estabiliza. En ambos casos, se
parte de un valor estimado de So = 0. Esto otorga mayor prioridad a los procesos
nuevos. Nótese que el promediado exponencial marca los cambios en el
comportamiento de los procesos más rápidamente que el promediado simple y que el
valor mayor de a genera una reacción rápida a los cambios del valor observado.
Un riesgo que existe en SPN es la posibilidad de inanición para los procesos largos
mientras exista un flujo continuo de procesos más cortos. Por otro lado, aunque SPN
reduce el sesgo favorable a los procesos largos, no es conveniente para entornos de
tiempo compartido o de procesamiento de transacciones, debido a la ausencia de
apropiación. Volviendo al análisis del peor caso, descrito en el estudio del FCFS, los
procesos A, B, C y D ejecutarían también en el mismo orden, penalizando en exceso al
proceso
corto
C.
3.3.4 Shortest Remaining Time(STR)
Menor tiempo restante
La política del
menor tiempo restante (SRT,
Shortest Remaining Time) es una
versión apropiativa del SPN, en la que el planificador siempre elige al proceso que le
queda menos tiempo esperado de ejecución.
Cuando sec añade un nuevo proceso a la cola de Listos, puede quedarle un tiempo
esperado de ejecución menor que al proceso que está ejecutándose en ese momento.
Por consiguiente, el planificador
puede apropiarse del procesador siempre que
un
proceso nuevo esté listo. Como en el SPN, el planificador debe disponer de una
estimación del tiempo de proceso para poder llevar a cabo la
función de selección,
existiendo el riesgo de inanición para procesos largos.
El SRT no presenta el sesgo favorable a los procesos largos del PCFS. Al contrario que
el turno rotatorio, no se generan interrupciones adicionales y, así, el coste se ve reducido.
Por contra, se deben los tiempos de servicio transcurridos, lo que contribuye a la
sobrecarga. El SRT también debe producir unos tiempos de retorno mejores que los del
SPN, puesto que los trabajos cortos reciben una atención inmediata y preferente a los
trabajos largos.
Nótese que, en el ejemplo, los tres procesos más cortos reciben un servicio inmediato,
obteniendo cada uno un tiempo de retorno normalizado de 1,0.
3.3.5 Highest Response Ratio Next(HNR)
Primero el de mayor tasa de respuesta
En la tabla 8.4, se ha empleado el tiempo de retomo normalizado, que es la
razón entre el tiempo de retorno y el tiempo real de servicio, como valor a
destacar. Para cada proceso individual, se desea minimizar esta razón, así
como minimizar el valor medio de todos los procesos. Aunque ésta es una
medida a posteriori, es posible aproximarla a una medida a priori, como el
criterio de selección
de
un
planificador
no
apropiativo.
En
concreto,
considérese la siguiente tasa de respuesta (RR, Response Ratio):
RR =_w + s_
s
Donde:
R= tasa de respuesta
w = tiempo consumido esperando al procesador
s = tiempo de servicio esperado
Si el proceso con este valor se expide inmediatamente, R es igual al tiempo de
retorno normalizado.
Nótese que el valor mínimo de RR es 1,0, alcanzado cuando un proceso entra
por primera vez en el sistema.
Hasta ahora, la regla de planificación ha sido: Cuando el proceso actual
termina o se bloquea, se elige el proceso listo con un valor mayor de RR. Este
método es atractivo porque tiene en cuenta la edad del proceso. Aunque se
favorece a los trabajos más cortos (un denominador menor produce una razón
mayor), el envejecimiento sin que haya servicio incrementa el valor de la razón,
de forma que los procesos más largos pasen finalmente primero, en
competición con los más cortos.
El tiempo esperado de servicio debe estimarse antes de emplear la técnica de
la mayor tasa de respuesta (HRRN, Highest Response Ratio Next), como ya
ocurría con SRT y SPN.
3.4 MULTIPROCESAMIENTO
Existen varias razones para construir tales sistemas. Una ventaja es un mayor
rendimiento. Al incrementar el número de procesadores, se busca realizar más
trabajo en menos tiempo. Sin embargo, la razón de aceleración con n
procesadores no es n, sino menor que n. Cuando varios procesadores
cooperan en una tarea, se necesita una cierta cantidad de trabajo adicional
para mantener a todas las partes funcionando de manera correcta. Este trabajo
adicional {overhead), mas la disputa por los recursos compartidos, reduce la
ganancia esperada de los procesadores adicionales. De manera similar, un
grupo de n programadores trabajando juntos estrechamente no da por
resultado n veces la cantidad de trabajo realizado.
Los
sistemas
multiprocesador
también
pueden
ahorrar
dinero
en
comparación con múltiples sistemas con unidades de un solo procesador,
debido a que los procesadores pueden compartir periféricos, almacenamiento
masivo y suministro de energía. Si varios pro-gramas operan con el mismo
conjunto de datos, es más barato almacenar estos datos en un disco y hacer
que todos los procesadores los compartan, en lugar de tener muchas
computadoras con discos locales y varias copias de los datos.
Otra razón para los sistemas multiprocesador es que incrementa la
confiabilidad. Si las funciones se pueden distribuir adecuadamente entre varios
procesadores, entonces la falla de un procesador no detendrá al sistema, solo
lo hará más lento. Si hay diez procesadores y uno falla, cada uno de los nueve
restantes debe encargarse de una parte del trabajo del procesador que fallo.
De esta manera, todo el sistema solo ejecuta un diez por ciento más lento, en
lugar de fallar en su totalidad. Esta capacidad de continuar proporcionando
servicio de manera proporcional al nivel del hardware que sigue activo se
conoce como degradación suave. Los sistemas que se diseñan para esta
degradación también se conocen como tolerantes a las fallas.
La operación continua en presencia de fallas requiere un mecanismo que
permita detectar, diagnosticar y corregir la falla (en caso de ser posible). El
sistema Tandem emplea la duplicación tanto de hardware como de software
para asegurar una operación continua a pesar de las fallas. El sistema consta
de dos procesadores idénticos, cada uno con su propia memoria local. Los
procesadores se conectan mediante un bus. Un procesador es el primario y el
otro es de respaldo. Se mantienen dos copias de cada proceso: una en el
procesador primario y la otra en el respaldo. En puntos de verificación fijos
durante la ejecución del sistema, la información de estado de cada trabajo
(incluyendo una copia de la imagen de la memoria) se copia de la maquina
primaria a la de respaldo. Si se detecta una falla, la copia de respaldo se
activa, y se arranca desde el punto de verificación mas reciente. Esta solución
es obviamente cara, ya que existe una duplicación considerable de hardware.
Los sistemas de procesadores múltiples más comunes utilizan el
multiprocesamiento simétrico, en el que cada procesador ejecuta una
copia idéntica del sistema operativo, y estas copias se comunican entre
ellas
según
sea
necesario.
Algunos
sistemas
emplean
el
multiprocesamiento asimétrico, en el que a cada procesador se le
asigna una tarea específica. Un procesador maestro controla el sistema; el
otro procesador, solicita instrucciones al maestro para recibir instrucciones o
tiene tareas definidas previa-mente. Este esquema define una relación de
maestro-esclavo.
En el multiprocesamiento simétrico {symmetric multiprocessing, SMP) todos
los procesadores están al mismo nivel; no existe una relación maestro-esclavo
entre ellos. Cada procesador ejecuta de manera concurrente una copia del
sistema operativo. La figura 1.5 ilustra una arquitectura SMP típica. Un ejemplo
del sistema SMP es la versión Encore de UNIX para la computadora Multimax.
Esta computadora se puede configurar de tal manera que emplee docenas de
procesadores, ejecutando todos ellos copias de UNIX. El beneficio de este
modelo es que pueden ejecutarse simultáneamente muchos procesos -(JV
procesos pueden ejecutar si hay JVCVU)- sin ocasionar un deterioro
significativo en el rendimiento. Sin embargo, debemos controlar con cuidado
las acciones de E/S para asegurar que los datos lleguen al procesador
apropiado. Asimismo, debido a que las CPU son distintas, una puede estar
ociosa mientras que otra está sobrecargada, dando por resultado ineficiencias.
Estas ineficiencias pueden evitarse si los procesadores comparten ciertas
estructuras de datos. Un sistema multiprocesador con estas características
permitirá compartir de manera dinámica procesos y recursos -como la
memoria- entre los diferentes procesadores, y puede reducir la varianza entre
ellos. Tal sistema se debe escribir con cuidado, como veremos en el capítulo 7.
Virtualmente todos los sistemas operativos modernos -incluyendo Windows
NT, Solaris, Digital UNIX, OS/2 y Linux- ofrecen soporte para el SMP.
La diferencia entre el multiprocesamiento simétrico y el asimétrico puede
ser el resultado del hardware o del software que se utilice. Un hardware
especial puede diferenciar a los multiprocesadores múltiples, o puede
escribirse el software de manera que solo se permita un maestro y múltiples
esclavos. Por ejemplo, el sistema operativo SunOS Versión 4 de Sun
proporciona multiprocesamiento asimétrico, en tanto que la versión 5 (Solaris
2) es simétrica en el mismo hardware,
A medida que los microprocesadores se vuelven menos costosos y más
poderosos, se descargan funciones adicionales del sistema operativo a los
procesadores esclavos, 0 back-ends. Por ejemplo, es muy fácil agregar un
microprocesador con su propia memoria para administrar un sistema de
discos. El microprocesador recibe una secuencia de solicitudes desde la CPU
principal e implementa su propia cola en disco y algoritmo de planificación.
Este arreglo libera a la CPU principal del trabajo adicional de la planificación de
discos. Las PC contienen un microprocesador en el teclado para convertir las
pulsaciones de las teclas en códigos que se envían a la CPU. De hecho, este
empleo de los microprocesadores se ha vuelto tan común que ya no se
considera como multiprocesamiento.
3.5 CONCEPTOS BÁSICOS
Una manera tradicional de incrementar las prestaciones de un sistema consiste
en utilizar varios procesadores que puedan ejecutar en paralelo una carga de
trabajo dada. Las dos organizaciones de múltiples procesadores más comunes
son los multiprocesadores simétricos (SMP) y los «clusters». Reciente-mente,
los sistemas de acceso a memoria no uniforme (NUMA) han aparecido
comercialmente.
Un SMP es un computador constituido por varios procesadores similares,
interconectados mediante un bus o algún tipo de estructura de conmutación.
El problema más crítico a resolver en un SMP es la coherencia de cache. Cada
procesador tiene su propia cache, y es posible que una línea de datos dada esté
presente en más de una cache. Si esa línea se altera en una cache, entonces
tanto la memoria principal como las otras caches tienen versiones no validas
de dicha línea.
Un «cluster» es un grupo de computadores completos interconectados y
trabajando juntos como un solo recurso de computo, proporcionando la ilusión
de ser una única maquina. El termino computador completo significa que puede
funcionar autónomamente fuera del cluster.
Un sistema NUMA es un multiprocesador de memoria compartida, en el que
el tiempo de acceso de un procesador a una palabra de memoria varía según
la ubicación de la palabra en memoria.
Tradicionalmente, el computador se ha visto como una maquina secuencial.
La mayoría de los lenguajes de programación del computador requieren que
el programador especifique los algoritmos mediante una secuencia de
instrucciones.
Los
procesadores
ejecutan
los
programas
procesando
instrucciones maquina de una en una. Cada instrucción se ejecuta mediante
una secuencia de operaciones (captar instrucción, captar operandos, realizar
la operación y almacenar los resultados).
Esta visión del computador no es completamente cierta. En el nivel de micro
operación, se generan al mismo tiempo múltiples señales de control. La
segmentación de las instrucciones, al menos en cuanto al solapamiento de las
operaciones de captación y ejecución, se ha utilizado desde hace tiempo.
Ambos casos son ejemplos de funciones que se realizan en paralelo, Es el
mismo enfoque de la organización superescalar, que aprovecha el paralelismo
entre instrucciones. Un procesador superescalar dispone de varias unidades
de ejecución, que pueden ejecutar en paralelo varias instrucciones del mismo
programa.
A medida que la tecnología de los computadores se ha desarrollado, y ha
disminuido el costo del hardware del computador, los diseñadores de
computadores han visto más y más posibilidades en el paralelismo,
normalmente para mejorar las prestaciones y, en algunos casos, para mejorar
la fiabilidad. Después de una revisión de conceptos, en este capítulo se
examinan las tres organizaciones paralelas de más éxito. En primer lugar se
estudian los multiprocesadores simétricos (SMP), una de las primeras y,
todavía, el ejemplo más común de organización paralela. Un SMP incluye
varios procesadores que comparten la memoria principal común. La
organización SMP pone de manifiesto el problema de la coherencia de
cache, al que se dedica una sección específica. Después se describen los
«clusters», que están constituidos por varios computadores independientes,
organizados para poder trabajar cooperativamente. Los «clusters» han llegado
a ser bastante comunes a la hora de procesar car-gas de trabajo que
sobrepasa la capacidad de un SMP. La tercera aproximación al uso de varios
procesadores está representada por las maquinas de acceso no uniforme a
memoria (NUMA). La alternativa NUMA es relativamente nueva, y todavía no
se ha extendido comercialmente, pero, a menudo, se considera la alternativa a
los computadores SMP y a los «clusters». Finalmente, el capitulo estudia las
aproximaciones hardware a la computación vectorial. Estas propuestas
optimizan la ALU para el procesamiento de vectores o matrices de números
en coma flotante. Se han utilizado en la implementación de los sistemas
conocidos como supercomputadores.
3.6 PARALELISMO
Organizaciones con varios procesadores
TIPOS DE SISTEMAS DE PARALELOS
La taxonomía introducida primeramente por Flynn [FLYN72] es todavía la
forma más común de clasificar a los sistemas según sus capacidades de
procesamiento paralelo. Flynn propuso las siguientes categorías o clases de
computadores:
• Una secuencia de instrucciones y una secuencia de datos (SISD, Single
Instruction, Single Data): Un único procesador interpreta una única
secuencia de instrucciones, para operar con los datos almacenados en
una única memoria. Los computadores monoprocesador caen dentro de
esta categoría.
• Una secuencia de instrucciones y múltiples secuencias de datos (SIMD,
Single Instruction Multiple Data): Una única instrucción maquina
controla paso a paso la ejecución simultánea y sincronizada de un cierto
número de elementos de proceso. Cada elemento de proceso tiene una
memoria asociada, de forma que cada instrucción es ejecutada por cada
procesador, con un conjunto de datos diferentes. Los procesadores
vectoriales y los matriciales pertenecen a esta categoría.
• Múltiples secuencias de instrucciones y una secuencia de datos (MISD):
Se transmite una secuencia de datos a un conjunto de procesadores,
cada uno de los cuales ejecuta una secuencia de instrucciones
diferente. Esta estructura nunca ha sido implementada.
• Múltiples secuencias de instrucciones y múltiples secuencias de datos
(MIM0):
Un
conjunto
de
procesadores
ejecuta
simultáneamente
secuencias de instrucciones diferentes con conjuntos de datos
diferentes. Los SMP, los «clusters», y los sistemas NUMA son ejemplos
de esta categoría.
En la organización MIMD, los procesadores son de uso general; cada uno es
capaz de procesar todas las instrucciones necesarias para realizar las
transformaciones apropiadas de los datos. Los computadores MIMD se
pueden subdividir, además, según la forma que tienen los procesadores para
comunicarse (Figura 16.1). Si los procesadores comparten una memoria
común, entonces cada procesador accede a los programas y datos
almacenados en la memoria compartida, y los procesadores se comunican
unos con otros a través de esa memoria. La forma más común de este tipo
de sistemas se conoce como multiprocesador simétrico (SMP), que se
examinara en la Sección 16.2. En un SMP, varios procesadores comparten
una única memoria mediante un bus compartido u otro tipo de mecanismo de
interconexión. Una característica distintiva de estos sistemas es que el
tiempo de acceso a memoria principal es aproximadamente el mismo para
cualquier procesador. Un desarrollo más reciente es la organización con
acceso no uniforme a memoria (NUMA), que se describe en la Sección 16.5.
Como el propio nombre indica, el tiempo de acceso a zonas de memoria
diferentes puede diferir en un computador NUMA.
Un conjunto de computadores monoprocesador independientes, o de SMP,
pueden inter-conectarse para formar un «cluster». La comunicación entre
los computadores se realiza mediante conexiones fijas o mediante algún
tipo de red.
Organizaciones paralelas
La Figura 16.2 muestra los esquemas generales de las clases de la
taxonomía de la Figura 16.1. La Figura 16.2a corresponde a la estructura
de un SISD. Se dispone de una unidad de control (UC) que proporciona
una secuencia de instrucciones (SI) a una unidad de proceso (UP). La
unidad de proceso actúa sobre una única secuencia de datos (SD)
captados desde la unidad de memoria (UM). En una maquina SIMD,
también existe una sola unidad de control, que proporciona una única
secuencia de instrucciones a cada elemento de proceso. Cada elemento
de proceso puede tener su propia memoria dedicada (mostrada en la
Figura 16.2b), o puede haber una memoria compartida. Finalmente, en
un computador MIMD hay múltiples unidades de control, y cada una
proporciona una secuencia de instrucciones separada a su propio
elemento de proceso. El MIMD puede ser un multiprocesador de memoria
compartida (Figura 16.2c), o un multicomputador de memoria distribuida
(Figura 16.2d).
Los aspectos de diseño relacionados con los SMP, los «clusters», y los
NUMA, son complejos, implicando cuestiones relativas a la organización
física, las estructuras de interconexión, el diseño de los sistemas
operativos, y el software de las aplicaciones. Nuestro interés se centra
fundamentalmente en la organización, aunque se describirán brevemente
aspectos del diseño de los sistemas operativos.
3.7 SISTEMAS MULTIPROCESAMIENTO
Multiprocesadores Simétricos
Hasta hace poco, prácticamente todos los computadores personales y
estaciones de trabajo utilizaban un único microprocesador de uso general. A
medida que aumenta la demanda de mayores prestaciones, y dado que el
coste de los microprocesadores continúa reduciéndose, los fabricantes han
introducido los sistemas SMP. El termino SMP se refiere a la arquitectura
hardware del computador, y también al comportamiento del sistema operativo
que utiliza dicha arquitectura. Un SMP puede definirse como un computador
con las siguientes características:
1. Hay dos o más procesadores similares de capacidades comparables.
2. Estos procesadores comparten la memoria principal y las E/S, y están
interconectados mediante un bus u otro tipo de sistema de interconexión, de
forma que el tiempo de acceso a memoria es aproximadamente el mismo
para todos los procesadores.
3. Todos los procesadores comparten los dispositivos de E/S, bien a través
de los mismos canales, o bien mediante canales distintos que proporcionan
caminos de acceso al mismo dispositivo.
4. Todos los procesadores pueden desempeñar las mismas funciones (de ahí
el término simétrico).
5. El sistema está controlado por un sistema operativo integrado, que
proporciona la interacción entre los procesadores y sus programas en los
niveles de trabajo, tarea, fichero, y datos.
El significado de los puntos 1 a 4 es claro. El punto 5 corresponde a una de
las diferencias con los sistemas multiprocesador débilmente acoplados, tales
como los «clusters». En estos, la unidad de interacción física es
normalmente un mensaje o un fichero completo. En un SMP, la interacción
se puede producir a través de elementos de datos individuales, y puede existir
un elevado nivel de cooperación entre procesadores.
El sistema operativo de un SMP planifica la distribución de procesos o hilos
(threads) entre todos los procesadores. Un SMP tiene las siguientes ventajas
potenciales con respecto a una arquitectura monoprocesador:
• Prestaciones: Si el trabajo a realizar por un computador puede
organizarse de forma que partes del mismo se puedan realizar en
paralelo, entonces un sistema con varios procesadores proporcionara
mejores prestaciones que uno con un solo procesador del mismo tipo
(Figura 16.3).
• Disponibilidad: En un multiprocesador simétrico, debido a que todos
los procesadores pueden realizar las mismas funciones, un fallo en un
procesador no hará que el computador se detenga.
• Crecimiento incremental: Se pueden aumentar las prestaciones del
sistema, añadiendo más procesadores.
• Escalado: Los fabricantes pueden ofrecer una gama de productos
con precios y prestaciones diferentes, en función del número de
procesadores que configuran el sistema.
Es importante resaltar que los anteriores son beneficios potenciales, más que
beneficios garantizados. El sistema operativo debe disponer de herramientas y
funciones que permitan explotar el paralelismo presente en un SMP.
Una característica atractiva de un SMP es que la existencia de varios
procesadores es transparente al usuario. El sistema operativo se encarga de la
sincronización entre los procesadores, y de la planificación de los hilos o de los
procesos, asignándolos a los distintos procesadores.
3.8 ORGANIZACIÓN DEL MULTIPROCESADOR
La Figura 16.4 describe en términos generales la organización de un sistema
multiprocesador. Hay dos o más procesadores. Cada procesador es autónomo,
incluyendo una unidad de control, una ALU, registros y, posiblemente, cache.
Cada procesador tiene acceso a una memoria principal compartida y a los
dispositivos de E/S, a través de alguna forma de mecanismo de interconexión.
Los procesadores pueden comunicarse entre sí a través de la memoria
(mensajes e información de control almacenada en áreas comunes para
datos). También es posible que los procesadores intercambien señales
directamente. La memoria, a menudo, se organiza de forma que sean posibles
los accesos simultáneos a bloques de memoria separados. En algunas
configuraciones, cada procesador puede tener también su propia memoria
principal privada y sus canales de E/S, además de los recursos compartidos.
La organización de un sistema de multiprocesador puede clasificarse como
sigue:
• Bus de tiempo compartido o común
• Memoria multipuerto
• Unidad de control central
Bus de tiempo compartido
El bus de tiempo compartido es el mecanismo mis simple para construir un
sistema multiprocesador (Figura 16.5). La estructura y las interfaces son
básicamente las mismas que las de
un sistema de un único procesador que utilice un bus para la interconexión. El
bus consta de líneas de control, dirección y datos. Para facilitar las
transferencias de DMA con los procesa-dores de E/S, se proporcionan los
elementos para él:
• Direccionamiento: Debe ser posible distinguir los módulos del bus
para determinar la fuente y el destino de los datos.
• Arbitraje: Cualquier modulo de E/S puede funcionar temporalmente
como maestro. Se proporciona un mecanismo para arbitrar entre las
peticiones que compiten por el con trol del bus, utilizando algún tipo de
esquema de prioridad.
• Tiempo compartido: Cuando un modulo está controlando el bus, los
otros módulos no tienen acceso al mismo, y deben, si es necesario,
suspender su operación hasta que dispongan del bus.
Estas características monoprocesador son utilizables directamente en una
configuración de SMP. En este caso, hay varias CPU, además de varios
procesadores de E/S, que intentan tener acceso a uno o más módulos de
memoria a través del bus.
La organización del bus presenta diversas ventajas en comparación con otras
propuestas:
• Simplicidad: Es la aproximación mas simple para organizar el
multiprocesador. La interfaz física, y la lógica de cada procesador para el
direccionamiento, para el arbitraje, y para compartir el tiempo del bus, es
el mismo que el de un sistema con un solo procesador.
• Flexibilidad: Es generalmente sencillo expandir el sistema conectando mas
procesadores al bus.
• Fiabilidad: El bus es esencialmente un medio pasivo, y el fallo de
cualquiera de los dispositivos conectados no provocaría el fallo de todo el
sistema.
La principal desventaja de la organización de bus son las prestaciones. Todas
las referencias a memoria pasan por el bus. En consecuencia, la velocidad del
sistema está limitada por el tiempo de ciclo. Para mejorar las prestaciones, es
deseable equipar a cada procesador con una memoria cache. Esta reduciría
dramáticamente el número de accesos. Típicamente, los PC y las estaciones
de trabajo de tipo SMP tienen dos niveles de cache: una cache LI interna (en el
mismo chip que el procesador), y una cache L2 externa o interna.
El uso de caches introduce algunas consideraciones de diseño nuevas.
Puesto que cada cache local contiene una imagen de una parte de la
memoria, si se altera una palabra en una cache, es concebible que eso
podría invalidar una palabra en otra cache. Para evitarlo, se debe avisar a
los otros procesadores de que se ha producido una actualización de memoria.
Este problema se conoce como problema de coherencia de cache, que es
resuelto típicamente por el hardware, más que por el sistema operativo. La
Sección 16.3 trata este punto.
Memoria multipuerto
La propuesta de memoria multipuerto permite el acceso
directo e
independiente a los módulos de memoria desde cada uno de los procesadores
y los módulos de E/S (Figura 16.6). Se necesita una cierta lógica asociada a la
memoria para resolver los conflictos. El método que se utiliza a menudo para
resolver conflictos consiste en asignar prioridades fijas a cada puerto de
memoria. Normalmente, la interfaz física y eléctrica en cada puerto es
idéntica a la que aparece en un modulo de memoria de un solo puerto. Así, se
necesitan pocas o ninguna
modificación en los procesadores o en los módulos de E/S para acomodar la
memoria multipuerto.
La aproximación de la memoria multipuerto es más compleja que la
aproximación de bus, precisándose añadir al sistema de memoria una buena
cantidad de lógica. No obstante, se consiguen mejores prestaciones, puesto
que cada procesador tiene un camino dedicado a cada modulo de memoria.
Otra ventaja del multipuerto es que permite configurar partes de la memoria
como «privadas» para uno o más procesadores y/o módulos de E/S. Esta
característica permite incrementar la seguridad frente a accesos no
autorizados, y para el almacenamiento de rutinas de restablecimiento en
zonas
de
memoria
no
susceptibles
de
ser
modificadas
por
otros
procesadores.
Otra cuestión más: se debe utilizar una estrategia de escritura directa {«writethrough») para controlar la cache, puesto que no hay forma de avisar a los
otros procesadores de una actualización de memoria.
Unidad de control central
La unidad de control central encauza las distintas secuencias de datos entre
los distintos módulos independientes: procesador, memoria y E/S. El
controlador puede almacenar temporal-mente peticiones, y realizar las
funciones de arbitraje y temporización. Además, puede transmitir mensajes de
estado y control entre los procesadores y alertar sobre cambios en las caches.
Puesto que toda la lógica de coordinación de la configuración de
multiprocesador se con-centra en la unidad central de control, las interfaces de
E/S, memoria y procesador, no sufren cambios esenciales. Esto proporciona la
flexibilidad y la simplicidad de las interfaces en la aproximación de bus. Las
desventajas clave de esta aproximación son que la unidad de control es
bastante compleja, y que representa un cuello de botella potencial para las
prestaciones.
La estructura de unidad de control central es bastante común en grandes
computadores (mainframes) de varios procesadores, tales como los miembros
más grandes de la familia S/ 370 de IBM. Hoy día, esta alternativa es poco
frecuente.
3.9 SISTEMAS OPERATIVOS DEL MULTIPROCESADOR
Consideraciones de diseño de un sistema operativo de multiprocesador
Un sistema operativo de SMP gestiona los procesadores y demás recursos del
computador, para que el usuario perciba un solo sistema operativo
controlando los recursos del sistema. De hecho, el computador debería
parecer un sistema monoprocesador con multiprogramación. Tanto en un
SMP como en un sistema monoprocesador, pueden estar activos varios
trabajos o procesos al mismo tiempo, y es responsabilidad del sistema
operativo planificar su ejecución y asignar los recursos. Un usuario puede
desarrollar aplicaciones que utilizan varios procesos o varios hilos dentro de
un proceso, sin tener en cuenta si se dispone de uno o de varios
procesadores.
proporcionar
Así,
toda
un
la
sistema
operativo
funcionalidad
de
de
un
multiprocesador,
sistema
operativo
debe
con
multiprogramación, más las características adicionales que permitan utilizar
varios procesadores. Entre los puntos clave de diseño están:
• Procesos concurrentes simultáneos: Las rutinas del sistema operativo
deben ser reentrantes, para permitir que varios procesadores puedan
ejecutar simultáneamente el mismo código IS. Con varios procesadores
ejecutando la misma o distintas partes del sistema operativo, las tablas y
las estructuras de gestión del sistema operativo deben manejarse
apropiadamente, para evitar bloqueos u operaciones no validas.
• Planificación: La planificación puede realizarla cualquier procesador, por
lo que deben evitarse los conflictos. El planificador debe asignar los procesos
preparados a los procesadores disponibles.
• Sincronización: Puesto que hay varios procesos que pueden acceder a
espacios de memoria y a recursos de E/S compartidos, debe
proporcionarse una sincronización efectiva. La sincronización asegura la
exclusión mutua y la ordenación de eventos.
• Gestión de Memoria: La gestión de memoria en un multiprocesador debe
comprender
todos
los
aspectos
propios
de
los
computadores
monoprocesadores, discutidos en el Capitulo 7. Además, el sistema
operativo debe explotar el paralelismo que proporciona el hardware (por
ejemplo, las memorias multipuerto) para obtener mejores prestaciones.
Los mecanismos de paginación en procesadores distintos deben
coordinarse para mantener la consistencia cuando varios procesadores
comparten una página o un segmento y para decidir sobre el reemplazo
de páginas.
• Fiabilidad y tolerancia ante los fallos: El sistema operativo debería
hacer posible una degradación gradual, cuando se produce un fallo en
un procesador. El planificador y otros elementos del sistema operativo,
deben reconocer la pérdida de un procesador y reestructurar las tablas
de gestión en consecuencia.
Un SMP como gran computador
La mayoría de los PC y estaciones de trabajo de tipo SMP utilizan una
estrategia de interconexión basada en un bus, tal y como muestra la Figura
16.5. Resulta ilustrativo analizar una aproximaci6n alternativa, que se utiliza en
las implementaciones más recientes de la familia de grandes computadores
(mainframes) IBM S/39Q [MAK97]. La Figura 16.7 muestra la organización
general del SMP S/390. Esta familia de sistemas incluye, desde computadores
monoprocesador con un módulo de memoria principal, hasta sistemas con
diez procesadores y cuatro módulos de memoria en la gama alta. La
configuración incluye uno o dos procesadores adicionales, que se utilizan
como procesadores de E/S. Los componentes clave de la configuración son los
siguientes:
• Procesador (PU, Processor Unit): Es un microprocesador CISC, en el
que las instrucciones más frecuentemente ejecutadas se encuentran
cableadas; mientras que las restantes se ejecutan por el «firmware».
Cada PU incluye una cache LI unificada almacena datos e
instrucciones) de 64 Kbytes. El tamaño de la cache LI se ha
determinado para que quepa en el mismo chip del PU, de forma que se
consiga acceder a ella en un solo ciclo.
• Cache L2: Cada cache L2 contiene 384 Kbytes. Las caches L2 se
organizan en grupos de dos, de forma que cada grupo recibe accesos
de tres PU, y proporciona acceso a todo el espacio de memoria
principal.
• Adaptador bus-red de interconexión (BSN, Bus-switching network):
Los BSN interconectan las caches L2 y la memoria principal. Cada BSN
también incluye una cache de nivel 3 (L3), con un tamaño de 2 Mbytes.
• Módulos de memoria: Cada módulo dispone de 8 Gbytes de
memoria, con una capacidad total de 32 Gbytes de memoria.
Hay una serie de características interesantes en la configuración del
SMP S/390 que pasamos a discutir:
• Interconexión conmutada
• Caches L2 compartidas
• Cache L3
Interconexión conmutada
En los PC y las estaciones de trabajo de tipo SMP, es común utilizar una
organización basada en un único bus compartido (Figura 16.5). Con esta
organización, el bus pasa a ser un cuello de botella que afecta a la
escalabilidad (escalado de las prestaciones cuando se amplía el sistema) del
diseño. El S/390 se enfrenta a este problema de dos formas. En primer lugar, la
memoria principal se distribuye en cuatro módulos, cada una con su propio
controlador de almacenamiento que puede gestionar los accesos a memoria a
velocidades elevadas. El tráfico de cargas desde memoria se reduce en un
factor de cuatro, gracias a los cuatro caminos independientes que hay a las
cuatro áreas en las que se ha dividido la memoria. En segundo lugar, las
conexiones desde los procesadores (en concreto desde las caches L2) a cada
modulo de memoria, no se producen como en un bus compartido, sino más
bien como en un enlace punto a punto, donde cada enlace conecta un grupo
de tres procesadores, a través de una cache L2, con un BSN. El BSN, por
otra parte, realiza la función de un conmutador que puede encaminar datos
entre sus cinco enlaces (cuatro enlaces con las memorias L2 y uno con el
modulo de memoria). Con respecto a los cuatro enlaces con las caches L2, el
BSN conecta los cuatro enlaces físicos a un bus de datos lógico. De esta
forma, una señal proveniente de uno de los cuatro enlaces con las caches L2,
se reenvía a cada uno de los restantes tres enlaces a las caches L2. Esto es
necesario para permitir la coherencia de cache.
Hay que tener en cuenta que, aunque hay cuatro módulos de memoria
distintas, cada PU y cada L2 solo tienen dos puertos físicos en la dirección de
memoria principal. Esto se debe a que cada cache L2 solo almacena datos de
la mitad de la memoria principal. Se necesitan dos caches para dar servicio a
toda la memoria principal, y cada PU debe conectarse a ambas caches.
Caches L2 compartidas
En un esquema típico de cache de dos niveles para un SMP, cada procesador
tiene caches LI y L2 propias. En los últimos años, ha aumentado el interés en
el concepto de utilizar una cache L2 compartida. En una de las primeras
versiones del SMP S/390, conocida como generación 3 (G3), IBM utilizaba
caches L2 específicas para cada procesador. En las versiones más recientes
(G4 y G5), se utilizan caches L2 compartidas. Dos consideraciones han
causado este cambio:
1. En el cambio de la versión G3 a la G4, IBM pasó a utilizar
microprocesadores con el doble de velocidad. Si se hubiese mantenido la
organización G3, se hubiese producido un incremento significativo del
tráfico a través del bus. Al mismo tiempo, se deseaba utilizar tantos
componentes de las versiones G3 como fuese posible. A no ser que se
mejorase significativamente el bus, el BSN podría llegar a ser un cuello
de botella.
2. El análisis de las cargas de trabajo de un S/390 típico mostraba un
nivel
elevado
de
instrucciones
y
datos
compartidos
por
los
procesadores.
Estas consideraciones llevaron al equipo de diseño de la versión G4 del S/390
a considerar el uso de una o más caches L2 compartidas por varios
procesadores (cada procesador dispone de una cache LI interna). A primera
vista, compartir la cache L2 podría parecer una mala idea. El acceso a
memoria desde los procesadores podría ser más lento, debido a que los procesadores deben pugnar por el acceso a la cache L2. Sin embargo, si, de
hecho, varios procesadores comparten un elevado volumen de datos, una
cache compartida puede incrementar el rendimiento en lugar de disminuirlo, ya
que los datos compartidos que se encuentran en la cache compartida se
obtienen más rápidamente que si se debiera acceder a ellos a través del bus.
Una propuesta considerada en el diseño de la versión G4 del S/370 fue utilizar
una única cache de gran tamaño y compartida por todos los procesadores.
Esta alternativa podría proporcionar una mejora de las prestaciones del
sistema gracias a la elevada eficiencia de la cache, pero se hubiera requerido
un rediseño completo de la organización del bus del sistema. No obstante, el
análisis de prestaciones indicaba que utilizar caches compartidas en cada uno
de los BSN existentes, proporcionaría gran parte de las ventajas de utilizar
caches compartidas con un tráfico reducido a través del bus. La eficacia de las
caches compartidas se confirmo a través de medidas de prestaciones, que
mostraban que la cache compartida mejoraba significativamente los niveles
de aciertos frente al esquema de caches locales que se utilizaba en la
organización de las versiones G3 [MAK97]. Estudios sobre la eficacia de las
caches compartidas por los microprocesadores de los SMP de pequeña
escala confirman que esta aproximación es correcta (por ejemplo [NAYF96]).
Cache L3
Otra característica interesante del SMP S/390 es el uso de un tercer nivel de
cache (L3)1. Las caches L2 se sitúan en los BSN y de esta forma, cada cache
L3 proporciona un buffer entre las caches L2 y una tarjeta de memoria. La
cache L3 reduce el retardo de acceso a los datos que no estén, ni en la cache
LI, ni en la cache L2 del procesador que los solicita. El dato está disponible
mucho más rápidamente que si hubiera que acceder a la memoria principal,
en el caso de que la línea de cache este siendo compartida con otro
procesador y no se haya utilizado recientemente por el procesador que la
solicita.
La Tabla 16.1 muestra las prestaciones que se obtienen en este SMP con tres
niveles de cache, para el caso de una carga de trabajo típica de una
aplicación comercial del S/390, que carga considerablemente el bus y la
memoria [DOET97]2. La penalización de acceso al almacenamiento es el
retardo entre la petición del dato a la jerarquía de caches, y el momento en el
que se obtiene el primer bloque de datos de 16 bytes. La cache LI muestra un
porcentaje de aciertos del 89 %, de forma que el 11 % de los restantes
accesos a memoria deben resolverse en el nivel L2, L3, o en memoria. De este
11 %, un 5 % se resuelven en la cache L2, y así sucesivamente. Utilizando
estos tres niveles de cache, solo un 3 % de las referencias necesitan acceder a
memoria. Sin el tercer nivel, la proporción de accesos a memoria principal se
duplicaría.
Tabla 16.1. Porcentajes típicos de aciertos de
cache en una configuración del SMP S/390
Subsistema
de memoria
Cache Li
Cache L2
Cache L3
Memoria
Penalización de acceso
(ciclos de PU)
15
14
32
Tamaño
de cache
32 KB
256KB
2MB
8 GB
Porcentaje
de aciertos
89 5
33