Definicion Objetivos Funcion Sistema Operativo
El sistema operativo es el programa (o software) más importante de un ordenador. Para que funcionen los otros programas, cada ordenador de uso general debe tener un sistema operativo. Los sistemas operativos realizan tareas básicas, tales como reconocimiento de la conexión del teclado, enviar la información a la pantalla, no perder de vista archivos y directorios en el disco, y controlar los dispositivos periféricos tales como impresoras, escáner, etc. En sistemas grandes, el sistema operativo tiene incluso mayor responsabilidad y poder, es como un policía de tráfico, se asegura de que los programas y usuarios que están funcionando al mismo tiempo no interfieran entre ellos. El sistema operativo también es responsable de la seguridad, asegurándose de que los usuarios no autorizados no tengan acceso al sistema. Clasificación de los Sistemas Operativos
Los sistemas operativos pueden ser clasificados de la siguiente forma:
•Multiusuario: Permite que dos o más usuarios utilicen sus programas al mismo tiempo. Algunos sistemas operativos permiten a centenares o millares de usuarios al mismo tiempo.
•Multiprocesador: soporta el abrir un mismo programa en más de una CPU.
•Multitarea: Permite que varios programas se ejecuten al mismo tiempo.
•Multitramo: Permite que diversas partes de un solo programa funcionen al mismo tiempo.
•Tiempo Real: Responde a las entradas inmediatamente. Los sistemas operativos como DOS y UNIX, no funcionan en tiempo real.
Cómo funciona un Sistema Operativo
Los sistemas operativos proporcionan una plataforma de software encima de la cual otros programas, llamados aplicaciones, puedan funcionar. Las aplicaciones se programan para que funcionen encima de un sistema operativo particular, por tanto, la elección del sistema operativo determina en gran medida las aplicaciones que puedes utilizar.
Estructura Monolítica
Es la estructura de los primeros sistemas operativos constituidos fundamentalmente por un solo programa compuesto de un conjunto de rutinas entrelazadas de tal forma que cada una puede llamar a cualquier otra. Las características:
• Construcción del programa final a base de módulos compilados separadamente que se unen a través del ligador.
• Buena definición de parámetros de enlace entre las distintas rutinas existentes, que puede provocar mucho acoplamiento.
• Carecen de protecciones y privilegios al entrar a rutinas que manejan diferentes aspectos de los recursos de la computadora, como memoria, disco, etc.
Estructura Jerárquica
A medida que fueron creciendo las necesidades de los usuarios y se perfeccionaron los sistemas. Se hizo necesaria una mayor organización del software, del sistema operativo, donde una parte del sistema contenía subpartes y esto organizado en forma de niveles. Ejemplos: Multics y Unix.
Máquina Virtual
Se trata de un tipo de sistemas operativos que presentan una interface a cada proceso, mostrando una máquina que parece idéntica a la máquina real subyacente. Estos sistemas operativos separan dos conceptos que suelen estar unidos en el resto de sistemas: la multiprogramación y la máquina extendida. El objetivo de los sistemas operativos de máquina virtual es el de integrar distintos sistemas operativos dando la sensación de ser varias máquinas diferentes.
Sistemas Operativos
A finales de los 40's el uso de computadoras estaba restringido a aquellas empresas o instituciones que podían
pagar su alto precio, y no existían los sistemas operativos. En su lugar, el programador debía tener un
conocimiento y contacto profundo con el hardware, y en el infortunado caso de que su programa fallara, debía
examinar los valores de los registros y paneles de luces indicadoras del estado de la computadora para
determinar la causa del fallo y poder corregir su programa, además de enfrentarse nuevamente a los
procedimientos de apartar tiempo del sistema y poner a punto los compiladores, ligadores, etc; para volver a
correr su programa, es decir, enfrentaba el problema del procesamiento serial
TIPOS DE SISTEMAS OPERATIVOS
En esta sección se describirán las características que clasifican a los sistemas operativos, básicamente se
cubrirán tres clasificaciones: sistemas operativos por su estructura (visión interna), sistemas operativos por los
servicios que ofrecen y, finalmente, sistemas operativos por la forma en que ofrecen sus servicios (visión
externa).
2.1 Sistemas Operativos por su Estructura
Según [Alcal92], se deben observar dos tipos de requisitos cuando se construye un sistema operativo, los
cuales son:
Requisitos de usuario: Sistema fácil de usar y de aprender, seguro, rápido y adecuado al uso al que se le quiere
destinar.
Requisitos del software: Donde se engloban aspectos como el mantenimiento, forma de operación, restricciones
de uso, eficiencia, tolerancia frente a los errores y flexibilidad.
A continuación se describen las distintas estructuras que presentan los actuales sistemas operativos para
satisfacer las necesidades que de ellos se quieren obtener.
2.1.1 Estructura monolítica.
Es la estructura de los primeros sistemas operativos constituidos fundamentalmente por un solo programa
compuesto de un conjunto de rutinas entrelazadas de tal forma que cada una puede llamar a cualquier otra (Ver
Fig. 2). Las características fundamentales de este tipo de estructura son:
Construcción del programa final a base de módulos compilados separadamente que se unen a través del
ligador.
Buena definición de parámetros de enlace entre las distintas rutinas existentes, que puede provocar mucho
acoplamiento.
Carecen de protecciones y privilegios al entrar a rutinas que manejan diferentes aspectos de los recursos de la
computadora, como memoria, disco, etc.
Generalmente están hechos a medida, por lo que son eficientes y rápidos en su ejecución y gestión, pero por lo
mismo carecen de flexibilidad para soportar diferentes ambientes de trabajo o tipos de aplicaciones.
2.1.2 Estructura jerárquica.
A medida que fueron creciendo las necesidades de los usuarios y se perfeccionaron los sistemas, se hizo
necesaria una mayor organización del software, del sistema operativo, donde una parte del sistema contenía
subpartes y esto organizado en forma de niveles.
Se dividió el sistema operativo en pequeñas partes, de tal forma que cada una de ellas estuviera perfectamente
definida y con un claro interface con el resto de elementos.
Se constituyó una estructura jerárquica o de niveles en los sistemas operativos, el primero de los cuales fue
denominado THE (Technische Hogeschool, Eindhoven), de Dijkstra, que se utilizó con fines didácticos (Ver Fig.
3). Se puede pensar también en estos sistemas como si fueran `multicapa'. Multics y Unix caen en esa
categoría. [Feld93].
En la estructura anterior se basan prácticamente la mayoría de los sistemas operativos actuales. Otra forma de
ver este tipo de sistema es la denominada de anillos concéntricos o "rings" (Ver Fig. 4).
En el sistema de anillos, cada uno tiene una apertura, conocida como puerta o trampa (trap), por donde pueden
entrar las llamadas de las capas inferiores. De esta forma, las zonas más internas del sistema operativo o
núcleo del sistema estarán más protegidas de accesos indeseados desde las capas más externas. Las capas
más internas serán, por tanto, más privilegiadas que las externas.
2.1.3 Máquina Virtual.
Se trata de un tipo de sistemas operativos que presentan una interface a cada proceso, mostrando una máquina
que parece idéntica a la máquina real subyacente. Estos sistemas operativos separan dos conceptos que
suelen estar unidos en el resto de sistemas: la multiprogramación y la máquina extendida. El objetivo de los
sistemas operativos de máquina virtual es el de integrar distintos sistemas operativos dando la sensación de ser
varias máquinas diferentes.
El núcleo de estos sistemas operativos se denomina monitor virtual y tiene como misión llevar a cabo la
multiprogramación, presentando a los niveles superiores tantas máquinas virtuales como se soliciten. Estas
máquinas virtuales no son máquinas extendidas, sino una réplica de la máquina real, de manera que en cada
una de ellas se pueda ejecutar un sistema operativo diferente, que será el que ofrezca la máquina extendida al
usuario (Ver Fig. 5).
2.1.4 Cliente-servidor ( Microkernel)
El tipo más reciente de sistemas operativos es el denominado Cliente-servidor, que puede ser ejecutado en la
mayoría de las computadoras, ya sean grandes o pequeñas.
Este sistema sirve para toda clase de aplicaciones por tanto, es de propósito general y cumple con las mismas
actividades que los sistemas operativos convencionales.
El núcleo tiene como misión establecer la comunicación entre los clientes y los servidores. Los procesos
pueden ser tanto servidores como clientes. Por ejemplo, un programa de aplicación normal es un cliente que
llama al servidor correspondiente para acceder a un archivo o realizar una operación de entrada/salida sobre un
dispositivo concreto. A su vez, un proceso cliente puede actuar como servidor para otro." [Alcal92]. Este
paradigma ofrece gran flexibilidad en cuanto a los servicios posibles en el sistema final, ya que el núcleo provee
solamente funciones muy básicas de memoria, entrada/salida, archivos y procesos, dejando a los servidores
proveer la mayoría que el usuario final o programador puede usar. Estos servidores deben tener mecanismos
de seguridad y protección que, a su vez, serán filtrados por el núcleo que controla el hardware. Actualmente se
está trabajando en una versión de UNIX que contempla en su diseño este paradigma.
2.2 Sistemas Operativos por Servicios
Esta clasificación es la más comúnmente usada y conocida desde el punto de vista del usuario final. Esta
clasificación se comprende fácilmente con el cuadro sinóptico que a continuación se muestra en la Fig. 6.
2.2.1 Monousuarios
Los sistemas operativos monousuarios son aquéllos que soportan a un usuario a la vez, sin importar el número
de procesadores que tenga la computadora o el número de procesos o tareas que el usuario pueda ejecutar en
un mismo instante de tiempo. Las computadoras personales típicamente se han clasificado en este renglón.
2.2.2 Multiusuarios
Los sistemas operativos multiusuarios son capaces de dar servicio a más de un usuario a la vez, ya sea por
medio de varias terminales conectadas a la computadora o por medio de sesiones remotas en una red de
comunicaciones. No importa el número de procesadores en la máquina ni el número de procesos que cada
usuario puede ejecutar simultáneamente.
2.2.3 Monotareas
Los sistemas monotarea son aquellos que sólo permiten una tarea a la vez por usuario. Puede darse el caso de
un sistema multiusuario y monotarea, en el cual se admiten varios usuarios al mismo tiempo pero cada uno de
ellos puede estar haciendo solo una tarea a la vez.
2.2.4 Multitareas
Un sistema operativo multitarea es aquél que le permite al usuario estar realizando varias labores al mismo
tiempo. Por ejemplo, puede estar editando el código fuente de un programa durante su depuración mientras
compila otro programa, a la vez que está recibiendo correo electrónico en un proceso en background. Es común
encontrar en ellos interfaces gráficas orientadas al uso de menús y el ratón, lo cual permite un rápido
intercambio entre las tareas para el usuario, mejorando su productividad.
Uniproceso
Un sistema operativo uniproceso es aquél que es capaz de manejar solamente un procesador de la
computadora, de manera que si la computadora tuviese más de uno le sería inútil. El ejemplo más típico de este
tipo de sistemas es el DOS y MacOS.
Multiproceso
Un sistema operativo multiproceso se refiere al número de procesadores del sistema, que es más de uno y éste
es capaz de usarlos todos para distribuir su carga de trabajo. Generalmente estos sistemas trabajan de dos
formas: simétrica o asimétricamente. Cuando se trabaja de manera asimétrica, el sistema operativo selecciona
a uno de los procesadores el cual jugará el papel de procesador maestro y servirá como pivote para distribuir la
carga a los demás procesadores, que reciben el nombre de esclavos. Cuando se trabaja de manera simétrica,
los procesos o partes de ellos (threads) son enviados indistintamente a cualesquira de los procesadores
disponibles, teniendo, teóricamente, una mejor distribución y equilibrio en la carga de trabajo bajo este
esquema.
Se dice que un thread es la parte activa en memoria y corriendo de un proceso, lo cual puede consistir de un
área de memoria, un conjunto de registros con valores específicos, la pila y otros valores de contexto. Us
aspecto importante a considerar en estos sistemas es la forma de crear aplicaciones para aprovechar los varios
procesadores. Existen aplicaciones que fueron hechas para correr en sistemas monoproceso que no toman
ninguna ventaja a menos que el sistema operativo o el compilador detecte secciones de código paralelizable,
los cuales son ejecutados al mismo tiempo en procesadores diferentes. Por otro lado, el programador puede
modificar sus algoritmos y aprovechar por sí mismo esta facilidad, pero esta última opción las más de las veces
es costosa en horas hombre y muy tediosa, obligando al programador a ocupar tanto o más tiempo a la
paralelización que a elaborar el algoritmo inicial.
2.3. Sistemas Operativos por la Forma de Ofrecer sus Servicios
Esta clasificación también se refiere a una visión externa, que en este caso se refiere a la del usuario, el cómo
accesa los servicios. Bajo esta clasificación se pueden detectar dos tipos principales: sistemas operativos de
red y sistemas operativos distribuídos.
2.3.1 Sistemas Operativos de Red
Los sistemas operativos de red se definen como aquellos que tiene la capacidad de interactuar con sistemas
operativos en otras computadoras por medio de un medio de transmisión con el objeto de intercambiar
información, transferir archivos, ejecutar comandos remotos y un sin fin de otras actividades. El punto crucial de
estos sistemas es que el usuario debe saber la sintaxis de un cinjunto de comandos o llamadas al sistema para
ejecutar estas operaciones, además de la ubicación de los recursos que desee accesar. Por ejemplo, si un
usuario en la computadora hidalgo necesita el archivo matriz.pas que se localiza en el directorio
/software/codigo en la computadora morelos bajo el sistema operativo UNIX, dicho usuario podría copiarlo a
través de la red con los comandos siguientes: hidalgo% hidalgo% rcp morelos:/software/codigo/matriz.pas .
hidalgo% En este caso, el comando rcp que significa "remote copy" trae el archivo indicado de la computadora
morelos y lo coloca en el directorio donde se ejecutó el mencionado comando. Lo importante es hacer ver que
el usuario puede accesar y compartir muchos recursos.
2.3.2 Sistemas Operativos Distribuídos
Los sistemas operativos distribuídos abarcan los servicios de los de red, logrando integrar recursos (
impresoras, unidades de respaldo, memoria, procesos, unidades centrales de proceso ) en una sola máquina
virtual que el usuario accesa en forma transparente. Es decir, ahora el usuario ya no necesita saber la ubicación
de los recursos, sino que los conoce por nombre y simplementa los usa como si todos ellos fuesen locales a su
lugar de trabajo habitual. Todo lo anterior es el marco teórico de lo que se desearía tener como sistema
operativo distribuído, pero en la realidad no se ha conseguido crear uno del todo, por la complejidad que
suponen: distribuír los procesos en las varias unidades de procesamiento, reintegrar sub-resultados, resolver
problemas de concurrencia y paralelismo, recuperarse de fallas de algunos recursos distribuídos y consolidar la
protección y seguridad entre los diferentes componentes del sistema y los usuarios. [Tan92]. Los avances
tecnológicos en las redes de área local y la creación de microprocesadores de 32 y 64 bits lograron que
computadoras mas o menos baratas tuvieran el suficiente poder en forma autónoma para desafiar en cierto
grado a los mainframes, y a la vez se dio la posibilidad de intercomunicarlas, sugiriendo la oportunidad de partir
procesos muy pesados en cálculo en unidades más pequeñas y distribuirlas en los varios microprocesadores
para luego reunir los sub-resultados, creando así una máquina virtual en la red que exceda en poder a un
mainframe. El sistema integrador de los microprocesadores que hacer ver a las varias memorias, procesadores,
y todos los demás recursos como una sola entidad en forma transparente se le llama sistema operativo
distribuído. Las razones para crear o adoptar sistemas distribuídos se dan por dos razones principales: por
necesidad ( debido a que los problemas a resolver son inherentemente distribuídos ) o porque se desea tener
más confiabilidad y disponibilidad de recursos. En el primer caso tenemos, por ejemplo, el control de los cajeros
automáticos en diferentes estados de la república. Ahí no es posible ni eficiente mantener un control
centralizado, es más, no existe capacidad de cómputo y de entrada/salida para dar servicio a los millones de
operaciones por minuto. En el segundo caso, supóngase que se tienen en una gran empresa varios grupos de
trabajo, cada uno necesita almacenar grandes cantidades de información en disco duro con una alta
confiabilidad y disponibilidad. La solución puede ser que para cada grupo de trabajo se asigne una partición de
disco duro en servidores diferentes, de manera que si uno de los servidores falla, no se deje dar el servicio a
todos, sino sólo a unos cuantos y, más aún, se podría tener un sistema con discos en espejo ( mirror ) a través
de la red,de manera que si un servidor se cae, el servidor en espejo continúa trabajando y el usuario ni cuenta
se da de estas fallas, es decir, obtiene acceso a recursos en forma transparente.
2.3.2.1 Ventajas de los Sistemas Distribuídos
En general, los sistemas distribuídos (no solamente los sistemas operativos) exhiben algunas ventajas sobre los
sistemas centralizados que se describen enseguida.
Economía: El cociente precio/desempeño de la suma del poder de los procesadores separados contra
el poder de uno solo centralizado es mejor cuando están distribuídos.
Velocidad: Relacionado con el punto anterior, la velocidad sumada es muy superior.
Confiabilidad: Si una sola máquina falla, el sistema total sigue funcionando.
Crecimiento: El poder total del sistema puede irse incrementando al añadir pequeños sistemas, lo cual
es mucho más difícil en un sistema centralizado y caro.
Distribución: Algunas aplicaciones requieren de por sí una distribución física.
Por otro lado, los sistemas distribuídos también exhiben algunas ventajas sobre sistemas aislados. Estas
ventajas son:
Compartir datos: Un sistema distribuído permite compartir datos más fácilmente que los sistemas
aislados, que tendrian que duplicarlos en cada nodo para lograrlo.
Compartir dispositivos: Un sistema distribuído permite accesar dispositivos desde cualquier nodo en
forma transparente, lo cual es imposible con los sistemas aislados. El sistema distribuído logra un
efecto sinergético.
Procesos e hilos
Definición de proceso.
Espíritu animado de un programa
Es una ejecución concreta de un programa, con un camino determinado y un valor de sus variables determinados.
La unidad mínima de expedición y de asignación de recursos es el proceso.
Estados en los que puede estar un proceso.
• Listo. Tiene todo lo necesario para ejecutarse excepto el procesador.
• Suspendido. No está en memoria principal.
• Bloqueado. Está esperando un evento.
• Bloqueado y suspendido.
• Listo y suspendido.
Tareas e hilos.
Unidad mínima de asignación: tarea.
Unidad mínima de expedición: hilo.
Dos hilos de una misma tarea (denominados hilos pares) comparten el segmento de código, el segmento de datos y un espacio de pila, es decir, los recursos asignados a la tarea.
Podemos captar la funcionalidad de los hilos si comparamos el control de múltiples hilos con el control de múltiples procesos. En el caso de los procesos, cada uno opera independientemente de los otros; cada proceso tiene su propio contador de programa, registro de pila, y espacio de direcciones. Este tipo de organización es muy útil cuando los trabajos que los procesos efectúan no tienen ninguna relación entre si.
Pero cuando los trabajos a realizar van a necesitar, por ejemplo, la llamada a una misma función o bien, la compartición de una variable en memoria, nos interesará englobarlos en una tarea. Ej: Avion-Torre.
Cuando un hilo está en ejecución, posee el acceso a todos los recursos que tiene asignados la tarea.
Un hilo tendrá lo siguiente:
• Estado.
• Contexto del procesador. Punto en el que estamos ejecutando, la instrucción concretamente en la que nos hallamos. Es útil a la hora de reanudar un hilo que fue interrumpido con anterioridad, puesto que al guardar el contexto, guardamos la ultima instrucción que ejecutamos, y así podemos conocer por donde tenemos que continuar la ejecución del hilo.
• Pila de ejecución donde se irá metiendo y sacando instrucciones. (Lugar donde almacenaremos las instrucciones que van a ser ejecutadas).
• Espacio de almacenamiento estático donde almacenará las variables.
• Acceso a los recursos de la tarea, que son compartidos por todos los hilos de la tarea.
* Ventajas del uso de hilos.
• Se tarda menos tiempo en crear un hilo de una tarea existente que en crear un nuevo proceso.
• Se tarda menos tiempo en terminar un hilo que en terminar un proceso.
• Se tarda menos tiempo en cambiar entre dos hilos de una misma tarea que en cambiar entre dos procesos (porque los recursos no cambian, por ejemplo)
• Es mas sencillo la comunicación (paso de mensajes por ejemplo) entre hilos de una misma tarea que entre diferentes procesos.
• Cuando se cambia de un proceso a otro, tiene que intervenir el núcleo del sistema operativo para que haya protección. Cuando se cambia de un hilo a otro, puesto que la asignación de recursos es la misma, no hace falta que intervenga el sistema operativo.
Exclusión mutua (informática)
De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Para otros usos de este término, véase Exclusión mutua.
Los algoritmos de exclusión mutua (comúnmente abreviada como mutex por mutual exclusion) se usan en programación concurrente para evitar el uso simultáneo de recursos comunes, como variables globales, por fragmentos de código conocidos como secciones críticas.
La mayor parte de estos recursos son las señales, contadores, colas y otros datos que se emplean en la comunicación entre el código que se ejecuta cuando se da servicio a una interrupción y el código que se ejecuta el resto del tiempo. Se trata de un problema de vital importancia porque, si no se toman las precauciones debidas, una interrupción puede ocurrir entre dos instrucciones cualesquiera del código normal y esto puede provocar graves fallos.
La técnica que se emplea por lo común para conseguir la exclusión mutua es inhabilitar las interrupciones durante el conjunto de instrucciones más pequeño que impedirá la corrupción de la estructura compartida (la sección crítica). Esto impide que el código de la interrupción se ejecute en mitad de la sección crítica.
En un sistema multiprocesador de memoria compartida, se usa la operación indivisible test-and-set sobre una bandera, para esperar hasta que el otro procesador la despeje. La operación test-and-set realiza ambas operaciones sin liberar el bus de memoria a otro procesador. Así, cuando el código deja la sección crítica, se despeja la bandera. Esto se conoce como spin lock o espera activa.
Algunos sistemas tienen instrucciones multioperación indivisibles similares a las anteriormente descritas para manipular las listas enlazadas que se utilizan para las colas de eventos y otras estructuras de datos que los sistemas operativos usan comúnmente.
La mayoría de los métodos de exclusión mutua clásicos intentan reducir la latencia y espera activa mediante las colas y cambios de contexto. Algunos investigadores afirman que las pruebas indican que estos algoritmos especiales pierden más tiempo del que ahorran.
A pesar de todo lo dicho, muchas técnicas de exclusión mutua tienen efectos colaterales. Por ejemplo, los semáforos permiten interbloqueos (deadlocks) en los que un proceso obtiene un semáforo, otro proceso obtiene el semáforo y ambos se quedan a la espera de que el otro proceso libere el semáforo. Otros efectos comunes incluyen la Inanición, en el cual un proceso esencial no se ejecuta durante el tiempo deseado, y la inversión de prioridades, en el que una tarea de prioridad elevada espera por otra tarea de menor prioridad, así como la latencia alta en la que la respuesta a las interrupciones no es inmediata.
La mayor parte de la investigación actual en este campo, pretende eliminar los efectos anteriormente descritos. Si bien no hay un esquema perfecto conocido, hay un interesante esquema no clásico de envío de mensajes entre fragmentos de código que, aunque permite inversiones de prioridad y produce una mayor latencia, impide los interbloqueos.
Algunos ejemplos de algoritmos clásicos de exclusión mutua son:
• El algoritmo de Dekker.
• El algoritmo de Peterson.
Acciones Realizar en Interbloqueo
CONDICIONES PARA PRODUCIR INTERBLOQUEO
En la política del sistema operativo, deben darse tres condiciones para que pueda producirse un interbloqueo:
1- Condición de exclusión mutua: Cada recurso esta asignado a un único proceso o esta disponible.
2- Condición de posesión y espera: Los procesos que tienen, en un momento dado, recursos asignados con anterioridad, pueden solicitar nuevos recursos.
3- Condición de no apropiación: Los recursos otorgados con anterioridad no pueden ser forzados a dejar un proceso. El proceso que los posee debe liberarlos en forma explicita.
En la mayoría de los casos, estas condiciones son bastantes necesarias. 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 reanulación, que devuelva un proceso y sus recursos a un estado previo adecuado, desde el que el proceso puede finalmente repetir sus acciones.
Puede no existir interbloqueo con solo estas tres condiciones. Para que se produzca interbloqueo, se necesita una cuarta condición:
4- Condición de espera circular (o circulo vicioso de espera): Debe existir una cadena circular de dos o mas procesos, cada uno de los cuales espera un recurso poseído por el siguiente miembro de la cadena.
Las tres primeras condiciones son necesarias, pero no suficientes, para que exista interbloqueo. La cuarta condición es, en realidad, una consecuencia potencial de las tres primeras. Es decir, dado que se producen las tres primeras condiciones, puede ocurrir una secuencia de eventos que desemboque en un circulo vicioso de espera irresoluble. El circulo de espera de la condición 4 es irresoluble porque se mantienen las tres primeras condiciones. Las cuatro condiciones en conjunto constituyen una condición necesaria y suficiente para el interbloqueo.
PREVENCIÓN DEL INTERBLOQUEO
La estrategia básica de la prevención del interbloqueo consiste, a grandes rasgos, en diseñar su sistema de manera que esté excluida, a priori, la posibilidad de interbloqueo.
Los métodos para prevenir el interbloqueo son de dos tipos:
- Los métodos indirectos que consisten en impedir la aparición de alguna de las tres condiciones necesarias para que se de el interbloqeo.
- Los métodos directos que consisten en evitar la aparición del circulo vicioso de espera.
PREDICCIÓN DEL INTERBLOQUEO
Una forma de resolver el problema del interbloqueo, que se diferencia sutilmente de la prevención, es la predicción del interbloqueo. En la prevención de interbloqueo, se obligaba a las solicitudes de recursos a impedir que sucediera , por lo menos, alguna de las cuatro condiciones de interbloqueo. Esto se hace indirectamente, impidiendo la aparición de una de las tres condiciones necesarias (exclusión mutua, retención y espera, no apropiación) o directamente, impidiendo la aparición de un circulo viciosos de espera. Se llega así a un uso ineficiente de los recursos y una ejecución ineficiente de los procesos. Con predicción del interbloqueo, por otro lado, se pueden alcanzar las tres condiciones necesarias, pero se realizan elecciones acertadas para asegurar que nunca se llega al punto de interbloqueo. La predicción, por lo tanto, permite más concurrencia que la prevención. Con predicción del interbloqueo, se decide dinámicamente si la petición actual de asignación de un recurso podría, de concederse, llevar potencialmente a un interbloqueo. La predicción del interbloqueo necesita, por lo tanto, conocer las peticiones futuras de recursos. Enfoques para la predicción del interbloqueo: - - No iniciar un proceso si sus demandas pueden llevar a interbloqueo. - - No conceder una solicitud de incrementar los recursos de un proceso si esta asignación puede llevar a interbloqueo.
- DETECCIÓN DEL INTERBLOQUEO
- Las estrategias de prevención de interbloqueo son muy conservadoras; resuelven el problema limitando el acceso a recursos e imponiendo restricciones sobre los procesos. En cambio, las estrategias de detección de interbloqueo, no limitan el acceso a recursos ni restringen las acciones del proceso. Con la detección del interbloqueo, se concederán los recursos que los procesos necesiten siempre que sea posible. Periódicamente, el S. O. ejecuta un algoritmo que permite detectar la condición de circulo vicioso de espera. - La detección del interbloqueo es el proceso de determinar si realmente existe un interbloqueo e identificar los procesos y recursos implicados en él. Una posibilidad detectar un interbloqueo es monitorear cada cierto tiempo el estado de los recursos. Cada vez que se solicita o se devuelve un recurso, se actualiza el estado de los recursos y se hace una verificación para observar si existe algún ciclo. - Este método está basado en suponer que un interbloqueo no se presente y que los recursos del sistema que han sido asignados, se liberarán en el momento que otro proceso lo requiera
No hay comentarios:
Publicar un comentario