Please enable JavaScript.
Coggle requires JavaScript to display documents.
Gestión de Procesos, Puede ser llamada de nuevo e interrumpida en medio de…
Gestión de Procesos
Sincronización
Problema secciones libres
Condición de carrera
es cuando varios procesos o hilos pueden acceder y manipular los mismos datos concurrentemente
Problema productor-consumidor
Hay dos hilos, uno como productor de elementos de un vector y otro como consumidor de dichos elementos
No hay problema cuando no coinciden en su tiempo de ejecución, pero si hay al contrario, porque ambos acceden y manipulan el mismo dato
Este problema también ocurre en manipulación estructuras de datos
Exclusión mutua
Procedimiento mediante el cual se
controla el acceso a la sección crítica del código
(sección donde se acceden a variables y otros recursos compartidos), prohibiendo que otro hilo se ejecute también en una sección crítica al mismo tiempo
Otro problema es la
espera ocupada
porque gasta tiempo de CPU inútilmente, (usando mejor señales como esperando)
Por hardware
Permite
instrucciones atómicas
, siendo estas ininterrumpibles, mientras que el hardware se encargará de que sean ejecutadas secuencial y arbitrariamente
Semáforos
Objetos del S.O. permite controlar el acceso a una sección crítica, por medio de dos primitivas:
acquire y release —o wait y signal
Posee un
contador interno que se inicializa
, por lo que un semáforo inicializado a N solo permite que N hilos ejecuten la sección crítica al mismo tiempo.
Tipos
Anónimo
Solo existen en el espacio de direcciones del proceso que los crea, estando disponibles para sincronizar hilos del mismo proceso.
Con nombres
Son públicos al resto del sistema
Para resolver el problema de secciones libres
Un semáforo para la exclusión mutua entre ambos hilos al insertar y extraer elementos del vector.
Una solución es usar dos semáforos, uno para que cuente el número de elementos en el vector y otro para contar el número de huecos libres
Mutex
Objeto del sistema operativo que permite controlar el acceso a una sección crítica, de forma que
solo un hilo pueda ejecutarla al mismo tiempo.
(también denominados semáforos binarios)
No se pueden hacer igual que los semáforos para señalar eventos
Variables de condición
Soportan tres primitivas principales
wait(mutex)
Cuando un hilo desea esperar al evento que de la variable de condición, teniendo que haber conseguido el mutex, liberado cuando esta en
esperando
Varios hilos pueden usarlo, a la espera de que se use
notify
notify
Un hilo notifica el suceso del evento a los que están esperando, consiguiendo el mutex liberado por el wait, retornando wait para seguir ejecutándose
notifyAll
Un hilo notifica el suceso del evento a los que están esperando, todos son despertados e intentan adquirir el mutex que liberaron al llamar a wait. Cuando lo consiguen, retornan de wait para seguir ejecutándose, si todos hicieron wait sobre el mismo mutex, retorna wait de uno en uno, porque solo un hilo puede tener el mutex al mismo tiempo.
Problema Secciones críticas
Para la exclusión mutua usamos un mutex, protegiendo la sección crítica
Para indicar cuando el vector está lleno o que esté vacío, usamos dos variables de condición
Funciones reentrantes y seguras en hilos
Funciones reentrantes (ej.manejadores de señales)
Seguras en hilos
Se asegura la ejecución segura de estructuras compartidas de datos, por múltiples hilos al mismo tiempo
En POSIX
La mayoría de las funciones son seguras, excepto algunas muy concretas, pero existen variantes de ellas que si lo son (strerror() -> strerror_r())
Esperas
Cambiar el estado del hilo o proceso a esperado y moverlo a una cola de espera asociada al objeto de sincronización.
Iterar constantemente hasta que se cumple la condición, espera ocupada (recomendable para tiempos cortos)
Los mutex con esta técnica se les denomina, spinlocks (usados habitualmente en el núcleo)
Comunicación mediante paso de mensajes
Mecanismo
que permite a los procesos compartir información y sincronizar sus acciones sin compartir recursos
Se deben proporcionar al menos
dos llamadas al sistema
send(message)
receive(&message)
Tamaños
Fijo
Fácil implementación del SO pero complejo uso de la interfaz por las aplicaciones
Variable
Compleja implementación del SO pero una fácil prorgamación de las aplicaciones
Comunicación orientada a flujos
Sistema donde conservan los espacios entre los mensajes recibidos
Comunicación
Referenciación
Comunicación indirecta
Mensajes enviados a buzones, maillox o puertos
send( P, message ) para mandar un mensaje al puerto «P»
receive( P, &message ) para recibir un mensaje del puerto «P».
Comunicación directa
Se nombran explícitamente al receptor
Direccionamiento asimétrico
El proceso que envía identifica a que recibe
send( A, message ) receive( &pid, &message )
Direccionamiento simétrico
Tanto el proceso enviado como recibido se identifican
send( A, message ) receive( A, &message )
Buffering
Los mensajes por enlace de comunicación se almacenan en una cola temporal
Sin buffering
No pueden haber mensajes esperando en el enlace (bloqueándose la transmisión hasta que llegue al receptor)
Buffering automático
Capacidad limitada (bloqueándose la transmisión hasta que haya espacio en la cola)
Capacidad ilimitada (la transmisión nunca espera)
Operaciones síncronas (bloqueo) y asíncronas (sin bloqueo)
Envío
Síncrono, el proceso transmisor se bloquea cuando no queda espacio en la cola
Asíncrono, el proceso transmisor nunca se bloquea
Recepción
Asíncrono, el receptor nunca se bloquea
Síncrono, el receptor se bloquea cuando no hay mensajes en la cola y hasta que llegue alguno.
Ejemplos de sistemas de paso de mensajes
Colas de mensajes POSIX
Comunicación indirecta, con tamaño de mensaje variable, buffering con capacidad limitada y que soporta operaciones asíncronas.
Señales en POSIX
Kill
Comunicación directa, tamaño fijo,
Tuberias
Mecanismo de paso de mensajes de comunicación indirecta, orientada a flujos, capacidad limitada y, generalmente, comunicación síncrona
Tuberías anónimas
Existen en el espacio de direcciones del proceso que las crea, teniendo que heredarse para otros procesos
Tuberías con nombres
Públicas para el sistema, usadas en cliente-servidor
Sockets
Un solo extremo en un enlace de comunicación bidireccional
Mecanismo de paso de mensajes de comunicación indirecta, que admite tanto comunicación orientada a flujos como mensajes de tamaño variable, buffering de capacidad limitada y tanto comunicación síncrona como asíncrona
Procesos
Programas en ejecución
Compuestos:
Segmento de código
Instrucciones ejecutables (.text)
Segmento de datos
Variables globales y estáticas (.data)
Segmento BBS
Variables no inicializadas (.bss)
Pila
Datos temporales, parámetros, dir, entre otros..
Montón
Espacio de memoria asignado en la ejecución (heap)
Información sobre el estado actual de ejecución:
Contador de programa, registros de la CPU, entre otros...
Estados
Nuevo, en proceso de creación
Ejecutando, ejecutándose en CPU, escogido de estado
preparado
Esperando, esperando un evento
Preparado, esperando ha usar la CPU
Terminando, ha finalizado y devuelve los recursos asignados
Bloque de Controlo de Proceso (PCB)
Almacena
Estado del proceso, estado actual
Contador de programa, dirección de la próxima instrucción
Registros de la CPU, valor de estos
Información
Planificación de CPU
Gestión de memoria
Registro, cantidad de CPU, límites de tiempo, etc
Estado de la E/S, lista de E/S por procesos
Colas de planificación
Cola de trabajo
Todos los trabajos del sistema
Cola de preparados
Procesos preparados
Cola de espera
Procesos esperando, pasando automáticamente a preparados y su cola
Cola de dispositivos
Procesos que están esperando a un E/S
Planificación
Planificador largo plazo
, selecciona los trabajos desde la cola de trabajos (almacenamiento sec.)
Sistemas multiprogramados
Planificador corto plazo
, selecciona los procesos de la cola de preparados a la CPU
Planificador medio plazo
, saca procesos de memoria, devolviéndolos cuando haya espacio
No se utiliza, al usar técnicas de memoria virtual
Cambios de contexto
Contador de programa
Registro de CPU
Estado del proceso
Información de gestión de la memoria
Operación sobre los procesos
Procesos cooperativos
Procesos independientes
, no puede ser afectado por otros procesos del sistema
Procesos cooperativos
, pueden ser afectados por procesos del sistema
Comunicación entre procesos
Memoria compartida
Usa regiones compartidas de la memoria para compartir información
Paso de mensajes
Usan funciones del S.O. para enviar mensajes entre ellos sin compartir memoria
Procesos del sistema: Ejecutan en los programas del sistema
Procesos de usuario: Ejecutan en programas de aplicación
Hilos
Secuencias de instrucciones sobre la CPU
En los sistemas multihilos, el hilo es la
unidad básica
de la CPU y no el proceso
Composición de un hilo
Identificador, contador de programa, registros de la CPU, la pila, el código del programa, los segmentos BBS y de datos y el montón y otros recursos del proceso (Sockets,tuberias,etc)
Beneficios
Tiempo de respuesta
, pueden continuar tareas, aunque algunos hilos estén bloqueados
Compartición de recursos,
al realizar tareas simultáneamente comparten memoria, recursos, entre otros con respecto a los multiprocesos
Ahorra
la creación de procesos, al compartir los recursos de sus procesos y con un cambio de contexto menos drástico
Permite paralelismo en sistemas multiprocesador
Alternativas
Comunicación asíncrona
Más económico, pero más difícil de programar
Múltiples procesos
Realiza tareas simultáneamente, pero es costoso al crear y gestionar procesos y no comparten memoria
Multihilo
Soporte
Hilos a nivel usuario
, se inserta una librería en el espacio usuario, sin requerir ningún soporte especial, repartiendo dicha librería el tiempo de ejecución entre sus hilos
Hilos a nivel núcleo
, librería en el espacio del núcleo, accediendo a esta llamando al sistema, que escoge un
hilo preparado
y el cambio de contexto asigna un hilo distinto
TCB
(bloque de control de hilos) guarda la información privada del hilo necesaria y un puntero a su PCB (bloque de control de procesos) con el resto de la información
Modelos
Muchos a uno
Muchos hilos usuarios mapeados en un único hilo núcleo, se reparte tiempo de CPU entre los diferentes hilos del sistema, la librería reparte el tiempo hilos núcleo entre hilos usuario
Ventajas
Los hilos usuario son más baratos al estar su librería en el espacio usuario, mientras que los núcleo más recursos
El uso de la librería en el usuario es más sencilla al llamar simplemente a funciones
Cuando hay cambios de contexto al gestionarse en el proceso el cambio de hilos, es más rápido que en el núcleo
Inconvenientes
No se pueden ejecutar en paralelo los hilos de un proceso
Un hilo puede
bloquear
la ejecución del resto de los hilos de su proceso, en circunstancias.
Uno a Uno
Un hilo usuario se mapea en un único hilo núcleo (solo hilos a nivel núcleo) las entidades planificadas son los hilos núcleo, siendo los usuario los mismos pero vistos desde el modo usuario
Ventajas
-Permite paralelismo en sistemas multiprocesadores
-Los hilos de un proceso pueden ejecutarse aunque se llame al sistema
Inconvenientes
-La
limitación
de los recursos del núcleo, también limita los nº de hilos del núcleo.
-Es más costoso al realizar llamadas en el núcleo
Muchos a muchos
Reune los beneficios de ambos pues crea hilos núcleo con librerías en este e hilos usuario con una librería aquí, pudiendo ejecutarse los usuario sobre los núcleo de su proceso
Desventaja
Alta complejidad en su montaje y coordinación
Ventajas
Paralelismo en sistemas multiprocesadores
Permite ejecutar un hilo usuario mientras otro llama al sistema, bloqueándose su hilo núcleo pero dejando a los demás usuarios y núcleos ejecutarse
Planificación de la CPU
Planificación expropiativa
Cuando cumple los 4:
Cuando ocurre una interrupción del temporizador, lo que permite detectar si un proceso lleva demasiado tiempo ejecutándose.
Cuando un proceso pasa de esperando a preparado. Por ejemplo, porque para un proceso ha terminado la operación de E/S por la que estaba esperando.
Planificación no expropiativa
Solo cumple los 2 casos :
Cuando un proceso pasa de ejecutando a esperando. Por ejemplo, por solicitar una operación de E/S, esperar a que un hijo termine, esperar en un semáforo, etc.
Cuando un proceso termina.
Memoria Compartida
Estrategia para comunicar procesos donde uno de ellos gana acceso a regiones de la memoria del otro, estando ambos de acuerdo
Eficiencia, rápido por tener la velocidad de la mem.principal
Conveniencia, sistema sencillo y fácil de usar
Anónima
Existe para el proceso que la crea y para sus procesos hijos, que heredan el acceso
Con nombre
Pública para el resto del sistema, como ocurre en las tuberías con nombre, los
objetos de memoria compartida con nombre
hay que crearlos antes de comenzar a utilizarlos.
Puede ser llamada de nuevo e interrumpida en medio de su ejecución
Solo modifica variables estáticas o globales, mediante operaciones leer-escribir-modificar, interrumpibles
No modifica su código y solo llama a funciones reentrantes