Documente Academic
Documente Profesional
Documente Cultură
Introducción
o Qué son ¿?
o Tres puntos de vista
o Servicios y componentes
o Estructuras
o Multiprogramación
Administración de procesos
o Qué son los procesos ¿?
o Componentes
o Bloqueo de control de proceso
o Operaciones sobre procesos
o Estados y su Diagrama de transición de estados
o Hilos
De usuario, de kernel y mixtos
Planificación de procesos
o Largo plazo
o Mediano plazo
o Corto plazo
Apropiativo/No apropiativo
Criterios
Algoritmos
FCFS,SJF,SRN,HRN,RR,ED,MLQ
Sincronización de procesos
o Cooperación/Competencia
o Problemas clásicos
o Deadlock
o Exclusión mutua/Sección Crítica
Semáforos
Monitores
Algoritmos
HW
Comunicación
o Indirecta
Mail box, cola de mensajes
o Directa
Memoria compartida, pipes, sistema de mensajes
Introducción
Qué son los SO ¿? : Es una colección organizada del HW, consistente en rutinas de control que hacen funcionar al computador
y proporcionar un entorno para ejecutar programas. Es el SW que controla el HW. Puede ser considerado como una
ampliación de la máquina y otra como administrador de recursos.
Puntos de vista
Diseñador: Identifica las necesidades del mercado a que apunta el SO, además considera todos los factores
relacionados con las limitaciones de diseño que tiene. Enfoque en encontrar algoritmos y estructuras más apropiadas
y eficientes.
Administrador: Enfoque hacia las herramientas disponibles para la administración. Implementar soluciones
metodológicas, automáticas para la administración tanto de HW como el SW. Obtener un buen desempeño del
sistema y que las necesidades de los usuarios sean más factibles.
Usuario: Es diferente dependiendo del SO. Necesita un conjunto de funcionalidades, independiente del problema.
Fácil de usar y de aprender con una buena interfaz de usuario.
Servicios: Asignación de recursos, ejecución de programas de usuario, realización de E/S, protección de recursos,
administración del espacio, archivos y sistemas de archivos, detección de errores y su tratamiento, contabilización de recursos.
Componentes: Administración de: procesos, memoria principal, archivos, E/S, almacenamiento secundario, comunicaciones,
protección, interfaz de usuario (Shell).
Estructuras
Monolíticos: No son estructurados, cualquier servicio puede ser invocado por otro, toda la funcionalidad provista por
el sistema es accesible y no tiene una arquitectura establecida. Las fallas de cualquier componente del SO provoca la
caída de todo el sistema. No hay modularidad, ni encapsulación de las funciones, son sistemas difíciles de comprobar
que tengan errores.
Capas: Cada capa establece una interfaz para que la capa superior inmediata le haga solicitudes, a su vez cada capa le
hace solicitudes solo a la capa anterior. La caída de una capa no provoca la de las anteriores aunque si las superiores.
Favorece la modularidad y la encapsulación de las funciones SO.
Microkernel: Modelo cliente/servidor, pasando las funcionalidades del SO a las capas superiores. Es fácil de adaptar a
sistemas distribuidos. Modelo orientado a objetos, similar al anterior solo que con una interfaz orientada a objetos.
Multiprogramación: El objetivo es tener siempre procesos ejecutando, de forma de maximizar recursos. Permite la ejecución
simultánea de múltiples programas, además permite el aumento del uso de los recursos del sistema al admitir la intercalación
de trabajos en el micro tiempo y autorizar a múltiples usuarios en simultáneo. Aparecen los programas de depuración.
Coexistencia de programas de tiempo real que sean atendidos antes que los de los usuarios. Se posibilita a los usuarios
interactivos, aparecen tiempos de respuesta de sistema aceptables.
SO específicos de multiprogramación:
Sistemas de tiempo compartido: el total de la memoria es dividida en partes, dinámicas y asignadas a los distintos
usuarios del sistema, el procesador reparte el tiempo entre ellos.
Sistemas de tiempo real: generalmente orientados al establecimiento de prioridades de ejecución.
SO combinados: sistemas de propósito general
Administración de procesos
Proceso: un programa en ejecución, actividad asíncrona, entidad activa a la que se asignan los procesadores, unidad
despachable y lógica de trabajo.
Componentes
Código de programa
Estado actual del proceso, compuesto por su program counter y registros: contexto
Un stack, conteniendo datos temporarios como ser: parámetros de subrutinas, direcciones de retorno y variables
temporarias
Una sección de datos, que contienen variables globales de proceso
Bloqueo de control de proceso: Cada proceso está representado para el SO por un bloque de control de proceso, conteniendo
toda aquella información asociada al proceso.
Crear, es necesario asignar identificador y recursos iniciales. Se pueden obtener directamente del SO, de un
subconjunto del proceso creador, compartiendo recursos del proceso. Se debe insertar en la tabla de procesos del
sistema, adjudicar valores iniciales en parámetros del proceso, se debe crear el bloque de control de procesos.
Eliminar, un padre puede terminar la ejecución de uno de sus hijos, porque el hijo se ha excedido en el uso de alguno
de los recursos, ya no se requiere la tarea asignada al hijo o si el padre está saliendo y el sistema no permite que un
hijo continúe si su padre termina.
Suspender/Reanudar: Cambiar parámetros de funcionamiento del proceso.
Permite la ejecución de tareas concurrentemente en un proceso. Comparten recursos del proceso, código, memoria, archivos,
seguridad pero no comparten contexto, o sea program counter, stack pointer, registros y estados de hilos. Algunos lenguajes
lo incluyen de forma nativa y otros no, en estos deben ser creados/eliminados por llamadas a la biblioteca de usuario (hilo a
nivel usuario) o el propio SO (hilo a nivel kernel).
1. Hay menor sobrecarga, no se llama al SO. 1. Las llamadas al SO que sean bloqueantes, trancan
2. La propia aplicación planifica el despacho de hilos a todos los hilos.
su conveniencia. 2. Las aplicaciones no pueden aprovechar las ventajas
3. Puede ejecutar en cualquier SO. de los sistemas paralelos
1. Se pueden planificar los hilos como procesadores 1. La sobrecarga en el cambio de contexto entre los
tenga el sistema hilos, creación y finalización.
2. El bloqueo de un hilo no afecta la ejecución de los
demás hilos, se puede seleccionar otro del mismo
proceso para ejecutar.
Sistemas de hilos mixtos: Algunos sistemas ofrecen la posibilidad de tener hilos mixtos. Una aplicación tiene varios hilos de
kernel, mientras que cada hilo tiene hilos basados en bibliotecas de usuario. Obtenemos ventajas de ambos.
Los procesos suelen ser independientes entre sí, para compartir recursos deben solicitarlo al SO.
Los hilos son superiores a los procesos cuando es necesario tener comunicación entre ellos, en los hilos el compartir
recursos es más natural.
Suele ser más rápido y sencillo crear y cambiar de contexto un hilo que un proceso.
Los hilos favorecen la escritura de programas que necesiten ejecutar más de una funcionalidad.
Los hilos aprovechan mejor las arquitecturas de múltiples procesadores.
No estamos a salvo de la necesidad de sincronizar los hilos como a los procesos.
Planificación de procesos
Largo plazo: Su función es seleccionar cuales de los procesos que pretender utilizar el sistema se admitirán, una vez admitido,
se le crea un bloque de control de procesos, se le asigna memoria, se lo carga al programa en memoria, se inicializa el
contexto del proceso, se deja en la cola de procesos listos. En algunos sistemas no existen y en otros se limitan los procesos
que ingresan por cantidad máxima de usuario, por tipo de proceso o por insuficiencia de recursos. Su funcionamiento es
sencillo, basado en prioridades o en orden de
llegada. Tiene poca sobrecarga aunque se
deben elegir cuidadosamente la mezcla de
procesos para obtener mayor eficiencia del
sistema.
Cuando planificamos ¿? Cuando estamos obligados ¿? Siempre que ocurre una interrupción ¿?
1- En ejecución Bloqueado
2- En ejecución Listo
3- Bloqueado Listo
4- Finalización
Algoritmos de planificación
First-Come First-Served: Se ejecutan por orden de llegada, fácil de implementar, no apropiativo (no siempre), puede suceder
que un proceso largo tranque a otros procesos cortos, la utilización de recursos es pobre, procesos limitados por E/S esperan
por los limitados por CPU, se pueden generar largas colas de espera de trabajos limitados por E/S, no hay prioridad.
Shortest Job First: Almacena el largo de la última ráfaga utilizada, en base a este valor asigna el procesador a aquel proceso
con la ráfaga más pequeña. Si más de un proceso tiene tiempos iguales se comporta como el FCFS. Garantiza los menores
tiempos de respuesta a los más pequeños. Tiene el valor mínimo de tiempo promedio de espera. Puede ser apropiativo como
no apropiativo. Su gran desventaja es que no se conoce el tamaño de las ráfagas de CPU futuras, se basa en el
comportamiento anterior del proceso. No hay prioridad. Suele ser utilizado en la planificación de largo plazo.
Shortest Remaining Time Next: Trata de mejorar el logaritmo anterior, seleccionando en base a una estimación de la próxima
ráfaga de CPU, en base a las ejecuciones anteriores. Es apropiativo. Permite realizar trabajos cortos entre largos.
Predictor Homogenización Exponencial: Pn = a On-1 + (1 – a) Pn-1
Highest Response Ratio Next: Propone una prioridad de envejecimiento, que permita aumentar la prioridad a los procesos
que llevan mucho tiempo esperando, en relación con su ejecución estimada. Corrige deficiencia del SJF y SRTN, permitiendo
un ajuste basado en una determinada prioridad. Suele ser no apropiativo para SJF y apropiativo para SRTN. Calcula el mejor
promedio con respecto al tiempo que lleva esperando y el tiempo que se estima va a utilizar.
Prioridad = (tiempo de espera + tiempo de ráfaga) / tiempo de ráfaga
Round-Robin: Propone una división del tiempo de procesador en partes iguales, asignando a cada proceso la misma cantidad
de CPU máxima, al expirar el tiempo va último a la costa de listos. Tiende a ser equitativo para el tiempo compartido. Es
apropiativo. Tiempo de proceso dividido por Quantum, interrupción por timer, tiempo adaptable por el administrador, si es
corto-muchos cambios de contexto, si es largo-tiempo de respuesta malo, degenera a FCFS.
Es fundamental cuidar la relación Quantum/Cambio de contexto.
Los procesos cortos terminan rápidamente y los largos circulan por la cola de listos.
Event Driven: El algoritmo se basa en asignar prioridades a los procesos y ejecutarlos en el orden estricto de estas. Prioridades
pueden ser estáticas o dinámicas, prioridad inicial del perfil del usuario, utilización de recursos aumenta prioridad, uso de CPU
la disminuye. Se regula con el comportamiento en ejecución. Generalmente es apropiativo pero puede que no. Procesos de
baja prioridad puede que no se ejecuten nunca. No se puede garantizar la finalización, es necesario contar con alguna
prioridad de envejecimiento. Procesos de alta prioridad tienen buen tiempo de respuesta y finalización predecible.
Colas de Múltiples Niveles: Este algoritmo clasifica los procesos, le asigna diferentes colas a cada uno planificando en más de
un nivel, primero colas y luego procesos. Propone la mezcla de criterios. Planificador de colas - Se definen múltiples colas, una
por cada tipo o clase de proceso a planificar. Luego se planifica dentro de cada cola según el algoritmo que se proporcione.
CMN con retroalimentación: Es una variante de la anterior, permite cambiar de cola de acuerdo al comportamiento. Se le
llama Migración al proceso de cambio decola del proceso.
Sincronización de procesos
Procesos Cooperativos: Es aquel que puede afectar o ser afectado por otros procesos ejecutando en el sistema. Esto se debe
por el acto de compartir información, velocidad de computación, modularidad (construir un sistema confeccionado de
componentes y combinarlos para ejecutar) y conveniencia de ejecutar varias tareas al mismo tiempo.
Problemas de cooperación: Compartir un espacio de direccionamiento, compartir dispositivos o archivos, procesos que se
comunican (intercambio de info o responsabilidades), no necesariamente procesos, pueden ser hilos dentro de un mismo
proceso. Un ejemplo es el del Productor-Consumidor.
Dos procesos pueden trabajar en forma sincrónica o asincrónica, esta pretende preservar la precedencia de los procesos,
permitiendo que el sistema pase de un estado consistente a otro también consistente.
Existen tres formas básicas de sincronización de procesos:
No se puede hacer hipótesis sobre la velocidad o el número de procesadores de los sistemas y no se puede asumir que no
ocurrirán interrupciones durante la ejecución de la sección crítica.
Sección crítica: Un solo proceso por vez puede modificar variables compartidas en su sección crítica. Se requiere de una lógica
arbitraria desarrollada por el programador, ningún proceso puede ganar el control, se tiene que considerar que varios
procesos pueden requerir el servicio, un solo proceso puede ganar el control, las secciones críticas aparenten ser indivisibles,
se debe evitar las esperas basadas en el consumo de ciclos de procesador, se debe considerar la pertinencia o no de que los
procesos puedan alternar.
Semáforos: es una funcionalidad provista por el SO, que permite tanto bloquear como desbloquear procesos pro la espera de
que el semáforo esté libre. Este se implementa con una variable entera compartida, una lista de procesos asociada, que
contiene los procesos que esperan y una variable de estado que permite el ingreso o no a las funciones del semáforo,
estableciendo la exclusión mutua de los procedimientos del semáforo.
Semáforos contadores: Se inicializa el semáforo con una cantidad determinada, que será la cantidad de recursos a proteger.
Cada vez que se usa se lo decrementa hasta que se consuman todos, si se han realizado tantos wait como recursos habían, los
procesos esperan.
El monitor garantiza que en cualquier momento, un solo hilo accede a los procedimientos del monitor. Los hilos que
pretendan usar el monitor que está en uso, se bloquean a la espera de que quede libre. No se puede asumir ninguna política
particular de que hilo será el que continúe al quedar libre el monitor. Exclusión Mutua.
Para esperar eventos dentro de un monitor utilizamos variables de condición que indican eventos y no tienen valores, y
utilizamos dos operaciones:
Wait, que suspende el hilo en ejecución y se pone en la lista de hilos esperando por la variable de condición y libera el
uso del monitor.
Signal, si hay hilos esperando por esa variable de condición, libera a uno llevándolo a la lista de espera por el monitor,
sino, la señal se pierde como que no hubiera ocurrido.
Tipos de monitores
Hoare (el que señala cede) cuando un hilo señala a otro, el que está ejecutando continua, el hilo que esperaba por la
variable de condición espera en la cola de espera por el monitor.
Mesa (el que señala sigue) cuando un hilo señal a otro, el que está ejecutando continúa, el hilo que esperaba por la
variable de condición espera en la cola de espera por el monitor.
Bloqueo mutuo y aplazamiento indefinido: Al competir varios procesos por recursos que no están disponibles, provoca que
éstos esperen. Puede ocurrir que los procesos nunca logren obtener los recursos porque estos están asignados a otros
procesos que también están esperando. A esta situación se le llama Deadlock. Los procesos solicitan la asignación de un
recurso antes de utilizarlo, luego lo usan y por último lo liberan al finalizar su uso. En el SO se registra en tablas las solicitudes y
las asignaciones de los recursos. El problema ocurre cuando hay una cantidad finita de recursos a ser distribuidos entre un
conjunto de procesos competitivos. Se compite por recursos de espacio en memoria, ciclos de CPU, archivos, dispositivos E/S.
Ej. Abrir y cerrar un archivo, pedido y liberación de un dispositivo, un wait y un signal de un semáforo. Los recursos pueden ser
no apropiables, apropiables y compartidos.
Exclusión mutua, por lo menos un recurso debe ser retenido en forma no compartida, es decir que un solo recurso
puede hacer uso de él a la vez.
Retención y espera, debe existir por lo menos un proceso que ha adquirido un recurso, está esperando para adquirir
otro recurso que actualmente lo tiene otro proceso.
No hay lugar a la apropiación, los recursos no pueden ser apropiados, solo se liberan voluntariamente por el proceso
que lo ha adquirido.
Espera circular, debe existir un conjunto de procesos bloqueados esperando recursos, tal que el primero espera por el
segundo, el segundo por el tercero, y el tercero por el primero.
Programación Concurrente
Las primitivas de SW son demasiado elementales. Los algoritmos provistos hacen bastante difícil encontrar solución a
problemas complejos. Si los usamos mal provocamos inconsistencias de sistema, si se omite un Wait, no hay exclusión mutua,
si se omite un Signal habrá espera permanente. Además de que es difícil de comprobar si un programa es correcto, se
necesitan constructores de alto nivel de abstracción, que permita facilitar la programación, mantenimiento y verificación.
Productor: Consumidor:
producir_item(x); wait(mutex);
wait(empty); extraer(x);
wait(mutex); signal(mutex);
depositar(x); signal(empty);
signal(mutex); consumir_item(x);
signal(full)
Comunicación de procesos
Introducción: A diferencia de los hilos, los procesos en
principio no tienen comunicación con otros procesos. Para
comunicar información entre procesos, utilizamos
variables compartidas. A estos modelos se les llama
comunicación entre procesos.
Buffers:
Suelen ser llamados middleware orientado a mensajes. Estos SW suelen implementar controles transaccionales (concurrencia
y recuperación). Suelen contar con mecanismos de seguridad.
Modelo punto a punto, son dos clientes, uno que envía y otro que recibe.
Modelo publicador/suscriptor, hay procesos que envían o publican y uno o más procesos que se suscriben para recibir
los mensajes.
Ambos modelos pueden ser asincrónicos o sincrónicos, se integra a múltiples productos comerciales.