Concurrencia, exclusión mutua y sincronización.

Anuncio
Resumen de sistemas operativos. Segundo Corte. Secciones 703M- 704M y 705M
Msc Hungria Berbesi
Concurrencia, exclusión mutua y sincronización.
Multiporgramación: consiste en la gestión de varios procesos dentro de un sistema monoprocesador.
Multiprocesamiento: consiste en la gestión de varios procesos, dentro de un sistema multiprocesador.
Procesamiento distribuido, consiste en la gestión de varios procesos, ejecutándose en sistemas de
computadores múltiples distribuidas.
La concurrencia puede presentarse en tres contextos diferentes:
Múltiples aplicaciones: La multiprogramación se creó para permitir que el tiempo de
procesador de la máquina fuese compartido dinámicamente entre varias aplicaciones activas.
Aplicaciones estructuradas: como ampliación de los principios de del diseño modular y la
programación estructurada, algunas aplicaciones pueden implementarse eficazmente como un
conjunto de procesos concurrentes.
Estructura del sistema operativo: las mismas ventajas de estructuración son aplicables a los
programadores de sistema y se ha comprobado que algunos S.O. están implementados como
un conjunto de procesos o hilos.
En un sistema multiprogramado con un único procesador, los procesos se intercalan en el tiempo para
dar la apariencia de ejecución simultánea. La multiprogramación tiene ventajas ciertas, pero a su vez
crea ciertos problemas:
1. Compartir recursos globales estállenlo de riesgos. Por ejemplo, si dos procesos hacen uso al
mismo tiempo de la misma variable global y ambos llevan a cabo tanto lecturas como escrituras
de la variable, el orden en que se ejecuten las lecturas y escrituras es crítico.
2. Para el sistema operativo resulta difícil gestionar la asignación óptima de recursos. Por ejemplo,
el proceso A puede solicitar el uso y obtener el control, de un canal de entrada.- salida
particular y suspenderse antes de hacer uso del mismo. No es conveniente que el sistema
operativo simplemente bloqueara el canal e impidiera su uso por parte de otros procesos.
3. Resulta difícil localizar un error de programación porque los resultados no son, normalmente ni
deterministas reproducibles.
La lección que hay que aprender es que es necesario protegeré las variables globales compartidas y
otros recursos globales compartidos y que la única forma de hacerlo es controlar el código que accede
la variable. Si se impone a norma de que solo un proceso puede acceder a la variable en cada instante y
que una vez que la variable el procedimiento debe ejecutarse hasta el final antes de estar disponible
para otro proceso, no se producirá el tipo de error expuesto antes.
Labores del sistema operativo:
Se pueden enumerar los siguientes elementos de gestión y diseño del S.O.
1. El sistema operativo debe ser capaz de seguir la pista de los distintos procesos activos.
2. EL sistema operativo debe asignar y retirar los distintos recursos a cada proceso activo. Los
recursos considerados son: Tiempo de procesador, Memoria, Archivos y dispositivos de
entrada-salida.
3. El sistema operativo debe proteger los datos y los recursos físicos de cada proceso contra las
injerencias no intencionadas de otros procesos.
4. Los resultados de un proceso deben ser independientes de la velocidad relativa a la que se
realiza la ejecución de otros procesos concurrentes.
Interacción entre procesos:
Dependiendo del nivel de conocimiento que cada proceso tiene de la existencia de los demás los
procesos se pueden clasificar así:
1. Los procesos no tienen conocimiento de los demás: estos son procesos independientes que no
están pensados para operar juntos. Estos pueden ser tanto trabajos por lotes como sesiones
interactivas o una combinación de ambos. El S.O. tiene que encargarse de a competencia entre
recursos.
2. Los procesos tienen un conocimiento indirecto delos otros: los procesos no conocen
necesariamente a los otros por sus identificadores de proceso, pero comparten el acceso a
algunos objetos, como un buffer por ejemplo. Estos procesos muestran cooperación.
3. Los procesos tienen un conocimiento directo de los otros: los procesos son capaces de
comunicarse con los demás por el identificador de proceso y están diseñados para trabajar en
alguna actividad. Muestran cooperación.
Los procesos concurrentes entran en conflicto cuando compiten por el uso del mismo recurso.
Básicamente, es posible describir esta situación como sigue: dos o más procesos necesitan acceder a
un recurso durante el curso de su ejecución; ningún recurso es consciente de la existencia de otros y
no se ve afectado en su ejecución. De ahí que cada proceso debe dejar tal y como esté el estado de
cualquier recurso que utilice.
En el caso que haya procesos en competencia, se deben solucionar tres problemas de control.
EL primero es el NECESIDAD DE EXCLUSION MUTUA. Los recursos que son no compartibles y son
necesitados simultáneamente por un proceso se llaman recursos críticos y la parte del programa que
los utiliza se llama sección crítica del programa. Es importante que SOLO UN PROGRMAMA pueda
acceder a su sección crítica en un momento dado.
Hacer que se cúmplala exclusión mutua crea dos problemas de control adicionales: Uno es el
interbloqueo, ) deadlock. Considérese dos procesos, P1 y P2 y dos recursos R1 y R2. Supóngase que
cada proceso necesita acceder ambos recursos para llevar a cabo parte de su función. EN tal caso, es
posible que se preséntela siguiente situación: el sistema asigna R1 a P2 y R2 a P1. Cada proceso está
esperando a uno de los dos recursos, ninguno liberará el recurso que ya tiene hasta que adquiera el
otro y realice la función para la que necesita ambos. Se produce interbloqueo.
Un último problema de control es la inanición. Supóngase que tres procesos, P1, P2, y P3
necesitan acceder periódicamente al recurso R. Considérese la situación en la que P1 está en posesión
del recurso y tanto P2 como P3 están parados, esperando al recurso. Puede suceder que siempre que
P1 libere al recurso, P2 siempre lo tome y P3 se quede sin acceder al recuso. Se produce inanición o
starvation.
EL control de la competencia involucra al sistema operativo, porque es el sistema operativo el
que asigna los recursos. Además, los procesos deben ser capaces por sí mismos de expresar de algún
modo los requisitos de exclusión mutua, como puede ser bloqueando los recursos antes de usarlos.
Cooperación entre procesos por compartimiento: EL caso de cooperación por compartimiento
comprende los procesos que interactúan con otros procesos sin tener conocimiento explícito de ellos
Por ejemplo varios procesos pueden tener acceso a variables compartidas, archivos o bases de datos.
Los procesos pueden emplear y actualizar los datos compartidos sin hacer referencia a los otros
procesos, pero son conscientes de que estos procesos pueden tener acceso a los mismos datos. Los
mecanismos de control deben garantizar la integridad de los datos compartidos.
Se pueden presentar los mismos problemas que en el caso de competencia, esto es, exclusión mutua,
interbloqueo e inanición, pero además hay un diferencia. Se puede acceder a los datos de dos formas
distintas, para lectura y para escritura. Solo las operaciones de lectura deben ser mutuamente
exluyentes.
Cooperación entre procesos por comunicación.
Cuando los procesos cooperan por comunicación, en cambio, los distintos procesos participan en una
labor común que une a todos los procesos. La comunicación es una manera de sincronizar o coordinar
las distintas actividades. Puesto que en el paso de mensajes no se comparte nada entre procesos, no
necesario el control de la exclusión mutua para este tipo de comunicación. Sin embargo los problemas
de interbloqueo e inanición siguen presentes.
Requisitos para la exclusión mutua,
1. Debe cumplirse la exclusión mutua: solo un proceso de entre todos los que poseen secciones
críticas por el mismo recurso debe tener permiso para entrar en ella en un instante dado.
2. Un proceso que se interrumpe en una sección no crítica, debe hacerlo sin interferir con los
otros procesos.
3. Un proceso no debe poder solicitar acceso a una sección crítica para después ser demorado
indefinidamente, no puede permitirse el interbloqueo o la inanición.
4. Cuando ningún proceso está en su sección crítica, cualquier proceso que solicite entrar en la
suya puede hacerlo sin dilación o retardo.
5. No se deben hacer suposiciones sobre la velocidad relativa de los procesos o el número de los
procesadores.
6. Un proceso permanece en su sección crítica solo por un tiempo finito.
Soluciones por software.
EL algoritmo del matemático holandés Dekker fue presentado por Dijkstra en 1965. El algoritmo
resuelve el problema de la exclusión mutua sin interbloqueo y sin inanición. Un algoritmo i gual de
efectivo y más sencillo para entender fue presentado por Peterson en 1981. En el algoritmo de
Peterson la variable global señal, indica la posición de cada proceso con respecto a la exclusión mutua,
y la variable global turno resuelve los conflictos de simultaneidad.
Las soluciones por software suelen tener un alto coste y el riesgo de errores lógicos en el programaes
alto. Un segundo conjunto de métodos para soportar la exclusión mutua suponen el uso de
instrucciones especiales de máquina. Estos métodos reducen la sobercarga, pero son aún ineficientes
porque emplean la espera activa.
Principios generales de los semáforos.
Dos o más procesos pueden cooperar por medio de simples señales, de forma que se pueda obligar a
detener a un proceso en una posición determinada hasta que reciba la señal específica. Cualquier
requisito complicado de coordinación puede satisfacerse por medio de la estructura de señales
adecuada. Un semáforo es una herramienta programada para coordinar las señales entre los proc esos.
Para transmitir una señal por el semáforo s, los procesos ejecutan la primitiva signal(s). Para recibir
una señal del semáforo s, los procesos ejecutan la primitiva wait(s), si la señal correspondiente aún no
se ha transmitido, el proceso es suspendido hasta que tenga lugar la transmisión.
Para lograr el efecto deseado, se pueden contemplar los semáforos como variables que tienen un valor
entero sobre el que se definen las tres operaciones siguientes:
1. Un semáforo puede iniciarse con un valor no negativo.
2. La operación wait disminuye el valor del semáforo. Si el valor del semáforo se hace negativo, el
proceso que ejecuta wait se bloquea.
3. La operación signal incrementa el valor del semáforo. Si el valor no es positivo, se desbloquea
un proceso bloqueado por una operación wait.
Las primitivas wait y signal no pueden ser interrumpidas, es decir son consideradas atómicas.
Un semáforo binario solo puede tomar los valores 0 y 1.
En los semáforos se emplea una cola para mantener los procesos esperando en el semáforo. La
cuestión reside en el orden en que se retiran los procesos de dicha cola. La política más equitativa es
FIFO: el proceso que ha bloqueado durante más tiempo se libera de la cola, un semáforo que no
especifica el orden en el que se liberan los procesos de la cola es un semáforo débil.
Monitores:
Los semáforos son una herramienta básica pero potente y flexible para hacer cumplir la
exclusión mutua y coordinar procesos. Sin embargo, puede resultar difícil construir un programa
correcto por medio de semáforos.
Los monitores son estructuras de un lenguaje de programación que ofrecen una funcionalidad
equivalente a los semáforos y que son más fáciles de controlar.
Un monitor es un modulo de software que consta de uno o más procedimientos, una secuencia
de inicio y unos datos locales. Las características básicas de un monitor son las siguientes:
1. Las variables de datos locales están solo accesibles para los procedimientos del monitor y no
para procedimientos externos.
2. Un proceso entra en el monitor invocando uno de sus procedimientos.
3. Sólo un proceso puede estar ejecutando el monitor en un instante dado; cualquier otro
proceso que haya invocado al monitor quedará suspendido mientras espera a que el
monitor esté disponible
Paso de mensajes
Cuando los procesos interactúan unos con otros se deben satisfacer dos requisitos básicos: la
sincronización y la comunicación.
Concurrencia: Interbloqueo e inanición.
EL interbloqueo se puede definir como el bloqueo permanente de un conjunto de procesos que compite n por
recursos del sistema o bien se comunican unos con otros. Los interbloqueos suponen necesidades
contradictorias de recursos por parte de dos o mas procesos. El interbloqueo puede involucrar a recursos
reutilizables o consumibles. Un recurso consumible es que que se destruye al ser adquirido por un proceso,
como ejemplo están los mensajes y la información de los buffers. Un recurso reutilizable es quel que no se
agota o se destruye por el uso, como un canal E-S o una zona de memoria.
Condiciones de interbloqueo:
En la política del sistema operativo, deben darse tres condiciones para que pueda producirse
un interbloqueo:
1. Exclusión mutua: solo un proceso puede usar un recurso cada vez.
2. Retención y esperar: Un proceso pude retener unos recursos asignados mientras espera
que se le asignen otros.
3. No apropiación: ningún proceso puede ser forzado a abandonar un recurso que retenga.
4. Círculo vicioso de espera: existe una cadena cerrada de procesos, cada uno de los cuales
retiene, al menos, un recurso que necesita el siguiente proceso de la cadena.
En la mayoría de los casos, estas condiciones son bastantes necesarias. Por ejemplo, la
exclusión mutua hace falta para asegurar la consistencia de resultados y la integridad de la base
de datos. De forma similar, la apropiación no se puede aplicar arbitrariamente y, cuando se
encuentran involucrados recursos de datos, debe estar acompañada de un mecanismo de
recuperación y reanudación que devuelva un proceso y sus recursos a un estado previo
adecuado, desde el que el proceso pueda finalmente repetir sus acciones.
La estrategia de prevención del interbloqueo consiste, a grandes rasgos, en diseñar un sistema
de manera que esté excluida la posibilidad de interbloqueo. Los métodos pueden ser de dos
tipos: indirectos y directos.
En la predicción del interbloqueo, se pueden alcanzar las tres las tres condiciones necesarias ,
pero se realizan las elecciones acertadas para asegurar que nunca se llega al punto de
interbloqueo. La predicción permite mas concurrencia que la prevención. Las estrategias de
prevención del interbloqueo son muy conservadoras, solucionan el problema del interbloqueo
limitando el acceso a los recursos e imponiendo restricciones a los procesos. En el lado
opuesto, las estrategias de detección del interbloqueo no limitan el acceso a los recursos ni
restringen las acciones de los procesos. Con detección del interbloqueo, se concederán los
recursos a los procesos que los necesiten siempre que sea posible.
Gestión de memoria
Al realizar un estudio de los diversos mecanismos y políticas relacionadas con la gestión de memoria, vale la
pena tener en mente los requisitos que intentan satisfacer. Se propone una lista con cinco requisitos:
Reubicación
Protección
Compartición
Organización lógica
Organización física.
Reubicación: En un sistema multiprogramado, la memoria principal disponible se encuentra compartido entre
varios procesos. En general, el programador no puede conocer por adelantado qué otros programas residirán en
la memoria en el momento de ejecución de su programa. Ademas se busca poder cargar y decargar los procesos
activos en la memoria principal para maximizar el uso del procesador, manteniendo una gran reserva de
procesos listos para ejecutarse.
Una vez que se ha descargado un proceso en el disco, ería bastante límitado que, cuando vuelva a ser cargado,
deba situarse en la misma región de la memoria principal que antes. En lugar de ello se necesita reubicar el
proceso en un área distinta de memoria.
Protección: cada proceso debe protegerse contra interferencias no deseadas de otros procesos, tanto
accidentales como intencionadas. Así pues, el código de un proceso no puede hacer referencia a posiciones de
memoria de otros procesos, confines de lectura o escritura, sin permiso. Normalmente, un proceso de usuario
no puede acceder a ninguna parte del sistema operativo, ni programas ni datos. De nuevo, el programa de un
proceso, normalmente no puede bifurcarse hacia una instrucción de otro proceso.
Compartimiento: Cualquier mecanismo de protección que se implemente debe tener flexibilidad de permitir el
acceso de varios procesos a la misma zona de la memoeria principal.
Organización lógica: De forma casi invariable, la memoria principal de un sistema informático se organiza como
un espacio de direcciones linéalo unidimensional que consta de una secuencia de bytes o palabras. La memoria
secundaria se organiza de memoria similar.
Organización física: La memoria del computador se organiza en al menos dos niveles: memoria principal y
memoria secundaria. La memoria principal ofrece un acceso rápido con un coste relativamente alto. Además, la
emoria principal es volátil, es decir, no proporciona almacenamiento permanente. Se borra al cortarse la
electricidad. La memoria secundaria es mas lenta, y mas barata que la memoria principal y normalmente esno
volátil, se mantiene al cortarse la electricidad, porque la tecnología que utiliza es magnética.
En el esquema d dos niveles de memoria, la organización del flujo de información entre la memoria p rincipal y la
memoria secundaria tiene un gran interés en el sistema.
Bifurcación
Referencia a
datos
Pila
Requerimientos de direccionamiento
para un proceso
Partición de la memoria.
La tarea principal del sistema de gestión de memoria es cargar los programas en la memoria principal para su
ejecución en el procesador. EN casi todos los sistemas multiprogramados modernos, esta tarea requiere un
sofisticado esquema llamado memoria virtual.
La memoria virtual está a su vez basada en el uso de una o dos técnicas básicas: paginación o segmentación.
Antes de ver éstas técnicas veremos algo mas sencillo, las particiones.
Particiones estáticas: EN la mayoría de los esquemas de gestión de memoria se puede suponer que el sistema
operativo ocupa una parte fija de la memoria principal y que el resto de la memoria está disponible para ser
usada por varios procesos. El esquema mas sencillo de gestión de la memoria disponible es dividirla en regione
con límites fijos.
Ejemplo de partición estática de una
memoria de 64 Mb
Una posibilidad es emplear particiones de igual tamaño, en este caso cualquier proceso cuyo tamaño sea menor
o igual que el tamaño de la partición pude cargarse en cualquier partición libre. Si todas las particiones están
ocupadas y no hay procesos residentes en estado Listo o Ejecutando, el sistema operativo puede sacar un
proceso de alguna de las particiones y cargar otro proceso de forma que siempre haya algún trabajo para el
procesador.
Las particiones estáticas de igual tamaño plantean dos dificultades:
Un programa puede ser demasiado grande para caber en una partición. EN este caso, el programador
debe diseñar el programa mediante superposiciones, para que solo una parte del programa este en
memoria principal en cada instante. Cuando se necesita un módulo que no está presente, el programa
de usuario debe cargar dicho módulo en la partición del programa, superponiéndose a los programas y
datos que se encuentren en ella.
El uso de la memoria principal es extremadamente ineficiente. Cualquier programa, sin importar lo
pequeño que sea, ocupará una partición completa. En el ejemplo de la figura, puede haber un programa
que ocupe menos de2 MBytes de memoria, aun así ocuparía una partición de 8 Mbytes cada vez que se
cargase. Este fenómeno en el que se malgasta el espacio interno de una partición cuando el bloque de
datos cargado es más pequeño que la partición, se denomina fragmentación interna.
Algoritmo de ubicación.
Con particiones del mismo tamaño, hay dos maneras posibles de asignar los procesos a las particiones.
La forma mas simple es asignar cada proceso a la partición mas pequeña en la que quepa. En este caso,
hace falta una cola de planificación para cada parición que albergue los procesos expulsados cuyo
destino es dicha partición. Se minimiza la fragmentación interna pero desde el punto de vista global, no
es muy eficiente. Cuando se va a cargar un proceso en la memoria principal, se selecciona la partición
más pequeña disponible que pueda albergar el proceso. SI todas las particiones están ocupadas, se
debe tomar una decisión de intercambio. Puede darse preferencia al intercambio de la partición mas
pequeña que pueda contener al procesos entrante. También es posible considerar otros factores tales
como prioridades y preferencia a descargar procesos bloqueados antes que procesos listos.
Desventajas:
EL numero de particiones especificadas en el momento de la generación del sistema limita el número
de procesos activos en el sistema.
Puesto que los tamaños de partición se programan en el momento de la generación del sistema, los
trabajos pequeños no hacen un uso eficiente del espacio de partciones
Asignación de memoria en partición
estática
Efectos de la partición dinámica.
Fragmentación externa.
Descargar