Vous êtes sur la page 1sur 158

Procesos y Procesadores en Sistemas Distribuidos

M.C. Juan Carlos Olivares Rojas


jcolivar@antares.itmorelia.edu.mx http://antares.itmorelia.edu.mx/~jcolivar Julio, 2009

Agenda
3.1 Procesos bsicos. y procesadores conceptos

3.2 Hilos y multihilos. 3.3 Modelos de procesadores. 3.4 Asignacin de procesadores. 3.5 Coplanificacin. 3.6 Tolerancia a fallos. 3.7 Sistemas distribuidos de tiempo real.

Procesos
Un proceso es un programa en ejecucin.

Todos los procesos tienen asociados un espacio de direcciones en memoria, registros y el contador de programas.
Un programa para poderse ejecutar necesita estar en memoria principal. Los procesos son dependientes del sistema operativo.

Procesos
El espacio de direcciones se compone adems de direcciones para almacenar datos, cdigo, la pila y el heap (montculo). Toda la informacin de los procesos en los SOs se guardan el PCB (Process Control Block) que es un arreglo o lista ligada que indica la descripcin de cada uno de los procesos.

Procesos
Los procesos tienen asignados un identificador de procesos (PID), el cual es la forma en que el SO trabaja con los procesos. La finalidad del administrador de procesos es realizar una buena administracin (planificacin) del tiempo de CPU. Los procesos presentan tres estados bsicos: Ejecucin, Listo y Bloqueado.

Ejecucin de un Proceso

Lista de Procesos

Procesos
Un proceso est en ejecucin cuando tiene acceso real al tiempo de CPU. Un proceso est listo cuando se puede ejecutar, es decir, por algn motivo se suspendi para dejar ejecutar otro proceso Un proceso est bloqueado cuando est en espera de algn recurso (E/S) o de que ocurra un evento.

Procesos

Procesos
Estos procesos pueden trabajar de manera cooperativa para la resolucin de un problema muy particular. Para ello necesitan comunicarse entre s y a lo que a nivel de SO se llama IPC (Inter Process Communication). La parte ms importante de la comunicacin entre procesos es sin duda la transferencia de mensajes entre los diversos procesos.

IPC
La transferencia de mensajes puede llevarse acabo en base a dos primitivas, enviar y recibir, que se pueden aplicar a casi cualquier recurso como a los archivos (leer y escribir).

La comunicacin entre procesos IPC se debe dar a travs del kernel del Sistema Operativo.

Procesador
Un procesador o mejor conocido como microprocesador es la unidad de hardware que se encarga de procesar los datos que estn almacenados en una computadora para producir cualquier tipo de informacin de inters para los usuarios. Un microprocesador se compone de una Unidad Lgica-Aritmtica (ALU) que se encarga de las operaciones bsicas dadas a travs de microprogramacin.

Procesador
Tambin se compone de una unidad de control encargada de la sincronizacin de todas las operaciones y de reas de almacenamiento principal llamadas registros y memoria cach.

La problemtica principal es que existe una confusin muy amplia entre lo que es un sistema distribuido, un sistema multiprocesamiento, un sistema paralelo, etc.

Clasificacin de SD
Una de las clasificaciones ms aceptadas es la de Flynn, la cual se basa en dos caractersticas esenciales: el nmero de flujos de instrucciones y el nmero de flujo de datos. La clasificacin es la siguiente: Una computadora con un slo flujo de instrucciones y un flujo de datos (SISD, Single Instruction Single Data). Computadoras con monoprocesador.

Clasificacin de SD
Computadoras con un flujo de instrucciones y varios flujos de datos (SIMD, Single Instruction Multiple Data). Procesadores vectoriales. Computadoras con mltiples flujos de instrucciones y varios flujos de datos (MIMD, Multiple Instruction Multiple Data). Concepto de SD (no implementada como tal)

Clasificacin SD
Los sistemas MIMD se subdividen en dos grupos: Mquinas multiprocesadores. Existe un espacio de direcciones virtuales, compartido por todos los CPU del sistema. Sistemas multicomputadoras. Cada mquina tiene su propia memoria en particular.

Clasificacin SD
Las categoras anteriores puede clasificarse de acuerdo a la red de comunicacin con la que se interconectan los CPU, en las siguientes categoras:

Tecnologa de bus La tecnologa de conmutador

Otras clasificaciones de SD
En todos los sistemas de equipo de cmputo, algunas mquinas estn fuertemente acopladas, mientras que otras estn dbilmente acopladas.

A continuacin se muestran cuatro categoras de sistemas de cmputo, en base al acoplamiento y tipo de conexin.

Otras clasificaciones de SD
Multiprocesadores con base en buses.

Multiprocesadores con conmutador.


Multicomputadoras con base en buses. Multicomputadoras con conmutador.

Otras clasificaciones de SD
En base al acoplamiento del software con el hardware los SD se dividen en: Software dbilmente acoplado en hardware dbilmente acoplado. LAN Software fuertemente acoplado en hardware dbilmente acoplado (multicomputadoras). SD Software fuertemente acoplado en hardware fuertemente acoplado. Sistemas Tiempo Compartido y Servidores Dedicados.

Cmputo Distribuido
La distribucin del cmputo puede realizarse de diversas formas de acuerdo a su grado de acoplamiento en:
Fuertemente acopladas: Multiprocesadores (memoria compartida). UMA (Uniform Memory Acces) Dbilmente acopladas: Multicomputadoras (memoria privada). NUMA (Non Uniform Memory Access)

Sistemas multiprocesadores
Son sistemas que tienen dos o ms procesadores (CPU), comparten las misma memoria (espacio de direcciones). Los sistemas multincleos es la nueva tendencia en el desarrollo de sistemas multiprocesadores. En un solo chip se tienen varios procesadores (no es nada nuevo bajo el sol).

Sistemas multiprocesadores
CPU 1 CPU 2 CPU n N1 Memoria CPU Nn

Tarjeta madre

Memoria Tarjeta madre

Modelo de n procesadores

Modelo de n ncleos

Sistemas multicomputadoras
Son sistemas donde cada unidad de proceso es autnoma e independiente de las dems pero trabajan de manera conjunta. La interconexin de unidades de proceso se hace a travs de redes de computadora de preferencia de altas velocidades.

Este es el concepto ms estandarizado de un SD.

Agenda
3.1 Procesos bsicos. y procesadores conceptos

3.2 Hilos y multihilos. 3.3 Modelos de procesadores. 3.4 Asignacin de procesadores. 3.5 Coplanificacin. 3.6 Tolerancia a fallos. 3.7 Sistemas distribuidos de tiempo real.

Concurrencia
El trmino concurrencia indica que se tienen dos o ms procesos al mismo tiempo en el mismo lugar; esto no implica que se estn ejecutando al mismo tiempo (paralelismo).

El trmino concurrencia se ha utilizado para indicar que se ejecutan dos o ms actividades quasi-paralelamente. En sistemas monoprocesadores esto se logra a travs de esquemas de multitarea real y cooperativa.

Granularidad del paralelismo


Cuando queremos explotar el paralelismo, podemos hacerlo en niveles de detalle distintos:
Instrucciones de mquina Sentencias de un lenguaje de programacin Mdulos dentro de un programa Programas ejecutables completos

Grano fino grano grueso

Granularidad del paralelismo


El programador debe saber con qu grano debe trabajar ante cada problema y no trabajar en niveles de detalle inferior. Ej. si trabajamos con Ada o Java, estamos en el nivel de mdulos:
Concurrencia basada en hilos (threads) no deberamos perder el tiempo buscando sentencias simples que se pueden ejecutar en paralelo crear un hilo nuevo para ejecutar una nica instruccin no hace ganar tiempo, incluso puede tardar ms.

28

Dnde se encuentra la concurrencia?


En el hardware (la herramienta para construir sistemas informticos):
ejecucin paralela de instrucciones funcionamiento paralelo de los perifricos procesadores mltiples sistemas distribuidos

En la Naturaleza (los sistemas que modelamos cuando hacemos ingeniera de software)


ejemplos?
29

Concurrencia inherente o potencial


Concurrencia inherente:
Hay sistemas que en los que forzosamente se dan actividades simultneas. p.ej. GUI; red de cajeros automticos; etc.

Concurrencia potencial:
Hay sistemas o problemas que se pueden resolver de forma secuencial, pero en los que se puede aprovechar la concurrencia p.ej. para aumentar el rendimiento. P.ej. multiplicar dos matrices, ordenar un vector
30

Concurrencia Unix
Los subprocesos se crean con fork() #include <sys/types.h> pid_t pid; pid = fork() Se pueden copiar procesos con la familia de funciones exec.

fork()
if (pid == -1) perror(Error al crear proceso); else { if (pid == 0) /*Proceso hijo*/ else /*Proceso padre*/ }

Procesos Padre e Hijos

Terminacin de procesos
Cuando un proceso termina devuelve un valor de retorno al proceso padre. Todos los procesos tienen un proceso padre. Este cdigo de retorno puede ser consultado a travs de la variable de entorno $? La forma ms fcil de salir es devolver un cdigo de retorno (e.g., return 0).

Terminacin de procesos
Otra forma de salir es a travs de exit(), realiza aparentemente el mismo comportamiento, ayuda a desbloquear procesos en espera. La funcin atexit() permite definir una funcin que se ejecutar al finalizar un programa.

Terminacin de procesos
A el cdigo de estado de un proceso formalmente se llama seal. Un proceso hurfano es aquel que se ha quedado sin padre. Un proceso zombi es aquel que se ha quedado ocupando una posicin de la tabla de descriptor de procesos.

wait()
En algunas ocasiones un proceso padre necesita esperar a que sus hijos termine. Para ello necesita sincronizarse los procesos. La funcin que nos permite parar un proceso hasta que termine otro es wait pid = wait(&estado);

wait()
Algunas macros que nos ayudan en este proceso son: WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG WCOREDUMP

Ms sobre procesos
Un ejemplo de clonacin de procesos es la ejecucin de la funcin system() que nos permite ejecutar una llamada al sistema, generalmente un comando de la shell.

hijo = getpid(); Padre = getppid(); Grupo = getpgrp();

Identificadores de usuario y de grupo


En muchas ocasiones no slo es necesario conocer los identificadores de procesos sino conocer los usuarios y los grupos.

uid_t getuid(); /*usuario real*/ uid_t geteuid(); /*usuario extendido*/ gid_t getgid(); gid_t getegid();

Variables de entorno
En algunos casos es necesario compartir algunos valores entre aplicaciones, esto se puede hacer a travs de la variable de entorno. Las variables de entorno pueden verse con el comando env (ambiente). Muchos comandos muestran informacin a travs de este entorno.

Variables de entorno
Hay algunas variables disponibles en la mayora de los sistemas como HOME, SHELL, TERM, PATH. Pueden accederse de manera individual haciendo eco en la pantalla con echo. char *valor = getenv(TERM);

Variables de entorno
char *var1 = VARIABLE=valor putenv(var1); /*Coloca una variable en el entorno*/ La funcin sleep() permite dormir un proceso una cantidad determinada de milisegundos.

Seales
Definidas en <signal.h> 1 SIGHUP 2 SIGINT 3 SIGQUIT 4 SIGILL 5 SIGTRAP 6 SIGIOT 7 SIGEMT 8 SIGFPE 9 SIGKILL

10 SIGBUS 11 SIGSEGV 12 SIGSYS 13 SIGPIPE 14 SIGALARM 15 SIGTERM 16 SIGUSR1 17 SIGUSR2 18 SIGCLD 19 SIGPWR

Seales
int kill(pid, sig) sirve para mandar una seal de un proceso a otro. pid > 0 proceso; pid = 0 a todos los procesos que pertenecen al mismo grupo. La funcin signal sirve para capturar una seal y realizar una funcin con ella.

Seales
main() { void sigint_handler(); if(signal(SIGINT,sigint_handler)== SIG_ERR) perror(Error en la seal); .. } void sigint_handler(int sig) { printf(seal recibida); }

Hilos
Son procesos ligeros ya que no se duplican completamente, slo duplican su segmento de cdigo. Por tal motivo, comparten datos fcilmente, la desventaja es que ocurren muchos problemas del tipo race conditions, pero al igual que IPC se soluciona con mecanismos como regiones crticas, zonas de exclusin mutua, etc.

Hilos
Los hilos son procesos ligeros a diferencia de los procesos hijos, los hilos slo replican el segmento de cdigo, por lo que comparten datos entre otros hilos haciendo mejor uso de la memoria. La problemtica con los hilos es que cada sistema operativo implementa sus hilos de manera distinta. Por ejemplo existen los hilos POSIX, los hilos C de Mach, los hilos en Windows, etc.

Threads Implementation

Web Server Process

Hilos
PThreads (POSIX Threads) es la biblioteca para la creacin de hilos ms implementada en sistemas *X. Se utiliza la biblioteca pthread por lo que algunos compiladores ya la incluyen de manera predeterminada sino habr que indicar su uso: gcc -lpthread

Hilos
Crear hilos: int pthread_create(pthread_t *thread, pthread_attr_t *attr, void * (*start_routine)(void *), void *arg)

Esperar la finalizacin de hilos: int pthread_join(pthread_t **thread_return)

th,

void

Hilos
No guardar estado del hilo: int pthread_detach(pthread_t h) Salir de un hilo: pthread_exit(void *retval) Biblioteca a utilizar: #include <pthread.h>

Hilos
typedef struct parametros {
int id; char *nombre

};

void *funcion(parametros *p) {


printf(%s %d, p->cadena, p->id); pthread_exit(&(p->id))

Hilos
Referencia asi mismo: Yo = pthread_self(); /*Dems funciones*/ Enviar una seal a un hilo: pthread_kill(pthread_t hilo, int seal); Los hilos no estn tan extendidos por que existen muchas variantes: hilos mach, hilos solaris, Gthreads, etc.

Hilos
Mutex: pthread_mutex_init(pthread_mutex_t pthread_mutex_attr_t *attr) *mutex, const

int pthread_mutex_lock(pthread_mutex_t *mutex) int pthread_mutex_lock(pthread_mutext_t *mutex)

int pthread_mutext_destroy(pthread_mutext_t *mutex)

Hilos
En general los hilos en Java debido a su portabilidad binaria son idnticos en todas las plataformas. Existen dos formas bsicas de implementar procesos: heredar de la clase Thread o bien implementar la interfaz Runnable. En general en el mtodo public void run() se agrega la funcionalidad del hilo.

Hilos
Si se heredo de la clase Thread el hilo debe crearse de la siguiente forma: Thread hilo = new Thread(new Objeto()); El mtodo Thread.sleep(ms); permite dormir un proceso n cantidad de milisegundos.

Hilos
En general se ejecuta el hilo poniendo el mtodo start(), e.g.: hilo.start(); Otros mtodos de los hilos son: isAlive() para determinar si un hilo est con vida, el metodo stop()* finaliza un hilo, el mtodo suspend()* lo suspende, el mtodo resume() reanuda un proceso y join() espera a que finalice un proceso especificado.

Hilos
Se pueden asignar prioridades a los hilos con el mtodo setPriority(), en donde la prioridad puede ser MIN, MAX y NORM_PRIORITY. El mtodo yield() cede prioridad, mientras que el mtodo setDaemon(true) hace que un hilo sea demonio.

Hilos
Los demonios son hilos que pueden correrse sin depender de otros procesos. Se utilizan mucho para la programacin de servicios del sistema.

Se pueden crear grupos de hilos con la clase GroupThread para un mejor manejo.

Agenda
3.1 Procesos y procesadores bsicos. 3.2 Hilos y multihilos. 3.3 Modelos de procesadores. 3.4 Asignacin de procesadores. 3.5 Coplanificacin. 3.6 Tolerancia a fallos. 3.7 Sistemas distribuidos de tiempo real. conceptos

Modelos de Procesadores
En un sistema distribuido, con varios procesadores, un aspecto fundamental del diseo es cmo se los utiliza Los procesadores distribuidos organizar de varias formas: Modelo de estacin de trabajo. Modelo de la pila de procesadores. Modelo hbrido. se pueden

3.3 Modelos de Procesadores


3.3.1 De estacin de trabajo.

3.3.2 De pila de procesadores.


3.3.3 Hbrido.

Modelo de Estacin de trabajo


El sistema consta de estaciones de trabajo (PC) dispersas conectadas entre s mediante una red de rea local (LAN). Pueden contar o no con disco rgido en cada una de ellas. Los usuarios tienen:
Una cantidad fija de poder de cmputo exclusiva. Un alto grado de autonoma para asignar los recursos de su estacin de trabajo.

Modelo de Estacin de Trabajo


Uso de los discos en las estaciones de trabajo:

Sin disco: Bajo costo, fcil mantenimiento del hardware y del software, simetra y flexibilidad. Gran uso de la red, los servidores de archivos se pueden convertir en cuellos de botella.

Modelo de Estacin de Trabajo


Con disco:

Disco para paginacin y archivos de tipo borrador: Reduce la carga de la red respecto del caso anterior. Alto costo debido al gran nmero de discos necesarios.

Modelo de Estacin de Trabajo


Los aspectos clave en el uso de las estaciones de trabajo inactivas son: Cmo encontrar una estacin de trabajo inactiva?. Cmo lograr que un proceso remoto se ejecute de forma transparente?. Qu ocurre si regresa el poseedor de la mquina?.

Modelo de Estacin de Trabajo


Generalmente se considera que una estacin de trabajo est inactiva cuando se dan ambas condiciones: Nadie toca el ratn o el teclado durante varios minutos. No se ejecuta algn proceso iniciado por el usuario.

Modelo de Estacin de Trabajo


Los algoritmos para localizar las estaciones de trabajo inactivas se pueden dividir en dos categoras: Controlados por el servidor y Controlados por el cliente.

La localizacin de estaciones de trabajo en s no es problemtico, el problema radica en la sincronizacin de procesos entre las diferentes estaciones de trabajo.

Modelo de Pila de Procesadores


Se dispone de un conjunto de cpu que se pueden asignar dinmicamente a los usuarios segn la demanda . Los usuarios no disponen de estaciones de trabajo sino de terminales grficas de alto rendimiento. No existe el concepto de propiedad de los procesadores, los que pertenecen a todos y se utilizan compartidamente.

Modelo de Pila de Procesadores


Este modelo basa su funcionamiento en la teora de colas. En general este modelo puede reducir significativamente el tiempo de espera al tener una sola cola de procesadores a repartir. La capacidad de cmputo se puede gestionar de mejor forma si se tiene micros con mayores capacidades.

Modelo Hbrido
Combina las mejores caractersticas del modelo de estacin de trabajo y de pila de procesadores teniendo un mejor desempeo en las bsquedas y mejor uso de los recursos.

Agenda
3.1 Procesos y procesadores bsicos. 3.2 Hilos y multihilos. 3.3 Modelos de procesadores. 3.4 Asignacin de procesadores. conceptos

3.5 Coplanificacin. 3.6 Tolerancia a fallos. 3.7 Sistemas distribuidos de tiempo real.

Asignacin de procesadores
Son necesarios algoritmos para decidir cul proceso hay que ejecutar y en qu mquina . Para el modelo de estaciones de trabajo: Decidir cundo ejecutar el proceso de manera local y cundo buscar una estacin inactiva.

Para el modelo de la pila de procesadores: Decidir dnde ejecutar cada nuevo proceso.

3.4 Asignacin de Procesadores


3.4.1 Modelos y algoritmos con sus aspectos de diseo e implantacin.

Modelos de asignacin
Generalmente hiptesis: se utilizan las siguientes

Todas las mquinas son idnticas (o al menos compatibles en el cdigo); difieren a lo sumo en la velocidad. Cada procesador se puede comunicar con los dems.

Modelos de Asignacin
Existen dos estrategias de asignacin:

No migratorias:
Una vez colocado un proceso en una mquina permanece ah hasta que termina.

Migratorias:
Un proceso se puede trasladar aunque haya iniciado su ejecucin. Permiten un mejor balance de la carga pero son ms complejas.

Modelos de Asignacin
Los algoritmos optimizar: Uso de las cpu:
Maximizar el nmero de ciclos de cpu que se ejecutan para trabajos de los usuarios. Minimizar el tiempo de inactividad de las cpu.

de

asignacin

intentan

Tiempo promedio de respuesta:


Minimizar no los tiempos individuales de respuesta sino los tiempos promedio.

Modelos de Asignacin
Tasa de respuesta:
Minimizar la tasa de respuesta, que es el tiempo necesario para ejecutar un proceso en cierta mquina dividido por el tiempo que tardara en cierto procesador de referencia.

Los principales aspectos a tomar en cuenta en el diseo de algoritmos de asignacin de procesos son los siguientes: Algoritmos deterministas vs. heursticos.

Modelos de Asignacin
Algoritmos centralizados vs. distribuidos.

Algoritmos ptimos vs. subptimos.


Algoritmos locales vs. globales. Algoritmos iniciados por el emisor vs. iniciados por el receptor.

Modelos de Asignacin
En general son muchos aspectos que se deben considerar para la generacin de algoritmos de asignacin de procesadores, por ejemplo, que el micro este conciente de su carga de trabajo implica una serie de mediciones que pueden ser realmente inciertas. Los algoritmos de asignacin en primera instancia deben buscar la estabilidad del sistema.

Agenda
3.1 Procesos y procesadores bsicos. 3.2 Hilos y multihilos. 3.3 Modelos de procesadores. 3.4 Asignacin de procesadores. 3.5 Coplanificacin. 3.6 Tolerancia a fallos. 3.7 Sistemas distribuidos de tiempo real. conceptos

Planificacin de Procesos
La planificacin de procesos es la etapa ms importante del administrador de procesos ya que se encarga de administrar la disponibilidad del uso de CPU.

Los planificadores no importando su complejidad deben respetar los siguientes elementos: equitatividad, eficiencia, tiempo de respuesta, retorno, volumen de produccin.

Calendarizador de Procesos

Planificacin de Procesos
La problemtica con este tipo de administracin es que los recursos son nicos e imprendecibles. Por este motivo el planificador trata de estimar algunas caractersticas.

Un planificador no sabe cuanto tiempo tardar en ejecutarse un proceso y si este en algn momento se bloquea por alguna peticin de entrada o de salida.

Planificacin de Procesos
Por este motivo un planificador debe de asignar un tiempo predeterminado llamado Quantum para la ejecucin de procesos. Un proceso puede ser interrumpido por otro proceso cuando este ltimo requiera de una atencin inmediata. Esto da origen a planificadores don prioridades.

Planificacin de Procesos
El planificador de procesos se encarga de mantener el contexto de cada una de las aplicaciones para poder realizar multitarea. Existen diverso algoritmos de planificacin de tareas: El algoritmo de round robin (torneo) Planificacin por prioridad Colas mltiples

Planificacin de Procesos
Primero el trabajo ms corto Planificacin garantizada Planificacin por loteria Planificacin por niveles

En los Sistemas Dstribuidos, generalmente cada micro hace su propio administracin local.

Coplanificacin
Despus de tener un modelo de procesamiento y de un algoritmo de asignacin de procesadores, el siguiente gran reto es la administracin conjunta de los tiempos de uso de CPU de los procesos de forma global. Para poder realizar esto, se necesita algoritmos de planificacin y mtodos comunicacin ms eficiente. A continuacin describen algunos algoritmos coplanificacin. de de se de

Coplanificacin
El algoritmo de Ousterhout toma en cuenta los patrones de comunicacin entre los procesos durante la planificacin.Debe garantizar que todos los miembros del grupo se ejecuten al mismo tiempo. Se emplea una matriz conceptual donde:Las filas son espacios de tiempo.Las columnas son las tablas de procesos de los procesadores.

Coplanificacin
Cada procesador debe utilizar un algoritmo de planificacin Round Robin. Todos los procesadores ejecutan el proceso en el espacio 0 durante un cierto perodo fijo.Todos los procesadores ejecutan el proceso en el espacio 1 durante un cierto perodo fijo, etc.

Coplanificacin
Se deben mantener intervalos de tiempo. sincronizados los

Todos los miembros de un grupo se deben colocar en el mismo nmero de espacio de tiempo pero en procesadores distintos. A continuacin se describe un cmputo paralelo y coplanificacin de procesos

Es el cmputo paralelo un sistema distribuido?


S y No. Depende de la implementacin. Los objetivos de la programacin en paralelo de acuerdo con [5] son:
Reducir el tiempo de procesamiento utilizado por un algoritmo convencional Reducir la complejidad del algoritmo

Se trata de aprovechar mejor el hardware.

Cmputo Paralelo

Analoga con el Trfico de una Autopista


Qu se puede lograr con el paralelismo?

Vamos dividir La carga Ahora, a llega Suponer que en 4 trocas mucho ms podemos poner tenemos un ms pequeas de rpido! una troca en convoy largo cada carril carga: troncos de madera Cuatro hilos Una aplicacin independientes Resultado: Explotar los no paralelizada Mejora la mltiples tasa de trabajos! ncleos

Analoga con el Trfico de una Autopista


Planificador del SO (Selecciona el carril) Planificacin del Sistema Operativo

El Sistema Operativo no puede una aplicacin en hilos 4 3 2

Debe esperar la troca.

El SO piensa
Carril 1 Carril 2
97

solo puede planificar hilos exis

Paralelismo
A B P1 P2 Homoparalelismo

C
D

P3
P4

A B A B C D D C

P1 P2 Hetereoparalelismo P3 P4

Paralelismo
El problema del paralelismo radica en que muchos algoritmos no pueden paralelizarse (son serializable o secuenciales) [6]. Existen dos paralelismo: tecnologas para realizar

PVM (Parallel Virtual Machine) [7] MPI (Message Parking Interface) [8][9][10]

Algoritmo paralelos
for(int i = 0; i < 4; i++) {
aleatorio(i);

}
aleatorio(1) micro1 aleatorio(2) micro2 aleatorio(3) micro3 aleatorio(4) en espera

Compilador optimizados

optimizado.

Sistemas

Operativos

Algoritmos paralelos
a11 a12 a a22 21 am1 am 2 a1n x1 b1 x b a2 n 2 2 amn xn bm

Conviene

No conviene

Algoritmos paralelos
Instrucciones como while son ms difciles de paralelizar por que depende de la condicin. No siempre los compiladores pueden paralelizar de manera automtica un algoritmo. En algunas ocasiones se invierte ms tiempo tratando de paralelizar un algoritmo que ejecutndolo de manera secuencial.

Algoritmos paralelos
//Procesador uno for( i=0; i<N/2; i++) { a[i]= c+i; } //Procesador dos for( ; i<N; i++) { a[i]= c+i; } //Procesador uno for( i=0; i<N/2; i++) { a[i]= c+i; } //Procesador dos for( i = N/2; i<N; i++) { a[i]= c+i; }

Algoritmos paralelos
A[0] = C; //Procesador uno for( i=1; i<N/2; i++) { a[i]= a[i-1]+1; } //Procesador 2 for( i=N/2; i<N; i++) { a[i]= a[i-1]+1; } Por qu no se puede paralelizar?

Por que el segundo proceso depende del resultado del primero.


Si se puede si se encuentra un algoritmo que permita encontrar el valor de a[N/2] directo.

i
i C

N /2

Caso prctico MPI


Existen diversas implementaciones de MPI: LAM/MPI, MPICH, MPICH2, OpenMPI MPI se puede programar en C o Fortran. El primer paso es tener nuestro programa paralelo y asegurarnos de que est corriendo el demonio de MPI: mpd ncpus=procesadores & mpdtrace -1

Caso Prctico MPI


Se debe compilar el programa: mpicc holamundo.c o holamundo Se debe de correr el proceso idicando el nmero de procesadores: mpirun np 10 ./holamnudo

Holamundo.c en MPI
#include <stdio.h> #include mpi.h int main(int argc, char **argv) { int procesos, rango, tam; char nombre[MPI_MAX_PROCESSOR_NAME]; MPI_Iinit (&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &procesos); MPI_Comm_rank(MPI_COMM_WORLD, &rango); MPI_Get_processor_name(nombre, &tam); MPI_barrier(MPI_COMM_WORLD); printf(Hola, mundo!, soy %d de %d y me ejecuto en:%s\n, rango, procesos, nombre); MPI_Finalize(); return 0; }

Esquema de un programa en MPI


Esquema de un programa en MPI /*Cabecera de MPI*/ #include <mpi.h> int main(int argc, char **argv) { int quiensoy, tamano; MPI_Status estado; /*Inicializamos MPI*/ MPI_Init(&argc, &argv); /*Preguntamos quienes somos*/ MPI_Comm_rank(MPI_COMM_WORLD, &quiensoy); /*Nos esperamos hasta quetodos hayan inicializado MPI*/ MPI_Barrier(MPI_COMM_WORLD); /*Preguntamos cuanto somos*/ MPI_Comm_size(MPI_COMM_WORLD, &tamano); /*PROGRAMA*/

Esquema de un programa en MPI


if(quiensoy == root) { /*Inicializacin estrructuras repartidor Reparte tareas Espera resultados Visualiza resultados*/ } else { /*recibe la tarea realiza clculos manda resultados*/ } /*Finaliza el programa*/ MPI_Finalize(); exit(0); }

Paralelizacin Multiplicacin de Matrices


Programa secuencial de multiplicacin de matrices en Java o C. Programa concurrente, partir del hecho de que se puede poner un hilo en ejecucin para multiplicaciones no dependientes.

Agenda
3.1 Procesos y procesadores bsicos. 3.2 Hilos y multihilos. 3.3 Modelos de procesadores. 3.4 Asignacin de procesadores. 3.5 Coplanificacin. conceptos

3.6 Tolerancia a fallos.


3.7 Sistemas distribuidos de tiempo real.

Tolerancia a Fallas
La tolerancia a falla en sistemas con multiprocesamiento puede lograrse a travs de una buena sincronizacin entre procesos (IPC). Los IPC de POSIX son: cola de mensajes, tuberas, semforos y memoria compartida (discutida en la siguiente unidad). Los IPC se ejecutan a nivel de kernel y no a nivel de usuario.

Tuberas
Las tuberas nos permiten redireccionar el flujo de salida de un proceso para ser la entrada de otro. A nivel de comandos se puede realizar con el operador | (pipe). Por ejemplo ls l | more, hace que la salida del comando ls sea la entrada de more, por lo que se ver pantalla por pantalla la informacin

Tuberas
Se pueden utilizar tuberas desde los procesos.

int pipe(tuberia); int tuberia[2];


tuberia[0] tuberia[1]

Tuberas
Al dejar de utilizar una tubera, esta se debe de cerrar en sus dos extremos: close(pipe). Por un extremo de la tubera se lee, y por el otro se escribe. Ya depende de la lgica del programa ubicar que lado escribe y que lado lee. En general, primero se escribe y luego se lee. Se utiliza la biblioteca unistd.h*

Tuberas
Para escribir en una tubera se realiza lo siguiente: write(tuberia[1], mensaje, strlen(mensaje)+1). Para leer: read(tuberia[0], mensaje, MAX) Las tuberas no son bidireccionales, slo van en un sentido, pero se pueden utilizar dos tuberas para pasar mensajes en ambas direcciones.

Tuberas
Las tuberas utilizadas slo estn disponibles para los descendientes de un proceso que lo crean. Por este motivo, no estn disponible para otros procesos.

Las tuberas entre procesos iguales se les llama sin nombre. El otro tipo de tuberas tienen nombre y generalmente se les llama FIFO.

Tuberas
Las tuberas con nombre se manejan igual que las tuberas sin nombre con la salvedad de que presentan un nombre que ocupa una entrada de directorio.

Se trabajan igual que un archivo slo que se bloquea cuando un proceso escribe en la tubera.

Tuberas
Para crear una tubera con nombre desde shell se debe ejecutar: mknod fifo_1 p Desde programacin las tuberas con nombre se crean: mknod(tubo, S_IFIFO | permisos, 0)

Las comunicaciones vistas hasta ahora son half-duplex. Se puede utilizar un poll o select para realizar comunicacin full-duplex

Semforos
Los semforos son mecanismos permiten sincronizar procesos. que

Todos los mecanismos IPC tienen una entrada en una tabla especial con una llave definida por el usuario.
Los posibles valores de la llave son IPC_PRIVATE, IPC_CREATE, IP_EXECL, entre otros.

Semforos
Cada entrada de la tabla tiene un registro de permisos (rw), informacin de estado y llamadas de control.

Las llaves son del tipo key_t. Para crear una llave se utiliza:
#include <types.h> #include <sys/ipc.h> key_t ftok(path, id)

Llaves
key_t llave; if((llave= ftok(/etc/ntp.conf, A) == (key_t)-1)
/*Error al crear la llave*/

ipcs se utiliza para ver los mecanismos ipc asignados (-q, -m, -s, -b)

ipcrm se utiliza para liberar recursos (-q msqid, -m shmid, -s semid)

Semforos
Es un mecanismo para prevenir colisiones cuando uno o ms procesos solicitan simultneamente un recurso. Dijsktra los define como un objeto tipo entero en los cuales se puede aplicar dos operaciones: P (Proberen, comprobar) y V (Verhogen, incrementar), donde P sirve para obtener el recurso y V para liberarlo.

Semforos
Las operaciones sobre un semforo son semget para crear un semforo o habilitar uno existente, semctl para realizar operaciones de control e inicializacin, semop para realizar operaciones P y V. #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semget(key, nsems, semflg)

Semforos
int llave, semid; if((llave= ftok(auxiliar, K)) ==(key_t)-1)
/*Tratamiento del error*/

if((semid= semget(llave, 4, IPC_CREAT | 0600)) == -1)


/*Error al crear el semforo*/

Semforos
int semctl(semid, semnum, cmd, arg) union semun{
int val; struct semid_ds *buf; ushort *array;

}arg; Las opciones de control son: GETVAL, SETVAL, GETPID, GETNCNT, GETZCNT, GETALL, SETALL, IPC_STAT, IPC_SET

Semforos
ushort asem; asem[0]=5; asem[1]=3; asem[2]=4; asem[3]=8; semctrl(semid, 0, SETALL, asem) valor = semctrl(semid, 3, GETVAL, 0) int semop(semid, sops, nsops) struct sembuf *sops;

Semforos
struct sembuf{ ushort sem_num; short sem_op; short sem_flg; }; Si semop es negativo se decrementar (P), si se incrementa (V) y si es 0 no hace nada. Las banderas SEM_UNDO son: IPC_WAIT, IPC_NOWAIT,

Semforos
struct sembuf operacines[4]; Operaciones[0].semnum = 1; Operaciones[0].sem_op = -1; Operaciones[0].sem_flg = 0; Operaciones[1].semnum = 4; Operaciones[1].sem_op = 1; Operaciones[1].sem_flg = 0; semop(semid, operaciones, 2);

Colas de mensajes
La filosofa de las colas de mensajes es similar a las tuberas, pero con mayor versatilidad. Una cola es una estructura de datos gestionada por el kernel, en la cual varios procesos pueden escribir sobre ella. El sincronismo para evitar colisin lo realiza el kernel.

Colas de mensajes
#include <sys/msg.h> int msgget(key, msgflg) If((msqid= msgget(llave, IPC_CREATE | 0600)) == -1)
/*Error al crear la cola de mensajes*/

msgctrl(msq, cmd, buf) sirve para leer y modificar la informacin estadstica y de control de una cola.

Colas de mensajes
Los comandos de control son: IPC_STAT, IPC_SET, IPC_RMID. Por ejemplo: msgctrl(msqid, IPC_RMID, 0); Las operaciones bsicas de una cola de mensajes son enviar y recibir los mensajes que se realizan con las siguientes funciones: int msgsnd(msqid, msgp, msgsz, msgflg); int msgrcv(msqid, msqp, msgtyp, msgflag);

Cola de mensajes
El parmetro msgtyp indica el tipo de mensaje que se desea leer: 0 para el primer mensaje, > 0 el primer mensaje de tipo msgtyp que haya en la cola, <0 lee el primer mensaje que sea menor o igual al valor absoluto de msgtyp y adems sea el mensaje ms pequeo de los que hay.

Cola de mensajes
struct{ long tipo; char cadena[20]; }mensaje;

strcpy(mensaje.cadena, SD1); mensaje.tipo = 1; longitud = strlen(mensaje.cadena) if(msgsnd(msqid,&mensaje,longitud,0)==-1) /*Err*/ if(msgrcv(msqid,&mensaje,longitud,1,0) ==-1) /*Er*/

Agenda
3.1 Procesos y procesadores bsicos. 3.2 Hilos y multihilos. 3.3 Modelos de procesadores. 3.4 Asignacin de procesadores. 3.5 Coplanificacin. 3.6 Tolerancia a fallos. conceptos

3.7 Sistemas distribuidos de tiempo real.

Sistemas de tiempo real


Son sistemas para poder ejecutar satisfactoriamente tareas que han de completarse en un plazo prefijado de tiempo (ej. sistemas de control industrial, sistemas multimedia, sistemas de misin crtica). Se caracterizan porque los procesos tienen que ejecutar en instantes predeterminados.

Clasificacin de STR
Existen dos tipos de STR:

Crtico (rgido): para tareas que siempre deben cumplir los plazos de terminacin. Adecuados para la industria. Muy simples, incompatibles con tiempo compartido, memoria virtual, etc.
No crtico (flexible): intentan cumplir los plazos, pero no los garantizan al 100%. Adecuados para multimedia, etc.

Ejemplo de STR
Aeronave

Carro

Sistemas Embebidos de TR

Aplicaciones de los STR


Dominio Industrial
Controlador de la planta Robot para tratamiento de material peligroso

Uso militar
Sistema de reconocimiento de blancos automtico Sistema de guiado de misiles y navegacin

Sistemas altamente crticos


Plantas nucleares Sistemas de avinica

Sistemas de Tiempo Real


Los tipos de tiempo pueden ser:
Los de plazo fijo se ejecutan una vez en un instante determinado. Los peridicos se ejecutan cada cierto tiempo.

Los sistemas en tiempo real crticos tienen asignada una franja de tiempo que no pueden rebasar.

Sistemas de Tiempo Real


Suelen tener pocos procesos en estado de listo a fin de que no se retrase la ejecucin de los mismos. Se introducen retardos en la ejecucin, como puede ser la memoria virtual, puesto que la paginacin puede producir retrasos inadmisibles para el proceso. Los STR son altamente tolerante a fallas manejados por el sistema.

Arquitecturas de Tiempo Real


Sistema en Tiiempo Real Distribuido. Arqutecturas homogeneas o heterogeneas. Redes de area local, y topologias de red. Protocolos de comunicaciones:Ethernet, Token Ring Modelo OSI. Redes FFDI, X-25, ATM.

Comunicaciones

Otras Computadoras

E/S Digital

Software de Tiempo-Real
Microcontroladores y sistemas embebidos. DSPs, PLCs. Buses de multiprocesadores:VMEBUs,Multibus,FutureBus Arquitecturas RISC, Transputers. Uniprocesadores, Multiprocesadores. Memorias chache, DMAs.

Reloj

E/S Analgico
Medio Ambiente

Computadora (HW)

Otras E/S

Ejemplo de un sistema en tiempo real.

Actividades en una computadora de automobil. C=4ms. T=20ms. D=5ms. C=10ms. T=40ms. D=40ms.

Control de Velocidad

Control de Frenado

Control de combustible

C=40ms. T=80ms. D=80ms.

C=10ms. Otro software T=40ms.

no-critico

C=tiempo de computo (peor caso), T=Periodo de ejecucion, D=Plazo de respuesta

Solucion Ciclica.
76

4 frenado 14 com busti ble-1 20 vel. 24

combustible-2
64 vel. 60

no velocidad critico

* implica descomponer actividades grandes en varias ejecuciones.

com busti ble-3


54 frenado velocidad 44 combustible-2

40

Solucion Concurrente.
La solucion concurrente es mas simple de disenar y modificar.
task body speed is begin loop speed_measurement; next:=next+0.2 sleep_until_next; end loop end speed task body brake is begin loop control_brakes; next:=next+0.2 sleep_until_next; end loop end speed

task body fuel is begin loop fuel_injection; next:=next+0.2 sleep_until_next; end loop end speed

task body non_critical is begin loop perform computation; end loop end speed

Sistemas Distribuidos de TR
Son totalmente ms complejos debido a la gran heterogeneidad de sus componentes. Debido a esta problemtica son poco los Sistemas Operativos Distribuidos de Tiempo Real aunque muchos SO de Tiempo Real (ej. SO de dispositivos empotrados) tienen capacidad de comunicacin distribuida.

Sistemas Operativos de TR
El problema de la distribucin radica en los tiempos de latencia de los mecanismos de comunicacin distribuida (sockets, RPC, middlewares, etc.) dado que no hay una garanta de servicio y ms si se enfoca en redes pblicas como la Internet. En la prctica la gran mayora de los Sistemas Operativos Distribuidos de Tiempo Real se llegan a implementar en sistemas multiprocesadores.

Sistemas Operativos Distribuidos de TR


La mayora de los sistemas operativos distribuidos de tiempo real caen en el rea de multimedia (QNX) y de los sistemas empotrados (Symbian). Los sistemas de navegacin son otro claro ejemplo de SOTR.

SOD de Tiempo Real


Estos sistemas deben de ser totalmente determinsticos y predecibles. Otro tpico que es un gran reto en este tipo de sistema es la seguridad y en especfico el control de acceso. El balanceo de cargas de trabajo es de suma importancia para el uso eficiente del sistema

SOD de Tiempo Real


La concurrencia y sincronizacin de procesos es an ms complicada (un recurso que es utilizado por un proceso debe de ser liberado automticamente para que otro proceso ms crtico pueda trabajar inmediatamente). La seleccin de hardware es ms compleja. La caracterizacin (medicin de tiempos) de estos sistemas es compleja y no muy exacta.

SOD de Tiempo Real


El uso de SOD de Tiempo Real tiene que ser manejado con las aplicaciones, ya que de lo contrario no tendra una utilidad prctica; por este motivo, es necesario la adaptacin de herramientas como: compiladores, utileras, base de datos y software de sistema.

Referencias
Liberty, Jesse, Horvarth, David (200). Aprendiendo C++ para Linux en 21 Das. Mxico, Prentice Hall. Mrquez, Francisco (1994). Unix Programacin Avanzada. Estados Unidos, Addison-Wesley.

Referencias
Colouris, George, Dollimore, Jean, Kindberg, Tim (2001). Sistemas Distribuidos Conceptos y Diseo. 3a. Edicin. Espaa, Pearson AddisonWesley.

Horstmann, Cay, Cornell, Gary (2006). Core Java 2 Volumen II Carctersticas Avanzadas. Espaa, Perason Prentice Hall.

Referencias
Deitel, Harvey, Deitel, Paul (2004). Java Como Programar. Quinta Edicin. Mxico, Pearson Prentice Hall. Mrquez, Francisco Programacin Avanzada. Mxico, Alfaomega Ra-Ma. (2004). Tercera UNIX edicin,

Referencias
Froufe, Agustn, Jorge, Patricia (2004). J2ME Java 2 Micro Edition Manual de usuario y tutorial. Mxico, Alfaomega. Firtman, Maximiliano (2004). Programacin celulares con Java. Argentina, MP Ediciones. de

Ruz, Diego (2005). C# La gua total del programador. Argentina, MP Ediciones.

Referencias
Tanenbaum, Andrew (1996). Sistemas Operativos Distribuidos. Mxico, Prentice Hall. Tanenbaum, Andrew, Van Steen, Maarten (2006). Distributed Systems Principles and Paradigms. Estados Unidos, Pearson Prentice Hall. Meja, P. (2009), Curso de Sistemas de Tiempo Real, CINVESTAV, Mxico.

Referencias
J. Senn, Anlisis y Diseo de Sistemas de Informacin, 2da. Edicin, McGraw-Hill, Mxico, 1992, ISBN: 968-422-991-7. A. Tanenbaum, et al., Sistemas Operativos. Diseo e implementacin, 2da. Edicin, Prentice Hall, Mxico, 1998, ISBN: 970-170165-8. Aguas, N. (2009) Procesos y Procesadores en Sistemas Distribuidos.

Vous aimerez peut-être aussi