Sistemas Operativos Unidad 2
-
Upload
skullers-aguilar -
Category
Documents
-
view
117 -
download
1
description
Transcript of Sistemas Operativos Unidad 2
Sistemas OperativosAdministración del Procesador
Unidad2-C7
2
Administración del procesador
3
Administración de procesos
• El SO es el responsable de:– La creación y eliminación de procesos
del sistema y del usuario– La calendarización de procesos– Sincronización de procesos– Comunicación de procesos– Manejo de bloqueos
4
Procesos
• Informalmente un proceso es un programa en ejecución
• Un proceso es más que un código de programa, el cual es a veces llamado sección de texto
• También incluye la actividad actual, representada por el contador del programa y el contenido de los registros de los procesos
• Un proceso generalmente incluye la pila de proceso, el cual contiene datos temporales y la sección de datos la cual contiene variables globales
5
Programas pasivos
• Un programa por sí mismo no es un proceso, un programa es una entidad pasiva, como por ejemplo: el contenido de un archivo almacenado en disco
• Un proceso es una entidad activa con un contador de programa especificando la siguiente instrucción a ser ejecutada y un conjunto de recursos asignados
6
Estados de proceso
• Conforme un proceso se ejecuta cambia su estado
• El estado de un proceso se define en parte por la actividad actual de ese proceso.
• Cada proceso puede estar en uno de los siguientes estados:– Nuevo: El proceso se crea– Ejecutándose: Sus instrucciones son ejecutadas– Esperando: El proceso espera por la ocurrencia de
algún evento– Listo: El proceso espera a ser asignado al CPU– Terminado: El proceso ha finalizado su ejecución
7
Diagrama de estados de procesos
8
Operaciones en procesos
• Los procesos se pueden ejecutar concurrentemente, pueden ser creados y borrados dinámicamente
• Un proceso puede crear varios procesos nuevos durante su ejecución
• Al proceso creador se le llama proceso padre y a los nuevos procesos hijos
• Cada uno de los nuevos procesos a su vez pueden crear nuevos procesos generando un árbol de procesos
9
Creación de procesos
• En general un proceso necesita ciertos recursos para lograr su tarea
• Cuando un proceso crea subprocesos, éstos pueden obtener los recursos directamente del S.O.
• O pueden estar restringidos a un subconjunto de recursos del proceso padre
• El padre puede particionar sus recursos entre sus hijos o puede compartir algunos recursos entre varios de ellos.
• Restringir a un proceso hijo a un subconjunto de recursos del padre previene que los subprocesos sobrecarguen el sistema pr crear muchos subprocesos
10
Subprocesos
• Cuando un proceso padre crea subprocesos, existen dos posibilidades en términos de la ejecución– El padre continua su ejecución concurrentemente con sus
hijos– El padre espera hasta que algunos o todos sus hijos
hayan terminado
• También existen dos posibilidades en términos del espacio de direcciones del nuevo proceso– El proceso hijo es un duplicado de proceso padre– El proceso hijo tiene un programa cargado en él
11
Terminación de procesos• Un proceso termina cuando ejecuta su última
instrucción y pide al S.O. que le elimine.
• En este punto, el proceso puede regresar datos a su proceso padre
• Todos lo recursos del proceso son liberados por el S.O.
• También puede terminar un proceso por la petición de otro proceso. Generalmente sólo el proceso padre puede pedir que se terminen sus hijos.
12
Terminación de procesos
• Dentro de las razones para que un padre termine con su hijo– El hijo ha excedido el uso de algún recurso.
Implica mecanismo de inspección– La tarea asignada al hijo ya no es requerida– El padre se termina o sale del sistema.
Terminación en cascada
13
Bloque de Control de Proceso
•Cada proceso se representa en el sistema operativo por un PCB (process control block)
14
PCB• Un PCB contiene unidades de información
como son:– Estado de proceso: Nuevo, listo, ejecutándose,
esperando, etc.
– Contador de programa: Indica la dirección de la siguiente instrucción a ser ejecutada
– Registros de CPU: Los registros varían en número y tipo, dependiendo de la arquitectura de la computadora. Junto con el contador de programa, la información de los registros debe ser guardada cada vez que se ocurra una interrupción para permitir al proceso continuar correctamente.
15
PCB• Información de Calendarización de CPU. Incluye
prioridad de proceso, apuntadores a colas de calendarización.
• Información de administración de la memoria. Incluye el registro base y límite, las tablas de páginas, tablas de segmento
• Información de “conteo”. Incluye la cantidad de tiempo de CPU y tiempo real utilizados, límites de tiempo, número de proceso
• Información del estado de E/S. Incluye una lista de E/S de dispositivos asignados al proceso
16
Cambio de Contexto
• Cambiar el CPU de un proceso a otro requiere que se almacene el estado de los procesos salientes y se recargue el estado de los procesos entrantes
• Esta tarea es conocida como el cambio de contexto
• El contexto de un proceso está representado por el PCB
• Cuando un cambio de contexto ocurre el kernel guarda el estado en el PCB y carga el PCB del nuevo proceso
17
CPU cambiando entre procesos
18
Cambio de Contexto
• El tiempo que toma cambiar de contexto es pura sobrecarga
• Este tiempo varia de arquitectura en arquitectura dependiendo de la velocidad de la memoria, el número de registros a copiar, etc
19
Procesos cooperativos
20
Procesos cooperativos• Los procesos que se ejecutan
concurrentemente en el S.O. pueden ser independientes o cooperativos
• Un proceso independiente no afecta ni es afectado por otros procesos en ejecución en el sistema– Cualquier proceso que no comparte cualquier
información con otro es independiente
• Un proceso cooperativo afecta o es afectado por otros procesos en ejecución
21
Razones para la cooperación
• Compartir información. Dado que varios usuarios pueden estar interesados en la misma información
• Aceleración de cómputo. Si se desea que una tarea particular se ejecute más rápido, es necesario dividirla en subtareas, ejecutándose en paralelo
• Modularidad. Cuando se desea construir un sistema de manera modular dividiendo las funciones en procesos separados o hilos
• Conveniencia. Para permitir al usuario realizar más de una tarea al mismo tiempo.
22
Procesos cooperativos• La ejecución concurrente de procesos cooperativos
requiere de mecanismos que permitan a los procesos comunicarse entre ellos y sincronizar sus acciones– Pipes – Signals – Message Queues – Semaphores – Shared Memory – Sockets
• El problema del consumidor-productor– Uno consume información producida por el otro– Para que se ejecuten concurrentemente, necesitan de un
buffer• Buffer ilimitado• Buffer limitado
23
Procesos cooperativos• Buffer
– Provisto por el SO por medio del uso de la comunicación entre procesos (IPC)
– Codificado explícitamente por la aplicación del programador con memoria compartida
• Memoria compartida– Requiere que los procesos compartan un
buffer común.– El código para implementar el buffer debe ser
escrito explícitamente por el programador
24
Hilo de ejecución
• El modelo de proceso, hasta ahora discutido, implica que es un programa que sólo posee un sólo “hilo” de ejecución
• Este único hilo de control permite al proceso realizar sólo una tarea a la vez
• La mayoría de los SO extienden el concepto de proceso para permitirles tener múltiples hilos de ejecución
• De esta manera un proceso puede realizar más de una tarea a la vez.
25
Hilos
• Un hilo, a veces llamado un proceso ligero (lightweight process, LWP) es una unidad básica de utilización de CPU
• Un hilo abarca una identificación, un contador de programa, un conjunto de registros y una pila
26
Hilos• Comparte con otros hilos que pertenecen al
mismo proceso su sección de código, sección de datos, recursos del SO.
• Un proceso tradicional (heavyweight) tiene un sólo hilo de control
• Si un proceso tiene múltiples hilos de control puede hacer más de una tarea al mismo tiempo
27
Procesos de uno y múltiples hilos
28
Por qué los Hilos
• Las aplicaciones pueden y necesitan realizar varias cosas al mismo tiempo– Una navegador despliega imágenes, texto, recuperan
información.
• También una aplicación requiere a veces realizar varias tareas similares al mismo tiempo– Servidor web debe atender varios clientes tratando de
acceder concurrentemente
• Una solución es tener un proceso simple que acepte peticiones y cuando recibe una petición, crea un proceso separado para servir a esa petición
29
Hilos
• Si los nuevos procesos van a hacer la misma tarea, ¿porqué agregar la sobrecarga de la creación de procesos?
• Generalmente es más eficiente para un proceso que contiene múltiples hilos servir al mismo propósito
• Los hilos también juegan un papel importante en los sistemas de llamadas a procedimientos remotos (RPC)
30
Beneficios• Los beneficios de la programación
multihilo puede ponerse en cuatro categorías:
• Rapidez de respuesta. – Hacer en multihilos una aplicación interactiva
puede permitir a un programa continuar corriendo incluso si parte de él está bloqueado o realizando una tarea lenta, lo que se traduce en respuestas más rápidas para el usuario.
31
Beneficios• Compartición de recursos.
– Por omisión, los hilos comparten la memoria y los recursos del proceso al cual pertenecen
• Economía– Asignar memoria y recursos en la creación de
procesos es costoso. Dado que los hilos comparten recursos de su proceso es más económico crear hilos y cambiar entre contextos de hilos
32
Beneficios• Utilización de arquitecturas de
multiprocesadores. – Los beneficios del multihilado se incrementan
en una arquitectura de multiprocesamiento, donde cada hilo puede correr en paralelo en cada procesador.
– Un proceso de un sólo hilo sólo puede correr en un procesador no importando cuantos estén disponibles
33
Planificación de CPU
34
Calendarización de procesos
• El objetivo de la multiprogramación es tener procesos corriendo todo el tiempo para maximizar la utilización del CPU.
• El objetivo del tiempo compartido es intercambiar el CPU entre procesos de manera tan rápida que los usuarios puedan interactuar con cada programa mientras se está ejecutando.
35
Cola de calendarización
• Conforme un proceso ingresa al sistema, es puesto en una cola de trabajos
• Esta cola consiste de todos los procesos en el sistema
• Los procesos que son residentes en memoria principal y están listos y esperando para ejecutarse se almacena en una lista llamada la cola de procesos listos
• Esta cola es almacenada en una lista ligada. El encabezado de una cola lista contiene apuntadores al primer y al último PCB en la lista.
36
Cola de calendarización•La lista de procesos esperando por un dispositivo de E/S es llamada la cola de dispositivo•Cada dispositivo tienen su propia cola de dispositivo
37
Calendarización de un proceso
• Un nuevo proceso es inicialmente puesto en la cola lista. Espera en esta lista hasta que es seleccionado para su ejecución (dispatched).
• Una vez que el proceso es asignado al CPU y se está ejecutando uno de los siguientes eventos ocurre:– El proceso solicita una operación E/S y es puesto
en una cola E/S– El proceso puede crear subprocesos y esperar por
su terminación– El proceso es removido abruptamente de la CPU
como resultado de un interrupción y puesto en la cola de espera.
38
Representación de la Calendarización de un proceso
39
Calendarizadores • Un proceso se mueve entre diferentes
colas de calendarización en su ciclo de vida
• Los SO deben seleccionar los procesos de esas colas de alguna manera
• La selección del proceso es llevada a cabo por el calendarizador correspondiente
40
Calendarizadores de largo y corto plazo• Cuando existen más procesos de los que se
pueden ejecutar inmediatamente son almacenados (spool) generalmente en el disco
• El calendarizador de largo plazo o calendarizador de trabajos se encarga de seleccionar a los procesos de la cola y cargarlos a la memoria para su ejecución
• El calendarizador de corto plazo o Calendarizador de CPU selecciona entre esos procesos que están listos para su ejecución y asigna el CPU a uno de ellos.
41
Calendarizador de Corto Plazo
• La diferencia principal entre estos calendarizadores es la frecuencia de su ejecución
• El CCP debe seleccionar un proceso nuevo para la CPU muy frecuentemente
• Un proceso se puede ejecutar durante unos pocos milisegundos antes de esperar por una petición de E/S
• Frecuentemente el CCP se ejecuta al menos una vez cada 100 ms.
42
Calendarizador de Corto Plazo
• Debido al breve tiempo entre ejecuciones, el CCP debe ser muy rápido
• Por ej. Si le toma 10 milisegs. Decidir que proceso ejecutar durante 100 milisegs. Entonces– 10/(100+10)= 9% del CPU es desperdiciado
para decidir que proceso se ejecutará.
43
Calendarizadores de largo plazo
• El CLP se ejecuta con mucha menor frecuencia que CCP
• Pueden pasar minutos para la creación de un nuevo proceso
• El CLP controla el grado de multiprogramación (número de procesos en memoria)
• Si el grado de multiprogramación es estable entonces la tasa promedio de creación de procesos es igual al promedio de procesos que dejan el sistema
44
C.L.P.• Entonces el CLP se necesita invocar solamente
cuando un proceso deja el sistema
• El CLP puede permitirse tomar más tiempo para seleccionar un proceso para su ejecución.
• El CLP debe hacer una selección mucho más cuidadosa
• En general la mayoría de los procesos pueden describirse como destinado a E/S o destinado a CPU
45
C.L.P.• Un proceso E/S pasa la mayor parte de su
tiempo haciendo operaciones de E/S más que de cómputo
• Un proceso CPU genera muy pocas peticiones de E/S, utilizando la mayor parte de su tiempo haciendo operaciones de cómputo
• El CLP debe seleccionar una buena mezcla de procesos de E/S y CPU – Si todos los procesos son E/S entonces la cola de
procesos listos estará vacía casi todo el tiempo– Si todos los procesos son CPU entonces las colas de
dispositivos estarán vacías
46
El calendarizador de mediano plazo
• Algunos SO pueden introducir un nivel intermedio de calendarización: CMP
• El CMP remueve procesos de la memoria y por lo tanto reduce el grado de multiprogramación
• Tiempo después el proceso puede ser introducido de nuevo a la memoria y su ejecución continúa donde se quedó. Intercambio (Swapping)
• El proceso es swapped out y después swappped in por el CMP.
47
Calendarización de la CPU• La calendarización de la CPU es la base de los
SO multiprogramados
• El objetivo de la multiprogramación es tener algún proceso, para ejecutar todo el tiempo
• La idea es simple, en el momento que un proceso necesite de una operación de E/S, el procesador en lugar de esperar a que termine dicha operación, se asigna a otro proceso cargado en memoria
48
Ciclo de ráfagas CPU-E/S• El éxito de la calendarización de la CPU
depende de la siguiente propiedad de los procesos– La ejecución de los procesos consiste de un ciclo de
ejecución de CPU y espera de E/S
• Los procesos alternan entre estos dos estados
• La ejecución de los procesos comienza con un período de CPU, seguido de un período de E/S
49
Secuencia alternada entre CPU y E/S
50
Ciclo CPU-E/S• ¿Cuánto dura un periodo de CPU?
• Un programa destinado a E/S típicamente tiene muchos periodos cortos de CPU
• Un programa destinado a CPU puede tener unos pocos periodos largos de CPU
51
Histograma de períodos de CPU
52
Calendarizador de CPU• Cuando el CPU está ocioso, el SO debe
seleccionar a uno de los procesos que están en la cola de procesos listos
• Tarea realizada por el calendarizador de corto plazo (Calendarizador de CPU)
• La cola de procesos listo no tiene que ser FIFO, además puede ser:– Cola de prioridad– Un árbol– O una simple desordenada lista ligada
53
Calendarización
• Las decisiones de calendarización se basan en 4 circunstancias1.Cuando un proceso cambia del estado de ejecución al
estado de espera (ej, petición de E/S)
2.Cuando un proceso cambia del estado de ejecución al estado listo (ej, ocurre un interrupción)
3.Cuando un proceso cambia del estado de espera al estado listo (terminó operación E/S)
4.Cuando un proceso termina
54
Calendarización “no preemptive”• En los casos 1 y 4 se dice que el esquema de
calendarización es no preemptive (sin derecho preferente), en realidad no hay opción en término de la calendarización
• En los casos 2 y 3 se dice que es una calendarización preemptive (preferente)
• En la calendarización no preemptive, una vez que el CPU se ha asignado a un proceso, el proceso mantiene el CPU hasta que lo libera – Porque termina– O por cambiar al estado de espera
55
Calendarización preemptive
• La calendarización preferente tiene que establecer un mecanismo que aseguren que la información no sea afectada en el cambio entre procesos.
56
Despachador (Dispatcher )
• El despachador es el módulo que da el control de la CPU al proceso seleccionado por el calendarizador de CPU
• Su función implica– Cambio de contexto– Cambio a modo usuario– Regreso al lugar apropiado en el programa de usuario para
continuar su ejecución
• El despachador debe ser muy rápido dado que se invoca durante cada cambio de proceso
• El tiempo que le toma al despachador detener un proceso e iniciar el otro es llamado tiempo de latencia del despachador
57
Algoritmos de planificación
58
Criterios de calendarización• Cada algoritmo de calendarización tiene
sus propiedades y pueden beneficiar a una u otra clase de procesos
• Algunos criterios que son considerados para comparar y evaluar a los algoritmos de calendarización son:– Utilización de la CPU– Eficiencia – Tiempo total de proceso– Tiempo de espera– Tiempo de respuesta
59
Criterios para los algoritmos de Calendarización de CPU
• Utilización de la CPU– Mantener al CPU trabajando tanto como sea
posible.
• Eficiencia.– Número de procesos completados por
unidad de tiempo
• Tiempo total (turnaround time)– Para un proceso dado, cuánto se tarda en
ejecutar completamente ese proceso
60
Criterios para los algoritmos de calendarización de CPU
• Tiempo de espera– El algoritmo de calendarización de CPU no afecta el tiempo de
espera en la cola de E/S pero sí afecta el tiempo que un proceso pasa en la cola de procesos listos.
• Tiempo de respuesta– Tiempo que tarda en comenzar a responder, es decir tiempo
que pasa desde que ocurre una petición hasta que se produce la primera respuesta
• En general, se desea maximizar la utilización de CPU y la eficiencia; mientras que se desea minimizar el tiempo total, tiempo de espera y tiempo de respuesta
61
Primero en llegar-primero en servir (FCFS)
• El más sencillo de los algoritmos de calendarización de CPU
• El proceso que solicita primero el procesador obtiene primero el procesador
• La implementación es muy sencilla utilizando colas FIFO
• Cuando el CPU se encuentra libre toma al proceso que está a la cabeza de la cola lista
62
Proceso Período CPU
P1 24
P2 3
P3 3
Suponga que los procesos llegan en el orden: P1 , P2 , P3.
La gráfica de Gantt es:
Tiempo de espera P1= 0; P2= 24; P3= 27
Tiempo promedio de espera: (0 + 24 + 27)/3 = 17
P1 P2 P3
24 27 300
FCFS
63
Proceso Período CPU
P2 3
P3 3
P1 24
Suponga que los procesos llegan en el orden: P2 , P3 , P1.
La gráfica de Gantt es:
Tiempo de espera P1= 6; P2= 0; P3= 3
Tiempo promedio de espera: (6 + 0 + 3)/3 = 3
FCFS
P1P3P2
63 300
64
FCFS• El promedio del tiempo de espera en FCFS es
generalmente no mínimo
• Varía substancialmente si los períodos de procesamiento de los procesos cambia
• ¿Qué pasa si tenemos un procesos destinado a CPU y muchos procesos destinados a E/S?
• El FCFS es un algoritmo no preemptive. Una vez que el procesos obtiene el CPU, lo mantiene hasta que termina o necesita E/S
65
Primero el trabajo más corto (SJF)
• Este algoritmo establece asociaciones entre las ráfagas de CPU y los tiempos de ejecución de los procesos
• Cuando el CPU está disponible es asignado al proceso que tiene la siguiente ráfaga más pequeña
• Si dos procesos tienen la misma, más corta, longitud de ráfaga entonces se utiliza FCFS para escoger a uno
• En realidad se escogen los procesos por su longitud de ráfaga de CPU, no por su tiempo total
66
Ejemplo 1 (No preemptive)
• Process Burst Time
P1 6
P2 8
P3 7
P4 3
• El tiempo de espera 3 miliseg para el p1, 16 ms para p2, 9 ms para p3 y 0 para p4
• El tiempo promedio de espera es (3+16+9+0)/4= 7 ms
93 240
P4 P1 P3 P2
16
67
Ejemplo 2 (no preemptive)
• Process Arrival Time Burst Time
P1 0 7
P2 2 4
P3 4 1
P4 5 4
• SJF (no-preemptive)• Average waiting time = (0 + 6 + 3 + 7)/4 = 4
P1 P3 P2
73 160
P4
8 12
68
Variantes de SJF
• Maneja dos esquemas: – No preemptive. Una vez que el CPU es asignado al
proceso no puede ser retirado hasta que se completa su ráfaga de CPU.
– Preemptive. Si un nuevo proceso llega con una longitud de ráfaga de CPU menor que el tiempo de CPU restante del actual proceso en ejecución, entonces lo “saca” del CPU (preempt). Este esquema es conocido como Shortest-Remaining-Time-First (SRTF).
• SJF es óptimo, ya que da el tiempo promedio de espera mínimo para un conjunto dado de procesos
69
Ejemplo 3 (Preemptive)
Process Arrival Time Burst TimeP1 0.0 7P2 2.0 4P3 4.0 1P4 5.0 4
• SJF (preemptive)
• Average waiting time = (9 + 1 + 0 +2)/4 = 3
P1 P3P2
42 110
P4
5 7
P2 P1
16
70
Calendarización por prioridad
• El algoritmo SJF es un caso particular del algoritmo general de calendarización por prioridad
• En este algoritmo, se asocia a cada proceso una prioridad y se asigna la CPU al proceso con la prioridad más alta
• Proceso que tienen la misma prioridad son escogidos con FCFS
• El esquema utilizado para representar la prioridad varía de un sistema a otro.
71
Ejemplo • Process Burst Time Prioridad
P1 10 3
P2 1 1
P3 2 4
P4 1 5
P5 5 2
• El tiempo promedio de espera es 8.2 msegs
61 180
P2 P5 P1 P3
16
P4
19
72
Calendarización por prioridad
• Las prioridades pueden ser definidas interna o externamente.
• La definición interna de prioridades se basa en tiempos límites, requerimiento de memoria, tasa promedio de ráfagas
• Las prioridades externas se establecen mediante criterios que son externos al S.O., tales como la importancia del proceso, tipos y fondos pagados para el uso de la computadora, etc.
73
Calendarización por prioridad
• Este tipo de calendarización también puede ser preferente o no preferente.
• Cuando un proceso llega a la cola de procesos listos, se compara su prioridad con la prioridad del proceso que está actualmente ejecutándose
• Entonces, en un esquema preemptive, el algoritmo asignará la CPU al proceso que llega a la cola lista con una prioridad mayor que el proceso que se ejecuta.
• Un esquema no preemptive, simplemente pondrá al nuevo proceso a la cabeza de la lista de procesos listos
74
Calendarización por prioridad
• Un problema que ocurre con los algoritmos de calendarización por prioridad es el bloqueo indefinido
• Puede darse el caso de que los procesos con prioridades bajas esperen indefinidamente por la CPU
• Una solución a este problema se llama “aging” (envejecimiento). Esta técnica consiste en incrementar gradualmente la prioridad de un proceso que ha pasado mucho tiempo en el sistema
75
Calendarización por Round-Robin
• Este algoritmo está diseñado especialmente para sistemas de tiempo compartido
• Funciona de manera similar a FCFS, sin embargo sigue el esquema de derecho preferente.
• Se agrega una unidad de tiempo, llamada “time quantum”. Generalmente un quantum es de 10 a 100 ms
• La cola de procesos listos es tratada como una cola circular, el calendarizador recorre la cola asignando la CPU a cada proceso hasta por 1 intervalo de un time quantum
76
Calendarización por Round-Robin
• Para implementar RR se maneja la cola de procesos listos como una cola FIFO
• Los procesos nuevos son agregados al final de la cola. Entonces el calendarizador de CPU toma al primer proceso estable un temporizador para interrumpir hasta un time quantum después. Enseguida despacha al proceso
• Pueden ocurrir una de dos situaciones– El proceso puede tener un tiempo de ráfaga de CPU menor
que el time quantum– El tiempo de ráfaga de CPU del proceso es mayor que el
tiempo del quantum
77
Calendarización por Round-Robin
• En el primer caso, el proceso libera la CPU voluntariamente– Entonces el calendarizador procederá con el siguiente proceso
en la cola de procesos listos
• En el segundo caso, se agotará el tiempo del quantum y causará una interrupción al S.O.
• Esto causará un cambio de contexto y el proceso es puesto al final de la cola de procesos listos
• Entonces el calendarizador toma el siguiente proceso a la cabeza de la cola de procesos listos
78
Ejemplo RR con quantum de 4 ms
• Process Burst TimeP1 24P2 3P3 3
• El tiempo promedio de espera es 17/3= 5.66 msegundos
• En RR ningún proceso tiene a la CPU por más del time quantum
4 300
P1 P2 P1 P1
26
P3 P1
7 10 14 18 22
P1 P1
79
RR• Si existen n procesos en la cola lista y el tiempo
de quantum es q entonces cada proceso tiene 1/n del tiempo de CPU en lapsos de a lo más q unidades de tiempo a la vez. Ningún proceso espera más de (n-1)q unidades de tiempo.
• Rendimiento– q grandes FIFO– q pequeñas q debe ser grande respecto al tiempo
de cambio de contexto, de otro modo la sobrecarga es alta
– Generalmente, tiene un tiempo total promedio más alto que SJF pero un mejor tiempo de respuesta
80
RR y los cambios de contexto
81
RR y el tiempo de total
82
Calendarización de colas multinivel
• Otro tipo de algoritmos de calendarización se utilizan con procesos que fácilmente son clasificados en grupos– Foreground y background
• Un algoritmo de calendarización multinivel de colas particiona la cola de procesos listos en diferentes colas separadas
• Los procesos son permanentemente asignados a una cola basados en alguna propiedad de los procesos como: tamaño de memoria, prioridad de procesos, tipo de proceso
83
Colas Multinivel• Cada cola tiene su propio algoritmo de
calendarización
• Entonces, debe existir una calendarización entre las colas, la cual es comúnmente implementada mediante la calendarización preemptive de prioridad fija
• No obstante, otra calendarización entre colas se lleva a cabo mediante la división del tiempo entre las colas, donde cada cola tiene su porción de tiempo de CPU para sus procesos
84
C. M.
85
Calendarización multinivel con retroalimentación
• Normalmente en los algoritmos de calendarización multinivel de colas los procesos son asignados permanentemente a una cola
• Los procesos no se mueven entre las colas
• Este esquema tiene la ventaja de tener una menor sobrecarga de calendarización– Pero tiene la desventaja de ser inflexible
86
C. M. R. C.• Permite a los procesos moverse entre las colas
• La idea es separar a los procesos con diferentes características de ráfagas de CPU
• Si el proceso usa demasiado tiempo de CPU es movido a una cola de baja prioridad
• Este esquema deja a los procesos destinados a E/S y a los procesos interactivos (foreground) en colas de alta prioridad
• No obstante, un proceso que espera demasiado en la cola de baja prioridad puede ser movido a la cola de prioridad alta (aging)– Previene el bloqueo indefinido
87
C. M. R. C. (ejemplo)•El calendarizador primero ejecuta todos los procesos de la cola 0
•Solamente cuando la cola 0 está vacía ejecutará los procesos en la cola 1
•De la misma manera ocurre con la cola 2, solo se ejecutarán sus procesos si las colas 0 y 1 están vacías
88
C. M. R. C. (ejemplo)• Un proceso que llega a la cola 1 “reclama” la CPU a un
proceso de la cola 2
• Un proceso que llega a la cola 0 “reclama” la CPU a un proceso de la cola 1
• Un proceso que entra en la cola lista, es puesto en la cola 0 con un quantum de 8 ms. Si no termina en su quantum, se mueve al final de la cola 1
• Si la cola 0 está vacía, el proceso a la cabeza de la cola 1 tendrá un quantum de 16 ms. Si no termina, se “saca” y es enviado al final de la cola 2
• Los procesos de la cola 2 son calendarizados bajo un esquema FCFS, solamente cuando las colas 0 y 1 están vacías
89
C. M. R. C.• En general, está definido por los siguientes
parámetros
– El número de colas– El tipo de calendarización de cada cola– El método utilizado para determinar cuándo cambiar
un proceso a una cola de mayor prioridad o a una de menor prioridad
– El método utilizado para determinar a qué cola entra un proceso cuando necesita servicio
90
Ejercicio
•Los procesos llegan en el orden P1, P2, P3, P4, P5, todos en el tiempo 0.
–Dibuja 4 diagramas de Gantt ilustrando la ejecución de los procesos utilizando FCFS y SJF–Cuál es el tiempo total y el tiempo de espera de cada proceso para cada algortimo utilzado en el inciso anterior
91
Solución
•A)
•B)
•C)
92
Sincronización de procesos
93
Sincronización de procesos• Un proceso cooperativo es aquel que afecta o es
afectado por otros procesos ejecutándose en el sistema
• Los procesos cooperativos suelen compartir espacios de memoria lógicos o suelen compartir información por medio de archivos
• De cualquier forma el acceso concurrente a los datos compartidos puede resultar en la inconsistencia de los datos
• Entonces, ahora estudiaremos los mecanismos utilizados para garantizar la ejecución ordenada de los procesos cooperativos que comparten espacios de direcciones
94
Ejemplo• Supongamos que tenemos el caso de un proceso que
produce información y otro que la consume. Ambos procesos usan un buffer de tamaño N para almacenar la información producida o consumida
• Datos Compartidos#define BUFFER_SIZE 10typedef struct {
. . .} item;item buffer[BUFFER_SIZE];int in = 0;int out = 0;int counter = 0;
95
Problema del C-P• Proceso Productor
item nextProduced;
while (1) {while (counter == BUFFER_SIZE)
; /* do nothing */buffer[in] = nextProduced;in = (in + 1) % BUFFER_SIZE;counter++;
}
• Proceso Consumidor item nextConsumed;
while (1) {while (counter == 0)
; /* do nothing */nextConsumed = buffer[out];out = (out + 1) % BUFFER_SIZE;counter--;
}
96
Operación atómica• Las sentencias
counter++;counter--;deben ejecutarse atómicamente
• Operación Atómica significa que una operación debe ser completada sin alguna interrupción
• La sentencia “count++” puede implementarse en lenguaje máquina como sigue:
register1 = counterregister1 = register1 + 1counter = register1
97
Problema de la concurrencia
• La sentencia “count --” puede implementarse como:register2 = counterregister2 = register2 – 1counter = register2
• Si tanto el productor como el consumidor intentan actualizar el buffer concurrentemente, las sentencias del lenguaje máquina se pueden “entrelazar”
• El entrelazado depende de cómo los procesos productor y consumidor son calendarizados
98
Inconsistencia de datos
• Suponga que el “contador” es inicialmente 5. El entrelazado de las sentencias es:p: register1 = counter (register1 = 5)p: register1 = register1 + 1 (register1 = 6)c: register2 = counter (register2 = 5)c: register2 = register2 – 1 (register2 = 4)p: counter = register1 (counter = 6)c: counter = register2 (counter = 4)
• El valor del contador puede resultar en 4 ó 6 cuando el resultado correcto es 5.
• Condición de carrera. Cuando varios procesos acceden y manipulan datos compartidos de manera concurrente y el valor final del dato compartido depende del proceso que llega al final
• Para prevenir las condiciones de carrera, los procesos deben sincronizarse
99
El problema de la sección crítica
• Considere n procesos {p0,p1,…pn-1} todos compitiendo por el uso de algún dato compartido
• Cada proceso tiene un segmento de código, llamado sección crítica, en el cual la información compartida es accedida
• Problema – asegurar que cuando un proceso entre en su sección crítica, ningún otro proceso puede ejecutar su sección crítica.
• Entonces, la ejecución de una sección crítica de un proceso es mutuamente exclusiva en tiempo
100
Sección crítica• Cada proceso debe obtener un permiso
para ejecutar su sección crítica (entry)
do {entry section
critical sectionexit section
remainder section} while (1);
101
Solución al problema de S.C.
• Cualquier solución al problema de la S.C. debe satisfacer:– Exclusión mutua. Si un proceso pi está ejecutando su S.C.
entonces ningún otro proceso puede ejecutar su sección crítica
– Progreso. Si ningún proceso está ejecutando sus S.C. y algunos procesos desean entrar a su S.C. entonces aquellos procesos que no están ejecutando sus “secciones restantes” pueden participar en la selección del proceso que entrará en sección crítica y esta selección no se puede posponer de manera indefinida
– Espera limitada. Existe un límite en el número de veces que otros procesos pueden entrar en su sección crítica, después de que un proceso ha requerido su entrada a su sección crítica y antes de que su petición se cumplida
102
Soluciones a dos procesos• Soluciones aplicables a dos procesos P0 y P1
• Los procesos comparten una variable turn inicializada en 0 (o 1). If turn==i entonces el proceso pi puede ejecutar su sección crítica
• Algoritmo 1– Proceso Pi
do {while (turn != i) ; //solo entra s.c. si turn==icritical sectionturn = j;reminder section
} while (1);
103
Algoritmo 1 (S.C. de 2 procesos)• Esta solución asegura que sólo un proceso entre
a su sección crítica, pero no satisface la condición de progreso
– Ya que estrictamente los procesos deben ejecutar su sección crítica de manera alternada
– Entonces, si turn==0 and P1 está listo para entrar a S.C. no lo puede hacer incluso cuando P0 pueda estar en su sección restante
104
Algoritmo 2• Se sustituye la variable turn con el arreglo boolean flag[2]
• Los elementos del arreglo se inicializan en falso
• Si flag[i] es verdadero, indica que el proceso pi está listo para entrar en su sección crítica
• Process Pi
do {flag[i] := true;while (flag[j]) ;
critical sectionflag [i] = false;
remainder section} while (1);
• Igual se cumple la exclusión mutua pero no la condición de progreso
105
Algoritmo 2
• Qué pasa si se ejecuta lo siguiente– T0: P0 pone flag[0] = true;
– T1: P1 pone flag[1] = true;
• Entonces P0 y P1 se ciclan de manera infinita
106
Algoritmo 3• Los procesos comparten ahora dos variables boolean
flag[2] e int turn
• Inicialmente flag[0]=flag[1]=false y turn ya sea 0 o 1
• Process Pi
do {flag [i]:= true;turn = j;while (flag [j] and turn == j) ;
critical sectionflag [i] = false;
remainder section} while (1);
107
Algoritmo 3• Exclusión mutua
– Pi entra en su sección crítica únicamente si flag[j]==false o turn==i
• Analizar para la casa– Segunda y tercera propiedad
108
Algoritmo Bakery
• Solución para cuando n procesos desean entrar en sección crítica
• Un proceso que desea entrar en su sección crítica toma un número. El proceso con el número más pequeño es el que entra en sección crítica
• En caso de que dos procesos tengan el mismo número entonces el proceso con el nombre menos entra en sección crítica, entonces los nombres de los procesos deben ser únicos
109
Semáforos
• Una herramienta que da solución al problema de la sección crítica y que se puede generalizar a problemas más complejos son los semáforos
• Un semáforo S es una variable entera que, aparte de su inicialización, es accedida sólo a través de dos operaciones atómicas wait y signalwait (S) {
while (S 0) ;S--;}
signal (S) {S++;}
110
Semáforos • Las modificaciones al valor del semáforo en las
operaciones wait y signal deben hacerse indivisiblemente
• Esto quiere decir que cuando un proceso modifica el valor del semáforo, ningún otro proceso puede simultáneamente modificar ese valor del semáforo
• Entonces, en el caso de wait(S), la comprobación de S<=0 y su posible modificación (s--) se deben ejecutar sin interrupción
111
Utilización de los semáforos
• Se pueden utilizar semáforos para tratar el problema de n procesos queriendo entrar en su sección crítica
• Los n procesos comparten un semáforo, mutex (mutual exclusion), inicializado a 1
• Cada proceso pi es organizado– do {
wait(mutex); critical section
signal(mutex); remainder section} while (1);
112
Utilización de los semáforos (2)
• Se pueden utilizar los semáforos para solucionar problemas de sincronización
• Suponga que tiene dos procesos concurrentes p1 con una sentencia s1 y p2 con una sentencia s2. Además, se requiere que s2 sea ejecutada después de que s1 ha sido completada
• Se puede implementar usando el semáforo synch=0;S1;Signal(synch); //Instrucciones en P1
yWait(synch);S2; //Instrucciones en P2
113
Implementación de los semáforos
• La principal desventaja de las soluciones de exclusión mutua y de la definición de semáforo es que requieren de una “espera ocupada”
• Mientras un proceso está en su sección crítica cualquier otro proceso que trata de entrar a su sección crítica debe entrar a un ciclo de espera.
• En un sistema de multiprogramación este esquema es muy problemático, ya que es un sólo procesador que es compartido entre todos los procesos
• Las “esperas ocupadas” desperdician ciclos de CPU que algún otro proceso podría utilizar productivamente
114
Semáforos• Spinlock
– A este tipo de semáforo se le conoce como spinlock• Son útiles en sistemas multiprocesamiento
• La ventaja del spinlock es que no necesita del “cambio de contexto” por lo que reduce considerablemente el tiempo de cambio ente proceso y proceso
• Para sobrellevar la necesidad de la espera ocupada, se redefinen las operaciones wait y signal del semáforo– Cuando un proceso ejecuta la operación wait y
encuentra que el valor del semáforo es no positivo, entonces debe esperar. Sin embargo, su espera no es una espera ocupada, sino más bien un bloqueo
115
Semáforos• La operación de bloqueo pone al proceso en
una cola de espera asociada al semáforo
• El estado del proceso es cambiado al estado de espera– Entonces el control de transferido al calendarizador
de CPU, quien selecciona al siguiente proceso para ejecutar
• Un proceso que es bloqueado, esperando en un semáforo S, debe ser reiniciado cuando otro proceso ejecuta una operación signal
116
Semáforos• Esta reinicialización se lleva a cabo mediante la
operación wakeup, la cual cambia el estado del proceso de espera al estado listo.– Entonces el proceso es puesto en la cola de procesos
listos
• Para implementar esta definición de semáforo se utiliza:
typedef struct { int value; struct process *L;} semaphore;
117
Semáforos• Cuando un proceso debe esperar en un semáforo, se agrega a la
lista de procesos
• Una operación signal remueve un proceso de la lista de procesos en espera y lo pone es la cola de procesos listos
void wait(semaphore S):S.value--;if (S.value < 0) {
add this process to S.L;block();
}
void signal(semaphore S): S.value++;if (S.value <= 0) {
remove a process P from S.L;wakeup(P);
}
118
Implementación de los semáforos
• Si el valor del semáforo es negativo, su magnitud es el número de procesos esperando en la cola de ese semáforo
• El aspecto crítico de los semáforos es que se ejecutan atómicamente– Se debe garantizar que dos procesos no pueden
ejecutar las operaciones wait y signal en el mismo semáforo al mismo tiempo
– De nuevo el problema de la sección crítica• Un solo procesador• Más de un procesador
119
Implementación de los semáforos
• En un sistema de un solo procesador– Se inhiben las interrupciones durante el tiempo
que las operaciones wait y signal son ejecutadas
• En un sistema de multiprocesadores– No funciona la inhibición de las interrupciones– Entonces se utilizan soluciones provistas por el
hardware o software
120
IPC
• Sistema de pase de mensajes– La función del sistema de mensajes es permitir a los
procesos comunicarse y sincronizarse sin la utilización de la memoria compartida
– En SO de microkernel, los servicios de pase de mensajes están a nivel de procesos de usuario
• send (mensaje) receive (mensaje)
– Los mensajes pueden ser de longitud fija o variable• Longitud fija - Sistema sencillo – programación difícil• Longitud variable - Sistema complejo – programación
sencilla
121
Sistema de pase de mensaje
• Si dos procesos quieren comunicarse, deben enviarse mensajes por medio de un enlace de comunicación (lógico)
• Existen diferentes métodos para implementar el enlace de comunicación así como las operaciones de enviar y recibir– Comunicación directa o indirecta– Comunicación simétrica o asimétrica– Buffering automático o implícito– Envío por copia o por referencia– Mensajes de tamaño fijo o variable
122
Nombramiento (Naming)
• Los procesos que quieren comunicarse deben tener una forma de referirse uno al otro– Comunicación directa o indirecta
• Comunicación directa– Cada proceso que desea comunicarse debe
nombrar explícitamente el receptor o transmisor de la comunicación
• Send(P, msg) – envía mensaje al proceso P• Receive(Q, msg) – recibe mensaje del proceso Q
123
Comunicación directa• Un enlace, en este esquema de comunicación, tiene las siguiente
propiedades– Un enlace se establece automáticamente entre cada par de procesos
que quieren comunicarse. – Un enlace está asociado exactamente con dos procesos– Exactamente un enlace existe entre cada par de procesos
• Utiliza direccionamiento simétrico– Tanto el que envía como el que recibe debe nombrar al otro proceso
• Existe una variante, utilizando direccionamiento asimétrico• Send(P, msg) – envía mensaje al proceso P• Receive(id, msg) – recibe mensaje de cualquier proceso
• ¿qué pasa si un proceso cambia de nombre?– Buscar en todas las definiciones de procesos.
124
Comunicación indirecta• Los mensajes son enviados o recibidos de casillero
(buzón) o puertos
• Un casillero puede verse como un objeto en donde los procesos ponen mensajes y de donde se remueven los mensajes
• Cada casillero tiene un identificador único
• Un proceso puede comunicarse con diferentes procesos utilizando varias casillas
• Dos procesos pueden comunicarse si comparten un casillero
125
Comunicación indirecta• En la comunicación indirecta se definen las
operaciones enviar y recibir– Send(A, msg) – Envía un mensaje al casillero A– Receive(A, msg) – Recibe un mensaje del casillero A
• El enlace lógico tiene las siguientes propiedades– Un enlace se establece si ambos procesos comparten un
casillero
– Un enlace puede estar asociado con más de dos procesos
– Un número de diferentes enlaces puede existir entre cada par de procesos comunicados, donde cada enlace corresponde a un casillero
126
Comunicación indirecta
• Suponga que los procesos p1, p2 y p3, comparten el casillero A. p1 envía un mensaje a A, mientras que p2 y p3 ejecutan el método recibir de A. Cuál proceso obtendrá el mensaje enviado por p1?– Permitir al enlace estar asociado a lo más con dos
procesos– Permitir a lo más un proceso a la vez ejecutar la
operación recibir– Permitir al sistema seleccionar arbitrariamente cual
proceso recibirá el mensaje
127
Comunicación indirecta• El SO o el proceso puede ser propietario de un casillero
• Si el casillero es manejado por el proceso– El casillero es parte del espacio de direcciones del proceso– Se hace distinción entre el propietario (quien solo puede recibir
mensajes por medio de este casillero) y el usuario, quien solo puede enviar mensajes al casillero
– Dado que cada casillero puede tener solo un propietario no hay confusión acerca de quién debe recibir el mensaje
– Cuando un proceso que es propietario de un casillero termina, el casillero desaparece
128
Comunicación indirecta
• Cuando el S.O. es propietario del casillero, este es independiente y no es ligado con ningún proceso en particular
– El S.O. debe proporcionar un mecanismo que permita a los procesos.
• Crear nuevos casilleros• Enviar y recibir mensajes por medio del casillero• Borrar un casillero
– El procesos que crea un casillero, es entonces el propietario
– La propiedad y la función de recepción pueden ser pasadas a otros procesos por medio de las llamadas al sistema apropiadas
129
Sincronización en la comunicación • La comunicación entre procesos se da por medio
de ejecución de las primitivas send y receive
• Existen diferentes formas de implementar cada primitiva de pase de mensajes– Bloqueo (síncrona)– No bloqueo (no síncrona)
• Envío bloqueante: el proceso que envía se bloquea hasta que el mensaje es recibido por el proceso receptor o por el casillero
130
Sincronización en la comunicación
• Envío no bloqueante: El proceso transmisor envía el mensaje y continua su operación
• Recepción bloqueante: el receptor se bloquea hasta que el mensaje está disponible
• Recepción no bloqueante: el receptor recupera ya sea un mensaje válido o nulo
131
Buffering
• Independientemente si la comunicación es directa o indirecta, los mensajes intercambiados por la comunicación entre procesos, residen en un cola temporal.
• Dicha cola puede implementarse de tres formas– Capacidad cero: la longitud máxima de la cola es
cero, entonces, el enlace no puede tener ningún mensaje esperando en él. En este caso, el transmisor se bloquea hasta que el receptor tiene el mensaje
132
Buffering• Capacidad limitada
– La cola tiene una longitud finita N, entonces, a lo mas N mensajes pueden residir en ella.
– Si la cola no esta llena cuando un nuevo mensaje es enviado, éste es puesto en la cola y el transmisor puede continuar su ejecución sin esperar
– Como el enlace es de capacidad finita, si el enlace está lleno, el transmisor debe bloquearse hasta que se libere espacio de la cola
• Capacidad ilimitada– La cola potencialmente tiene una cola infinita, entonces
cualquier número de mensajes pueden esperar en ella. El transmisor nunca se bloquea
133
Comunicación entre procesos en C-S
• Cliente. Proceso que solicita un servicio
• Servidor. Proceso que proporciona el servicio
• Servicio. Es una entidad abstracta que puede ser proporcionado por varios procesos servidores ejecutándose en computadoras separadas y cooperando vía red.
• Comunicación principalmente se da– Sockets– RPC (Remote procedure calls)
134
Sockets
• Socket es un punto final de un enlace de comunicación bidireccional entre dos programas corriendo en la red
• Arquitectura Cliente-Servidor
• Cliente. Su función es conectarse a un servidor para realizar una tarea.
• Servidor. Entidad capaz de “escuchar” a los clientes e iniciar un proceso de comunicación con ellos.
135
Sockets
Solicitud de conexión de un cliente
Conexión establecida Cliente/Servidor
136
Remote Procedure Calls• Una de las formas más comunes de servicios
remotos es el paradigma RPC
• Dado que se trata de un ambiente en el cual los procesos se ejecutan en sistemas separados, se debe utilizar un esquema basado en mensajes para proporcionar servicios remotos
• A diferencia de IPC los mensajes intercambiados en el esquema RPC están bien estructurados y no sólo son paquetes de información
137
RPC• Los mensajes son dirigidos a un demonio de
RPC escuchando en un puerto en el sistema remoto y contienen un identificador de la función a ejecutar con los parámetros a pasarle a la función
• Entonces la función se ejecuta y cualquier salida es enviada de vuelta al solicitante en un mensaje separado
• La semántica de RPC permite a un cliente invocar un procedimiento en un sistema remoto como si lo hiciera de manera local
138
Monitores
• Aun cuando los semáforos proporcionan un mecanismo conveniente y eficaz para la sincronización de procesos, su uso incorrecto puede dar por resultado errores de temporización (timing) que son difíciles de detectar, ya que estos errores sólo suceden si tienen lugar secuencias de ejecución particulares, y estas secuencias no ocurren siempre.
• Los investigadores han desarrollado construcciones en lenguaje de alto nivel.
•
139
Monitores• Recuerde que un tipo, o un tipo de datos
abstracto, encapsula datos privados con métodos públicos para operar sobre dichos datos.
• Un monitor presenta un conjunto de operaciones definidas por el programador que tienen provista la exclusión mutua dentro del monitor.
• El tipo monitor también contiene la declaración de variables cuyos valores definen el estado de una instancia de dicho tipo, junto con los cuerpos de procedimientos o funciones que operan sobre esas variables
140
Regiones críticas• Estructura de sincronización de alto nivel
• Una variable compartida v de tipo T declarada como:– v: shared T
• La variable v es accedida únicamente dentro de la sentencia
region v when B do Sdonde B es una expresión boleana
• Mientras la sentencia S es ejecutada, ningún otro proceso puede acceder a la variable v.
141
Regiones críticas• Las regiones refieren a la misma variable
compartida pero excluyéndose una a otra al mismo tiempo
• Cuando un proceso trata de ejecutar la sentencia de región, la expresión boleana B se evalúa. Si B es verdadera, la sentencia S se ejecuta. Si B es falsa el proceso espera hasta que B se hace cierta y ningún otro proceso está en una región crítica asociada a v
142
Ejemplo buffer limitado
• Las regiones críticas se pueden utilizar de manera efectiva para resolver problemas generales de sincronización
• Problema del búffer limitadostruct buffer {
int pool[n];int count, in, out;
}
• El productor region buffer when( count < n) {
pool[in] = nextp;in:= (in+1) % n;count++;
}
143
Ejemplo buffer limitado
• Consumidor remueve un item del buffer compartido y lo coloca en nextc
region buffer when (count > 0) {nextc = pool[out];
out = (out+1) % n;count--;
}