Sie sind auf Seite 1von 62

SISTEMAS OPERATIVOS

Profesor: Manuel Guillermo Flrez Becerra
















PROCESOS E
HILOS
3

















Intenta no volverte un hombre de xito, sino volverte un hombre
de valor.

Albert Einstein
Procesos e hilos


1
3.1 GENERALIDADES
3.1.1 Objetivos del mdulo administrador de
procesos
Creacin, eliminacin y organizar de procesos e hilos
Planificacin. asignar la CPU a los procesos
Comunicacin entre procesos e hilos
Sincronizacin.
3.1.2 Concepto de proceso
Un proceso implica la asociacin de un conjunto de recursos del sistema
como registros de CPU, reas de memoria, archivos, buffer de E/S
agrupados en una unidad de ejecucin llamada proceso.
El proceso es diferente de programa, el programa es similar a la receta de cocina y el
proceso es la elaboracin de la receta, un proceso es un programa en ejecucin. Para
ilustrar el concepto consideremos las actividades que realiza un mecnico que arregla todo
tipo de autos: el mecnico equivale al procesador, los manuales al programa, las
herramientas y repuestos equivale al los recursos del computador.
Las actividades que realiza el mecnico son anlogas al concepto de proceso, el mecnico
puede encontrarse en estado de reparando un campero, pero se presenta una urgencia
de reparar un automvil, que se considera un trabajo rpido y sencillo, entonces el
mecnico cambia de actividad (cambio de contexto) deja de reparar el campero y cambia a
repara el auto.
La imagen del proceso esta formada por el segmento de cdigo, el segmento de datos, la
pila del proceso, las entradas a la tabla de proceso y tambin puede incluir parte de la
imagen de otros procesos como por ejemplo las reas compartidas del sistema operacional
(pila del sistema operacional, cdigo del sistema operacional compartido) es el caso de los
procesos del sistema Unix VAX y el Windows XP.
Los procesos del sistema SO corren en modo supervisor Ejemplo: los procesos para
acceder a los dispositivos de E/S.
Procesos del usuario son los que ejecutan los usuarios programadores o usuarios de
aplicaciones, corren en un modo restringido de privilegios, no se puede utilizar todo el
repertorio de instrucciones de la CPU. En el procesador 80386 de Intel existen varios
niveles o anillos de seguridad: nivel 0 a nivel 3 los programas que corren en nivel 0 estn
en modo supervisor y pueden ejecutar todo el repertorio de instrucciones del procesador
los que corren en nivel 3 son del usuario y estn restringidos a un grupo de instrucciones
por ejemplo a nivel 3 no es permitido ejecutar las instrucciones de E/S del assembler
La siguiente lista en pseudocdigo assembler es un ejemplo de algunas instrucciones
privilegiadas:
Procesos e hilos


2
STINT: activar las interrupciones
HINT: desactivar las interrupciones
HLT: detener el procesador
LDT: cargar registros del vector de interrupciones
LMSW: cargar la palabra de estado
CLTS: borrar flag de tarea conmutada
3.1.3 Imagen de un proceso
Un proceso es la abstraccin de un programa en ejecucin. la imagen del proceso est
compuesta por cuatro segmentos: cdigo, datos, pila, datos del bloque de control del
proceso (BCP) llamado tambin la tabla de procesos; la imagen del proceso no es
necesariamente una imagen continua en la RAM, dependiendo del administrador de la
memoria estos segmentos que constituyen la imagen pueden localizarse en diferentes sitios
de la RAM, adems, si un proceso se encuentra paginado en la RAM solo algunas pginas
de la imagen se encuentran en la memoria principal.

Figura. Imagen de un proceso
3.1.4 Multiprogramacin de procesos
Una CPU en un instante de tiempo ejecuta una sola instruccin de un programa, pero en
un intervalo t (Quantum o rodaja de tiempo) ejecuta n instrucciones del mismo proceso
es lo que se denomina traza de instrucciones del proceso, La CPU conmuta
continuamente entre procesos dando la ilusin de paralelismo en la ejecucin pero en
realidad es un pseudoparalelismo.
En un ambiente de multiprogramacin la CPU ejecuta varios procesos otorgando a cada
uno una fraccin de tiempo; la CPU conmuta entre procesos ejecutando la traza de
instrucciones para atender a todos los usuarios dando la apariencia de paralelismo, una
traza es el conjunto de instrucciones que la CPU ejecuta durante una rodaja de tiempo
llamada Quantum ( aproximadamente 100 ms) el proceso puede cambiar de estado,
cuando se termina el Q del proceso la rutina que atiende esta interrupcin hace que el
control pase al planificador el cual mediante un algoritmo de polticas de planificacin
selecciona el nuevo proceso a ejecucin en la CPU.
Procesos e hilos


3

Figura. Multiplexacin de procesos en el tiempo

El modelo de procesos implica una asignacin de CPU a trazas de programa durante un Q
de tiempo consecutivamente. p1-tp-p2-tp-p3-tp-p4-tp donde tp representa la traza
de instrucciones del planificador.
Q-tp-Q-tp-Q-tp-Q es otra forma de representar el modelo cuando los procesos consumen
todo el Quantum (procesos limitados por CPU).
El trmino multiplexacin en informtica se refiere a compartir la cpu entre varios
procesos mediante rodajas de tiempo llamada Quantum
3.1.5 Mecanismos para la interrupcin de un
proceso que se est ejecutando

Interrupcin externa
Terminacin de la rodaja de tiempo. interrupcin generada por el reloj, el
proceso pasa a la cola de listo
Interrupcin de un dispositivo de E/S, el proceso pasa a la cola de
bloqueados
Fallo de pgina. el proceso pasa ha estado bloqueado mientras se trae a la
RAM la pgina solicitada.
Trap
un trap est asociado a una condicin de error en la instruccin que se est
procesando, el SO determina si el error es irreparable y elimina el proceso o
si se puede hacer algn procedimiento para reparar el error.

Llamadas al sistema
Cuando se ejecuta una instruccin de E/S el proceso genera una llamada al
sistema operativo, en algunos casos esta llamada implica que se produzca
una interrupcin por cambio de contexto
algunas llamadas al sistema no implica un cambio de contexto sino un
cambio de modo, el procesador continua con el mismo proceso pero
Procesos e hilos


4
transfiere el control al SO y luego retorna al proceso. Ejemplo: Un mensaje
corto por la terminal no implica un cambio de contexto pero si un cambio de
modo
3.1.6 Cambio de modo
Un proceso puede cambiar de modo usuario a modo Kernel sin cambiar su estado de
ejecucin, por ejemplo cuando el proceso invoca al SO mediante las llamadas al
sistema para ejecutar un servicio o rutina del SO cambia a modo Kernel, pero luego
retorna al proceso y vuelve a modo usuario, en este cambios de modo el proceso
mantiene el procesador es decir mantiene el estado de ejecucin; en otros casos, las
llamadas al sistema implican un cambio de contexto y liberacin de la CPU.
3.1.7 Causas para crear un proceso
Desde un terminal en forma interactiva el usuario crea procesos cuando ejecuta
comandos, cada comando implica la creacin de un proceso
Cuando se arranca el sistema operativo, se inician los procesos denominados demonios,
los cuales se caracterizan porque no generan salidas a la terminal y terminan cuando se
desactiven los servicios que estos representan.
El sistema operativo puede crear nuevos procesos segn los servicios que se les solicite.
Un programa de usuario puede crear procesos de usuario, en Linux se crean procesos
invocando la llamada al sistema fork().
El cron genera nuevos procesos en forma automtica segn la programacin y
calendario establecido.
3.1.8 Causas de terminacin de un proceso
Terminacin normal. El procesos mediante una llamada al sistema comunica que ha
terminado normalmente exit.
Lmite de tiempo excedido. Los tiempos pueden incluir tiempo total del proceso,
tiempo de uso de CPU, el proceso se ha pasado del lmite de tiempo permitido.
Memoria insuficiente. No existe memoria virtual y el proceso no cabe en la RAM.
Violacin de memoria. trata de acceder lugares de memoria restringidos o protegidos.
Error de proteccin. tratar de escribir en ficheros protegidos contra escritura.
Falla en una operacin de E/S. un dispositivo defectuoso.
Instruccin invlida. se trata de ejecutar una instruccin en un archivo de datos, esto
ocurre al tratar de ejecutar un archivo que contiene datos o saltar a ejecutar
instrucciones al rea dentro del rea de datos.
Instruccin privilegiada. se trata de ejecutar instrucciones del modo Kernel.
Datos errneos. los datos no coinciden con el tipo especificado.
Eliminacin del padre del proceso hijo. se eliminan todos los descendientes
Procesos e hilos


5
3.1.9 Causas para la suspensin de un proceso
El SO suspende el proceso para liberar memoria RAM, el proceso suspendido pasa a la
memoria virtual en el disco y permanece en estado inactivo el cual no compite por la
CPU.
El SO decide suspender procesos que llevan mucho tiempo en la RAM y no hacen nada,
es decir no entran a estado de ejecucin porque esperan por un evento que
posiblemente nunca llegar.
Procesos que funcionan con un temporizador para ejecutarse peridicamente y luego
suspenderse, es el caso de los monitores de estadsticas del sistema, cada intervalo de
tiempo se ejecutan y luego se suspende.
Por solicitud del usuario, para efectos de depuracin del proceso ( debug ).
3.1.10 Estructura de los procesos
En algunos sistemas operativo Linux los procesos se organizan en jerarqua en otros como
Windows se organizan como objetos, usando el comando pstree en Linux listamos en
pantalla esta forma jerrquica de todos los procesos, el proceso padre de todos se llama init
que se ejecuta al momento de arranque, despus de que se verifican los dispositivos y se
carga el sistema de archivos raz.

Figura. Estructura de procesos
3.1.11 Duracin de los procesos
La duracin depende del tipo , existen varios tipos de procesos: procesos relacionados con
los servicios, procesos de comandos bsicos, procesos de simulaciones matemticas,
procesos comerciales etc. ; en general existen procesos de corta duracin, es decir, menos
de un Quantum de tiempo por ejemplo algunos comandos bsicos ls, cat, ps; procesos de
duracin media y procesos largos que gastan varios Q e incluso horas das, meses, aos de
CPU; los procesos que consumen mucha CPU se les denomina procesos limitados por
CPU, los procesos que consumen mucha entrada salida se les denomina procesos limitados por
E/S.
3.1.12 Tabla de control de los procesos
Es la estructura de datos ms importante para la administracin de los procesos, en esta
tabla o BCP (Bloque de control para los procesos) se almacena toda la informacin sobre la
identificacin de un proceso, el valor de los registros de la CPU para el respectivo proceso,
Procesos e hilos


6
el estado, la prioridad, el tiempo de ejecucin etc... es de anotar que la tabla de procesos
desde el punto de vista de un programador es un arreglo de estructuras y por tal motivo se
encuentra en la RAM, para cada proceso existe una entrada en el arreglo.
3.1.13 Contenido de la tabla de procesos

La siguiente informacin relativa a los procesos se encuentra disponible en la tabla de
procesos:
Identificacin.
PID (process Identification) un nmero que identifica el proceso
PPID ( identificacin del padre ) un nmero que identifica el proceso padre
UID ( nmero de identificacin del usuario dueo del proceso)
Relacionadas con el procesador.
PC contador de programa
PSW palabra de estado del programa (Program Status Word)
Registros de usuario. los registros de CPU que pueden ser ledos y modificados por
el programador
Puntero de Pila. cada proceso contiene una o mas pilas o estructuras LIFO ( last
input first output ) para guardar las direcciones de retorno de las subrutinas y los
valores del paso de parmetros.
Relacionadas con el estado y la planificacin.
Estado del proceso. se almacena una letra que identifica el estado del proceso
ejemplo: en ejecucin (Run), listo (Ready) , bloqueado (Sleep), Suspendido-
Bloqueado (bloqueado en la swap B/S), Suspendido_Listo (listo en la swap B/L)
NoInterrumplible (D), zombie (Z),
es el principal de la jerarqua en esta sesin (Rs)
es un hilo (Rl)
Prioridad. Es un nmero que determina la prioridad para que los procesos se les
otorgue la CPU, por el planificador del SO
tiempo. de uso de la CPU, tiempo que ha estado bloqueado esperando un evento
o en alguna cola.
Procesos e hilos


7
Relacionadas con la comunicacin.
Mensajes, banderas, seales asociadas a la comunicacin entre procesos
Relacionada con la memoria:
Puntero al segmento de cdigo
puntero al segmento de datos
puntero al segmento de pila
puntero a la cola de listos
puntero a la cola de bloqueados
puntero a la cola suspendidos
Relacionada con archivos.
fd ( file descriptor o nmero que identifica un archivo abierto por el proceso)
apuntador al ultimo registro en proceso

3.1.14 Representacin de los estados de los
procesos


Figura. Modelo de dos estados

Procesos e hilos


8

Figura. Modelo de tres estados


Figura. Modelo de cinco estados

3.1.15 Campos importantes del registro de
control psw (palabra de estado del
proceso)
La psw es dependiente del tipo de procesador, generalmente es un registro de 32 bits que
contiene flags ( banderas) que determinan el comportamiento algunas de estas banderas se
relacionan en la siguiente tabla:

FLAG del estado de la CPU
KF modo Kernel /modo usuario
CF la CPU acepta la instruccin CPUID (
informacin sobre familia, modelo,
vendedor del CPU ) identifica el procesador
del PC. Ver pdf sobre CPU instruccin con
ejemplos en lenguaje assembler y C.
Procesos e hilos


9
AF indicador de alineacin de frontera de
palabra
PF cuando se activa, en modo protegido se
genera una excepcin por cada acceso a
dispositivos de E/S
VF enciende una mquina virtual DOS para el
procesador Pentium, la CPU trabaja como
una CPU 8086
TF indicador de trap causa una interrupcin
despus de cada instruccin con el objeto
de depuracin del programa.
IF permite activar o desactivar las
interrupciones
VIP cuando se est en modo virtual (mquina
DOS) indica que una o ms interrupciones
estn pendientes de atender.
resultado de operaciones
CF bit de acarreo por una operacin de
desplazamiento
OF bit de Overflow
PF bit de paridad
SF bit de signo como resultado de una
operacin aritmtica o lgica
ZF indica que el resultado de una operacin
aritmtica o lgica es cero

Los campos de la tabla ilustran sobre la importancia de este registro para la administracin
del sistema y de los programadores, pues dependiendo de los valores de estos FLAGs se
determina el estado de la mquina y de los procesos, no sobra decir que estos campos solo
pueden ser modificados por el SO por medio de instrucciones especiales en modo Kernel.
3.1.16 Descripcin de los estados
Ejecucin (R). El proceso que tiene la CPU
Listo (L)(R). El proceso que dispone de todos los recurso, listo para que se le asigne el
procesador
Procesos e hilos


10
Bloqueado (S). Bloqueado por una operacin de E/S, espera un evento para pasar a
estado de listo, evento que sucede cuando se cumple la solicitud que lo mantiene en
bloqueo, por ejemplo cuando se cumple una solicitud de E/S.
Nota: la S se interpreta como Sleep
Suspendido-Bloqueado(B/S). El procesos fue sacado de la RAM y se encuentra en
memoria virtual, este estado se presenta cuando el sistema detecta que falta espacio en la
RAM para almacenar los procesos;
Nota: B significa que reside en la swap y S en estado de bloqueado o sleep
Suspendido-Listo (B/L). Es el mismo estado de listo solo que el proceso est en
memoria virtual
3.1.17 Relacin entre procesos y el sistema
operativo

Basados en el concepto de que un SO es un conjunto de programas, libreras, mdulos; se
trata de responder la pregunta si el sistema operativo se debe considerar como un proceso.
existen varios enfoques:
Enfoque tradicional
El sistema operativo no se considera como un proceso, es un bloque independiente o
ncleo que siempre reside en la RAM, los procesos cuando requieren servicios del sistema
conmutan al modo Kernel y se produce un cambio de contexto.



Figura. El sistema operativo tradicional


Como procesos de usuario
El sistema operativo forma junto con los procesos de los usuarios una sola imagen, cuando
el proceso del usuario solicita un servicio se cambia de modo usuario a modo Kernel
pero no se cambia de contexto.

Procesos e hilos


11


Figura. El sistema operativo como procesos de usuario

Sistemas operativos modulares
El sistema operativo se organiza como una coleccin de procesos del sistema (kernel ) y de
mdulos que pueden ser de dos tipos: mdulos estticos que se definen en el momento
de la compilacin del Kernel o mdulos de carga dinmica que se van incluyendo
cuando se solicitan
En el caso del SO Linux generalmente los mdulos del kernel corresponden a los
manejadores de dispositivos (drivers), sistemas de archivos (fileSystem) y las rutinas de
llamadas al SO ( system call). Los mdulos de carga dinmica facilitan al SO actualizarse
incluyendo nuevas caractersticas y nuevos dispositivos sin necesidad de reiniciar el sistema.

Figura. Sistema operativo modular

3.1.18 Computacin de alto rendimiento
Los computadores para proceso en paralelo se basan en dos arquitecturas:
memoria compartida
memoria distribuida.

Memoria compartida. varios procesadores comparten memoria RAM a travs de un
solo bus de alta velocidad tradicionalmente se conocen como mquinas vectoriales tales
como la cray XMP en terminologa moderna mquinas SIMD (Single instruccin Multiple
Data) que se ha materializado con las extensiones MMX, SSE ( streaming Single
instruccin Multiple Data Set). En estos sistemas existe una solo board con multiples
procesadores y una RAM compartida
Memoria distribuida. Varios nodos PCs con sus propias memorias RAM y procesador
ejecutan procesos en paralelo y se comunican a travs de una red de alta velocidad; est
arquitectura corresponde MIMD (Multiple Instruccin Multiple Data)
Comentario [Y1]: es necesario cambia
la figura para que corresponda a la
defincicin: cambia la palabra
CONMUTACION DE PROCESOS POR
KERNEL - MODULOS
CAMBIAR S1 S2 SN PO R P5 P6 PN
Procesos e hilos


12

Programacin en paralelo.
En computacin cientfica existen problemas de alta complejidad que requieren enormes
velocidades de clculo y grandes capacidades de memoria RAM que son imposibles de
satisfacer con un computador mono-procesador.
Ejemplos:
Las simulaciones del movimiento molecular; simular un segundo del
movimiento de un grupo de tomos tardara miles de aos en un PC normal
Descifrar el cdigo gentico implica procesos de secuenciacin y
comparacin de patrones y procesamiento de imgenes son imposibles de
lograr si no se hace uso del proceso en paralelo y la computacin de alto
rendimiento.
Acceso a bibliotecas digitales realizando bsquedas en contenidos de libros
y revistas.
Comprobacin del el tiempo para descifrar una determinada clave de
seguridad de 32, 64, 12 bits

Para hacer uso de la programacin en paralelo se requieren libreras que realizan el paso de
mensajes entre diferentes programas que corren en paralelo en diferentes procesadores, una
de las ms usadas es MPI( Message Passing Interface)


Procesos e hilos


13
3.2 HILOS O HEBRAS (THREADS)
3.2.1 Definiciones de los Hilos

Definiciones de los Hilos
Proceso se refiere a la unidad bsica para agrupar recursos del computador
como el procesador, memoria, dispositivos de E/S, archivos, seales, pila,
etc.
Los hilos son llamados procesos ligeros principalmente porque la
conmutacin entre hilos es ms rpida que la conmutacin entre procesos,
un hilo es del orden de 10 a 400 veces ms rpido dependiendo si los hilos
se implementan a nivel de kernel o a nivel de usuario
El concepto de hilo se asocia a unidades de ejecucin, el de procesos al de
agrupacin de recursos
En un proceso pueden existir uno o ms hilos compartiendo el espacio de
direcciones del proceso, un proceso que posee n hilos a nivel de kernel
compartiendo un buffer en memoria puede eficientemente atender
solicitudes de datos para los diversos hilos sin bloquear el proceso que los
contiene, cada hilo se puede asignar a una solicitud e incluso en un
procesador diferente aumentando la eficiencia
Ejemplo: un servidor WEB es ms eficiente si se programa atendiendo
cada solicitud web en un hilo diferente

Resumiendo el concepto de hilos se asocia con unidad de ejecucin del proceso, compartir
memoria entre hilos de un proceso, trabajo colaborativo, , el hilo permite dividir un
proceso en varias tareas que pueden corren en forma paralela; el concepto de proceso
asocia recursos a uno o varios hilos de ejecucin.
3.2.2 Caractersticas de los Hilos
El hilo se considera como la unidad de ejecucin, cada hilo posee datos
propios referentes al estado de la CPU como su pc, psw, apuntador de pila
del usuario, apuntador pila del Kernel es decir su propia tabla de hilos,.
Comparten el mismo espacio de direcciones de memoria de un proceso en lo
referente al segmento de cdigo y segmento de datos
un hilo uede crear otros hilos.
Se crean para trabajar en forma colaborativa dentro de un proceso, es decir
no existe proteccin de sus reas de memorias entre ellos, el programador
debe ser consciente de la lgica de colaboracin.
Se pueden organizar en varias formas:
o jerrquica. un hilo maestro - varios hilos esclavos
o entubamiento. tubera de hilos similar a tubera de procesos
o grupos.
Los hilos a nivel de kernel son apropiados para el procesamiento paralelo sin
que se pierda el concepto de proceso secuencial, es decir as como los
procesos se bloquean cuando ejecutan instrucciones de E/S, los hilos a
nivel de kernel tambin.
Procesos e hilos


14
3.2.3 Imagen de un proceso con hilos


Figura. Imagen de un proceso con varios hilos
3.2.4 Ventajas y desventajas de los hilos

Ventajas de hilos Desventajas de los hilos
1. Son ms rpidos en la conmutacin,
creacin y eliminacin.
1. Cuando un hilo se bloquea, el
proceso y el resto de hilos
tambin se van a bloqueo. se
corrige implementando tcnicas
conocidas como jacketing que
consiste en convertir una
llamada bloqueante en no
bloqueante.
2. Comparten los datos sin necesidad de
mecanismos de comunicacin tales
como memoria compartida, mensajes u
otros porque el segmento de datos del
proceso es el mismo para todos los hilos
2. Cuando los hilos se
implementa a nivel de usuario,
una aplicacin multihilo no
puede realizar multiproceso
3. Se adaptan mejor a las aplicaciones
que requieren procesamiento paralelo
usando varios procesadores.

4. La planificacin de los hilos a nivel de
usuario puede hacerse a nivel de la
aplicacin independiente de la
planificacin del Kernel


Procesos e hilos


15
3.2.5 Tabla latencias entre hilos y procesos
[STAL 2005 pag. 169]

hilos a
nivel
usuario
Hilos en el Kernel procesos
creacin 34 s 948 s 11300 s
bloqueo 37 s 441 s 1840 s

3.2.6 Aplicaciones de los Hilos

Los hilos se pueden utilizar para ejecutar tareas simultneas en paralelo compartiendo
un espacio de direcciones.
Es 100-400 veces ms rpido realizar una conmutacin de hilos que una de procesos;
por tal razn es ptimo programar con hilos aplicaciones que manejen numerosa
actividad de entrada salida.
Ejemplo1: Un servidor de Web, recibe muchas peticiones para localizar pginas Web esto es
E/S, el servidor puede generar un hilo por cada solicitud y todos ellos comparten un cach de
pginas. Si el hilo encuentra lo que busca en la cach retorna la peticin al usuario, de lo
contrario inicia un proceso de bsqueda y se bloquea para que otro hilo procese otra solicitud
de pgina web.
Ejemplo2: Una pgina Web generalmente contiene texto, imgenes y sonido, vdeo; se puede
programar la lectura de la pgina usando un hilo para procesar cada contenido compartiendo
el rea del usuario, si existen varios procesadores cada uno puede ejecutar una de estas tareas
realizando procesamiento paralelo; si se trata de un solo procesador es mucho mas rpida la
conmutacin entre hilos que entre procesos
Ejemplo3: Las aplicaciones de procesamiento de texto como Word, openOffice se pueden
programar para generar las copias de seguridad corriendo como hilos en segundo plano; si se
omiten los hilos cada vez que se realiza la copia de respaldo se produce una espera para el
usuario, con hilos en segundo plano el usuario no alcanza a percibir el cambio de modo entre
la tarea interactiva y la tarea en segundo plano
3.2.7 Implementacin de Hilos
3.2.7.1 Hilos a nivel usuario. ULT (User Level Thread)

Procesos e hilos


16
Los hilos se ejecutan encima de una capa software ( biblioteca ), en esta capa se manejan
las diferentes llamada relacionada con la creacin y administracin de los hilos como por
ejemplo thread_create y otras, tambin este software debe mantener su propia tabla de
hilos, que permite salvar los registros y otros datos del hilo relacionados con la cpu. El
Kernel ignora la existencia de hilos y contina manejando el proceso como una sola
unidad solo existe a nivel de kernel la tabla de procesos.
Ventajas:
Los subprocesos pueden tener sus propios algoritmos de calendarizacin.
Se pueden implementar en sistemas operativos que no administren hilos.
Desventajas:
Un hilo que se bloquea por una operacin de E/S Ejemplo : read bloquea a los otros
hilos del proceso.
Un hilo puede ejecutarse en forma indefinida y bloquea a los otros, ya que no estn
controlados por la interrupcin de reloj del sistema.
En aplicaciones las que los hilos realizan gran cantidad de llamadas al sistema. ( las
aplicaciones limitadas por E/S ), cada llamada se convierte en un cambio de contexto,
entonces la capa de software que administra los hilos debera convertir las llamadas de
E/S bloqueantes en llamadas no bloqueantes ( tcnica conocida como jacketing) para
conservar las ventajas de velocidad de conmutacin de hilos sin bloquear todo el
proceso
3.2.7.2 Hilos nivel Kernel. KLT (Kernel Level Thread)

El Kernel administra los hilos, lleva la tabla de procesos normal pero aade un tabla para
hilos, cuando un hilo termina el Kernel decide si continua con otro hilo del mismo proceso
o con un hilo de otro proceso. Su desventaja en el costo en tiempo cuando se hacen
llamadas al sistema para manejar los hilos, pues la conmutacin de hilos a nivel de Kernel
es mayor que a nivel de hilos usuario.
3.2.7.3 Esquemas Hbridos
Existe la administracin de hilos a nivel de Kernel y a nivel de usuario. Los hilos a nivel de
Kernel se multiplexan en hilos a nivel de usuario.
Esquema hilos a nivel de usuario e hilos a nivel de Kernel:

Procesos e hilos


17


Figura. Hilos a nivel de usuario



Figura. Hilos a nivel de Kernel



Figura. Hilos hbridos

3.2.8 Los hilos en diferentes Sistemas
Operativos (Unix Linux Windows Solaris )

Procesos e hilos


18
Unix. Los sistemas tradicionales de Unix no implementan hilos, manejan solo un hilo o
proceso a nivel de Kernel; para implementar hilos a nivel de usuario recurren a bibliotecas
de hilos como la pthread con la que se pueden administrar varios hilos a nivel de usuario
pero el Kernel solo maneja un proceso; los sistemas modernos Unix implementan multi-
hilos a nivel de ncleo.
Linux. No distingue procesos de hilos es un caso especial, pero implementa los conceptos
de hilos considerando que todos los procesos que comparten el mismo espacio de
direcciones virtuales son considerados como hilos excepto que no se comparte la pila de
usuario, la entrada a la BCP; normalmente los procesos en Unix se crean con la instruccin
fork() la cual genera un duplicado de la imagen del proceso padre; para crear un proceso se
usa en Linux la llamada al sistema clone con argumentos para indicar que se comparte
todos los recursos como memoria virtual, archivos, tabla de seales etc..; cuando los dos
procesos comparten la MV se consideran como hilos de un mismo proceso, cuando se
produce un cambio de contexto el kernel del sistema verifica si el proceso nuevo apunta al
mismo espacio de direcciones de MV en tal caso no realiza llamada al sistema para cambiar
de proceso, simplemente redirige el PC a la nueva direccin de memoria, evitando de esta
forma el cambio de contexto pero al mismo tiempo administrando para cada hilo su propio
BCP
Para crear u proceso tradicional en Linux se usa la llamada clone sin argumentos.
Solaris. Implementa hilos hbridos, multi-hilo a nivel de usuarios, multi-hilo a nivel del
ncleo. Mediante la implementacin de procesos ligeros que realizan la asociacin entre
hilos a nivel de usuario e hilos a nivel del ncleo.
Windows. Maneja procesos e hilos como objetos, es un sistema multi-hilo a nivel de
ncleo, cada procesos puede manejar varios hilos y cada uno ser asignado a procesadores
diferentes realizando programacin en paralelo.

Procesos e hilos


19
Ejercicios
Represente esquemticamente el concepto de hilo.
Qu significa hacer un cambio de contexto entre hilos.
En el siguiente esquema trabaja con hilos, realice el esquema sin hilos.

Escriba cuales datos del proceso son compartidos entre hilos y cuales no.
Escriba los estados de un hilo. a nivel usuario tiene sentido un hilo en estado
de suspendido (B) en decir que el hilo sea sacado de la RAM y este en la
memoria virtual?
Elabore una tabla con las ventajas y desventajas de tener hilos a nivel de usuario,
hilos a nivel de Kernel.
Que importancia tiene la llamada al sistema clone ?
Escriba un ejemplo de una aplicacin que use hilos emergentes. (hilos que se
crean en respuesta a una solicitud de E/S). Ej. en una servidor de correo; cada
vez que se solicita un correo el servidor dispara un hilo emergente para atender
la solicitud y cuando la cumpla lo destruye.
Explique un procedimiento para convertir una aplicacin de un solo hilo
(mono-hilo) en una aplicacin multi-hilo a nivel de usuario? [R. No es tarea
fcil, existen inconvenientes de conflictos de competencia a nivel de los hilos
que se puedan crear especialmente con las variables globales, con la pila , con
las seales, etc. como el Kernel no conoce de la existencia de hilos le puede
quitar la CPU a un hilo cuando las transacciones no se han completado
ocasionando un conflicto de competencia. Ej: una seal de alarma de un hilo
puede ser alterada por otro hilo que establezca un nuevo valor de seal de
alarma sin que se haya cumplido la seal anterior.
Procesos e hilos


20
3.3 PLANIFICACIN DE PROCESOS E HILOS
El planificador de procesos es el mdulo del sistema operativo que asigna la CPU a los
procesos de acuerdo a determinadas polticas.
En los sistemas por lotes el planificador era muy simple aplicaba FIFO selecciona un el
primer programa y a continuacin el siguiente.
3.3.1 Criterios de un buen planificador
Equidad. Cada proceso tenga su tiempo justo.
Eficiencia. Mantener ocupada la CPU un 100% en procesos del usuario.
Rendimiento ( Throughput ) Maximizar el nmero de trabajos por hora.
Minimizar cambios de contexto. Aumenta la eficiencia pero hay que tener cuidado de
no perjudicar a los usuarios interactivos o usuarios con mucha E/S
Minimizar tiempo de respuesta: Minimizar el tiempo de respuesta para usuarios
interactivos; el tiempo no debe sobrepasar ciertos lmites por Ej. 5 ms
Predecibilidad. El planificador debe disearse para que en todo momento se pueda
conocer su comportamiento futuro
Previsibilidad. Es una medida que indica la estabilidad del sistema es decir garantizar los
tiempos de respuesta incluso cuando hay sobrecarga, se trata de evitar la variabilidad del
sistema.
El diseador debe ser consciente de que cada proceso es nico e impredecible. Algunos
gastan ms CPU y otros gastan ms E/S;
IMPORTANTE: de ninguna forma es posible predecir y precisar cundo y en que parte del
proceso se suceder la interrupcin por cambio de contexto .
3.3.2 Tiempos de los procesos
Tiempo de estancia o de servicio (T) turnaround time: Tiempo que gasta el proceso en
el sistema desde que inicia hasta que termina, incluye el tiempo de proceso, el tiempo de
espera y tiempo de carga.
Tiempo de ejecucin (R): Tiempo de servicio menos el tiempo que gasta en la cola de
listos, es el tiempo equivalente a un ambiente de mono-programacin. es igual a T-E es
decir incluye el tiempo en estado de bloqueo.
Tiempo de espera (E) tiempo que gasta en cola de listos, es equivalente al tiempo de
servicio menos el tiempo de ejecucin.(T-R)
Tiempo de procesador. (P) tiempo de uso de la CPU.
Procesos e hilos


21
Tiempo de respuesta (response time): El tiempo de respuesta a una peticin de E/S
depende de la velocidad de los dispositivos de E/S.
ndice de servicio: Es la relacin entre el tiempo de ejecucin R y el tiempo de servicio
T ( R/T ); si el ndice se aproxima a uno 1 significa que no paso mucho tiempo en cola
de listos; si el ndice se aproxima a cero 0 significa que el proceso paso gran parte del
tiempo en la cola de listos y la multiprogramacin es muy desfavorable para ese proceso,
sera recomendable que este se ejecutara en otro ambiente por ejemplo de multiproceso o
incluso de mono-programacin. En este caso la relacin E/T se aproxima a 1 indicando
que pas la mayor parte del tiempo en cola de listos
3.3.3 Tipos de planificadores
Planificador de admisin ( a largo plazo ). Define las polticas que determinan el orden
de entrada de los procesos al sistema. Ejemplo: en un procesamiento por lotes se puede
establecer una poltica FIFO.
Planificador de memoria (mediano plazo). Selecciona los trabajos que han de pasar
de la memoria RAM a la memoria SWAP cuando se necesita memoria RAM para otros
procesos, teniendo en cuenta los siguientes factores
Tiempo que el proceso ha permanecido en memoria RAM bloqueado esperando algn
evento
Tiempo transcurrido desde que el proceso fue intercambiado.
Tamao del proceso
Prioridad.
Planificador de la CPU ( a corto plazo ) Selecciona de la cola de listos a cual proceso se
le asigna la CPU aplicando los algoritmos de planificacin.


Procesos e hilos


22
Figura. Planificador de la CPU


3.3.4 Algoritmos de planificacin o
calendarizacin
Planificacin no interactiva
FIFO
Primero el ms corto
Tiempo restante ms corto

Planificacin Interactiva.
Turno Circular (Round Robin )
Prioridades
Colas mltiples.
Proceso mas corto primero
Calendarizacin garantizada
Calendarizacin por lotera
Calendarizacin considerando el nmero de procesos del usuario.
3.3.4.1 Fifo
El primer procesos en llegar es primero en ser atendido ( FIFO ); se va formando una lista
de procesos sin importar prioridades, duracin, etc es un planificador elemental y se usa
para procesamiento por lotes o batch.

Figura. El primer proceso en llegar es el primero en salir

3.3.4.2 Primero el ms corto
Es un mtodo apropiado para los sistemas batch que garantiza mximo rendimiento.
Ejemplo: Suponga que todos los procesos inician al mismo tiempo y sus tiempos de
ejecucin son: A= 8; B=3; C=6; D=4 unidades de tiempo
Segn el orden en que se procesen los trabajos se obtendran los siguientes tiempos de
respuesta:


Comentario [Y2]: para ser consistentes
con la grafica anterior: cambiar B por S
E por R
S/L por (B/L)
S/B por (B/S)

la B significa estado suspendido (Swap)
Procesos e hilos


23
FIFO Primero el
mas corto
Turno
Circular RR
A B C D
tiempo
promedio en
RR
A 8 21 8 3 6 4 21
B 11 3 7 2 5 3 10
C 17 13 6 1 4 2 19
D 21 7 5 3 1 15
4 2
3 1
2
1
Total 57 44 65
Promedio 14.25 11 16.25

El promedio indica que se despacho un mayor nmero de trabajos o que los trabajos en
promedio esperaron menos tiempo para terminar
Colocando los trabajos cortos en tiempo de ejecucin de primeros en sistemas por lotes se
obtiene el mejor rendimiento
Demostracin: para un trabajo A que gasta a de tiempo, un trabajo B que gaste b de
tiempo, un trabajo C que gaste c de tiempo y un trabajo D que gaste d de tiempo se tiene
que el promedio es:
Promedio = (a+(a+b)+(a+b+c)+(a+b+c+d)) = (4a+3b+2c+d)/4
Observando los coeficientes se concluye que al ordenarlos de menor a mayor se obtiene el
tiempo promedio ms pequeo si se cumple: a<b<c<d
Pronstico de tiempo aplicando el mtodo del envejecimiento.
Para calcular los tiempos de ejecucin a procesos interactivos que no se conoce a priori su
duracin, se aplica el mtodo del envejecimiento. Si el proceso P1 gasta en ejecucin
inicialmente t
0
y posteriormente t
1
con estos dos datos de inicio se puede realizar un
pronstico t*
2
aplicando la siguiente formula
t*
2
= a*t
0
+ (1 - a)*t
1
. siendo a un factor 0<=a<=1.
Procesos e hilos


24
si a=1/2 entonces, t*
2
=(t
0
/2)+(t
1
/2) = ( t
0
+ t
1
)/ 2 coincide con el promedio
aritmtico.



Ejercicio
Aplicando el mtodo del envejecimiento calcule el tiempo pronosticado para t6
suponiendo un factor de a = 1/2 y los siguientes tiempos de ejecucin en ms.
t
0
=1; t
1
=3; t
2
=4; t
3
=3; t
4
=2; t
5
=5
Una frmula general recursiva para el mtodo del envejecimiento la podemos escribir de la
siguiente manera:
t*
n
= a*T(n-1) + (1-a)*t(n-1) n > 0
t*
n
= Tiempo pronosticado
T(n-1) = Tiempo histrico acumulado de pronsticos anteriores
t(n-1) = Tiempo real segn ltima medida anterior al que se est pronosticando
Para calcular el primer pronostico t
*
1
supongo que el tiempo histrico es el mismo tiempo
real y realizo el primer clculo as:
t
*
1
= t
0
el primer pronstico es la primera media real
Para calcular el segundo pronstico:
t
*
2
= pronstico anterior ( histrico ) * (1/2) + ejecucin anterior * (1/2)
t
*
2 =
1 * (1/2) + 3 (1/2) = 2








Procesos e hilos


25
As sucesivamente hasta pronosticar el tiempo 6.
n t
n
t
*
n
pronstico
0 1 primer tiempo
1 3 t
1
*
= t
0
= 1 primer pronstico
2 4 t
2
*
= 1*(1/2)+ 3 *(1/2) = 2 segundo pronstico
3 3 t
3
*
= 2*1/2 + 4*1/2 = 3
4 2 t
4
*
= 3*1/2 + 3*1/2 = 3
5 5 t
5
*
= 3*1/2 + 2*1/2 = 2.5
6 t
6
*
= 2.5*1/2 + 5*1/2 = 4

Resumiendo: para calcular un tiempo pronostico t*
n
se debe conocer los dos primeros
tiempos reales t
0
t
1
; comenzar a calcular el t*
2
pronstico aplicando la formula
t
*
2 =
a * t
0
+ (1-a)*t
1
que sera el pronstico de lo que sera la tercera medida
luego llega la tercera medida real; entonces se continua de esta forma sucesivamente hasta
llegar a calcular t*
n
aplicando la formula:
t*
n
= a*T(n-1) + (1-a)*t(n-1) n > 0
El factor a determina la importancia del promedio de tiempo histrico o de la ltima
medida real; si a tiende a cero importa mucho ms la ltima medida para el pronstico.
Una posible aplicacin de este algoritmo es para procesos interactivos se puede calcular el
tiempo que gastar el proceso haciendo un pronstico segn el mtodo del envejecimiento
y aplicar algoritmo de planificacin seleccionando el ms corto primero.
3.3.4.3 Turno circular (round robin rr)

Es el algoritmo que ms se usa en multiprogramacin, existe una lista FIFO de procesos
en estado de listo; en cada interrupcin de reloj (20 ms) se verifica si ya se cumpli el
tiempo del Q para el proceso que tiene el procesador, se le quita, se pasa a la cola de listos
y se procede a asignar la CPU al siguiente de la lista FIFO; si el proceso ejecuta una
operacin de E/S antes de terminar su Q se enva a la cola de bloqueados; si es un proceso
muy corto y termina antes del Q se asigna inmediatamente la CPU al siguiente proceso de
la lista.
Con un Q muy pequeo se aumenta el nmero de cambios de contexto y se desmejora la
eficiencia, con un Q muy grande favorece a los procesos largos pero se desfavorece los
cortos. La frmula de la eficiencia = Q/Q+S donde S es el tiempo de cambio de
Procesos e hilos


26
contexto. Ejemplo: con un Q = 100 ms y un cambio de contexto de 10 ms e= 100/120
= 90.91% Ineficiencia= 10/110 = 9.09%

Figura. Cada proceso cumple un Q de tiempo y se procede a asignar la CPU al siguiente
de la lista FIFO, el proceso que abandona la CPU queda en cola
nuevamente en la lista
3.3.4.4 Primero el de tiempo ejecutado ms corto

Cuando se planifica los procesos que estn en estado de listos, el planificador verifica el
tiempo de ejecucin de cada proceso con respecto al Q; se asigna el procesador en el
orden de primero los mas cortos ( t << Q ) que posiblemente correspondan a procesos
que iniciaron y posteriormente ejecutaron alguna E/S; este algoritmo es una variacin de
turno circular dando prioridad a los procesos limitados por E/S y como consecuencia
eliminando el orden de una lista FIFO; el inconveniente es que se requiere llevar una
contabilizacin de los tiempo de ejecucin
3.3.4.5 Prioridades
Todos los procesos mantienen un nmero que representa su prioridad, se asigna la CPU al
de ms alta prioridad; en cada interrupcin de reloj, se disminuye la prioridad del proceso.
Asignacin esttica de la prioridad.
El administrador del sistema puede manejar las prioridades en forma esttica usando algn
comando del sistema en Unix existe el comando nice que permite subir o bajar
prioridades; solo el usuario root puede aumentar la prioridad de los procesos.
Ejemplo: Analicemos la asignacin de prioridades en un centro de cmputo:
A los procesos donde se corren aplicaciones crticas por tiempo se les asigna una prioridad
de 100 (prioridad mxima).
Ejemplo:
Procesos de mantenimiento 100.
Procesos de ingenieros 80.
Procesos de programadores 70.
Procesos de edicin y grabacin 50.
Procesos e hilos


27


Asignacin dinmica.
La prioridad es asignada automticamente por el sistema. A los procesos que tienen
bastante E/S (limitados por E/S) se les debe dar la mxima prioridad y a los procesos que
consuman mucha CPU ( limitados por CPU) la mnima.
Una formula para calcular la prioridad del proceso es:
p = 1/f
donde f=(tiempo real)/(quantum). es la relacin del tiempo que ha consumido de CPU
con respecto al Q asignado, para los procesos cortos f tienden a cero y los largos >=1. Los
procesos con f pequeo automticamente tienen mayor prioridad porque generan un p
grande.
3.3.4.6 Colas mltiples con Q diferentes
Es la poltica de dar progresivamente ms CPU a los procesos limitados por CPU
(procesos que consumen mucha CPU). Un proceso que este en la clase ms alta comienza
con Q, el proceso de la siguiente clase con 2Q, y as sucesivamente, cuando un proceso
ocupa todo su Q, es movido a una clase superior.
Por ejemplo, en un proceso que necesita 100 Q en el mtodo de planeacin cclica
requerira 100 cambios de contexto, mientras que por el mtodo de colas mltiples solo 7.
Q, 2Q, 4Q, 8Q, 16Q, 32Q, 64Q

Ejercicio
Analice un proceso que empiece con bastante CPU y que luego se convierte en
interactivo entonces utiliza poca CPU. ( t << Q ).
Procesos e hilos


28

3.3.4.7 Calendarizacin garantizada
Si existen n procesos cada uno tiene derecho 1/n de tiempo de CPU, el sistema calcula una
relacin de cuanto ha consumido de lo que se le ha asignado: tiempo de procesador /
tiempo asignado (t
p
/t
a
). Se asigna la CPU a los que posean un ndice de relacin bajo.
Ejemplo: si en un perodo 1 seg = 1000 ms se hace la planificacin para cuatro procesos, a
cada uno se le asigna 250 ms de CPU, para comenzar se elige un proceso al azar, en las
siguientes iteraciones se calcula la relacin t
p
/t
a
y se asigna la CPU segn el menor ndice.
Un proceso muy largo puede perjudicarse con esta poltica, pues siempre favorece a los
procesos cortos muy interactivos o de mucha E/S.
3.3.4.8 Calendarizacin por lotera
Se basa en entregar a cada proceso un nmero, posteriormente en cada interrupcin del
reloj aproximadamente cada 20 ms se hace un sorteo y se asigna tiempo de CPU al
ganador hasta que llegue la siguiente interrupcin; la prioridad de los procesos se puede
administrar asignando varios nmeros de lotera (m) a un proceso, si existen (n)
nmeros de lotera la prioridad se calcula dividiendo m por el total de nmeros. p = m/n.
Ejemplo: con 100 nmeros para repartir entre x procesos x < = n, p= 20/100 equivale a
asignarle a un proceso 20 boletos para una prioridad del 20%. Al resto se le asignan
boletos de acuerdo a la prioridad teniendo en cuenta que 1 (un boleto) representa 1% de
probabilidad de obtener la CPU. Cmo resolver el problema si existen ms de 100
procesos en el sistema?
3.3.4.9 Calendarizacin que tiene en cuenta el nmero
de procesos por usuario
En los planificadores corrientes un usuario puede tener ms procesos que otro, por
ejemplo el usuario A tiene 4 procesos ( p1, p2, p3, p4 ) en el sistema y el usuario B solo
uno ( p5), en un planificador por turno circular se asignara: p1, p2, p3,p4,p5 en la primera
ronda y as sucesivamente para las dems rondas; consideremos el caso en que cada usuario
debe tener el 50% del CPU independiente del nmero de procesos: el planificador debera
asignar la CPU as: p1,p5,p2,p5,p3,p5,p4,p5 y as sucesivamente.
Procesos e hilos


29
3.3.4.10 Calendarizacin sistemas de tiempo real

Un sistema de tiempo real se caracteriza porque adems de cumplir con los requerimientos
funcionales derivados del anlisis y diseo se deben cumplir requerimientos de tiempo. El
sistema debe responder en tiempos menores o iguales al umbral de tiempo especificado en
el diseo, generalmente son sistemas de tiempo real los sistemas de control en una fbrica
automatizada, los sistemas multimedia, los sistemas que controlan aparatos de rayos X, en
general todos los sistemas informticos deben responder en un tiempo segn las
especificaciones pero en los sistemas de tiempo real se caracterizan porque los tiempos
son del orden de ms o s, pasado este umbral el sistema falla en su totalidad.
Los sistemas de tiempo real pueden ser crticos o no crticos, en los primeros cuando no se
cumplen los requisitos de tiempo el sistema falla comprometiendo daos fsicos o vidas de
personas, ejemplo control de la emisin de rayos X por medio de un software; en otros
sistemas de tiempo real cuando no se cumple el tiempo especificado el sistema funciona
parcialmente bien ejemplo: televisin digital.
Los sistemas de tiempo real son de propsitos especficos y en general son controlados por
un micro-controlador, pero algunos sistemas operativos de propsito general tambin
consideran algoritmos de planificacin en tiempo real por ejemplo un sistema Linux se
puede configurar para tiempo real.
Para alguno procesos en tiempo real se debe tener en cuenta la periodicidad con que
suceden los eventos y el tiempo que se gasta en atenderlos segn la siguiente formula: Si
hay n procesos ejemplo: n pelculas de vdeo y cada evento se sucede con un periodo Tj y
el procesador gasta Qj de CPU en cada evento, para que se cumpla el requisito de tiempo
real, la relacin Qj / Tj no puede ser mayor que uno para todos los eventos que atiende el
sistema; si Qj = Tj significa que el sistema solo tiene capacidad para atender un evento en
el perodo Tj. La sumatoria de estas relaciones para los n procesos debe ser menor o igual
a 1. Ej: si un servidor de multimedia atiende una pelcula donde el requisito de tiempo es 25
cuadros por segundo esto implica 1 cuadro cada 1/25 de segundo, es decir un cuadro cada
40 ms (periodo). Si el servidor tiene capacidad de procesar el cuadro en menos de 40 ms,
puede atender otros eventos de tiempo real. Ejemplo: Si un servidor tiene capacidad de
procesar cada cuadro en 10 ms, cuantas pelculas en tiempo real puede atender?
verificamos hasta que valor de n se cumple que la sumatoria de Qj / Tj
10/40 +10/40 +10/40 + 10/40 entonces para cumplir el requisito de tiempo real de 25
cuadros por segundo este servidor solo puede responder 4 pelculas simultneamente.

3.3.4.11 Calendarizacin de hilos

Los algoritmos son los mismos que para la planificacin de procesos, se debe hacer
diferencia si es planificacin a nivel de usuario o planificacin de hilos a nivel de Kernel. A
nivel usuario los hilos comparten el tiempo del Quantum y es responsabilidad del software
Procesos e hilos


30
aplicar polticas no apropiativas (los hilos no monopolicen la CPU) debido a que no existe
un control de Quantum del hilo por el SO.
Si los hilos son manejados a nivel del Kernel, el sistema puede asignar el Quantum a nivel
de hilos independientes del proceso, pero las conmutaciones entre hilos son lentas,
requieren de todo un cambio de contexto completo; una ventaja es que a nivel de Kernel si
un hilo se bloquea por espera de E/S, no bloquea el resto del proceso.

Procesos e hilos


31


Ejercicios
1. Investigue como es el algoritmo de planificacin de Linux. a Cules
procesos les otorga mayor prioridad: a los limitados por E/S o a los
limitados por cpu
2. Complete la siguiente tabla calculando e interpretando el significado de los
tiempos de estancia(T), tiempo de espera (E) y el ndice de servicio
(estancia/ejecucin). que significa E=0; ndice de servicio=1?

3. Demuestre que en procesos limitados por cpu por Ejemplo: cinco
procesos con tiempos T1 , T2, T3, T4, T5 de ejecucin, planificar
usando el mtodo ms corto es ms eficiente ( el tiempo promedio del
sistema es el menor) . Calcule el tiempo promedio de retorno para cada
proceso y luego el tiempo promedio de retorno del sistema. hacer las
deducciones basados en los coeficientes de la frmula para el tiempo de
retorno.
4. Calcule el tiempo promedio de retorno de cada proceso, y el tiempo
promedio de retorno de todos los procesos para tres procesos que gastan
A=6, B=2, C=8 ms; sus prioridades son 3,4,2 respectivamente siendo 4 la
mxima prioridad; desprecie el tiempo de cambo de contexto el orden de
llegada es A,B,C suponga que todos llegan al mismo tiempo
a. FIFO
b. Primero el mas Corto.
Comentario [Y3]: revisar que la tabla
quede uniforme
Procesos e hilos


32
c. Prioridades.
d. Turno Circular.
Calendarizacin garantizada. Suponga en el literal c, que debido a que son
procesos limitados por E/S, en un corte del planificador A solo ha consumido el
30% del Q prometido, B 50% y C 20% . Calcular cual es el prximo proceso que
toma la CPU para este caso especfico.
5. Usando el mtodo de calendarizacin por lotera, si existen 400 procesos
cuantos boletos se le deben asignar a un proceso para que su prioridad sea
del 20%.. Un boleto que % de prioridad representa ?
6. Describa un algoritmo de planificacin que tenga en cuenta el nmero de
procesos por usuario, es decir, un porcentaje fijo de CPU segn usuario. (
Buscar algoritmo por porcin equitativa) Ej: si se establece como poltica
asignarle la CPU 50% a un usuario y 50% a otro, entre dos usuarios, si el
usuario A tiene 3 procesos y el B tiene 1 proceso entonces, el planificador
debera ordenar el trabajo de la siguiente manera: A1, B1, A2,B1, A3,B1,
A1, B1..
7. Calcule la eficiencia de una CPU que con un Q=100 ms y el tiempo de
cambio de contexto 5 ms.
8. calcule la ineficiencia de una CPU con un Q=100 ms y cambio de
contexto de 20 ms.
9. Las mediciones en cierto sistema han revelado que los procesos se
ejecutan en promedio en un tiempo T antes de bloquearse por E/S. una
cambio de contexto requiere un tiempo S, con planificacin de turno
circular de una formula para la eficiencia de la CPU en cada uno de los
siguientes casos:
a. Q=
b. Q > T
c. S < Q < T
d. Q tiende a cero.
10. Cuatro trabajos por lotes ( A-D) llegan casi al mismo tiempo, sus tiempos
estimados de ejecucin son de 4, 2, 5, 3 ; sus prioridades son de 3,4,2,1
siendo 4 la ms alta, para cada uno de los siguientes algoritmos calcule el
Procesos e hilos


33
tiempo de retorno de cada proceso y el tiempo promedio de retorno de los
procesos, ignore el tiempo por cambio de contexto.
a. Planificacin por prioridades
b. Fifo el primer trabajo que llega es el que consume 4 unidades de tiempo
c. Primero el trabajo ms corto
d. Turno circular.
11. Haga conclusiones sobre los servidores multimedia y como debe ser el
planificador de tiempo real.
12. Analice el problema de los 25 cuadros/seg de requisito de tiempo real no
estricto para una pelcula as:
a. Qj es 80 ms
b. Qj es 10 ms
c. Qj es 20 ms.
d. Considere el caso donde Qj es diferente para cada pelcula.



Procesos e hilos


34

3.4 COMUNICACIN ENTRE PROCESOS

En Unix existen unos mecanismos estndar de comunicacin entre procesos
independientes llamados IPC (Interproccess communication); existen los IPC System V, ya
obsoletos, se reemplazaron por IPC POSIX.
La comunicacin para procesos locales se realiza por medio de las siguientes estructuras
de datos que residen en la memoria del Kernel:
memoria compartida ( tuberas de Unix )
semforos
mensajes // mediante el protocolo solicitud/respuesta
usando las llamadas al sistema send receive
seales
socket de dominio UNIX

sistemas distribuidos
mensajes // usando protocolo TCP/IP
Socket de dominio Internet
RPC (Remote Procedure Call) llamada a procedimientos remotos
Java RMI (Java Remote Method Invocation) pueden invocarse objetos
remotos y sus mtodos
Web Services
conjunto mensajes y protocolos para comunicarse entre aplicaciones,
incluyen estndares como SOAP(Simple Object Access protocol), WSDL
(Web Services Description Language )

3.4.1 Memoria compartida

Es un segmento de memoria asignada por el Kernel para propsitos de intercambiar
informacin entre procesos. El segmento de memoria puede ser asociado (mapeado) por
otros procesos en sus respectivos espacios de direcciones; cualquier cambio que se realice
en el segmento compartido automticamente se refleja en el espacio de direcciones de los d
procesos que lo comparten. Ejemplo en IPC System V la llamada para crear un segmento
compartido es:
int shmget ( key_t , int size, int flag)
flag puede ser IPC_CREAT o IP_EXCL. Posteriormente los procesos pueden adosar
(pegar, unir) este segmento de memoria a su propio espacio de direcciones mediante la
llamada:
Procesos e hilos


35
char *shmat( int sumid, char *shmaddr, flag)
3.4.2 Mensajes
Una lista de mensajes es almacenada dentro del Kernel y reconocida por los procesos de
usuario por medio de un identificador. Ejemplo: la funcin para crear una lista de mensajes
es: msgget( key_t, int flags); existen otras funciones que permiten escribir y recuperar
mensajes de la lista como msgctl(), msgrcv() para obtener un mensaje.
Ejercicio
Examinar en Linux los comandos ipcs, ipcrm, msgrcv. leer en Linux usando los
comandos: man ipcs
man ipcrm
3.4.3 Semforos
Los semforos controlan el acceso a los recursos compartidos, es decir sincronizan los
procesos que compiten por un recurso para que solo un proceso en un instante del tiempo
tenga acceso
3.4.4 Sockets
Junto con los mensajes constituyen mecanismos de comunicacin entre procesos de bajo
nivel, en los que el programador debe especificar el protocolo, los tipos de datos etc. Un
socket es una abstraccin que representa un extremo de la comunicacin bidireccional
entre dos procesos; cuando dos procesos necesitan comunicarse por Internet, cada uno
crea un socket por el cual se enva y se reciben datos. Los sockets se clasifican en dominios:
Dominio UNIX (PF_UNIX) para comunicacin entre procesos en la misma
computadora.
Dominio Internet (PF_INET) para comunicacin a travs de TCP/IP.
Tipos de socket:
Sockets stream. La comunicacin es orientada a la conexin, cuando el socket es para
Internet corresponde a protocolo TCP/IP que es un protocolo confiable y orientado a la
conexin.
Sockets datagrama. No orientado a la conexin, no confiable.
Para enviar y recibir datos a travs de la red, primero se debe establecer una conexin,
definiendo la IP y el puerto; posteriormente se envan y reciben datos con las funciones:
int write( int socket, char *mensaje, int longitud)
int send( int socket, char *mensaje, int longitude, int flags)
Para recibir los mensajes:
Procesos e hilos


36
int read (int socket, char *mensaje, int longitud)
Int recv( int socket, char *mensaje, int longitude, int flags)
Los sockets utilizan las operaciones listen para preparar la conexin y la operacin
accept (el proceso se bloquea esperando) para aceptar peticiones; los clientes utilizan la
operacin connect.
Secuencia de operaciones cuando se trabaja con un socket en un servidor
a. Se crea el socket.
b. Se le asigna una direccin IP
c. Se prepara para recibir conexiones usando listen
d. Se bloquea esperando peticiones de los clientes mediante la llamada a accept
e. Lee mensajes del cliente usando read
f. Procesa la informacin
g. Devuelve resultados cliente mediante write
h. Cierra el descriptor de socket abierto mediante close
i. Vuelve a d
3.4.5 RPC. (Remote Procedure Call)
Las llamadas a procedimientos remotos constituyen mecanismos de comunicacin de alto
nivel, lo mismo que CORBA (Common Object Request Broker Arquitectura) o RMI de
Java son el ncleo de muchos sistemas distribuidos.
Algunos sistemas de paso de mensajes estn estructurados para que un proceso cliente enve
una solicitud de servicio a un proceso servidor seguido por una respuesta que el servidor
enva al cliente. Este sistema es muy similar a llamar a un procedimiento y esperar que este
termine y devuelva la respuesta.
El modelo de llamadas a procedimientos remotos contempla las siguientes etapas:
1). El cliente enva el mensaje al servidor.
2). El cliente se bloquea para esperar respuesta.
3). El servidor que estaba bloqueado recibe el mensaje, se desbloquea, realiza la operacin y
enva un mensaje al cliente.
4). El cliente recibe el mensaje y se desbloquea.
La secuencia es la siguiente:

Procesos e hilos


37

Figura. Llamadas a procedimientos remotos

Los procedimientos extremos tanto del servidor como del lado del cliente, realizan la
funcin de comunicacin en una red distribuida permitiendo los RPC a los programadores
realizar llamadas a procedimientos remotos como si fueran llamadas locales

3.5 CONFLICTOS DE COMPETENCIA Y
SINCRONIZACIN DE PROCESOS
3.5.1 Conceptos

Cuando varios procesos simultneamente acceden a un recurso compartido para actualizar
datos es posible que se produzcan errores en las actualizaciones de los datos generados por
los conflictos de competencia. Ejemplos de recursos compartidos son un buffer de
memoria, un campo de datos de un archivo compartido, un vector, una variable global etc.
3.5.2 Condiciones de competencia (race
conditions)

Los conflictos de competencia los encontramos en situaciones de la vida diaria como
comer cuando se sirve en un solo plato para varios comensales, hablar por un micrfono
cuando se compite por este entre varias personas para diferentes propsitos, compartir un
libro entre varios estudiantes en un mismo tiempo; actualizar simultneamente el saldo de
una cuenta de donaciones como respuesta solidaria a una calamidad.
Procesos e hilos


38

Figura.

En un ambiente de multiprogramacin los procesos comparten diversos recursos como la
memoria, los dispositivos E/S, los archivos, el procesador.
El siguiente ejemplo con base en el SPOOL (Simultaneous Peripheral Operation On Line)
que simula una impresora virtual en disco y es accedida por muchos procesos para colocar
sus archivos de impresin; el proceso spool los va despachando uno a uno.

Figura. El spool va despachando los procesos uno a uno

En el grfico anterior las variables:
IN apunta a la prxima ranura disponible en el spool
OUT prximo archivo a imprimir, el archivo 3
Eventos:
Un proceso A necesita imprimir un archivo X.
Se lee la variable IN con un valor de 3
Procesos e hilos


39
antes de que pueda colocar el archivo X en el buffer del spool y aumentar el contador de
IN en 1; el proceso es interrumpido por el scheduler del SO y el control es pasado a un
proceso B que tambin necesita imprimir.
el proceso B lee la variable IN=3
se coloca el archivo Y en la ranura 3, se incrementa IN=IN+1.
posteriormente el planificador pasa el control nuevamente al proceso A a modo listo
para entrar a ejecucin
el proceso A coloca el archivo X en la ranura 3, borrando lo que ya haba colocado el
proceso B es decir borrando el archivo Y
Como consecuencia el archivo X queda sobre el archivo Y, el archivo Y no saldr por
impresora, simplemente desaparece del SPOOL.
Ejercicio
Analizar los conflictos de competencia para los siguientes casos::
conteo de votos
cuenta bancaria compartida por varios usuarios.
Conteo de votos en sistemas de elecciones.
Suponga un sistema de elecciones computarizado para elegir tres candidatos
(X,Y,Z) a director de una escuela de sistemas; el software se encuentra en un
sistema centralizado actualizando un registro de base de datos compartido para
registrar el conteo de votos por cada candidato, existen 5 terminales distribuidas en
el Campus Universitario donde los estudiantes pueden realizar su votacin, los
estudiantes al inicio del da, votan con intervalos de tiempo grandes de 10 minutos;
pero finalizando la votacin pueden suceder votos casi simultneamente. Detecte
que conflicto de competencia se puede generar cuando la votacin es casi
simultnea?
Actualizacin de una cuenta bancaria compartida.
Suponga que a nivel nacional se dispone de una cuenta bancaria para realizar
donaciones de solidaridad en caso de una emergencia. Si una persona dona $50,
luego otra dona $100 y una ltima $ 150. Cules pueden ser los resultados del
acumulador si la cuenta en la BD es compartida para actualizacin por varios
usuarios simultneos?
3.5.3 Regin crtica de un proceso
Se entiende por regin crtica la parte del programa (traza de programa) donde se accede
el recurso compartido, un programa puede dividirse en tres regiones, la primera que define
Procesos e hilos


40
el interfaz con el usuario ( captura de datos), la segunda que realiza clculos y accede a
recursos compartidos, la tercera que define la interfaz de salida; entonces la parte del
programa donde se accede el recurso compartido se denomina regin crtica; es
recomendable que el tamao de esta traza de instrucciones sea de un nmero muy pequeo
para no bloquear durante un tiempo muy largo al resto de procesos que compiten por el
recurso compartido.

Figura. Las tres partes de la seccin critica de un programa
3.5.4 Exclusin mutua

Un mecanismo para evitar que dos o ms procesos se encuentren dentro de la regin
crtica en forma simultnea y garantizar que solo un proceso puede acceder al recurso
compartido en un instante de tiempo. La tcnica de semforos es un mecanismo que
garantiza exclusin mutua porque involucra operaciones atmicas para la actualizacin
mientras que la variable cerrojo no garantiza exclusin mutua porque actualiza como una
variable normal.
Ejemplo: piense en una cabina telefnica donde solo puede estar hablando una sola
persona, pero que puede ser usada por muchos usuarios; un mecanismo de exclusin
consiste en que la persona que entra a la cabina impide el acceso de otra cerrando la puerta
con un seguro; otro mecanismo es que un operador administre el acceso e impida que dos
usuarios estn dentro de la cabina
3.5.5 Soluciones al conflicto de competencia

Esta solucin se basa en implementar operaciones atmicas cuando se accede a los
recursos compartidos; una operacin atmica implica que se ejecute una transaccin
(conjunto de varias instrucciones) como una totalidad. En una transaccin se ejecutan
todas las instrucciones o en caso de una interrupcin esta se bloquea o se anula y se
comienza otra; si el grupo de instrucciones llega a ser interrumpido por el planificador o
fallas en el fluido elctrico, el mecanismo que implementa la operacin atmica no permite
Procesos e hilos


41
que otro proceso ejecute la transaccin hasta que el proceso inicial la termine; Si un
proceso inicio una transaccin para entrar en una regin crtica (RC) y es interrumpido por
el planificador de procesos otro proceso no puede entrar a la RC hasta que el proceso que
inicio la transaccin la termine

3.5.6 Soluciones en las que el proceso espera
consumiendo recurso de CPU

3.5.6.1 Variable cerrojo

Figura. Variable que controla la entrada a la seccin critica

La variable cerrojo consiste en colocar un switch (SW) que controle la entrada a la seccin
crtica, Ejemplo: Suponga que varios procesos ejecutan una rutina compartida para
actualizar una variable global llamada cuenta y solo se puede actualizar cuando el SW esta
en 0.







Procesos e hilos


42
Rutina de sincronizacin

sincro ()
{
If ( SW =0 ) then {
SW=1;
cuenta = cuenta + 1;
otras instrucciones.;
.

.
SW=0; return;
};
else return;
}

Ejercicio: En el cdigo anterior analice:
Cul es la transaccion
cuando los procesos acceden en forma distante en tiempo como es el
comportamiento de SW que actua como variable cerrojo?
cuando los procesos acceden en forma simultnea como es el comportamiento de
SW que actua como variable cerrojo?
qu puede suceder cuando varios procesos ejecutan la rutina sincro()
simultneamente? Que sucede si el Quantum del proceso se termina despus de
validar la entrada pero antes de asignar SW=1?
concluya si la variable cerrojo SW garantiza exclusin mutua?

3.5.6.2 Alternacin estricta

Analice el siguiente algoritmo que sincroniza dos procesos para acceder a un recurso
compartido. Los procesos se alternan el tiempo de CPU (ejecucin) segn el quantum del
sistema, en este ejemplo turno es la variable de sincronizacin, solo administra dos valores
0 y 1; el proceso X entra a su RC cuando turno es 0

Procesos e hilos


43

Figura. Los procesos se alternan segn el quantum del sistema.






Programa X

while (true)
{
while (turno = 0);
/*seccin_crtica ();
{ cuenta= cuenta +1;
turno = 1
/*seccin_no_crtica();
Intruccion1;
Instruccin2;
Instruccin-N;
}


Programa Y

while (true)
{
while (turno = 1);
/*seccin_crtica ();
cuenta= cuenta +1;
turno = 0
/*seccin_no_crtica();
Intruccion1;
Instruccin2;
Instruccin n;
}








Comentario [Y4]: tomado de
Tanenbaum
Procesos e hilos


44



3.5.6.3 Solucin de Peterson

#define FASE 0
#define TRUE 1
#define N 2
int turno;
int interezado[N];

Entrada_region (proceso)
int proceso;
{ int otro;
otro=1-proceso;
interzado[proceso]=true;
turno=proceso

/* Instruccin de espera; no hace nada */
while (turno== proceso && interezado [otro]==TRUE)
}Salida_region (proceso)
int proceso;
{ interezado[proceso]=FALSE;}


3.5.6.4 Instruccin TSL

Lo que hace la instruccin TSL, con ayuda del hardware, es permitir que un proceso
verifique la entrada a la regin crtica y posteriormente cierre los cerrojos todo en una sola
transaccin indivisible o atmica.
La transaccin consiste de las siguientes dos instrucciones realizadas atmicamente:
1). Leer una palabra de memoria [flag] y guardarla en un registro de la cpu [registro]
2). Colocar 1 en flag.

La instruccin TSL hace toda esta transaccin en forma atmica sin interrupcin del
proceso, si existen otras CPUs caso de multiprocesadores, los buses se bloquean para
garantizar la indivisibilidad.


Comentario [Y5]: tomado de
Tanenbaum
Procesos e hilos


45


Figura. TSL solo un proceso puede pasar


enter_regin()
tsl registro, flag /* Copia el valor de flag al
registro y coloca atmicamente
flag en 1 */
cmp registro /* compara el flag para verificar
que estaba en cero */
jnz enter_regin /* si no era cero se queda en el
loop de lo contrario entra en la
regin crtica/*
/ regin crtica*/
Intruccion1;
Intruccion2;
Intruccion3; /* pueden acceder y actualizar recursos
compartidos */

.
Intruccion-n;
return

salir_regin:

move flag 0 /* almacena cero en el flag */
return


La siguiente tabla ilustra los estados del algoritmo TSL; existen dos estados segn valores
de flag y registro que no bloquean al proceso que ejecuta TSL y otros dos estados que
conducen a un b loqueo del proceso que ejecuta TSL


Comentario [Y6]: tomado de
Tanembaum
Procesos e hilos


46
Estado flag registro
no bloqueante 0 0
bloqueante 1 0
bloqueante 1 1
no bloqueante 0 1

3.5.7 Soluciones en las que el proceso espera
en estado bloqueado

3.5.7.1 Semforos
Dijkstra introdujo la idea de llevar la cuenta del nmero de procesos bloqueados
esperando entrar a la seccin crtica, un semforo es como una variable que controla el
nmero de procesos que acceden al recurso compartido.
Las operaciones sobre las variables tipo semforo son down y up.
down en una operacin atmica que disminuye en 1 el valor del semforo, si el valor antes
de disminuir era cero o negativo down bloquea el proceso.
Una vez la operacin sobre un variable semforo comienza, ningn otro proceso puede
acceder al semforo hasta cuando la operacin se concluya; el mecanismo de semforos
implementa operaciones atmicas mediante una llamado al sistema desactivando
brevemente el mecanismo de interrupciones.
up realiza dos acciones atmicamente:
a) incrementa el valor del semforo en 1
b) despierta alguno de los procesos bloqueados por ese semforo.
Cuando varios procesos estn bloqueados por un semforo, la operacin up
aleatoriamente desbloquea a uno de ellos y el semforo sigue en cero hasta que todos se
desbloquean
Si existen varias CPUs, cada semforo debe protegerse para asegurarse de que solo una
CPU examine el semforo.
Los semforos cuyo valor inicial definido por el programador es igual a uno (1), se llaman
semforos binarios y garantizan la exclusin mutua para uno o ms procesos.


Procesos e hilos


47


Algoritmo del productor - consumidor usando tres semforos

PRODUCTOR CONSUMIDOR

coloca productos


retira productos

bloqueado


retira productos


retira el ultimo elemento y
desbloquea el productor
coloca productos


bloqueado
coloca el primer elemento y
desbloquea el consumidor
















Procesos e hilos


48




#define N 100 /* numero de celdas */
typedef int semaphore;
semaphore mutex = 1; /* controla el acceso a
la regin crtica */
semaphore vacos = N; /* cuenta las celdas
vacas */
semaphore ocupados = 0; /* cuenta las celdas ocupadas
*/

La condicin de bloqueo se produce cuando hay 0 vacos o
cuando hay N ocupados; adems, el productor necesita que el
buffer de datos este protegido y no sea posible que dos
procesos coloquen simultneamente elementos al buffer.

productor()
{ int item;
produce_item(&item);
down(vacos);
down (mutex);
enter_item (item); /* coloca un elemento en el buffer
*/
up (mutex)
up (llenos)
}

Antes de entrar a la seccin crtica el consumidor hace un
down sobre el semforo que protege la seccin crtica
(mutex) y despus de salir hacen el up sobre el mismo
semforo.

consumidor()
{ down (llenos);
down (mutex);
remove_item (&item) /*elimina un elemento en el buffer
*/
up (mutex)
up (vacos)
}



Procesos e hilos


49



3.5.7.2 Barreras

En algunos casos en necesario hacer la sincronizacin entre varios procesos que realizan
tareas correspondientes a una etapa o fase; cuando todos los procesos terminen una etapa
se puede continuar con la siguiente fase; para este tipo de sincronizacin se usan las
barreras. Los procesos que pertenecen a un grupo se sincronizan haciendo una llamada a
un procedimiento de biblioteca por ejemplo barrier; mientras falte un proceso del grupo
por hacer la llamada a barrier los dems procesos que ya han tocado la barrera permanecen
bloqueados. La barrera los desbloquea cuando todos los procesos la han invocado
Ejemplo
sumatoria de los elementos de una matriz enorme
Para realizar la sumatoria de los elementos de la matiz se recurre a la
programacin en paralelo realizando descomposicin en el dominio de los datos,
es decir, la matriz se descompone en n sum-matrices generando n sumas
realizadas por procesadores independientes, el resultado final se obtiene cuando
todos los procesadores hayan terminado su tarea. En la siguiente figura a, b, c, d,
e representan los procesos corriendo en paralelo, R representa el proceso que
realiza la sumatoria global de los diferentes resultados parciales.


3.5.7.3 Mensajes

Transmisin de mensajes
Procesos e hilos


50
Los mensajes son apropiados para los sistemas distribuidos, los mensajes son enviados y
recibidos mediante un formato en el que se debe especificar el tipo de mensaje, proceso
que enva, proceso que recibe, datos y otros campos de control.
Estructura de los mensajes
La estructura de un mensaje depende de las tareas, por ejemplo en las tareas de disco:

SOLICITANTE

CONTESTACION

SEND y RECIBE son primitivas para comunicacin entre procesos, en realidad son
llamadas al sistema y pueden colocarse en una librera de procedimientos sin que dependan
del compilador. Este protocolo llamado protocolo de Solicitud/Respuesta es una
simplificacin del protocolo TCP/IP no necesita realizar enrutamiento y los encabezados
de los formatos para la transmisin de los mensajes son livianos comparados con el
protocolo de redes, en razn a que fueron diseados para redes LAN que son ms veloces
que las WAN que generalmente usan el protocolo TCP/IP.
Capas que implementa el protocolo Solicitud/Respuesta
MODELO
SOLICITUD/RESPUESTA
MODELO OSI
nivel aplicacin
nivel presentacin
SOLICITUD/RESPUESTA nivel de sesin
nivel transporte
Procesos e hilos


51
nivel de red
ENLACE nivel de enlace
FISICA nivel fsico


La sintaxis de estas primitivas son:
send (destino, &mensaje); /* Enva un mensaje al destino */
receive (fuente, &mensaje); /* recibe un mensaje de fuente */
3.5.8 Aspectos de diseo en la transmisin de
mensajes

El paso de mensajes origina otros problemas diferentes a los semforos, especialmente si el
paso se hace a travs de una red.
Los mensajes se pueden perder en la transmisin, es necesario confirmar los mensajes
recibidos mediante una seal de reconocimiento ACK.
La confirmacin tambin se puede perder y se hacen necesarios los duplicados.
Se necesita distinguir entre un mensaje nuevo y uno retransmitido.
Se necesitan sistemas de identificacin. proceso-maquina-dominio.
Se genera problemas de seguridad: autenticacin (login con criptografa por Ejemplo
usando algoritmos de clave pblica-clave privada.
Se requiere eficiencia en la velocidad del paso de mensajes.
La ventaja radica en que ni los procesos clientes ni los servidores deben conocer los detalles
del paso de mensajes, este mecanismo es implementado por el sistema y los usuarios solo
deben conocer como se usan las primitivas send y receive.
Algunas desventajas son:
Los problemas que pueden presentarse en el paso de mensajes por incompatibilidad en
los registros de las maquinas; las diferentes marcas de procesadores usan tamaos y
semntica de registros diferente.
El problema de la semntica errnea, donde el cliente no sabe si el servidor abort antes
o despus de realizar la operacin, en caso de tener que repetir el mensaje.



Procesos e hilos


52





Problema del productor - consumidor con paso de mensajes


#define N 100 /* numero de slots en el buffer */

Solo pueden enviarse hasta N mensajes, los mensajes que no
son recibidos son colocados en un buffer por el sistema
operativo.

productor()
{ int item;
message m; /* buffer del tamao del mensaje */
while (true) {
produce_item (&tem) /* genera algo para colocar en el
buffer */
receive (consumidor, &m); /* espera a que llegue uno
vaco */
build_mensaje (&m, item) /* construye el mensaje*/
send (consumer, &m) /* enva item al consumidor */
}
}
consumidor()
{ int item, i;
message m;
for (i=0; i<N; i+1) send (productor, &m) /*enva N vacos */
while (true) {
receive (productor, &m) /*recibe mensaje del productor */
extract_item(&m, &item) /*saca el mensaje del item */
consume_item (item) /* hace algo con el item */
send (productor, &m) /* enva respuesta vaca */
}
}

En esta secuencia el consumidor arranca enviando N mensajes vacos, cuando el productor
tiene algo, coge un mensaje vaco lo llena y lo regresa al consumidor; si el productor trabaja
ms rpido se bloquea y queda en espera de un sobre vaco, si el consumidor trabaja ms
rpido se bloquea y queda esperando sobres llenos.
Procesos e hilos


53
Cuando un proceso A enva un mensaje a un proceso B puede ocurrir:
1). A enva el mensaje a B y B lo esta esperando, entonces el mensaje se copia en el buffer
de transmisin. Estar esperando significa haber ejecutado la primitiva receive.
2). A enva el mensaje a B y B no lo esta esperando, entonces A se bloquea.
3). B se prepara para recibir un mensaje y A no lo ha enviado, entonces B se bloquea.
3.5.9 Direccionamiento de los mensajes

Figura. Los mensajes son recibidos, guardados y eliminados del Buzn

Se pueden aplicar dos mtodos, en el primero los mensajes se envan directamente a los
procesos, en el segundo Los mensajes son recibidos, guardados y eliminados de un
MAILBOX (Buzn).
Cuando un proceso enva un mensaje al mailbox este es guardado y el proceso continua
realizando otra tarea, es un mecanismo asncrono; si el buzn esta lleno el proceso se
bloquea en espera de un espacio en el buzn.
Otro enfoque es eliminar el buzn o buffer y emplear otro mtodo llamado citas. Si un
send es enviado antes de un receive, el proceso es bloqueado hasta que suceda el receive,
en ese instante se procesa el mensaje sin necesidad de buffer. Si primero se hace un receive
el proceso es bloqueado hasta cuando ocurra un send; con el mtodo de citas los procesos
se bloquean hasta cuando se produce el send o receive correspondiente.
Una cita es como un encuentro entre dos personas, para que se produzca un intercambio
de informacin el que lleva el mensaje y el que lo recibe deben estar de acuerdo en cuanto
al sitio y hora del encuentro, de lo contrario la cita no se da o se generan esperas por parte
de alguno de los participantes; un mailbox es como un correo electrnico totalmente
asncrono, los mensajes se depositan y retiran de en un buzn en cualquier momento.
3.5.10 Problemas clsicos
Filsofos cenando.
Lectores Escritores.
El barbero Dormiln.

Procesos e hilos


54
Ejercicios
1. Analice el algoritmo de alternacin estricta:
a. Identifique cuales son las variables globales y cual variable controla la
sincronizacin?
b. Que podra suceder cuando la seccin crtica de un proceso es relativamente
grande con respecto al otro.
c. Se puede aplicar este algoritmo para sincronizar varios procesos?
2. Usando la instruccin TSL, escriba un pseudocdigo para resolver el
problema de actualizar un conteo de votos para candidatos a una eleccin de
director.
3. Suponga que no existe la Instruccin TSL, pero que existe la Instruccin
INTER; que intercambia valores entre flag y registro en forma atmica;
modifique el algoritmo TSL para que implemente exclusin mutua usando
la instruccin INTER.
4. Para la solucin de Peterson haga un seguimiento a este algoritmo con dos
procesos que actualicen un campo compartido llamado cuenta y compruebe
si efectivamente funciona la exclusin mutua.
5. Usando semforos implemente el problema de actualizar una cuenta
bancaria que contabiliza las donaciones para una obra de beneficencia social.
6. Implemente el mecanismo de interrupcin de dispositivos de E/S usando
semforos. Sugerencia: para cada dispositivo asigne un semforo iniciado en
0 y justo despus de arrancar el dispositivo de E/S haga un down al
semforo para colocar el driver en espera de sucesos de E/S para ese
dispositivo; el dispositivo se despierta mediante mensajes up que le enva el
sistema para atender operaciones de E/S.
7. Encuentre dos aplicaciones de procesamiento paralelo donde se apliquen
barreras.
8. Usando semforos haga una simulacin de la barrera de la figura de la seccin
3.3.6
9. El siguiente cdigo representa el problema de los lectores y los escritores;
muchos lectores pueden acceder a la base de datos simultneamente, pero solo
puede estar un escritor en la B.D. db representa el semforo binario que
garantiza exclusin mutua a los escritores. mutex es un semforo binario para
proteger de conflictos de competencia las operaciones de actualizacin de los
contadores, el cdigo permite que los lectores monopolicen el acceso, es decir
que solo cuando no existan lectores pueda ingresar un escritor.

Procesos e hilos


55
typedef int semaphore;
semaphore mutex = 1;
semaphore db=1
int rc = 0;

Reader()
{
while(true){
down(mutex);
rc = rc + 1;
if ( rc = = 1) down(db);
up(mutex);
read_data_base();
down(mutex);
rc = rc 1
if ( rc = = 0) up(db);
up(mutex);
use_datos();}
}
writer()
{
while(true){
think_up_date();
down(db);
write_data_base();
up(db);
}
}

Cmo se podra modificar el cdigo anterior de los lectores y escritores
accesando una base de datos para dar igual prioridad a los lectores y a los
escritores?
a. Quitar el semforo mutex
b. Colocar un semforo mutex a los escritores
c. Colocar un contador de escritores
d. Quitar el semforo mutex y el contador de lectores
e. Ninguna
10. Busque en un libro el algoritmo del barbero-dormiln, estdielo y analice el
problema de sincronizacin.
11. Escribir un programa en bash, para comprobar el conflicto de competencia;
mediante un script que llame a otros 5 scripts, donde se actualice la misma
variable global llamada TOTAL; el usuario debe conocer a priori el resultado
Procesos e hilos


56
correcto. Suponga que cada scrip mediante un for de 1 a 1000 incrementa la
variable TOTAL en 1; si son 5 procesos el resultado ser
((1000)(1000+1)/2)*5 si no existe conflicto de competencias; Sugerencia: cree
5 scripts y un sexto que los invoque en modo background; es decir les coloca
un & despus de invocarlos.
12. Escriba dos guiones shell, cada uno incrementa en 1 el valor de una un
contador que se encuentra en un archivo llamado cuentas; el valor inicial es 0,
escriba el resultado de cada actualizacin despus de que los dos procesos la
realicen, detecte cuando hay conflicto de competencia e imprima el resultado
errneo y despus de cuantos intentos se present. Nota: para evitar el
conflicto use In file file.lock.




















Procesos e hilos


57
LECTURAS
3.5.11 Memoria compartida en C para Linux
La memoria compartida, junto con los semforos y las colas de mensajes, son los recursos
compartidos que pone Unix a disposicin de los programas para que puedan
intercambiarse informacin.
En C para Unix es posible hacer que dos procesos (dos programas) distintos sean
capaces de compartir una zona de memoria comn y, de esta manera, compartir o
comunicarse datos.
La forma de conseguirlo en un programa es la siguiente:
En primer lugar necesitamos conseguir una clave, de tipo key_t, que sea comn
para todos los programas que quieran compartir la memoria. Para ello existe la funcin
key_t ftok (char *, int). A dicha funcin se le pasa un fichero que exista y sea accesible y
un entero. Con ellos construye una clave que nos devuelve. Si todos los programas utilizan
el mismo fichero y el mismo entero, obtendrn la misma clave.

Es habitual como primer parmetro pasar algn fichero del sistema que sepamos seguro
de su existencia, como por ejemplo "/bin/ls", que es el "ls" del Unix.

Para el entero, bastara con poner un #define en algn fichero.h de forma que todos los
programas que vayan a utilizar la memoria compartida incluyan dicho fichero y utilicen
como entero el del #define
Una vez obtenida la clave, se crea la zona de memoria. Para ello est la funcin
int shmget (key_t, int, int). Con dicha funcin creamos la memoria y nos devuelve un
identificador para dicha zona.

Si la zona de memoria correspondiente a la Clave key_t ya estuviera creada, simplemente
nos dara el identificador de la memoria (siempre y cuando los parmetros no indiquen lo
contrario).
o El primer parmetro es la clave key_t obtenida anteriormente y que debera ser la
misma para todos los programas.
o El segundo parmetro es el tamao en bytes que deseamos para la memoria.
o El tercer parmetro son unos flags. Aunque hay ms posibilidades, lo imprescindible
es:
Procesos e hilos


58
9 bits menos significativos, son permisos de lectura/escritura/ejecucin para
propietario/grupo/otros, al igual que los ficheros. Para obtener una memoria con todos
los permisos para todo el mundo, debemos poner como parte de los flags el nmero
0777. Es importante el cero delante, para que el nmero se interprete en octal y queden
los bits en su sitio (En C, cualquier nmero que empiece por cero, se considera octal).
El de ejecucin no tiene sentido y se ignora.
IPC_CREAT. Junto con los bits anteriores, este bit indica si se debe crear la memoria
en caso de que no exista.
Si est puesto, la memoria se crear si no lo est ya y se devolver el identificador.
Si no est puesto, se intentar obtener el identificador y se obtendr un error si no est
ya creada.
En resumen, los flags deberan ser algo as como 0777 | IPC_CREAT
El ltimo paso poder usar la memoria consiste en obtener un puntero que apunte la
zona de memoria, para poder escribir o leer en ella. Declaramos en nuestro cdigo un
puntero al tipo que sepamos que va a haber en la zona de memoria (una estructura, un
array, tipos simples, etc.) y utilizamos la funcin char * shmat (int, char *, int).
o El primer parmetro es el identificador de la memoria obtenido en el paso anterior.
o Los otros dos bastar rellenarlos con ceros.
o El puntero devuelto es de tipo char *. Debemos hacerle un "cast" al tipo que queramos,
por ejemplo, (mi_estructura *)shmat (...);
Esta funcin lo que en realidad hace, adems de darnos el puntero, es asociar la
memoria compartida a la zona de datos de nuestro programa, por lo que es necesario
llamarla slo una vez en cada proceso. Si queremos ms punteros a la zona de
memoria, bastar con igualarlos al que ya tenemos.

Ya estamos en condiciones de utilizar la memoria. Cualquier cosa que escribamos en el
contenido de nuestro puntero, se escribir en la zona de memoria compartida y ser
accesible para los dems procesos.
Una vez terminada de usar la memoria, debemos liberarla. Para ello utilizamos las
funciones int shmdt (char *) e int shmctl (int, int, struct shmid_ds *)

La primera funcin desasocia la memoria compartida de la zona de datos de nuestro
programa. Basta pasarle el puntero que tenemos a la zona de memoria compartida y
llamarla una vez por proceso.

La segunda funcin destruye realmente la zona de memoria compartida. Hay que
pasarle el identificador de memoria obtenido con shmget(), un flag que indique que
Procesos e hilos


59
queremos destruirla IPC_RMID, y un tercer parmetro al que bastar con pasarle un
NULL A esta funcin slo debe llamarla uno de los procesos.
Hasta ahora se indicado lo mnimo y ms bsico para poder utilizar memoria compartida.
Hay ms funciones que permiten hacer ms cosas con la memoria compartida. Adems,
para un uso ms "serio" y "correcto", sera necesario aadir algo como semforos.
Por ejemplo, si los datos que deseamos compartir son muy grandes, es bastante probable
que mientras un proceso intenta escribir en la memoria, otro est leyendo. Si lo intentan de
forma totalmente descontrolada y a la vez, los datos que leen pueden ser incoherentes
(hay otro que est escribindolos en ese momento y todava no ha terminado).
Para evitar esto existen los semforos. Se pondra un semforo para acceder a la
memoria, de forma que cuando un proceso lo est haciendo, el semforo se pone "rojo" y
ningn otro proceso puede acceder a ella. Cuando el proceso termina, el semforo se
pone "verde" y ya podra acceder otro proceso.
3.5.11.1 Comandos de Unix tiles
Unos comandos de UNIX que nos pueden resultar de utilidad son ipcs e ipcrm.
ipcs nos da un listado de recursos compartidos que estn creados en ese momento, es
decir, listado de memorias compartidas como las que hemos tratado en esta pgina, de
semforos y de colas.
ipcrm nos permite eliminar algunos de estos recursos. Si paramos el programa con un
Ctrl-C o simplemente sale de forma anormal, el recurso (la memoria compartida) no se
libera y queda en el sistema. La forma de borrarla sera con este comandos.
Es bastante normal mientras desarrollamos y depuramos nuestro programa que se nos
caiga, lo abortemos, etc. El nmero de memorias compartidas que podemos crear est
limitado en UNIX, as que a la cuarta o quinta prueba empezaremos a obtener errores de
que no se pueden crear las memorias. ipcrm nos permite eliminar las memorias que se
nos han quedado "pendientes" en nuestras pruebas.
3.5.11.2 El Ejemplo
Aqu hay dos fuentes de ejemplo en C sobre UNIX de memoria compartida p1.c y p2.c.
Son dos programas que comparten memoria. El primero crea la memoria de tamao 100
int y empieza a escribir en el primero entero, con espera de un segundo, los nmeros del 1
Procesos e hilos


60
al 10. Es segundo programa lee, a intervalos de un segundo, el nmero guardado en el
primer entero y lo muestra en pantalla.
Para ejecutarlos, compilarlos en primer lugar con make p1 p2 (no es necesario fichero
Makefile) o bien con g++ p1.c -o p1 y g++ p2.c -o p2. Luego en dos shell distintas,
ejecutar en la primera p1 y en la segunda p2 Desde que arrancamos p1 tenemos unos
diez segundos para arrancarp2 y ver el efecto deseado.

Das könnte Ihnen auch gefallen