Qué es Multiprocesamiento?
style=»background-color: white; color: black; text-align: justify;»> En informática, un proceso es una instancia de un programa informático que está siendo ejecutado. O programa simplemente Correr es también llamado como proceso.
style=»background-color: white; color: black; text-align: justify;»>
style=»background-color: white; color: black; text-align: justify;»> Multiprocessing significa «Tener dos o más de CPU en un solo sistema informático».
style=»background-color: white; color: black; text-align: justify;»>
Por ejemplo, si un sistema tiene doble núcleo, y hay dos procesos para ejecutar (execute) simultáneamente (al mismo tiempo), puede ser logrado mediante la asignación de cada uno de los procesos a cada núcleo del sistema. Por lo tanto, los dos proceso puede ejecutar simultáneamente.
style=»background-color: white; color: black; text-align: justify;»>
En otras palabras, el multiprocesamiento se define como proceso múltiple puede ejecutar al mismo tiempo en lugar de una tras otra
En multiprocesamiento, cada proceso tiene diferentes espacio de direcciones y recursos
class=»MsoNormal»>
style=»color: #0070c0;»> Diferentes tipos de multiprocesamiento?
style=»color: #c00000;»> SMP (multiprocesamiento simétrico): tratar a todas las CPUs igual
multiprocesamiento simétrico (SMP) implica una arquitectura de hardware multiprocesador en el que dos o más idénticos procesadores están conectados a una única memoria principal compartida y son controlados por una sola instancia del sistema operativo . Sistemas multiprocesador más comunes hoy en día usan una arquitectura SMP. En el caso de los procesadores multi-núcleo, la arquitectura SMP se aplica a los núcleos, tratándolos como procesadores separados. Los procesadores pueden estar interconectadas mediante autobuses, interruptores travesaño o redes de malla en el chip.
class=»MsoNormal»>
class=»MsoNormal»>
class=»MsoNormal»>
class=»MsoNormal»>
class=»MsoNormal»>
multiprocesamiento asimétrico (ASMP)
Qué es multithreading?
style=»background-color: white; text-align: justify;»> Proceso es una colección de temas. Tema es un proceso ligero. Ejecución del hilo es pequeña unidad de procesamiento de la ejecución.
style=»background-color: white; text-align: justify;»>
Cada proceso contiene muchos temas y todos los subprocesos comparten el mismo espacio de memoria
style=»background-color: white; text-align: justify;»> puede existir múltiples hilos dentro del mismo proceso y compartir recursos como la memoria, mientras que diferentes procesos no comparten estos recursos.
style=»background-color: white; text-align: justify;»> En un solo procesador , multithreading se produce generalmente por división de tiempo multiplexación (como en la multitarea): los interruptores de procesador entre los diferentes temas.
style=»background-color: white; text-align: justify;»> Este cambio de contexto generalmente ocurre con la frecuencia suficiente que el usuario percibe los hilos o tareas como correr al mismo tiempo.
class=»mw-headline»> ¿Cómo temas difieren de procesos
Threads se diferencian de los procesos del sistema operativo multitarea tradicionales en que:
- procesos suelen ser independientes, si bien existen temas como subconjuntos de un proceso
- procesos llevan mucho más información sobre el estado de las discusiones, mientras que varios subprocesos dentro de un estado de proceso proceso comparten así como la memoria y otros recursos
- procesos tienen espacios de direcciones separados, mientras que los hilos comparten su espacio de direcciones
- procesos interactúan sólo a través proporcionado por el sistema mecanismos de comunicación entre procesos
- cambio de contexto entre los hilos en el mismo proceso es generalmente más rápido que el cambio de contexto entre procesos
Programación para multithreading
hilos horario sistemas operativos en uno de dos maneras:
- multithreading Preemptive en general, se considera el enfoque superior, ya que permite que el sistema operativo para determinar cuándo debe ocurrir un cambio de contexto. La desventaja de multithreading preventivo es que el sistema puede hacer un cambio de contexto en un momento inadecuado, causando convoy de bloqueo, la inversión de prioridades u otros efectos negativos que se pueden evitar mediante el multithreading cooperativa.
- multithreading Cooperativa , por el contrario, se basa en los mismos temas a ceder el control una vez que estén en un punto de parada. Esto puede crear problemas si un subproceso está esperando un recurso que esté disponible.
Mecanismo de Protección para Hilos
Un hilo compartirán todas las variables globales y descriptores de fichero del proceso principal que permite al programador para separar múltiples tareas con facilidad dentro de un proceso.
style=»background-color: white; font-family: inherit; text-align: justify;»> Se comparte todo, menos cada hilo tendrá su propio contador de programa, la pila y los registros. Ya que cada hilo tiene su propia pila, las variables locales no serán compartidos entre los hilos
Dado que todos los subprocesos de un proceso comparten las mismas variables globales, surge un problema con la sincronización del acceso a variables globales. Por ejemplo, supongamos que tiene una variable X mundial y dos hilos A y B. Digamos que los hilos A y B se limita a incrementar el valor de X. Cuando el hilo A comienza a ejecutarse, copia el valor de X en los registros y los incrementos que . Antes de que llegue la oportunidad de escribir el valor de nuevo a la memoria, se suspende este hilo. La siguiente conversación se inicia, se lee en el mismo valor de X que la primera lectura del hilo, la incrementa y escribe de nuevo a la memoria. Entonces, el primer hilo finaliza la ejecución y escribe su valor del registro de nuevo a la memoria. Después de terminar estos dos temas, el valor de X se incrementa en 1 en lugar de 2 como era de esperar
Errores como este probablemente no ocurren todo el tiempo y así pueden ser muy difíciles de localizar. Esto se vuelve aún más de un problema en una máquina equipada con varios procesadores, ya que varios subprocesos pueden ejecutar al mismo tiempo en diferentes procesadores, cada uno de ellos la modificación de las mismas variables. La solución a este problema es utilizar un mutex (exclusión mutua) para asegurarse de que sólo se está accediendo a una sección particular de su código. Cuando cerraduras un hilo el mutex, tiene acceso exclusivo a la sección de código hasta que desbloquea el mutex. Si un segundo subproceso intenta bloquear el mutex mientras otro hilo lo tiene bloqueado, el segundo hilo bloque hasta el mutex está desbloqueado y es una vez más disponible.
En el último ejemplo, puede bloquear un mutex antes de incrementar la variable X, entonces X desbloquear después de incrementarlo. Así que vamos a volver a eso último ejemplo. Tema A bloqueará el mutex, cargar el valor de X en los registros, a continuación, incrementarlo. Una vez más, antes de que llegue la oportunidad de escribir de nuevo a la memoria, el subproceso B obtiene el control de la CPU. Se tratará de bloquear el mutex, pero el hilo A ya tiene el control de la misma, por lo que el subproceso B tendrá que esperar. Tema A obtiene la CPU de nuevo y escribe el valor de X en la memoria de los registros, y luego libera el mutex. La próxima vez que se ejecuta hilo B e intenta bloquear el mutex, que podrán, ya que ahora está libre. Tema B incrementará X y escribir su valor de nuevo a X a partir de los registros. Ahora, después de que ambos temas se han completado, el valor de X se incrementa en 2, como era de esperar.