Académique Documents
Professionnel Documents
Culture Documents
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:
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.
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
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.
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.
28
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*/ }
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.
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
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)
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
};
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
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
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.
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.
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 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.
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
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.
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
Cmputo Paralelo
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
El SO piensa
Carril 1 Carril 2
97
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?
i
i C
N /2
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; }
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
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.
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)
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*/
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
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
Uso militar
Sistema de reconocimiento de blancos automtico Sistema de guiado de misiles y navegacin
Los sistemas en tiempo real crticos tienen asignada una franja de tiempo que no pueden rebasar.
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
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
no-critico
Solucion Ciclica.
76
combustible-2
64 vel. 60
no velocidad critico
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.
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
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.