En la programación de múltiples procesadores, hay múltiples CPU disponibles y, por lo tanto, es posible compartir la carga . Sin embargo, la programación de múltiples procesadores es más compleja en comparación con la programación de un solo procesador. En la programación de múltiples procesadores, hay casos en los que los procesadores son idénticos, es decir, HOMOGÉNEOS, en términos de su funcionalidad, podemos usar cualquier procesador disponible para ejecutar cualquier proceso en la cola.
Enfoques para la programación de múltiples procesadores:
Un enfoque es cuando todas las decisiones de programación y el procesamiento de E/S son manejados por un solo procesador que se llama Servidor maestro y los otros procesadores ejecutan solo el código de usuario . Esto es simple y reduce la necesidad de compartir datos. Todo este escenario se denomina multiprocesamiento asimétrico .
Un segundo enfoque utiliza el multiprocesamiento simétrico en el que cada procesador se autoprograma . Todos los procesos pueden estar en una cola lista común o cada procesador puede tener su propia cola privada para procesos listos. La programación continúa haciendo que el programador de cada procesador examine la cola de listos y seleccione un proceso para ejecutar.
Afinidad del procesador –
Afinidad de procesador significa que un proceso tiene afinidad con el procesador en el que se está ejecutando actualmente.
Cuando un proceso se ejecuta en un procesador específico, hay ciertos efectos en la memoria caché. Los datos a los que el proceso accedió más recientemente llenan la caché del procesador y, como resultado, los accesos sucesivos a la memoria por parte del proceso a menudo se satisfacen en la memoria caché. Ahora, si el proceso migra a otro procesador, el contenido de la memoria caché debe invalidarse para el primer procesador y la caché del segundo procesador debe volver a llenarse. Debido al alto costo de invalidar y repoblar cachés, la mayoría de los sistemas SMP (multiprocesamiento simétrico) intentan evitar la migración de procesos de un procesador a otro e intentan mantener un proceso ejecutándose en el mismo procesador. Esto se conoce como AFINIDAD DEL PROCESADOR .
Hay dos tipos de afinidad de procesador:
- Afinidad suave: cuando un sistema operativo tiene la política de intentar mantener un proceso ejecutándose en el mismo procesador pero sin garantizar que lo hará, esta situación se denomina afinidad suave.
- Hard Affinity: Hard Affinity permite que un proceso especifique un subconjunto de procesadores en los que puede ejecutarse. Algunos sistemas, como Linux, implementan la afinidad suave, pero también proporcionan algunas llamadas al sistema, como sched_setaffinity(), que admite la afinidad fuerte.
Balanceo de carga –
El equilibrio de carga es el fenómeno que mantiene la carga de trabajo distribuida uniformemente entre todos los procesadores en un sistema SMP. El balanceo de carga es necesario solo en sistemas donde cada procesador tiene su propia cola privada de procesos que son elegibles para ejecutar. El equilibrio de carga no es necesario porque una vez que un procesador queda inactivo, inmediatamente extrae un proceso ejecutable de la cola de ejecución común. En SMP (multiprocesamiento simétrico), es importante mantener la carga de trabajo equilibrada entre todos los procesadores para aprovechar al máximo los beneficios de tener más de un procesador; de lo contrario, uno o más procesadores permanecerán inactivos mientras que otros procesadores tienen cargas de trabajo altas junto con listas de procesadores esperando el UPC.
Hay dos enfoques generales para el equilibrio de carga:
- Migración de inserción: en la migración de inserción, una tarea comprueba de forma rutinaria la carga en cada procesador y, si encuentra un desequilibrio, distribuye uniformemente la carga en cada procesador moviendo los procesos de procesadores sobrecargados a inactivos o menos ocupados.
- Migración de extracción: la migración de extracción se produce cuando un procesador inactivo extrae una tarea en espera de un procesador ocupado para su ejecución.
Procesadores multinúcleo –
En los procesadores multinúcleo, varios núcleos de procesador se colocan en el mismo chip físico. Cada núcleo tiene un conjunto de registros para mantener su estado arquitectónico y, por lo tanto, aparece para el sistema operativo como un procesador físico separado. Los sistemas SMP que utilizan procesadores multinúcleo son más rápidos y consumen menos energía que los sistemas en los que cada procesador tiene su propio chip físico.
Sin embargo, los procesadores multinúcleo pueden complicar los problemas de programación. Cuando el procesador accede a la memoria, pasa una cantidad significativa de tiempo esperando que los datos estén disponibles. Esta situación se llama MEMORY STALL . Ocurre por varias razones, como la falta de caché, que está accediendo a los datos que no están en la memoria caché. En tales casos, el procesador puede pasar hasta el cincuenta por ciento de su tiempo esperando que los datos estén disponibles en la memoria. Para resolver este problema, los diseños de hardware recientes han implementado núcleos de procesador de subprocesos múltiples en los que se asignan dos o más subprocesos de hardware a cada núcleo. Por lo tanto, si un subproceso se detiene mientras espera la memoria, el núcleo puede cambiar a otro subproceso.
Hay dos formas de multiproceso de un procesador:
- Subprocesamiento múltiple de granularidad gruesa: en el subproceso múltiple de granularidad gruesa, un subproceso se ejecuta en un procesador hasta que se produce un evento de latencia prolongada, como una parada de memoria, debido a la demora causada por el evento de latencia prolongada, el procesador debe cambiar a otro subproceso para comenzar la ejecución. El costo de cambiar entre subprocesos es alto, ya que la canalización de instrucciones debe terminarse antes de que el otro subproceso pueda comenzar a ejecutarse en el núcleo del procesador. Una vez que este nuevo hilo comienza a ejecutarse, comienza a llenar la canalización con sus instrucciones.
- Subprocesamiento múltiple de grano fino: este subprocesamiento múltiple cambia entre subprocesos a un nivel mucho más fino, principalmente en el límite de un ciclo de instrucción. El diseño arquitectónico de los sistemas granulares incluye lógica para el cambio de subprocesos y, como resultado, el costo de cambiar entre subprocesos es pequeño.
Virtualización y subprocesos:
En este tipo de multiprocesadorprogramar incluso un solo sistema de CPU actúa como un sistema de múltiples procesadores. En un sistema con virtualización, la virtualización presenta una o más CPU virtuales a cada una de las máquinas virtuales que se ejecutan en el sistema y luego programa el uso de la CPU física entre las máquinas virtuales. La mayoría de los entornos virtualizados tienen un sistema operativo host y muchos sistemas operativos invitados. El sistema operativo host crea y administra las máquinas virtuales. Cada máquina virtual tiene un sistema operativo invitado instalado y las aplicaciones se ejecutan dentro de ese invitado. Cada sistema operativo invitado puede asignarse para casos de uso, aplicaciones o usuarios específicos, incluido el tiempo compartido o incluso la operación en tiempo real. Cualquier algoritmo de programación del sistema operativo invitado que asuma una cierta cantidad de progreso en un período de tiempo determinado se verá afectado negativamente por la virtualización. Un sistema operativo de tiempo compartido intenta asignar 100 milisegundos a cada intervalo de tiempo para dar a los usuarios un tiempo de respuesta razonable. Un segmento de tiempo dado de 100 milisegundos puede tomar mucho más de 100 milisegundos de tiempo de CPU virtual. Dependiendo de qué tan ocupado esté el sistema, el intervalo de tiempo puede demorar un segundo o más, lo que resulta en un tiempo de respuesta muy bajo para los usuarios que inician sesión en esa máquina virtual. El efecto neto de tales capas de programación es que los sistemas operativos virtualizados individuales reciben solo una parte de los ciclos de CPU disponibles, aunque creen que están recibiendo todos los ciclos y que están programando todos esos ciclos. Comúnmente, la hora del día los relojes en las máquinas virtuales son incorrectos porque los temporizadores no tardan más en activarse que en las CPU dedicadas.
Por lo tanto, las virtualizaciones pueden deshacer los buenos esfuerzos de algoritmos de programación de los sistemas operativos dentro de las máquinas virtuales.
Referencia –
Principios del sistema operativo – Galvin
Publicación traducida automáticamente
Artículo escrito por Ayush_Pandey_22 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA