SISTEMAS OPERATIVOS – UNIDAD 3 – PROCESOS:
Programa:
Es un conjunto de instrucciones dadas en una secuencia lógica que cumplen un objetivo o
función. ENTIDAD ESTATICA.
Proceso:
Es una instancia de un programa en ejecución. También se los conoce como tareas.
Es un programa en ejecución con sus datos, pila y contador de programa. Es controlado y
ejecutado por el sistema operativo. ENTIDAD DINAMICA.
El contador de programa indica la siguiente instrucción a ejecutar.
Linux, es un sistema operativo multitarea y multiusuario. Esto quiere decir que múltiples
procesos pueden operar simultáneamente sin interferirse unos con los otros. Cada proceso se
ejecuta como si fuese el único proceso en el sistema y que tiene acceso exclusivo a todos los
servicios del sistema operativo.
En un sistema operativo multitarea, múltiples instancias de un programa pueden ejecutarse
simultáneamente. Cada instancia es un proceso separado.
Elementos de los Procesos – PCB:
Identificador: un identificador único asociado a este proceso, para distinguirlo del resto
de procesos.
Estado: si el proceso esta actualmente corriendo, esta en el estado de ejecución.
Prioridad: nivel de prioridad relativo al resto de procesos.
Contador de Programa: la dirección de la siguiente instrucción del programa que se
ejecutara.
Punteros a Memoria: incluye los punteros al código de programa y los datos asociados
a dicho proceso, además de cualquier bloque de memoria compartido con los
procesos.
Datos de Contexto: estos son datos que están presentes en los registros del procesador
cuando el proceso está corriendo.
Información de Estado de E/S: incluye las peticiones de E/S pendientes, dispositivos de
E/S (por ej. una unidad de cinta) asignados a dicho proceso, una lista de los ficheros en
uso por el mismo, etc.
Información de Auditoria: puede incluir la cantidad de tiempo de procesador y de
tiempo de reloj utilizados, asi como los limites de tiempo, registros contables, etc.
Aspectos Generales:
El objetivo de la multiprogramación es mantener ocupado el procesador el mayor tiempo
posible.
El tiempo compartido permite brindar soporte a una gran cantidad de usuarios
simultáneamente.
Las transacciones en tiempo real permiten realizar consultas o actualizaciones a bases de
datos.
Estados:
La principal responsabilidad del SO es controlar la ejecución de los procesos, para lo cual hay
que describir el comportamiento que se querrá que tengan los procesos.
Modelo de Dos Estados:
Es el modelo más sencillo, teniendo en cuenta que el proceso puede estar ejecutándose en el
procesador o no; un proceso puede estar en dos estados: en Ejecución o No Ejecución.
Aquellos procesos que no están en ejecución tienen que guardarse en algún tipo de cola, para
que esperen su turno de ejecución.
Modelo de Cinco Estados:
El modelo de dos estados no es adecuado, ya que algunos procesos en el estado de No
Ejecución están listos para ejecutarse, mientras que otros están bloqueados esperando a que
termina una operación de E/S. La forma más común de solventar esto es dividir el estado de No
Ejecución en dos estados: Listo y Bloqueado. Luego se incorporan dos estados más por una
cuestión de utilidad, quedando cinco estados:
Ejecución: proceso actualmente en ejecución.
Listo: proceso preparado listo para ejecutarse.
Bloqueado: procesos que no se va a ejecutar hasta que se produzca cierto suceso
(como una operación de E/S).
Nuevo: proceso que se acaba de crear, pero que no ha sido admitido por el SO en el
grupo de procesos ejecutables. Normalmente permanece almacenado en disco.
Terminado: el proceso ha sido excluido del grupo de ejecutables, porque se detuvo o
porque fue abandonado por alguna razón. El SO conserva temporalmente las tablas y
otra información asociado al proceso terminado para que le dé tiempo a otros
programas para extraer información necesaria de él, luego se borran del sistema.
Ahora hay dos colas, una de Listos y una de Bloqueados. A medida que se admiten procesos en
el sistema, se sitúan en la cola de Listos. Cuando llega la hora de que el SO escoja otro proceso
para ejecutar, selecciona uno de la cola de Listos (cola FIFO). Cuando se produce un suceso,
todos los procesos de la cola Bloqueados que están esperando a dicho suceso se pasan a la
cola de Listos. El SO debe recorrer toda la cola de Bloqueados, buscando aquellos procesos que
esperan el suceso, pudiendo haber cientos o incluso miles de procesos en dicha cola.
Procesos Suspendidos:
Las actividades de E/S son mucho más lentas que las de cálculo y, por lo tanto, el procesador en
un sistema de monoprogramación está la mayor parte del tiempo desocupado. El procesador
es tan rápido comparado con la E/S que suele ser habitual que todos los procesos de memoria
estén esperando por E/S. Incluso con multiprogramación, el procesador podría estar
desocupado la mayor parte del tiempo. Una solución es el intercambio, o sea, mover una parte
del proceso o todo el proceso de la memoria principal al disco. Cuando ninguno de los
procesos en la memoria principal está en estado Listo, el SO pasa al disco uno de los procesos
en Bloqueado y lo lleva a una cola de Suspendidos. El SO trae entonces otro proceso de la cola
de Suspendidos o acepta la solicitud de creación de un nuevo proceso. La ejecución continúa
con el proceso recién llegado.
Podemos analizar el concepto de procesos suspendidos, definiendo un proceso suspendido
como el que cumple las siguientes características:
1. El proceso no está inmediatamente disponible para su ejecución.
2. El proceso puede estar o no a la espera de un evento, si es así, la condición de bloqueo
es independiente de la condición estar suspendido, y si sucede el evento que lo
bloquea, eso no habilita al proceso para su ejecución inmediata.
3. El proceso fue puesto en estado suspendido por un agente: bien el proceso mismo, el
proceso padre o el sistema operativo, con el propósito de prevenir su ejecución.
4. El proceso no puede ser recuperado de este estado hasta que el agente explícitamente
así lo indique.
Modelo de Siete Estados:
Al emplear el intercambio, se debe añadir un nuevo estado al modelo del comportamiento de
los procesos, el estado Suspendido. A su vez, un proceso en estado Suspendido puede estar
Bloqueado o Listo, por eso se necesitan cuatro estados:
Listo: proceso en memoria principal y listo para la ejecución.
Bloqueado: proceso en memoria principal, esperando un suceso.
Bloqueado y suspendido: proceso en memoria secundaria esperando un suceso.
Listo y suspendido: proceso en memoria secundaria disponible para la ejecución en
cuanto se cargue en la memoria principal.
Estructuras de Control del Sistema Operativo:
El sistema operativo debe “administrar” todos los recursos en un entorno de
multiprogramación. Para controlar los procesos y gestionar los recursos, el SO necesita
información de:
Tablas de Memoria:
- Controlan la memoria principal (RAM) y la secundaria.
- Controlan la asignación y liberación de memoria de los procesos.
- Registran dónde está alojado el proceso.
- Controlan el acceso no autorizado a ciertas regiones de memoria compartidas.
Tablas de Entrada/Salida:
- Administran los dispositivos y canales de Entrada/Salida.
- Mantienen el control del estado de las operaciones de Entrada/Salida.
- Mantienen el registro del área de memoria destinada a la transferencia de
Entrada/Salida (buffers).
Tabla de Archivos:
- Tabla de archivos abiertos:
o Mantienen el registro de los archivos actualmente en uso.
o Mantienen información sobre el estado de los archivos, sus atributos y
las direcciones de disco de sus bloques.
- Tablas de archivos en disco:
o Mantienen información relativa a la ubicación de los archivos en el
disco.
o Ejemplo: FAT, MFT, etc.
Tabla de Procesos:
- Mantienen el control de la ubicación de los procesos, de su estado y de sus
atributos: ID de proceso, ID de usuario, estado, ubicación en memoria,
prioridad del proceso, etc.
Análisis de los Procesos en Linux:
PID: es el identificador de proceso. Cada proceso tiene un identificador único.
USER (USUARIO): usuario propietario del proceso.
PR: prioridad del proceso. Si pone RT es que se está ejecutando en tiempo real.
NI: asigna la prioridad. Si tiene un valor bajo (hasta -20) quiere decir que tiene más
prioridad que otro con valor alto (hasta 19).
VIRT: cantidad de memoria virtual utilizada por el proceso.
RES: cantidad de memoria RAM física que utiliza el proceso.
SHR: memoria compartida.
S (ESTADO): estado del proceso.
%CPU: porcentaje de CPU utilizado desde la última actualización.
%MEM: porcentaje de memoria física utilizada por el proceso desde la última
actualización.
TIME+ (HORA+): tiempo total de CPU que ha usado el proceso desde su inicio.
COMMAND: comando utilizado para iniciar el proceso.
Finalización de Procesos:
PID:
Cada proceso que se inicia es referenciado con un número de identificación único conocido
como Process ID PID, que es siempre un entero positivo.
Foreground/Background:
Prioridad asignada a programas que corren en un entorno multitarea. En un entorno
multiusuario, los programas foreground (primer plano) tienen mayor prioridad y los programas
background (segundo plano), menor prioridad.
Estructuras de Control de Procesos:
El objetivo de estas estructuras es determinar la ubicación de los procesos y conocer sus
atributos para poder gestionarlos. Para esto se utiliza una tabla principal de procesos, que
mantiene una entrada para cada proceso y contiene la ubicación de cada proceso mediante un
puntero a la imagen del proceso.
Imagen del Proceso:
Contiene las siguientes partes:
Datos del usuario: es la parte de usuario que se puede modificar.
Programa de usuario: conjunto de instrucciones a ejecutar.
Pila del sistema: cada proceso contiene una o más pilas LIFO.
Bloque de control de proceso (PCB): conjunto de atributos para que el sistema
operativo pueda gestionar los procesos.
Pila de Sistema:
Es un conjunto ordenado de elementos a los que se accede en forma LIFO. Su objetivo es
almacenar los parámetros y direcciones de retorno de los procedimientos y llamadas al
sistema.
Bloque de Control de Procesos (PCB):
Es la principal estructura de datos de un SO para administrar los procesos. Contiene toda la
información que necesita el SO de un proceso (atributos).
1. Identificación del Proceso:
- PID (process identifier) utilizado como referencia cruzada a otras tablas.
- PPID (parent process identifier)
- UID (user identifier)
2. Información de Estado del Procesador:
- Registros visibles por el usuario: se accede por medio del lenguaje de máquina.
- Registros de control y estado: registros del procesador (contador de programa,
código de condición de operaciones aritméticas o lógicas, información de
estado).
- Punteros de Pila: cada proceso tiene una o mas pilas de sistema LIFO.
3. Información de Control del Proceso:
- Información de planificación y estado: estado del proceso, prioridad, algoritmo
de planificación.
- Estructuración de datos: punteros a otros procesos.
- Comunicación entre procesos.
- Privilegios de los procesos: acceso a memoria, instrucciones que se pueden
ejecutar.
- Gestión de memoria: punteros a tablas de páginas.
- Propiedad de los recursos y utilización: archivos abiertos, historial del uso del
procesador (utilizado por el algoritmo de planificación).
Funciones del Núcleo del Sistema Operativo:
Gestión de Procesos: se encarga de la creación y terminación de procesos, planificación
y activación de procesos, sincronización y comunicación entre procesos, gestión de los
bloques de control de procesos.
Gestión de Memoria: se encarga de la reserva de memoria para los procesos, el
swapping y la gestión de paginas y segmentos.
Gestión de Entrada-Salida: se encarga de la gestión de buffers, la reserva de canales de
E/s y la reserva de dispositivos para los procesos.
Funciones de Soporte: se encarga de la gestión de interrupciones, auditoria y la
monitorización.
Control de procesos:
MODOS DE EJECUCION:
Modo Usuario: ofrece un conjunto limitado de instrucciones que no permiten acceder
a determinados elementos del sistema. No se tiene acceso a las estructuras propias del
SO por seguridad.
Modo Núcleo: el software tiene un control completo del procesador, de sus
instrucciones, registros y memoria.
PSW (program status word): contiene un bit que indica el modo de ejecución actual.
CREACION DE PROCESOS:
Para crear un proceso, se siguen los siguientes pasos:
1. Asignar un PID único al proceso.
2. Reservar espacio de memoria para el proceso (imagen del proceso).
3. Inicialización del bloque de control del proceso.
4. Enlazar el proceso en la cola de procesos listos para su ejecución.
CAMBIO DE PROCESOS:
El sistema debería cambiar de contexto o de proceso en los siguientes casos:
Interrupción de Reloj: finaliza el tiempo de ejecución de un proceso y pasa al estado de
listo.
Interrupción de Entrada/Salida: cuando finaliza una operación de Entrada/Salida.
Fallo de Memoria (fallo de página): se intenta acceder a información que actualmente
no está en memoria RAM.
CAMBIO DE ESTADO DEL PROCESO:
Un cambio de estado se refiere a la transición de un proceso entre diferentes estados, como
listo, en ejecución, bloqueado, etc. Los pasos a seguir para realizar dicho cambio de estado son
los siguientes:
1. Salvar los registros del procesador.
2. Actualizar el PCB con el nuevo estado.
3. Mover el proceso a la cola correspondiente.
4. Seleccionar un nuevo proceso a ejecutar.
5. Actualizar el PCB seleccionado.
6. Actualizar las tablas de memoria.
7. Restaurar el estado del procesador (registros del nuevo proceso).
Introducción a los Hilos:
Un proceso se puede caracterizar en dos elementos independientes: la propiedad de recurso
(proceso o tarea), y la planificacion-ejecucion (traza, hilo, o proceso ligero).
Un hilo es un contexto de ejecución que se planifica de forma independiente, pero que
comparte un mismo espacio de direcciones con otros hilos.
Un proceso es un conjunto de uno o mas hilos y los recursos del sistema asociados (memoria,
datos, archivos abiertos y dispositivos). Este proceso es un programa en ejecucion. El proceso
es controlado y planificado por el SO.
Entornos Monohilo y Multihilo:
Entorno Monohilo: un solo hilo de ejecución. MS-DOS soporta un solo proceso y un
solo hilo. UNIX soporta múltiples procesos con un hilo cada uno.
Representación de un proceso:
Entorno Multihilo: todos los hilos comparten el estado y los recursos del proceso,
residen en el mismo espacio de direcciones y tienen acceso a los mismos datos.
Elementos de los hilos de un proceso: estado del hilo, contexto del procesador, pila de
ejecución, almacenamiento estático para las variables locales y acceso a memoria y
recursos del proceso, compartidos con el resto de los hilos del mismo proceso.
Ventajas de los Hilos:
- Facilita el diseño de aplicaciones que deben realizar distintas funciones
simultáneamente.
- Creación de un nuevo hilo más rápido que un proceso.
- Terminación de un hilo más rápido que un proceso.
- Rapidez en cambiar de un hilo a otro.
- Los hilos de un mismo proceso se comunican sin acceder al núcleo.
- Es más eficiente relacionar un conjunto de hilos que un conjunto de procesos.
Estados de los Hilos:
Los principales estados de un hilo son: listo, ejecución y bloqueado.
Implementación de Hilos:
1. ULT – User Level Thread (hilos a nivel de usuario): todo el trabajo de hilos lo realiza la
aplicación en el espacio de usuario. El núcleo no es consciente de la existencia de los
hilos. La biblioteca de hilos: crea y destruye hilos, intercambia mensajes y datos,
planifica la ejecución de hilos y mantiene el contexto de los hilos.
Ventajas:
- Se puede cambiar de hilo sin tener que cambiar a modo núcleo.
- La planificación la realiza la biblioteca de hilos.
- Los ULT se pueden ejecutar en cualquier sistema operativo.
Desventajas:
- Si se bloquea un hilo, se bloquean todos los hilos del proceso.
- No se puede aprovechar las ventajas del multiprocesamiento.
2. KLT – Kernel Level Thread (hilos a nivel de kernel): todo el trabajo de hilos lo realiza el
núcleo. La planificación se realiza en función de los hilos.
Ventajas:
- El núcleo puede planificar simultáneamente varios hilos de un mismo proceso
en múltiples procesadores (SMP).
- Si se bloquea un hilo de un proceso, se puede planificar otro hilo del mismo
proceso.
- Las funciones del núcleo del sistema operativo se pueden implementar con
multihilos.
Desventaja: requiere un cambio a modo núcleo para pasar de un hilo a otro.
Como Funcionan los Hilos de un Procesador (CPU):
Un hilo dentro de un procesador es la forma en que cada uno de los núcleos del CPU recibirá y
procesará la información. Cada núcleo puede solamente realizar una tarea a la vez.
Ahora, la forma en que se comportan estos es sencillamente alimentando de instrucciones al
CPU de manera cíclica en cada una de sus vueltas de reloj. Cada procesador tendrá que ir
resolviendo las instrucciones que son recibidas a través de estos canales y, finalmente, serán
resueltas bajo la prioridad que se le asigna mediante programación.
Implementación de Hilos:
Cada núcleo de un procesador puede realizar tareas independientes y ejecutar instrucciones de
manera paralela, lo que permite que múltiples procesos se ejecuten forma simultánea.
Cuando hay más de un núcleo, el S.O. puede asignar diferentes procesos a cada núcleo para
que se ejecuten en paralelo. Conocido como paralelismo a nivel de tarea. Cada núcleo tiene su
propia unidad de ejecución y puede realizar operaciones independientes, lo que mejora la
eficiencia y el rendimiento general del sistema.
El S.O. tiene la responsabilidad de administrar y asignar las tareas a los núcleos de manera
eficiente. Puede distribuirlos en diferentes núcleos para que se ejecuten de manera
concurrente. Cada proceso se ejecutará en su propio espacio de memoria y se beneficiará de la
capacidad de procesamiento de un núcleo específico.
Cuando se trata de hilos de ejecución de un mismo proceso, el S.O. puede asignar diferentes
hilos a distintos núcleos para aprovechar el paralelismo a nivel de subproceso. Esto permite
que los hilos de un proceso se ejecuten simultáneamente y, potencialmente, mejoren el
rendimiento global.
La decisión sobre cómo se asignan los procesos y los hilos a los núcleos puede variar según las
políticas de planificación del sistema operativo y la carga de trabajo en un momento dado. El
objetivo es optimizar la utilización de los recursos y maximizar la eficiencia del procesador
multinúcleo.
Procesamiento Paralelo:
Arquitectura Maestro/Esclavo:
El núcleo del SO se ejecuta siempre en el mismo procesador. El resto de procesadores ejecutan
programas en modo usuario. Un procesador posee el control de la memoria y dispositivos de
E/S.
Desventajas:
- Un fallo en el maestro puede producir la caída de todo el sistema.
- El maestro puede ser un cuello de botella.
SMP – Symmetric MultiProcessing:
El núcleo del SO se puede ejecutar en cualquier procesador. Existencia de dos o mas
procesadores que compartes la memoria principal.
Todos los procesadores comparten los dispositivos de E/S. Todos los procesadores pueden
desempeñar las mismas funciones (simétricos). Cada procesador se auto planifica.
El sistema informático está controlado por un SO integrado, que proporciona la interacción
entre los procesadores y procesos.
Ventajas:
- La ejecución de procesos o hilos se puede realizar en paralelo.
- Disponibilidad: como todos los procesadores pueden realizar las mismas funciones, un
fallo en un procesador no hará que la computadora deje de funcionar.
- Crecimiento incremental: se pueden aumentar las prestaciones del sistema, añadiendo
más procesadores.
Agrupaciones (Clusters):
Son un conjunto de computadoras interconectadas (nodos) que trabajan juntas creando la
ilusión de ser una única máquina. Los nodos están interconectados por una red de alta
velocidad.
Proporcionan escalabilidad, alto rendimiento y alta disponibilidad.
Evolución de la Arquitectura de los Sistemas Operativos:
SO Monolíticos SO por Capas Arquitectura Micronúcleo.
ARQUITECTURA MICRONUCLEO:
Solo las funciones esenciales del núcleo del SO permanecen en el núcleo o kernel. Las
aplicaciones y servicios se construyen sobre el micronúcleo y se ejecutan en modo usuario.
Muchos de los servicios del SO pasan a ejecutarse en modo usuario, y cada servidor se puede
comunicar con el resto de servidores. El núcleo permite la comunicación entre servidores,
administra los mensajes y protege el intercambio de mensajes.
Ventajas:
- Uniformidad de interfaces: mediante la utilización de mensajes.
- Extensibilidad: posibilidad de añadir nuevos servicios.
- Flexibilidad: se adapta a las necesidades de los usuarios.
- Portabilidad.
- Fiabilidad: un micronúcleo puede probarse rigurosamente.
- Soporte de Sistemas distribuidos.
- Soporte para Sistemas Operativos orientados a objetos.
Esta arquitectura micronúcleo tiene funcionalidades como la gestión de memoria a bajo nivel
(traducción de dirección virtual de página a marco físico), comunicación entre procesos (a
través de mensajes – se asocian puertos a cada proceso), y la gestión de interrupciones y E/S.
Planificación de Procesos (Scheduling o Calendarización):
Una computadora con multiprogramación suele tener varios procesos compitiendo por la CPU
al mismo tiempo (cuando dos o más estados están en estado Listo). Si sólo hay una CPU, es
preciso decidir cuál proceso se ejecutará a continuación, entrando en juego el planificador.
Además de escoger el proceso que más conviene ejecutar, el planificador debe preocuparse
por aprovechar con eficiencia la CPU, porque la conmutación de procesos es costosa.
Planificador: parte del SO que toma la decisión de que proceso ejecutar a continuación,
utilizando un algoritmo de planificación, y durante cuánto tiempo.
Tipos de Planificación:
Según la frecuencia con la cual se ejecuta:
Planificación a Largo Plazo: determina qué programas se admiten en el sistema para su
procesamiento. De esta forma, se controla el grado de multiprogramación. Una vez
admitido, un trabajo o programa de usuario se convierte en un proceso y se añade a la
cola del planificador a corto plazo.
Planificación a Medio Plazo: está relacionada con la función de intercambio (swapping).
Decide en qué momento se deben suspender y activar los procesos.
Planificación a Corto Plazo: es el encargado de seleccionar el proceso que está en
estado de listo. Es el planificador que se ejecuta con mayor frecuencia. Se ejecuta ante
los siguientes sucesos: interrupciones de reloj, interrupciones de E/S y llamadas al
sistema.
Criterios de Planificación:
- Equidad.
- Equilibrio mantener ocupadas todas las partes del sistema.
- Utilización del procesador.
- Minimizar el tiempo de respuesta procesos interactivos.
- Minimizar el tiempo de retorno procesos por lotes.
- Previsibilidad independencia con respecto a la carga del sistema.
- Maximizar el rendimiento.
Tipos de Algoritmos de Planificación:
Algoritmo No Apropiativo (sin expulsión): elige el proceso que se ejecutara y le permite
ejecutarse hasta que finaliza o se bloquea.
Algoritmo Apropiado (con expulsión): el proceso se ejecuta durante un tiempo
establecido (quantum). Se controla con interrupciones de reloj.
Algoritmos de Planificación:
Planificación en Sistemas de Procesamiento por Lotes (Tipos):
- Primero en entrar, primero en salir (FIFO): es un algoritmo no apropiativo y
sencillo de programar. La CPU se asigna a los procesos en el orden que la
solicitan.
- Primero el trabajo más corto: es un algoritmo no apropiativo. Se debe conocer
de antemano el tiempo de cada proceso.
- Menor tiempo restante: el planificador selecciona siempre el proceso cuyo
tiempo restante de ejecución sea el mas corto. Es un algoritmo apropiativo.
Planificación en Sistemas Interactivos (Tipos):
- Planificación Round Robin (apropiativo): algoritmo mas simple, antiguo,
equitativo, imparcial y mas utilizado. A cada proceso se le asigna un “quantum”
de ejecución. El valor del quantum varía entre 20-50 milisegundos.
- Planificación por Prioridad: a cada proceso se le asigna una prioridad.
Asignación de prioridad de forma estática o dinámica.
- Colas Múltiples: el objetivo del algoritmo es reducir el intercambio (cambio de
contexto). El intercambio de procesos conlleva a un costo administrativo para
el sistema operativo. Se manejan clases de prioridades.
- Planificación Garantizada: se establecen compromisos con los usuarios cuando
ingresan al sistema. Si hay N usuarios conectados, cada uno de ellos recibirá
1/N de la CPU.
Procesos Concurrentes:
Dos procesos son concurrentes si su ejecución se superpone en el tiempo (si la primera
instrucción de uno de ellos comienza antes que se complete la última instrucción del otro).
Procesamiento Concurrente: Procesamiento Secuencial:
Procesos Disjuntos o No Interactuantes: son procesos concurrentes que operan sobre
conjuntos de variables disjuntas.
Procesos Inter-Actuantes: son procesos dependientes del tiempo. La ejecución de un
proceso depende del otro. Ej: ls -l | grep arch?? | wc -l.
Multiprogramación:
---
Multiprocesamiento:
En un instante de tiempo se pueden ejecutar varios procesos dependiendo de la cantidad de
procesadores.
Comunicación entre Procesos:
Los procesos que trabajan en forma conjunta, comparten memoria para leer y escribir datos.
Ejemplo: spooler de impresión.
Condición de Competencia o Carrera:
Es una situación en la cual dos o más procesos o hilos leen o escriben datos compartidos y el
resultado final depende del orden de ejecución de las instrucciones en los múltiples procesos.
Para prevenir las condiciones de carrera, los procesos concurrentes cooperativos deben ser
sincronizados.
Sección critica: parte del programa que accede a recursos compartidos y que no puede ser
ejecutada mientras otro proceso este en sección de código correspondiente.
Exclusión mutua: dos o más procesos no pueden leer o escribir datos compartidos al mismo
tiempo.
Desventajas de la Concurrencia:
Requiere que cuando un proceso este ejecutando una sección crítica en la cual accede a un
recurso compartido, otros procesos no puedan hacerlo. Los demás procesos deberán intentarlo
más tarde.
Para evitar las condiciones de competencia hay que cumplir con lo siguiente:
1) No puede haber dos procesos DENTRO de sus secciones críticas para el mismo recurso
al mismo tiempo.
2) Ningún proceso que se ejecute fuera de su sección crítica puede bloquear a otro
proceso.
3) Ningún proceso debe esperar eternamente para ingresar a su sección crítica.
4) No se pueden hacer suposiciones acerca de la velocidad y cantidad de CPU.
Solución de Software:
Exclusión Mutua Sin Espera Ocupada:
Optimiza el uso de la CPU, evitando consultar constantemente la posibilidad de ingresar a la
sección crítica.
Utilización de dos primitivas de sincronización:
- SLEEP llamada al sistema que produce que el proceso se bloquee o desactive.
- WAKEUP permite activar un proceso que estaba suspendido o bloqueado.
(Ver problema del productor y consumidor en el Power Point 6).
Semáforos:
Consiste en una variable entera para contar el número de llamadas wakeup. Son un tipo de
variable a la que se le aplican dos operaciones, down y up. La operación down, aplicada a un
semáforo determina si su valor es mayor a 0. En tal caso, decrementa el valor y simplemente
continúa. Si el valor es 0, el proceso se desactiva sin terminar la operación down por el
momento. La operación up, incrementa el valor del semáforo indicado. Si uno o más procesos
están inactivos en espera de un semáforo, sin haber podido terminar una operación down
previa, el sistema escoge uno de ellos y le permite terminar dicha operación.
Ambas operaciones son atómicas, o sea que se garantiza que, una vez iniciada una operación
de semáforo, ningún otro proceso podrá tener acceso al semáforo antes de que la operación
haya terminado o se haya bloqueado.
Existen dos tipos de semáforos: semáforos de sincronización y semáforos binarios (estos
últimos garantizan la exclusión mutua).
Monitores:
Primitiva de alto nivel.
Un monitor es un conjunto de procedimientos, variables y estructuras de datos, agrupados en
un módulo o paquete. Sólo puede haber activo UN proceso en un monitor en un momento
determinado.
Si se define la Sección Crítica como un procedimiento monitor, se garantiza la exclusión mutua.
Mensajes:
Es un método de comunicación entre procesos utilizado en entornos centralizados y
Distribuidos. Un mensaje es una información que se intercambia entre un proceso emisor y un
proceso receptor.
Características:
- Formato:
C.R.C (código de
redundancia
cíclica)
controla la
integridad del
mensaje.
- Tipos de Comunicación:
o Sincrónica: el proceso emisor y receptor deben acordar previamente el
intercambio de información.
o Asincrónica: utilización de un buffer (almacenamiento intermedio) entre el
proceso emisor y receptor.
- Longitud:
o Fija: los datos y/o la cabecera tienen la misma longitud.
o Variable: los datos y la cabecera pueden variar en longitud.
Transferencia de Mensajes:
Reconocimiento (acknowledgement): el proceso receptor envía un mensaje de
“reconocimiento o ACK” al proceso emisor cuando recibe el mensaje correctamente
Autenticación: se debe autenticar el emisor antes de procesar los mensajes
provenientes de dicho proceso.
Rendimiento: cantidad de mensajes que se envían por unidad de tiempo.
Normalmente se expresan en bps (bits per second).
Recursos:
Un recurso es un elemento utilizado por un solo proceso en un momento determinado
(hardware y software). Es cualquier elemento que se debe solicitar, utilizar o liberar. Hay dot
tipos de recursos:
- Apropiativos: recurso que se le quita al proceso que lo tiene sin efectos dañinos.
Ejemplo: la memoria.
- No Apropiativos: recurso que no se lo puede quitar del proceso que lo tiene sin hacer
que el cómputo falle. Ejemplo: la grabación de un CD. Generalmente, es donde
intervienen los interbloqueos.
Interbloqueos (Deadlocks, Estancamiento):
Un conjunto de procesos se encuentra en un interbloqueo, si cada proceso del conjunto está
esperando un evento que sólo puede ser ocasionado por otro proceso del conjunto. Como
todos los procesos están esperando, ninguno podrá devolver ningún recurso y seguirán
bloqueados indefinidamente.
Estrategias para Enfrentar los Interbloqueos:
Algoritmo del Avestruz: consiste en ignorar el problema. Es preferible que se produzca
un interbloqueo esporádicamente y no sobrecargar el sistema para tratar de evitarlo.
Se debe hacer un análisis para determinar con cuanta frecuencia se produce un
interbloqueo.
Detección – Recuperación de un Interbloqueo: se permite que se produzca el
interbloqueo. El SO intenta detectar la ocurrencia de un interbloque y, en caso de
detectarlo, aplica alguna técnica de recuperación.
Recuperación de un interbloqueo:
Existen 3 formas de recuperarse frente a un interbloqueo:
Apropiación: se le quita el recurso al proceso temporalmente y se lo asigna a otro
proceso. Es de difícil implementación.
Rollback (Retroceso): periódicamente se realizan “puntos de verificación”. Se generan
archivos con el estado de cada proceso y los recursos asociados. El proceso se
restablece a una instancia anterior al interbloqueo.
Eliminación de Procesos: se eliminan procesos que puedan pertenecer al ciclo. Se
eliminan procesos que no forman parte del ciclo.
Evitar los Interbloqueos:
El sistema debe decidir si es seguro o no otorgar un recurso.
Se debe disponer de cierta información de antemano. Cada proceso debe determinar la
cantidad y tipo de recursos que utilizará. Se puede “evitar” un interbloqueo mediante una
asignación cuidadosa de los recursos.
Se dice estado seguro si el sistema garantiza que todos los procesos pueden finalizar su
ejecución. En cambio, se dice que hay estado inseguro si el sistema no puede brindar garantía
de que todos los procesos finalizaran su ejecución.
Prevenir los Interbloqueos:
Se pueden prevenir los interbloqueos si se garantiza que no se cumpla alguna de las
condiciones: exclusión mutua, posesión y espera, no apropiativo y espera circular.
Formas de atacar cada una de las consecuencias:
Exclusión Mutua: se delega la responsabilidad de la administración y acceso al recurso
al sistema operativo a través de procesos daemons.
Posesión y Espera: los procesos solicitan todos los recursos antes de comenzar su
ejecución. Si un proceso no puede tener todos los recursos que necesita, debe liberar
los que posee actualmente.
No Apropiativo: es difícil de anular esta condición. Si un proceso que mantiene algunos
recursos requiere otro recurso, no le puede ser inmediatamente asignado, entonces
todos los recursos mantenidos son liberados. Los recursos apropiados son agregados a
la lista de recursos por los cuales el proceso está esperando, el proceso se reiniciará
solo cuando pueda reganar sus viejos recursos, tanto como los nuevos que está
requiriendo.
Espera Circular: se numeran todos los recursos. Los procesos pueden solicitar recursos,
siempre que sean en orden creciente. Si un proceso solicita un recurso cuya
numeración sea menor al recurso que ya posee, debe liberar este recurso. v