Tema 08: Semáforos Unidad 01: Conceptos y componentes de un sistema operativo Material basado en: Sistemas Operativos, Quinta edición por William Stallings Contenido Objetivos de aprendizaje Al analizar este tema el estudiante deberá ser capaz de: ○ Discutir los conceptos básicos relacionados con la concurrencia, como las condiciones de carrera, las preocupaciones del sistema operativo y los requisitos de exclusión mutua. ○ Comprender los enfoques de hardware para apoyar la exclusión mutua ○ Definir y explicar los semáforos. ○ Definir y explicar los monitores ○ Explicar el problema de los lectores/escritores. Semáforos ○ Dijkstra proporcionó enfoques significativos para tratar el problema de la concurrencia ○ Dijkstra imaginó un sistema operativo como un conjunto de procesos secuenciales, concurrentes y cooperativos → era necesario definir mecanismos para apoyar una cooperación eficiente. ○ Principio fundamental: “dos o más procesos pueden cooperar mediante señales simples” ○ Cualquier coordinación compleja puede ser soportada utilizando mecanismos de señalización. Semáforos ○ Uno de ellos son los semáforos. Sea un semáforo ○ Estas son al menos dos operaciones [importantes] ● semSignal(s): transmite una señal ● semWait(s): recibe una señal, si la señal esperada no se ha transmitido, entonces el proceso se suspende ○ Un semáforo puede verse como una variable que tiene un número entero que interactúa con tres operaciones ● inicialization, inicializado a un entero no negativo ● semWait, esta operación disminuye el valor. Si el valor se vuelve negativo, el proceso se bloquea. De lo contrario, el proceso continúa su ejecución. ● semSignal, esta operación incrementa el valor del semáforo. Si el valor resultante es menor o igual a cero, se desbloquea un proceso bloqueado por la operación semWait. Semáforos ○ Los semáforos "no pueden" ser inspeccionados y solo pueden ser manipulados a través de operaciones semWait y semSignal. ○ Datos sobre los semáforos ● Antes de que un proceso decremente un semáforo no sabe si será bloqueado o no. ● Un proceso incrementa un semáforo y otro proceso se activa, luego ambos se ejecutan simultáneamente. ● Un proceso que señala un semáforo no sabe si hay procesos en espera. Semáforos struct semaphore { int count; queueType queue; }; void semWait(semaphore s) { s.count -- ; i f ( s . c oun t < o) { /* place this procesa in s.queue */; /* block this procesa*/; } } void semSignal(semaphore s) { s.count++; i f ( s . c oun t < = O) { /* remove a procesa P from s.queue */; /* place procesa Pon ready list */; } } semWait y semSignal son operaciones atómicas Semáforos struct binary_semaphore { enum {zero, one} value; queueType queue; }; void semWaitB(binary_semaphore s} { if (s.value == one} s.value = zero; else { /* place this procesa in s.queue */; /* block this procesa*/; } } void semSignalB(semaphore s) { if (s.queue is empty()) s.value = one; else { /* remove a procesa P from s.queue */; /* place procesa Pon ready list */; } } Semáforos ○ Hay dos tipos de semáforos ● Semáforos no binarios también conocidos como semáforos con contador o semáforos generales ● Semáforos binarios ○ Una variante de los semáforos binarios se conoce como mutex. Los semáforos mutex esperan que el proceso que bloquea la exclusión mutua (establece el valor en 0), debe desbloquear la exclusión mutua (establece el valor en 1) Semáforos ○ Los semáforos de conteo y binarios tienen una cola para mantener los procesos de espera ○ ¿Cuál es la política de eliminación? ● FIFO → semáforo fuerte ● Política no específica → semáforo débil Semáforos fuertes - ejemplo Pro CD A Blo ked queu S maphor Ready qu u A ejecutó un semWait 0 Blo ked qu u ► =O ---s maphor Semáforos fuertes - ejemplo B ejecutó un semWait y fue bloqueado 0 _----1)1~1__-_l_ _ _.,.:...______L____,l__---1.,____j_l_B_,.l Blo leed queue s i--------• ~~~-A~C__.-- inaphor Re· y queu D ejecutó un semSignal y B se desbloquea Pro ·= O Blo leed queu S maphor B A R ady queu c----- - Semáforos fuertes - ejemplo 0 s=O Semaphor D B A.,..__ _ R adyqu u C, A y B ejecutaron semWait y B y son bloqueados D - - Blo ked queue D ejecutó un semSignal y C se desbloquea 0) B A Blo ked queu c..,____ = -2 S maphor Ready qu u Semáforos y exclusión mutua /* program mutualexclusion */ const int n = /* number of processes */; semaphore s = l; void P (int i ) { while (true ) { semWait (s ) ; /* critical section */ ; semSignal (s ) ; / * remainder */; } } void main () { parbegin ( P ( l ) , P ( 2 ) ,w, P (n )) ; } Semáforos y exclusión mutua /* program mutualexclusion */ const int n = /* number of processes */; semaphore s = l; void P (int i ) { while (true ) { semWait (s ) ; /* critical section */ ; semSignal (s ) ; / * remainder */; } } void main () { parbegin ( P ( l ) , P ( 2 ) ,w, P (n )) ; } Procesos accediendo a datos compartidos protegidos por un semáforo Cola del semáforos Valor del s máfor s [D e B A ! _______________________ smWai5(v __ @] -.- s mWait(s) - - - - - - - - - - - 1 Región f crítica i Ejecución normal Bloqueado en 1 semáforos E] semWait(s) , ----------------------------- ---- -i----8] 1 1 1 1 1 ______ 1cr----rr ____ --------------------- 1 1 i-----r--1 semSignal(s) _ - 1 semSignal(s) ! ----------i---semSignal(s) [D Nota: la ejecución normal sucede en paralelo pero las regiones críticas se serializan PROBLEMAS DE EXCLUSIÓN MUTUA 1. CONCURRENCIA La concurrencia de procesos es una técnica que permite la optimización óptima del procesador. Para ello, es necesario hacer cumplir dos conceptos importantes: sección crítica y exclusión mutua. 2. MODELOS DE SISTEMAS OPERATIVOS MULTITAREAS a. Multiprogramación: un solo computador, un solo procesador, pero actúa con varios procesos b. Multiprocesador: un solo computador, varios procesadores, pero actúa independientemente con varios procesos c. Multicomputador: varios computadores, varios procesadores, pero actúa independientemente con varios procesos 3. INTERACCION DE PROCESOS Competencia y colaboración, son las formas en la que los procesos concurrentes se relacionan para lograr la interacción entre ellos. a. Competencia: no se tiene conocimiento de los demás procesos b. Comunicación: se tiene conocimiento directo de los demás procesos c. Compartición: se tiene conocimiento indirecto de los demás procesos 4. SECCION CRÍTICA Es un proceso que no puede ser bloqueado o suspendido, permitiendo adueñarse del procesador e impedir que otros procesos ejecuten este mismo segmento mientras el primer proceso no termine su utilización. 5. EXCLUSIÓN MUTUA Solo un proceso puede acceder a la exclusión mutua Si un proceso se bloquea no afecte al resto Si un proceso accede a la sección critica no puede demorar indefinidamente Si ningún proceso esta en la SC, cualquiera puede ingresar a. Soluciones por software: por medio del algoritmo de Dekker b. Soluciones por hardware: c. Nuevas tipos soluciones i. Semáforos: utiliza un sistema de señales que permiten cumplir la exclusión mutua de manera potente y flexible ii. Monitores: facilitan a través de herramientas de sincronización la exclusión mutua iii. Paso de mensajes: proporcionan la sincronización y comunicación de los procesos de manera simultánea. 6. PROBLEMAS DE LA PROGRAMACIÓN CONCURRENTE a. Interbloqueo: el bloqueo permanente de procesos (normalmente formar una gráfica circular) Cuando el número de recursos es mayor o igual al número de procesos que los solicitan, se dice que se obtiene un caso de interbloqueo. b. Inanición: es la consecuencia del problema de interbloqueo, dejando al proceso bloqueado indefinidamente Si un proceso nunca logra la asignación de los recursos solicitados //Los datos son consumibles o reusables 7. SOLUCIONES DEL INTERBLOQUEO a. Prevención: se logra a partir del diseño del sistema operativo b. Detección: el sistema operativo ejecuta periódicamente un algoritmo que crea estrategias de recuperación ante la aparición del círculo vicioso de espera c. Predicción del mismo: se realiza mediante procesos dinámicos que establecen si la petición de un recurso podrá conducir a interbloqueo Introducción En el procesamiento secuencial cada uno de los procesos que llega a la memoria utiliza cualquiera de los recursos del sistema sin ningún tipo de prerrequisito. Para un sistema multigprogramado, cada proceso tiene la necesidad de compartir con los demás el espacio de direcciones y por ello se necesita dividir de manera apropiada la memoria, no necesariamente en partes iguales, de tal forma que se puedan ejecutar la mayor cantidad de procesos. De esta manera, se optimiza el uso del procesador durante una mayor cantidad de tiempo. Esta partición constituye la base fundamental de dos tipos de gestión de memoria denominados paginación y segmentación. Al incorporar al esquema la memoria virtual, el procesador deja de realizar el procedimiento de traducción de direcciones y para ello se crea el acceso directo a memoria o DMA, el controlador que permite la traducción de direcciones o CDMA, la función de intercambio y conceptos relevantes como hiperpaginación y tamaño de página. Propósitos de aprendizaje Propósito Global Establecer la importancia de la memoria principal y secundaria para los sistemas de cómputo actuales, identificando los diferentes niveles, interacciones y recursos presentes, determinando de esta forma un conjunto de acciones propias del sistema operativo en su función de administrador de la memoria y el almacenamiento. Propósitos Específicos • Conocer la jerarquía y organización general de la memoria y su importancia para el procesamiento por parte del sistema operativo. • Desarrollar y aplicar diferentes algoritmos para la obtención, colocación y reemplazo de procesos en memoria. • Identificar la evolución de las técnicas de división de memoria, desde las particiones y fijas y dinámicas hasta paginación y segmentación con memoria virtual. • Conceptualizar sobre tamaño de página, función de intercambio, traducción de direcciones e hiperpaginación. • Identificar las principales estrategias para la administración almacenamiento, entendido como la gestión de archivos y directorios. del Gestión de la memoria Los sistemas operativos monoprogramados no tenían problema para administrar la memoria, simplemente se dividía entre los segmentos reservados para el sistema y el resto podía ser utilizado indistintamente por el programa de usuario. Sin embargo, la multiprogramación involucró, entre muchos otros, el concepto de división de memoria que permitiera la ubicación de múltiples procesos de ejecución concurrente. La gestión de memoria tiene como objetivo establecer los parámetros bajo los cuales la memoria será dividida, para dar espacio al sistema operativo y a los diferentes procesos que la comparten. Por ello, la existencia de unos requisitos básicos para su implementación, los cuales determinan las acciones y políticas a implementar para que los procesos que ocupen la memoria, sean llevados al uso del procesador de manera eficiente y equitativa. La gestión de memoria se clasifica en dos: memoria principal y memoria virtual. Implementación en hardware para la carga de programas El procesamiento de las instrucciones se logra a través de la interacción entre los registros del procesador, las instrucciones del proceso y los datos necesarios para su ejecución, la cual incorpora una memoria de alta velocidad entre los registros del procesador y la memoria principal, la cual se denomina memora caché. Si los datos no están en la memoria, se deben mover allí antes que la CPU pueda operar sobre ellos. Cuando un proceso llega a memoria es necesario determinar el rango de direcciones legales al cual puede tener acceso, esto se logra a través del uso de los registros base y límite en el bloque de control de procesos PCB. Dichos registros solo pueden ser modificados por el sistema operativo ejecutándose en modo núcleo ya que afectan la estructura del PCB. De igual forma, la gestión de memoria requiere del método de división de memoria, el cual se clasifica en: particiones fijas de igual tamaño y particiones fijas de diferentes tamaños. Estos métodos de división de memoria traen consigo algún grado de desperdicio del espacio en memoria, de acuerdo con el tipo de partición. Paginación simple Este método divide la totalidad de la memoria en fragmentos del mismo tamaño denominados marcos de página. Difiere de las particiones fijas porque éstos son de inferior tamaño. De igual forma, en este modelo, los procesos son divididos en fragmentos del mismo tamaño de los marcos, los cuales se les denomina páginas. De esta forma, un proceso tendrá varias páginas asignadas que podrán ocupar marcos de página en la memoria, no necesariamente de forma contigua. Las direcciones lógicas para el modelo de paginación se componen de un número de página y un desplazamiento. Este método se convierte en la base de la división de la memoria en los sistemas operativos actuales. Segmentación simple La memoria es dividida de acuerdo al tamaño de cada proceso en pequeños fragmentos denominados segmentos, el cual tiene un tamaño máximo asignado. En memoria, los segmentos pueden ocupar posiciones no necesariamente contiguas. Se elimina la fragmentación interna manteniéndose la fragmentación externa en cantidades inferiores debido a la reducción del tamaño del segmento. Al igual que en paginación, se hace necesario la utilización de una estructura de datos en la cual se establece la ubicación en memoria de cada uno de los segmentos que componen el proceso denominada tabla de segmentos. Las direcciones lógicas en el esquema de segmentación también compuestas por un número de segmento y un desplazamiento. están Memoria virtual El método de memoria virtual fue introducido para garantizar que un mayor número de procesos pueda ser llevado a memoria para su ejecución y consiste en reservar un pequeño sitio del almacenamiento secundario, disco duro, para ser tratado bajo técnicas de lectura, trasporte y acceso de memoria principal. En este método, los procesos tendrán sus páginas o segmentos divididos unos en la memoria principal y otros en la memoria virtual, de tal forma que puedan compartir la memoria y por supuesto los demás recursos del sistema. La incorporación de la memoria virtual involucra la función de intercambio, encargada de establecer qué páginas o segmentos deberán ser removidas de la memoria principal en el caso en que un proceso solicite una página o segmento que no se encuentre en ella. Si la función de intercambio se realiza de manera frecuente, donde el procesador es monopolizado por la misma sin permitir la ejecución efectiva de procesos, se presenta el fenómeno de hiperpaginación. Paginación y segmentación con memoria virtual El modelo de paginación con memoria virtual distribuye las páginas de cada proceso en: aquellas indispensables para la ejecución del proceso, que se ubican en la memoria principal, a las cuales se les denomina conjunto residente, y el resto de páginas que se ubican en la memoria virtual. Para optimizar la búsqueda en memoria de las páginas de utilización más frecuente, cada proceso recurre a un apoyo adicional en hardware denominado Buffer de Traducción Adelantada o TLB, el cual contiene una lista con dichas páginas. El modelo de segmentación con memoria virtual cumple con las mismas características de paginación beneficiando en este caso la programación orientada a objetos, por ejemplo una clase que contiene múltiples métodos solo se compilan en el momento de ser necesitados por el programa, adicionalmente beneficia el concepto de protección. En estos modelos se hace evidente el uso de la función de intercambio, la definición de tamaño de página y el concepto de hiperpaginación. Soluciones en software para problemas de gestión de memoria Los algoritmos utilizados para cada una de las políticas mencionadas en este apartado, obedecen al mejoramiento del rendimiento general del sistema, minimizando la tasa de fallos de página. Dentro de las políticas se encuentran: • Lectura: Son estrategias que se utilizan para saber cuándo cargar una página en memoria. Esta política se clasifica a su vez en dos tipos de paginación. • Ubicación: consiste en saber dónde se ubicará la página que llega a la memoria principal en un proceso de intercambio. Se conforma de cuatro algoritmos. • Reemplazo: determina cuál página será la que cause las menores alteraciones al sistema y además colabore para que la página candidata a ser bajada tenga las menores opciones de ser la referenciada en el futuro inmediato. Existen cuatro algoritmos en esta categoría. • Vaciado: determina cuando debe escribirse una página modificada en la memoria virtual o mejor en el disco. Constituido por dos tipos de algoritmos. Resumen La administración de la memoria es una de las acciones asignadas al sistema operativo, con mayores incidencias en el rendimiento final del sistema. Hace parte de la planificación de mediano plazo, que es la encargada de establecer si se agrega un proceso más al conjunto de procesos que se encuentran parcial o totalmente en memoria. Dividir la memoria para hacer que múltiples procesos puedan hacer uso de la misma, requiere establecer qué criterio se tendrá en cuenta para este propósito, si es por paginación o por segmentación. En este punto, se integran dos conceptos importantes: tamaño de página y fragmentación interna que consiste en aquella porción de memoria asignada a un proceso, ubicada en la última página asignada al mismo, pero que este no utiliza. Finalmente se hace evidente hablar de la función de intercambio, la cual permite identificar, gestionar y traducir las direcciones de las páginas que deben moverse de la memoria principal a la memoria virtual, para lo cual se observan algunas políticas de ubicación, reubicación reemplazo y vaciado. PROBLEMAS DE EXCLUSIÓN MUTUA 1. La concurrencia se entiende como la competencia de procesos por: a. Recursos y servicios 2. Los procesos que requieren recursos y servicios en el sistema se relacionan de dos formas: Competencia, y: a. Cooperación 3. Al segmento de código desarrollado para un recurso, que no puede ser bloqueado o suspendido y que se ejecuta de forma atómica o sin divisiones, se le denomina: a. Sección crítica 4. Cuando uno de los procesos que compite por algún recurso entra en la sección crítica de este, se dice que existe un caso de: a. Exclusión mutua de procesos 5. El algoritmo de Dekker representa una solución al problema de exclusión mutua por: a. Software 6. Una solución al problema de exclusión mutua, diferente a las que se implementan en Software y Hardware, que utiliza el uso de señales para que de forma cooperativa se obligue a algunos de los procesos a detenerse mientras a uno se le concede el uso del recurso, se denomina: a. Semáforos 7. En la gráfica se representa un problema de programación concurrente, en donde a cada proceso se le ha asignado un recurso, pero está a la espera que se le asigne un segundo recurso solicitado. Esto es un ejemplo clásico de: a. Interbloqueo 8. Si un proceso nunca logra la asignación de los recursos solicitados, se dice que tiene un problema de: a. Inanición 9. De acuerdo con la clasificación de los recursos del sistema informático, los tipos de recursos son: a. Reusables y consumibles 10. Algunas de las técnicas utilizadas para la corrección del problema de interbloqueo son: Prevención, Detección y: a. Predicción ADMINISTRACIÓN DE MEMORIA 1. Los modelos de gestión de memoria de los sistemas operativos actuales se diferencian de los primeros sistemas operativos esencialmente por la utilización de: a. Memoria virtual 2. Principalmente el objetivo de la gestión de memoria se refiere a: a. Dividir la memoria para permitir la ejecución de múltiples procesos 3. El concepto de jerarquía de memoria se refiere a: a. Comparación de los diferentes elementos que componen la memoria en el sistema 4. Uno de los siguientes conceptos no es un requisito para la gestión de memoria: a. Función de intercambio 5. Un buffer o adaptador de velocidad entre la memoria principal y la memoria secundaria se denomina: a. Memoria caché 6. Los fragmentos de memoria desperdiciados por la asignación de páginas de igual tamaño se denomina: a. Fragmentación interna 7. En paginación con memoria virtual, los procesos son divididos en fragmentos denominados páginas mientras que la memoria se divide en fragmentos denominados: a. Marcos 8. Al proceso mediante el cual se selecciona una página de la memoria principal para descargarla y darle paso a otra página, que se encuentra en la memoria virtual, permitiendo la ejecución de múltiples procesos concurrentes, se le denomina: a. Función de intercambio 9. Cuando un proceso hace referencia a una página que no se encuentra en la memoria principal se produce un: a. Fallo de página 10. Una de las siguientes es una política de ubicación de procesos: a. Peor ajuste