Está en la página 1de 8

Introducción:

En el presente trabajo se tratará lo más impórtate de los sistemas multiprocesador (Comunicación y


sincronización de procesos en sistemas multiprocesador).
Hoy en día es inevitable utilizar solo un programa, por lo general utilizamos más de uno en un uso de sesión.
Los sistemas multiprocesador son la alternativa arquitectónica que la tecnología actual ha tomado para
incrementar el rendimiento.
Es necesaria la comunicación entre procesos si se desea que varios procesos puedan colaborar para realizar
una misma tarea.
Objetivos:
 Estudiar, analizar y extraer lo más importante de la comunicación y sincronización de procesos en un
sistema multiprocesador de forma clara, para así transmitir a los estudiantes la información de una
forma entendible

 Que el estudiante conozca de forma clara como los procesos se sincronizan y se comunica.
Sistemas Multiprocesador

Son aquellos sistemas que pueden montar en memoria uno o más programas a la vez. Pueden tener dos o más
procesadores o una serie de computadoras. Esto se ve hoy en día en cada dispositivo inteligente (computador,
celular, etc). Pueden trabajar de forma asimétrico o simétrica.

Multiprocesamiento simétrico: (SPM)


La arquitectura SMP (también llamada UMA, del inglés Uniform Memory Access, en español “acceso
uniforme a memoria”) se caracteriza por el hecho de que varias unidades de procesamiento comparten el acceso
a la memoria, compitiendo en igualdad de condiciones por dicho acceso, de ahí la denominación “simétrico”.

Es decir: permiten que cualquier procesador trabaje en cualquier tarea sin importar su localización en memoria.
Estos sistemas pueden mover fácilmente tareas entre los procesadores para garantizar eficientemente el trabajo.

Multiprocesador asimétrico.
A cada procesador se le asigna una tarea específica; el procesador maestro planifica y asigna el trabajo a los
procesadores esclavos.

Es decir: hay un procesador (maestro) en el cual se ejecuta el sistema operativo y los demás (esclavos) donde
se ejecutan las demás tareas

Comunicación y Sincronización entre procesos en Sistemas Multiprocesador

Antes que nada, es importante definir qué se entiende por proceso a la representación de la ejecución de un
programa, y es en esencia un flujo de ejecución. Según el sistema operativo, puede ser posible determinar el
contexto de un proceso.

El Sistema Operativo tiene, como uno de sus objetivos principales, administrar la compartición de los recursos
del CPU y cómo éstos son asignados a diferentes procesos. Los mecanismos de sincronización dentro del
sistema operativo se vuelven necesarios para el acceso a los recursos compartidos y la comunicación entre
procesos que se encuentren relacionados entre si, por ejemplo, dentro de una misma aplicación. El ciclo
primario de un proceso empieza, cuando el proceso requiere la CPU durante un periodo de tiempo, y pasa por
una serie de estados.

Estados de un proceso:

 Nuevo: Es la etapa de creación del proceso.


 Preparado (Ready): El proceso está listo y esperando a que se le asigne un procesador.
 Ejecución (Run): El proceso está en la CPU ejecutando instrucciones. Pueden suceder 3 escenarios:
 El proceso ejecuta todas sus líneas de código y finaliza.
 Pasa a un estado de espera mientras espera una acción externa como la entrada de información
 El proceso pasa a estado preparado de nuevo, debido a que se ha agotado su tiempo de ejecución.
 Bloqueado (Wait): El proceso está esperando a que ocurra alguna acción externa como una señal de
E/S.
El procesador se vale del planificador del procesador para examinar las colas de los procesos preparados o en
espera, para así poder asignar el procesador al proceso que más convenga.

Comunicación y Sincronización entre procesos


Si se desea que varios procesos colaboren entre sí para realizar una misma tarea, la comunicación de procesos
es imprescindible.

Podemos definir sincronización como el funcionamiento coordinado en la resolución de una tarea


encomendada.
Existen mecanismos de comunicación que permiten transferir cadenas de bytes, y estos son utilizados por el
Sistema Operativo, y son los procesos los que deben interpretar el significado de las cadenas transferidas para
trabajar en conjunto.

La comunicación entre procesos es algo puntual, es decir, que los mecanismos de comunicación y
sincronización son dinámicos y cuando uno de estos se necesita, se crea, se usa y luego se destruye.
Los servicios básicos de comunicación son:

 Crear: El proceso solicita la creación del mecanismo.


 Enviar o escribir: El proceso emisor envía información al proceso receptor.
 Recibir o leer: El proceso receptor recibe información.
 Destruir: El proceso solicita la destrucción del mecanismo de comunicación.

La comunicación entre procesos además de contar con mecanismos, puede ser.

1. Comunicación Síncrona: Esta consiste básicamente, en que los dos procesos ejecuten servicios de
forma simultánea. El emisor ejecuta el envío de información y se queda en espera, mientras que el
receptor ejecuta la recepción de la misma.

2. Comunicación Asíncrona: El emisor en este caso envía la información y sigue con su propia
ejecución, mientras tanto, el Sistema Operativo proporciona un lugar de almacenamiento temporal
para la información enviada, hasta que el receptor la solicite.

3. Persistente: El mensaje es almacenado todo el tiempo que sea necesario hasta poder ser entregado.
Ejemplo: e-mail.

4. Momentánea: Si el receptor no está operativo al momento que se realiza la comunicación, el mensaje


se descarta.

5. Simétrica: Es una comunicación bidireccional ya que cualquier proceso puede enviar o recibir
mensajes.

6. Asimétrica: Es una comunicación unidireccional donde un proceso es capaz de enviar un mensaje y


los demás solamente lo reciben.

La Comunicación entre procesos o Inter Process Communication (IPC) puede darse entre procesos que se
ejecutan de manera:

 Independiente: Este tipo de procesos no son alterados ni pueden alterar a otros procesos que se estén
ejecutando, ya que solamente interactúan consigo mismo, por así decirlo.
 Cooperativos: Estos procesos pueden ser afectados y afectar a los demás procesos que estén
ejecutándose, obviamente, si éstos otros, también son cooperativos.
El tipo de proceso responde a una serie de razones que sustentan la utilización de unos u otros. Algunas razones
para proporcionar entornos para la cooperación de procesos son:
 Compartir información: Puede suceder un escenario en el cual varios usuarios necesiten la
información de cierto archivo compartido, en tal caso, se debe proveer un entorno que permita el
acceso concurrente a la información requerida.
 Acelerar los cálculos: Si se cuenta con un CPU con multiprocesadores o bien múltiples canales de
E/S, se puede dividir una determinada tarea en subtareas que pueden ejecutarse de manera paralela,
para que así la tarea pueda realizarse más rápido.
 Modularidad: Si se quiere construir un sistema de forma modular, es necesario dividir la información
del sistema en distintos procesos o hebras.
 Conveniencia: Como usuarios, todos nos hemos topado con la necesidad de querer trabajar con
múltiples tareas simultáneamente, por ejemplo, estar navegando por internet, mientras escuchamos
música e imprimiendo un archivo al mismo tiempo.
Los mecanismos más usados para la comunicación y sincronización entre procesos son:

1. Paso por mensajes


Se puede ver como una lista enlazada de mensajes dentro del espacio de direccionamiento del núcleo.
Ejemplo: Una aplicación que cuente con los permisos necesarios, puede depositar en ella un mensaje que podrá
ser leído por otras aplicaciones. También se pueden asignar atributos a dichos mensajes, para así mantenerlos
ordenados por prioridad en lugar de por orden de llegada.

2. Memoria compartida
Permite que sea establecida una zona común de memoria entre dos o más procesos, y por lo tanto que puedan
acceder a todos los datos que en él se encuentren. El acceso a esta memoria debe ser de forma sincronizada
para evitar que existan conflictos entre los diferentes procesos que quieran acceder a la información. La
sincronización se lleva a cabo a través de rutinas de software que están basadas en las instrucciones de
sincronización que proporciona el hardware. El soporte por hardware tiene la ventaja de la velocidad, pero la
realización de software en las rutinas de sincronización, tiene la ventaja de la flexibilidad y la adaptabilidad a
diferentes situaciones.

El Sistema Operativo, a través de su gestor de memoria, es el encargado de hacer la traducción entre las
direcciones físicas y las virtuales. La memoria que está manejando el proceso, al igual que la memoria
compartida, serán virtuales, por lo que su dirección física puede variar al pasar el tiempo y no habrá problema,
ya que los procesos generan direcciones virtuales. Se dispone de 4 llamadas:
shmget(): Permite acceder a una zona de memoria compartida. Los argumentos que utiliza son:
 Una Clave
 Tamaño del segmento a crear
 El flag inicial de operación
Unicamente reserva el espacio necesario para alojar el segmento, el segmento no se crea
hasta que algún proceso se asigne a él. El valor de shmflg se compone con:
 IPC_CREAT: Crea un nuevo segmento en caso de no existir, caso contrario, comprueba
permisos del usuario y permite acceder a él con la clave del segmeto.
 IPC_EXCL: Se utiliza junto a IPC_CREAT para asegurar el fallo si el segmento existe.
 mode_flags: Los 9 bits menos significativos del número están reservados para el
establecimiento de permisos de acceso.
shmctl(): Nos brinda operaciones para el control de la memoria compartida. Algunas
operaciones disponibles son:
 IPC_STAT: Lee el estad de la estructura de control de memoria asociada y lo devuelve
 IPC_SET: Cambia el valor de los siguientes miembros de la estructura de datos.
 IPC_RMID: Marca una región de memoria compartida como destruida, esto se llevará a cabo
cuando el proceso que la adjuntaba deje de hacerlo.
 SHM_LOCK: Bloquea la zona de memoria compartida.
 SHM_UNLOCK: Desbloquea la zona de memoria compartida.
shmat(): Es la llamada que debe invocar un proceso para adjuntar una zona de memoria
compartida dentro de su espacio de direcciones. Recibe 3 parámetros:
 Indentificador del segmento (shmid)
 Dirección de memoria (shmaddr)
 Banderas
shmdt(): Es la operación que realizará el proceso anterior para desvincularse de una zona de
memoria compartida. Solo cuenta con el parámetro la dirección shmaddr.

3. Semáforos
Esta es una herramienta que sirve exclusivamente para la sincronización de los procesos, y permiten controlar
el acceso de varios procesos a recursos que sean comunes para más de uno. Es un objeto con un valor entero
al que se le puede asignar un valor inicial no negativo y al que solo se puede acceder utilizando dos operaciones:
 wait (down):
wait(s){
s=s-1;
if(s<0)
Bloquear al proceso;
}
 signal (up):
signal(s){
s=s+1;
if(s<=0)
Desbloquear al proceso;
}
En el estándar POSIX, un semáforo se identifica mediante una variable del tipo sem_t.
 Semáforos sin nombre: Permiten sincronizar a los procesos ligeros que son ejecutados en un
mismo proceso o los procesos que lo heredan a través de la llamada fork.
 Semáforos con nombre: Lleva asociado un nombre y sirve para sincronizar procesos sin
necesidad de que tengan que heredar el semáforo utilizando la llamada fork.

En cuanto a los recursos, los procesos compiten por el acceso a éstos, o bien, cooperan para comunicarse y
compartir información dentro de una aplicación.

Existen diferentes esquemas de comunicación y uno de los más conocidos es el esquema Cliente-Servidor,
donde los clientes producen peticiones que son consumidas por el servidor de un recurso determinado. Cuando
se utiliza este esquema, los procesos no comparten el espacio de direcciones.
Conclusión:

Estos modelos son bastante comunes, y han de usarse en los distintos sistemas operativos, muchos sistemas
implementan ambos, el paso de mensajes es útil de implementar en el paso de pequeñas cantidades de
información, resulta más fácil de implementar como mecanismo de comunicación entre computadoras.
Bibliografía:
 https://monografias.com/trabajos51/sincro-comunicacion/sincro-comunicacion.shtml
 https://es.wikipedia.org/wiki/Comunicaci%C3%B3n_entre_procesos
 http://wiki.inf.utfsm.cl/index.php?title=Comunicaci%C3%B3n_entre_procesos
 https://www.uv.es/varnau/OC_T5_5.pdf
 http://www.sc.ehu.es/acwlaroa/SO2/Apuntes/Cap2.pdf
 http://openaccess.uoc.edu/webapps/o2/bitstream/10609/8179/1/fserranocaTFC0611.pdf
 https://chsos20122910022.wordpress.com/2012/08/29/sistemas-multiprocesador/