José Andrés Auyón Cóbar 201579 Sistemas Operativos Catedrático: Juan Luis Garcia Zarceño Semestre 1, 2024 Creación y carga Ejercicio 1: Desarrollo del programa: 1. Utiliza dos procesos en bucles infinitos para simular la adquisición de dos recursos. 2. Uno de los procesos invierte el orden de adquisición de recursos, lo que conducirá a un deadlock. Preguntas: 1. Describe cómo funciona un algoritmo de detección de deadlock y cómo se relaciona con la concurrencia en sistemas operativos. Algoritmo de Detección de Deadlock: Un algoritmo de detección de deadlock examina el grafo de asignación de recursos y espera en un sistema para identificar si existe un ciclo. El grafo de asignación representa las relaciones de solicitudes y asignaciones entre procesos y recursos. Si se encuentra un ciclo en este grafo, se asume que hay un deadlock. Relación con la concurrencia en sistemas operativos: En sistemas operativos concurrentes, múltiples procesos compiten por recursos compartidos. La detección de deadlock es esencial para evitar situaciones donde los procesos quedan atrapados en un estado donde ninguno puede avanzar. Los algoritmos de detección permiten a los sistemas operativos gestionar eficientemente los recursos y prevenir bloqueos permanentes. 2. ¿Qué estrategias podrían implementarse para prevenir deadlocks en sistemas concurrentes más complejos que el ejemplo proporcionado? Estrategias para Prevenir Deadlocks: - Asignación ordenada de recursos: Define un orden para adquirir recursos y requiere que los procesos los adquieran en ese orden específico. - Asignación por lotes: Permite que los procesos adquieran todos sus recursos de una vez, reduciendo la posibilidad de deadlock. - Protocolo de exclusión mutua: Introduce un protocolo que asegura que los procesos adquieran recursos de manera exclusiva y los liberen de manera ordenada. 3. Explica cómo se podría modificar el código para introducir una situación de interbloqueo más sutil que no sea tan evidente como la inversión de recursos. Introducir una Situación de Interbloqueo Más Sutil: Puedes modificar el código permitiendo que los procesos intenten adquirir ambos recursos de manera concurrente pero en un orden diferente. Esto podría llevar a una situación en la que ambos procesos estén esperando a que el otro libere un recurso antes de continuar. La clave es crear una dependencia cíclica más sutil entre los procesos. 4. ¿Qué métodos de detección y resolución de deadlocks conoces y cómo se aplican en sistemas operativos modernos? Métodos de Detección y Resolución de Deadlocks: - Detección: Algoritmo del banquero, algoritmo de grafo de asignación de recursos. - Resolución: Liberación de recursos, terminación de procesos. Aplicación en Sistemas Operativos Modernos: - Los sistemas operativos modernos implementan algoritmos de detección para identificar deadlocks antes de que se conviertan en problemas críticos. - La resolución implica tomar medidas como liberar recursos para evitar o salir de situaciones de deadlock. - Sistemas operativos utilizan técnicas preventivas y correctivas para minimizar la posibilidad de deadlocks y garantizar la estabilidad del sistema. Ejercicio 2: Implementación del problema de los filósofos cenando: 1. Utiliza hilos y semáforos en C. 2. Evita deadlock sincronizando el acceso a los tenedores. Preguntas: 1. ¿Cuáles son las limitaciones del enfoque de solución con semáforos en el problema de los filósofos cenando? ¿Se pueden mejorar estas soluciones? Limitaciones: - Deadlock: Aunque el uso de semáforos ayuda a evitar deadlock en situaciones típicas, aún puede ocurrir en casos específicos, como la competencia por recursos limitados. - Hambre: Un filósofo podría pasar largos periodos sin obtener los tenedores si otros filósofos siempre adquieren los tenedores antes. Posibles mejoras: - Uso de Tiempo Limitado: Introducir un límite de tiempo para que un filósofo mantenga un tenedor antes de liberarlo si no ha podido adquirir el segundo tenedor. - Cambio de Estrategia: Permitir que los filósofos cambien su estrategia y suelten los tenedores si no pueden adquirir ambos, evitando bloqueos prolongados. 2. Describe un escenario en el que la implementación actual podría conducir a un deadlock y propón una solución alternativa para evitarlo. Escenario de Deadlock: - Si todos los filósofos intentan adquirir su tenedor izquierdo al mismo tiempo y luego esperan para adquirir el tenedor derecho, podría ocurrir un deadlock. Solución Alternativa: - Introducir un protocolo que evite que todos los filósofos adquieran tenedores al mismo tiempo. Podría ser algo así como introducir un orden específico para que los filósofos adquieran los tenedores o permitir que solo un número limitado de filósofos adquieran tenedores simultáneamente. 3. ¿Qué diferencias clave existen entre la solución con semáforos y otras técnicas de concurrencia, como monitores o variables de condición? Semáforos: - Permiten el control de acceso a recursos compartidos mediante la espera o liberación de semáforos. - Los semáforos no llevan información sobre qué hilo o proceso posee el recurso. Monitores: - Agrupan datos y operaciones en un solo objeto. - Proporcionan mecanismos integrados para controlar el acceso a los datos y garantizar exclusión mutua. Variables de Condición: - Permiten que los hilos esperen eventos específicos. - Utilizadas junto con cerrojos, permiten la sincronización de acceso a recursos compartidos. 4. ¿Cómo se puede garantizar la equidad en la asignación de recursos en el problema de los filósofos cenando? Garantizar Equidad: - Orden de Adquisición: Introducir un orden específico para que los filósofos adquieran los tenedores puede garantizar una asignación más equitativa. - Tiempo Limitado: Introducir un límite de tiempo para que un filósofo mantenga un tenedor antes de liberarlo si no ha podido adquirir el segundo tenedor, evitando la monopolización de los recursos. La equidad en la asignación de recursos implica evitar que un filósofo tenga una ventaja injusta sobre otros en la adquisición de tenedores, asegurando que todos tengan oportunidades similares. Ejercicio 3: Implementación del algoritmo del banquero: 1. Simula procesos que solicitan y liberan recursos dinámicamente. 2. Evita deadlock según el algoritmo del banquero. Al correr el programa en proceso 1: Para el proceso 2: En proceso 3: Preguntas: ¿Qué requisitos deben cumplirse para que un sistema esté en un estado seguro según el algoritmo del banquero? ¿Por qué es importante? Para que un sistema esté en un estado seguro según el algoritmo del banquero, se deben cumplir las siguientes condiciones: 1. La cantidad de recursos solicitados por un proceso no puede exceder la cantidad de recursos disponibles. - Esto garantiza que, incluso si todos los procesos solicitan recursos al mismo tiempo, el sistema aún puede satisfacer al menos uno de esos procesos. 2. La cantidad de recursos necesarios para completar la ejecución de un proceso no puede exceder la suma de los recursos disponibles y los recursos actualmente asignados a otros procesos. - Esto asegura que, incluso si todos los procesos solicitan recursos adicionales, todavía haya suficientes recursos en el sistema para que al menos uno de los procesos complete su ejecución. Es importante mantener el sistema en un estado seguro porque esto garantiza que siempre haya una secuencia segura de asignación de recursos que evita los deadlocks. Un estado seguro significa que, aunque todos los procesos soliciten recursos al mismo tiempo, el sistema puede asignarlos de manera que no se produzca un deadlock. Explica cómo se pueden detectar ciclos de espera en un grafo de asignación de recursos y cómo esto se relaciona con la posibilidad de un deadlock. En un grafo de asignación de recursos, los nodos representan procesos y recursos, y las aristas representan asignaciones. Un ciclo en este grafo indica la posibilidad de un deadlock, ya que significa que hay un conjunto de procesos y recursos que están mutuamente bloqueados, esperándose unos a otros. La detección de ciclos de espera se puede realizar utilizando algoritmos de detección de ciclos, como el algoritmo de detección de ciclos en un grafo dirigido. Si se encuentra un ciclo en el grafo de asignación de recursos, significa que existe una cadena de procesos esperando recursos que forman un ciclo, lo que podría conducir a un deadlock. ¿Cómo afectaría una implementación incorrecta del algoritmo del banquero al sistema? Proporciona ejemplos concretos. Una implementación incorrecta del algoritmo del banquero podría llevar a situaciones de asignación inseguras que podrían resultar en deadlocks. Por ejemplo, si no se verifica adecuadamente la seguridad antes de realizar asignaciones, podría ocurrir una asignación que lleve a un estado inseguro. Aquí hay un ejemplo simple: Supongamos que hay dos procesos (P1 y P2) y dos tipos de recursos (A y B). Inicialmente, el sistema tiene 1 recurso A y 1 recurso B. 1. P1 solicita 1 recurso A y 1 recurso B. El sistema verifica y concede la solicitud. 2. P2 solicita 1 recurso A y 1 recurso B. El sistema verifica y concede la solicitud. 3. P1 solicita 1 recurso A y 1 recurso B. El sistema, sin verificar la seguridad, concede la solicitud. 4. P2 solicita 1 recurso A y 1 recurso B. El sistema no puede satisfacer la solicitud, y ambos procesos quedan bloqueados en espera del otro. Este escenario conduce a un deadlock debido a una asignación incorrecta que viola las condiciones del algoritmo del banquero. ¿Cuál es la complejidad computacional del algoritmo del banquero y cómo podría impactar en sistemas con un gran número de procesos y recursos? La complejidad computacional del algoritmo del banquero es O(n^2 m), donde "n" es el número de procesos y "m" es el número de recursos. Esto se debe a que, en el peor caso, el algoritmo debe realizar verificaciones de seguridad para cada combinación de procesos y recursos. En sistemas con un gran número de procesos y recursos, la complejidad del algoritmo del banquero puede tener un impacto significativo en el rendimiento del sistema. A medida que tanto el número de procesos como el número de recursos aumentan, el tiempo necesario para realizar todas las verificaciones de seguridad puede volverse considerable, afectando la capacidad de respuesta del sistema en situaciones de alta carga. Es posible que en sistemas muy grandes, se prefieran enfoques alternativos que ofrezcan un rendimiento más eficiente, aunque con concesiones en términos de complejidad y garantías de seguridad.