S.O.: Concurrencia 2
|
|
- Guillermo Núñez Benítez
- hace 6 años
- Vistas:
Transcripción
1 Gorka Guardiola Laboratorio de Sistemas, Grupo de Sistemas y Comunicaciones, URJC 17 de febrero de 2010
2 (cc) 2008 Grupo de Sistemas y Comunicaciones. Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Attribution-ShareAlike. Para obtener la licencia completa, véase También puede solicitarse a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
3 Evitar la espera activa Desperdicia procesador Latencia vs carga procesador No es justa (no es FIFO, sino casi aleatoria) Puede haber inanición, starvation, no en teoría, pero en la práctica sí (ejecuta al cabo de mucho) Evitar la contienda (contention), mantener las regiones críticas pequeñas Pero y si podemos evitarla del todo...?
4 Evitar la espera activa Nos puede ayudar el planificador Qué pasaba con un proceso cuando yo llamaba a sleep()? Bloquear un proceso Despertar un proceso
5 Bloquear un hilo de ejecución Para evitar espera activa: mecanismo para bloquear un proceso Primitiva de sincronización: llamada al sistema (en el kernel) o de librería Bloquear un proceso cambia el estado a bloqueado se le echa del procesador Despertar un proceso cambia el estado a listo para ejecutar
6 Bloquear un proceso Se puede hacer con un pipe Para un proceso lo pongo a leer (ojo, no escribo: buffering) Para despertar a uno escribo en el pipe
7 Rendezvous, cita llamada al sistema rendezvous(2) void* rendezvous(void* tag, void* value) Entre dos (cita romántica) es simétrica, el primero que llega se bloquea garantiza: que lo de antes se ha ejecutado en los dos procesos se usa un identificador, tag, (identifica una pareja) intercambian dos valores
8 Rendezvous, cita Proceso 1 Proceso 2 RENDEZVOUS Tag = 3 Valor = 84 TODO LO DE ANTES DEL RENDEZVOUS SE HA EJECUTADO DESPUES DE QUE AMBOS RETORNEN No hay nadie bloqueado en el Tag 3: se queda en Rendez RENDEZVOUS Tag = 3 Valor = 84 Como ya hay uno en Tag = 3 en estado Rendez (bloqueado) se desbloquean los dos
9 variable local void *val, *oval, *tag; tag = (void *)38; if (rfork(rfproc RFMEM) == 0) { print("hijo: antes"); val = (void *)1; oval = rendezvous(tag, val); print("hijo: despues %p\n", oval); } else{ print("padre: antes\n"); val = (void *)0; oval = rendezvous(tag, val); print("padre: despues %p\n", oval); }
10 Rendezvous, cita Qué se usa en tag? normalmente un puntero reservado antes con malloc un valor único para esta pareja acordado espacio de tags diferente en cada grupo creado con rfork con la flag RFREND
11 Rendezvous, cita Qué se usa en el valor? un valor que quiero intercambiar normalmente intercambio punteros, el valor del puntero, no su contenido.
12 qlock Interfaz igual que el de lock estos son justos (tienen una cola, por eso la q) no hacen espera activa, usan rendezvous
13 Ejemplo de uso de qlock //me declaro QLock l; como variable global if (rfork(rfproc RFMEM) == 0) { qlock(&l); i++; print("%#p %d\n", &i, i); qunlock(&l); } else{ qlock(&l); i++; print("%#p %d\n", &i, i); qunlock(&l); }
14 qlock v.s. lock Latencia: acotada con qlock, aunque más alta si no hay contienda Sleep vs Rendez Orden Fifo vs orden Aleatorio qlock si funciona con threads (hay una implementación de rendezvous para threads)
15 qlock: implementación lista enlazada hago rendezvous en los punteros
16 qlock: implementación 0x x2e003 LOS TAGS DE RENDEZVOUS SON LAS DIRECCIONES Por ejemplo, en este qlock hay un proceso bloqueado en rendezvous(0x37032, 0); 0x3703e 0x x x3703a 0x3704a 0x3703e 0x x x3704a 0x3704e 0x x37056
17 Barrera otra primitiva de sincronización como rendezvous pero para N procesos se van bloqueando hasta que hay N, cuando hay N se desbloquean
18 Barrera de 4, ejemplo P1 P2 P3 P4 barrier(4, b) barrier(4, b) barrier(4, b) Cuando llega el cuarto vuelven a ejecutar todos barrier(4, b) tiempo
19 Semáforos (semaphores, seinpalen, 1965 Dijkstra) Otra primitiva de sincronización Más general Como un cuenco de fichas con N fichas (puede empezar a 0) Coger ficha (si no hay fichas, espero), wait, down, acquire, P (probeer) Soltar ficha (si alguien esperando, le despierto), signal, up, release, V (verhoren, verlaag) No hay inanición (no necesariamente fifo aunque es una forma de hacerlo) No hay un número máximo de fichas en el cuenco
20 Semáforos en Plan 9 int semacquire(long *addr, int block); long semrelease(long *addr, long count);
21 Semáforos (semaphores, seinpalen, 1965 Dijkstra) block puedo suponer que siempre es 1 addr es la dirección del long que representa el semáforo count es el número de fichas para poder soltar más de una ficha a la vez
22 Semáforos: usos Para que sólo entre uno en la región crítica Se inicializa a 1 Se llama mutex Similar a un lock down() lock() up() unlock()
23 Ejemplo de uso de mutex //globales long sem = 1; //local if (rfork(rfproc RFMEM) == 0) { down(&sem, 1); i++; up(&sem, 1); } else{ down(&sem, 1); i++; up(&sem, 1); }
24 Semáforos: usos Para que sólo entren N en la región crítica Se inicializa a N down() antes de entrar up() al salir
25 Semáforos: usos Para esperar Se inicializa a 0 down() para esperar up() para levantarlo
26 Ejemplo de uso de semáforo para esperar //globales long sem; //local if (rfork(rfproc RFMEM) == 0) { print("hijo antes\n); down(&sem, 1); //espero print("hijo despues\n); } else{ print("padre antes\n); up(&sem, 1); print("padre despues\n); }
27 Cómo implemento semáforos? Con pipes up(): escribir en el pipe down(): leer del pipe Puedo usar rendezvous(2) como con qlock(2) Necesito un contador de fichas (ojo, compartido, proteger con locks)
28 El problema de los lectores escritores Región crítica con dos tipos de hilos que acceden Un tipo de hilos lectores pueden acceder varios a la vez Otro escritores sólo puede acceder uno Hay exclusión mutua entre ambos tipos (o lectores o escritores) Otra forma de verla es dos tipos de formas de coger un cierre
29 Solución 0 (mala) un mutex para la región crítica sólo puede entrar un lector (y quiero que puedan entrar varios)
30 Solución 0 (mala): escritor //globales long mutexesc = 1; //local semacquire(&mutexesc, 1); //region critica semrelease(&mutexesc, 1);
31 Solución 0 (mala): lector semacquire(&mutexesc, 1); //region critica semrelease(&mutexesc, 1);
32 Solución 1 (injusta) Dos semáforos, un mutex para la región crítica Un mutex para proteger el contador de lectores Un contador del número de lectores El primero echa el cierre y el último lo suelta Ojo! con el orden y quién se queda bloqueado
33 Solución 1 (injusta): escritor //globales long mutexesc = 1; long mutexnl = 1; int nl; //local semacquire(&mutexesc, 1); //region critica semrelease(&mutexesc, 1);
34 Solución 1 injusta: lector semacquire(&mutexnl, 1); if(nl++ == 0) semacquire(&mutexesc, 1); semrelease(&mutexnl, 1); //region critica semacquire(&mutexnl, 1); if(--nl == 0) semrelease(&mutexesc, 1); semrelease(&mutexnl, 1);
35 Solución 1 injusta Uso peculiar de mutex entrelazados, ojo!! Es injusta, los lectores se apropian del cierre y se lo pasan sólo entre ellos. Si hay un escritor esperando, no debería dejar entrar a mas lectores
36 Idea general, torniquetes (turnstile) Para evitar injusticias como las anteriores Uso peculiar de semáforos
37 torniquetes (turnstile) //globales long torn = 1; //local semacquire(&torn, 1); semacquire(&mutexesc, 1); semrelease(&torn, 1);
38 torniquetes (turnstile) semacquire(&torn, 1); semrelease(&torn, 1);
39 torniquetes (turnstile) Si espera para el mutex, tiene el torniquete El torniquete deja pasar en orden justo (es un semáforo)
40 Solución 2 justa: escritor con torniquete //globales long mutexesc = 1; long mutexnl = 1; long torn = 1; int nl; //local semacquire(&torn, 1); semacquire(&mutexesc, 1); semrelease(&torn, 1); //region critica semrelease(&mutexesc, 1);
41 Solución 2 justa: lector con torniquete semacquire(&torn, 1); semrelease(&torn, 1); semacquire(&mutexnl, 1); if(nl++ == 0) semacquire(&mutexesc, 1); semrelease(&mutexnl, 1); //region critica semacquire(&mutexnl, 1); if(--nl == 0) semrelease(&mutexesc, 1); semrelease(&mutexnl, 1);
42 Productor/consumidor Tenemos un hilo que produce fichas Tenemos otro hilo que las consume Problema muy muy común: Hilo que lee del micro produce audio, programa lo consume (teléfono) Hilo que lee de la red, hilo que lo consume (programa que usa la red) Hilo que que produce datos, hilo que los manda a otra máquina (programa que usa la red) Hilo que que produce datos, hilo que los procesa, se lo manda a otro hilo... (procesado de señal)
43 Productor/consumidor El productor deja las cosas en un buffer (con N huecos) El consumidor las recoge El buffer tiene que ser circular (mod N) El buffer es compartido, mutex Y si no hay nada, espera activa? Puedo usar semáforos
44 productor //global //local long fichsem; long holesem = N; char *buf[n]; int i; char *fich; i = 0; while(fich = produce()){ semacquire(&holesem, 1); buf[i++] = fich; i %= N; semrelease(&fichsem, 1); }
45 consumidor //local int i; char *fich; i = 0; while(1){ semacquire(&fichsem, 1); fich = buf[i++]; i %= N; semrelease(&holesem, 1); consume(fich) }
46 productor/consumidor (N=8) Consumido 5 Productor U U U U U
47 productor/consumidor Consumidor 5 Productor 2 U U U U U
48 productor/consumidor Consumidor U Productor 2 U U U U
49 Productor/consumidor Solución mala, da miedo, el buffer no tiene mutex ( lo necesita?), por si acaso, es una variable compartida, lo pongo Qué pasa si hay más de un productor o consumidor? Necesito que compartan i y j, uso el mutex general para acceder a todas las cosas compartidas
50 compartido //global long mutex = 1; long fichsem; long holesem = N; char *buf[n]; int i, j;
51 productor //local char *fich; while(fich = produce()){ semacquire(&holesem, 1); semacquire(&mutex, 1); buf[i++] = fich; i %= N; semrelease(&mutex, 1); semrelease(&fichsem, 1); }
52 consumidor //local int i; char *fich; while(1){ semacquire(&fichsem, 1); semacquire(&mutex, 1); fich = buf[j++]; j %= N; semrelease(&mutex, 1); semrelease(&holesem, 1); consume(fich) }
53 Productor/consumidor Podría tener dos mutex, uno para i y otro para j el buffer no tiene mutex ( lo necesita?) Qué pasa si no quiero sacarlos en orden? Y si no es un buffer y es otro tipo de recurso? Mantra: un recurso compartido, uso un mutex...
54 Problema de los filósofos cenando (aka pollos en la marmita) Tengo N filósofos (hilos de ejecución) en una mesa Cada filósofo necesita dos tenedores para comer Un filósofo duerme/come Cada filósofo es un proceso independiente Un filósofo se puede quedar dormido hasta que suceda una condición
55 Problema de los filósofos: deadlock Si un filósofo coge primero el tenedor izquierdo y luego el derecho Puede pasar que todos los filósofos cojan el tenedor derecho Se quedan durmiendo esperando cada uno al siguiente alrededor de la mesa
56 Alternativas de solución Tengo un mutex y cojo dos palillos a la vez Produce hambruna si dos filósofos se alternan Uso un camarero Serializo todas las peticiones Desperdicia recursos pero no hay hambruna
57 Solución con hambruna Coger los dos palillos Tener cuidado con como se hace que esperen (no bloquearme con un mutex... ) Ver la solución de los pollos (mismo problema)
58 monitores C. A. R. Hoare y Per Brinch Hansen Asociado al lenguaje Objeto, ADT o módulo especial que actúa como mecanismo de sincronización Tengo el estado compartido dentro del monitor Una serie de operaciones para acceder a él Hay el equivalente a un cierre global escondido asociado al monitor
59 monitores Estoy fuera o dentro del monitor, automaticamente se echa el cierre al entrar, se suelta al salir Se entra al monitor al llamar a uno de los métodos o funciones del monitor Si estoy dentro puedo llamar a otros métodos del monitor (el synchronized de java no sirve para implementar monitores).
60 variables condición Para esperar, necesito un mecanismo (no veo el cierre del monitor) condwait(cv) condsignal(cv) condwait(cv) se duerme y suelta el cierre condsignal(cv) se despierta y coge el cierre, una sóla operación para que no se cuele gente y cambie la condición
61 variables condición Si no hay nadie esperando a la condición, se pierde la variable no lleva asociada la condición, sólo es una cola y un timbre Ha varios tipos, en unos condsignal(cv) es lo último a lo que puedo llamar, (o condsignalreturn(cv)) en otros sólo se despierta cuando abandono el monitor...
62 Monitores Pocos lenguajes tienen soporte de monitores Se puede (y se debe) pensar en monitores al implementar un módulo, ADT u objeto En Plan 9 hay soporte para implementar variables condición rsleep(2) Una variable condición es una variable de tipo Rendez Van asociadas a un QLock. Tengo que poner el campo l apuntando al QLock del monitor al inicializar mi variable Rendez
63 Variables condición en Plan 9 typedef struct Rendez { QLock *l;... } Rendez; void rsleep(rendez *r) int rwakeup(rendez *r) int rwakeupall(rendez *r)
64 Variables condición en Plan 9 Rendez full; QLock l; int var; void init(void){ } full->l = &l;
65 Variables condición en Plan 9 void set(int b) { qlock(&l); if(var == 0) rsleep(&empty);... qunlock(&l); }
66 Variables condición en Plan 9 int dothings(int a) { qlock(&l); var = 1; rwakeup(&r);... qunlock(&empty); return; }
67 Paso de mensajes CSP 1978 C. A. R. Hoare Convertir productor/consumidor en una primitiva Bloqueante (para permitir sincronización) Usar un proceso para que ejecute las regiones críticas (transferir la propiedad junto con la comunicación) Similar a pipes (salvo que aquí puedo mandar punteros), salvo por eso la idea es parecida
68 libthread(2) incluir thread.h #include <thread.h> main es de la librería de threads, uso threadmain (el main de verdad viene de la librería de threads) void threadmain(int argc, char *argv[]) tamaño de la pila con mainstacksize, variable global (hay un valor por defecto) int mainstacksize
69 libthread(2) Creo threads (colaborativos, de usuario) y procesos (expulsivos, de kernel) int proccreate(void (*fn)(void*), void *arg, uint stacksize) int threadcreate(void (*fn)(void*), void *arg, uint stacksize) Cada proceso con viene con un thread encima (incluido main) Para salir void threadexits(char *status) void threadexitsall(char *status)
70 libthread(2) Para identificar un thread (como pids) int threadid(void) Para poner nombre a un thread (para tstack y errores en general) void threadsetname(char *name)
71 libthread(2), ejemplo tid.c, ejemplo tonto tincr.c, ejemplo contador con threads
72 libthread(2) El primer parámetro es un puntero a función int proccreate(void (*fn)(void*), void *arg, uint stacksize) int threadcreate(void (*fn)(void*), void *arg, uint stacksize)
73 libthread(2) El primer parámetro es un puntero a función El nombre de una función es su dirección (valor para pasar al puntero) Un puntero tiene un tipo, que es el de una función Una función para un thread o un proc tiene que tener este aspecto: void procfunct(void *v) Ojo con los parámetros, puede haber condiciones de carrera
74 libthread(2) Los threads tienen memoria compartida Su pila vive en el segmento de datos, memoria compartida Pueden usar qlock (hay una implementación de rendezvous) Mejor si uso canales (forma diferente de pensar, modelo diferente)
75 Canal Tiene que verlo todos los implicados Implementa un productor/consumidor Un canal es como un buzón Se puede mandar a través de él (send) o recibir (recv) Puede tener espacio (buffering) dentro o no Si no hay espacio (no lo hay buffering o está lleno) send se bloquea hasta que alguien reciba Si no hay nada en el buffer y no hay nadie bloqueado mandando, recv se bloquea hasta que alguien mande
76 Canal Declaro un canal Channel *c; creo un canal Channel* chancreate(int elsize, int nel) elsize es el tamaño de un elemento (puedo mandar cosas diferentes) nel es el tamaño del buffer, si es cero no hay buffering libero un canal void chanfree(channel *c)
77 Canal Para mandar y recibir, primitivas int int recv(channel *c, void *v) send(channel *c, void *v) Son como memmove(2), copian la memoria al canal (si no hay buffering, al destino) Por eso recibe un puntero al trozo de memoria que copia
78 Canal Para mandar y recibir, funciones especializadas, reciben un valor, no un puntero void* recvp(channel *c) ulong recvul(channel *c) int sendp(channel *c, void *v) int sendul(channel *c, ulong v) Se usan más que las otras pero es importante entender las otras para entender alt que veremos más adelante
79 libthread(2), ejemplos tcnt.c contador con threads tpc.c, productor consumidor pong.c ping pong canales intercambiando un valor pong2.c lo mismo especializado con sendul recvul
80 libthread(2), ejemplo tticker.c, ejemplo paneles Cada panel se corresponde con un descriptor de fichero Tengo que pensar en términos de procesos conectados por canales
81 libthread(2), operaciones operaciones con mas de un canal a la vez int cada operación alt(alt *alts); typedef struct Alt Alt; struct Alt { Channel *c; void *v; int op; };
82 libthread(2), operaciones cada constante una operación mejor usar enum #define CHANEND 0 //indica el final de alts #define CHANSND 1 //para mandar #define CHANRCV 2 //para recibir #define CHANNOP 3 //nop (no usar) #define CHANNOBLK 4 //no bloqueante (no usar)
83 libthread(2), ejemplo dentro de la función que hace el alt enum{ WR = 0, EXIT, END, }; int i; //ambos canales de enteros Alt a[] = { [WR] {wrc,&i,chanrcv}, [EXIT] {exitc,&i,chanrcv}, [END] {nil,nil,chanend}, };
84 libthread(2), ejemplo switch(alt(a)){ case WR: //lo que hace WR return; case EXIT: //lo que hace EXIT break; default: sysfatal("bad alt"); break; }
85 libthread(2), ejemplo etticker.c, ejemplo paneles quiero añadir mensajes de temperatura, tiempo uso alt(2) para decorar el thread el canal de broadcast no cambia su interfaz y me aisla
86 libthread(2), ejemplos mouse.c, eventos de raton con canales resize.c eventos de raton y eventos de resize slider.c es una slider, barra de desplazamiento
87 libthread(2), ejemplos texec.c, como hacer un exec(2) con un proceso usando libthread
88 libthread(2), cómo organizar un programa Un proc para cada llamada bloqueante sleep, read, write por ejemplo. Un thread representante de esos procs en un proc con datos compartidos Un thread por cada hilo separado de ejecución
89 libthread(2), cómo organizar un programa Para comunicación de N a 1 Se pueden usar valores de un canal O alternativamente usar alt Depende del problema
90 libthread(2), condiciones de carrera típicas Usar un canal no me libra Ejemplo, compartir los canales de respuesta y de petición ( quien se lleva el mensaje?). Mando un puntero a un canal para que me respondan por él Recordar liberarlo con chanfree
91 libthread(2), deadlock Es normal si no tengo cuidado Igual que antes, dependencias circulares mandando/recibiendo Ojo con alt Intento hacerme dependencias y comunicación sencillas
S.O.: Entrada salida, E/S, (Input Output I/O)
Gorka Guardiola Laboratorio de Sistemas, Grupo de Sistemas y Comunicaciones, URJC 27 de agosto de 2010 (cc) 2008 Grupo de Sistemas y Comunicaciones. Algunos derechos reservados. Este trabajo se entrega
Introducción a Sistemas Operativos: Concurrencia
Introducción a Sistemas Operativos: Concurrencia Clips xxx Fr ancisco J Ballesteros 1. Semáforos Quizá la abstracción más conocida para sincronizar procesos en programación concurrente controlar el acceso
7. Programación Concurrente
7. Programación Concurrente 1. Qué es la programación concurrente? Se conoce por programación concurrente a la rama de la informática que trata de las técnicas de programación que se usan para expresar
Examen de Fundamentos de sistemas distribuidos
Examen de Fundamentos de sistemas distribuidos Tiempo total: 2 horas Problema: Programa: Rendezvous con semáforos(5 puntos) Utilizando como único mecanismo de sincronización los semáforos descritos en
Concurrencia. Primitivas IPC con bloqueo
Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región
Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia
Concurrencia: deberes Concurrencia: Exclusión Mutua y Sincronización Capítulo 5 Comunicación entre procesos Compartir recursos Sincronización de múltiples procesos Asignación del tiempo de procesador Concurrencia
Concurrencia: Exclusión mutua y Sincronización
Concurrencia: Exclusión mutua y Sincronización Prof. Carlos Figueira Basado en materiales de Yudith Cardinale (USB) Williams Stallings, Eugene Styer Concurrencia Múltiples aplicaciones Aplicaciones estructuradas
SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009
SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009 4. (2 p) Dos procesos A y B se ejecutan concurrentemente en un determinado sistema. El proceso A ejecuta unas tareas ( Tareas
Implementación de monitores POSIX
Implementación de monitores POSIX Ampliación de Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid Programación concurrente: Problemática Presencia de condiciones de
Concurrencia entre Procesos.
Concurrencia entre Procesos. Sistemas Operativos Tema 3. 1 Procesamiento concurrente. Procesamiento concurrente: base de los sistemas operativos modernos (multiprogramados): Un conjunto de procesos que
Examen de Fundamentos de sistemas operativos
Examen de Fundamentos de sistemas operativos Tiempo total: 2 horas. Problema: Implementación de canales con Rendez (monitores) Implemente canales con buffering para enteros mediante variables condición
Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria
Sistemas operativos UPCO ICAI Departamento de Electrónica y Automática 1 Hasta ahora hemos visto Relación programa-sistema operativo Gestión de memoria Reserva para la ejecución Pilas, heap, memoria de
Sistemas Operativos Ingeniería de telecomunicaciones Sesión 3: Concurrencia
Sistemas Operativos Ingeniería de telecomunicaciones Sesión 3: Concurrencia Calendario Comienzo: Lunes 2 de noviembre y miércoles 4 de noviembre. Entrega: 16 de noviembre y 18 de noviembre. 1. Requisitos
Ingeniería Informática. Curso 3º. Sistemas Operativos Examen Final. TEORIA. 4 de Septiembre de 2009
Ingeniería Informática. Curso 3º. Sistemas Operativos Examen Final. TEORIA. 4 de Septiembre de 2009 1. [PROCESOS] a) Considerar el siguiente código: void main() { int j=10; pid_t pid; for (int i=0; i
LENGUAJE. Tema 1 - Introducción
LENGUAJE Tema 1 - Introducción HISTORIA DEL LENGUAJE C El lenguaje de programación C fue creado por Dennis Ritchie cuando trabajaba en Bell Laboratories de AT&T junto con Ken Thompson en el diseño del
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS Caso 1: 1.- Necesitamos un cd o Dvd para grabar alguna de las versiones de livecd de Linux. 2.- Liga de una
Tema 3. Monitores Programación Concurrente
Tema 3. Monitores Programación Concurrente Depto. de Lenguajes y Sistemas Informáticos Universidad de Granada Contenidos 1. Concepto de Monitor 1.1. Fundamento teórico de los monitores 1.2. Sintaxis de
Introducción a C++ y Code::Blocks
Introducción a C++ y Práctica Imperativo Clase 1 Luis Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 28 de mayo de 2010 Menu de esta Tarde Funcional Vs. Imperativo (Intérprete
Introducción a Java LSUB. 30 de enero de 2013 GSYC
Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial
Se guardan en archivos con extencion c y los cabezales con extension h
Se guardan en archivos con extencion c y los cabezales con extension h Tipos de Variables: Tipo Tamaño(bytes) Limite inferior Limite superior char 1 -- -- unsigned char 1 0 255 short int 2-32768 +32767
Sistemas Operativos. Procesos
Sistemas Operativos Procesos Agenda Proceso. Definición de proceso. Contador de programa. Memoria de los procesos. Estados de los procesos. Transiciones entre los estados. Bloque descriptor de proceso
Lección 10: Ejemplos de programación con semáforos
Lección 10: Ejemplos de programación con semáforos El problema de la cena de los filósofos El problema de los lectores y escritores Ejercicios Gestión de concurrencia mediante paso de testigo (implementación
PROGRAMACIÓN CONCURRENTE
PROGRAMACIÓN CONCURRENTE Lenguajes de Programación - Progr. Concurrente 1 Introducción El concepto fundamental de la programación concurrente es la noción de Proceso. Proceso: Cálculo secuencial con su
Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.
Tema 5 : Comunicación entre Procesos mediante Tuberías Sistemas Operativos: Programación de Sistemas Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez Curso 2006-07 Introducción Algunas
Message Passing Interface (MPI)
Message Passing Interface (MPI) INTRODUCCIÓN MPI (Message Passing Interface) como es un interfaz estandarizada para la realización de aplicaciones paralelas basadas en pasaje de mensajes. El modelo de
Arquitecturas cliente/servidor
Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor 1 Creación de Sockets Cliente/Servidor Sockets en TCP Concepto de Hilos Definición de DAEMON Sockets en UDP 2 THREADS 3 Qué es un thread?
TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O
TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO Definición y objetivos de un S.O Definición y objetivos del sistema operativo Estructura, componentes y servicios de un S.O Llamadas al sistema
Sistemas Operativos I. Enxeñería Informática. Curso 2007/08. Práctica 2: Concurrencia de procesos: Productores/Consumidores.
Sistemas Operativos I. Enxeñería Informática. Curso 2007/08. Práctica 2: Concurrencia de procesos: Productores/Consumidores. En esta práctica se tratará de resolver el problema de los productores/consumidores
Monitores. Implementación de un Buffer con monitores
Monitores Los monitores corresponden a la segunda herramienta de sincronización que veremos en el curso. Se usan para garantizar la exclusión mutua en secciones críticas y para esperar la ocurrencia de
Estructuras de Datos Declaraciones Tipos de Datos
Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Datos Declaraciones Tipos de Datos Temas: 2-3-4 IWI-131, paralelo 01 Profesor: Teddy Alfaro O. Lenguaje de Programación
Tema 3: Concurrencia de procesos
Tema 3: Concurrencia de procesos Yolanda Blanco Fernández yolanda@det.uvigo.es Concurrencia, Tiempo Real y Paralelismo Concurrencia: Convivencia de un conjunto de procesos en un mismo ordenador. Sistemas
Linux Devices DriversDesarrollo de un char device
Linux Devices Drivers Desarrollo de un char device Noviembre 2010 Agenda Prerequisitos 1 Prerequisitos. 2. 3 Registro y funcionalidades. 4 5 6 Linux Headers Prerequisitos Que tenemos que instalar antes
PROGRAMACION CONCURRENTE
PROGRAMACION CONCURRENTE II.3 Sincronización basada en memoria compartida: Semáforos J.M. Drake 1 Procesos concurrentes y memoria compartida. Si los diferentes procesos de un programa concurrente tienen
07 << Acceso en exclusiva al recurso compartido >>
Sistemas Operativos 4º Semestre. Grados II y MI Cuarto Parcial. Sistema de Ficheros. 2 de Junio de 2014. Dispone de 50 minutos. Publicación de notas el Jueves 5 de Junio 2014. Revisión el Viernes 6 de
PROBLEMAS CLÁSICOS DE LA COMUNICACIÓN N ENTRE PROCESOS
PROBLEMAS CLÁSICOS DE LA COMUNICACIÓN N ENTRE PROCESOS SISTEMAS OPERATIVOS JOSÉ ALFREDO ESTRADA SOTO Para cada uno de los siguientes tres problemas se requiere escribir un programa que atienda las necesidades
S.O.: Asignación de memoria dinámica
Gorka Guardiola Laboratorio de Sistemas, Grupo de Sistemas y Comunicaciones, URJC 17 de febrero de 2010 (cc) 2008 Grupo de Sistemas y Comunicaciones. Algunos derechos reservados. Este trabajo se entrega
Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.
Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1
Usando el Sistema Operativo
Sistemas Operativos Pontificia Universidad Javeriana Enero de 2010 Los sistemas operativos Los sistemas operativos Perspectivas del Computador Concepto general El sistema operativo es parte del software
El problema de los Filósofos
El problema de los Filósofos Problemas de Programación Concurrente Solución con Semáforos Para evitar una situación de interbloqueo se limita el número de filósofos en disposición de comer a 4. PROGRAM
Elementos de un programa en C
Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución
Ejercicios de Hilos. Índice
Índice 1 Creación de hilos (0.5 puntos)...2 2 Prioridades (0.5 puntos)... 2 3 Productor/Consumidor (1 punto)...2 4 Pool de hilos (1 punto)... 3 1. Creación de hilos (0.5 puntos) En la clase Ej1 se crean
Funciones Definición de función
Funciones Definición de función Una función es un bloque de código que realiza una tarea específica. Una función es una porción de programa, identificable mediante un nombre, que realiza determinadas tareas
Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México
Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Unidad Académica Profesional Tianguistenco Ingeniería de Software Estructura de Datos
S.O.: Memoria virtual
Gorka Guardiola Laboratorio de Sistemas, Grupo de Sistemas y Comunicaciones, URJC 27 de agosto de 2010 (cc) 2008 Grupo de Sistemas y Comunicaciones. Algunos derechos reservados. Este trabajo se entrega
Mensajes. (versión preliminar)
Mensajes (versión preliminar) Ejemplo: productor/consumidor con buffer de tamaño 0 void produce(item *p_it); void consume(item *p_it); int nmain() { ntask cons= nemittask(consproc); ntask prod= nemittask(prodproc,
Mensajes. Interbloqueo
CONCURRENCIA DE PROCESOS Preparado por: Angel Chata Tintaya (angelchata@hotmail.com) Resumen Los procesos comparten variables globales, comparten y compiten por recursos, se ejecutan simultáneamente intercalándose
Programación Estructurada
Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 2 Nombre: El lenguaje de programación C Contextualización Una constante en todos los lenguajes de programación (viejos y nuevos) es la implementación
SOLUCIONES A ALGUNOS DE LOS EJERCICIOS DE SINCRONIZACION Y COMUNICACION ENTRE PROCESOS
SOLUCIONES A ALGUNOS DE LOS EJERCICIOS DE SINCRONIZACION Y COMUNICACION ENTRE PROCESOS 1. Con las tres llamadas create, suspend, y resume, la estructura del programa sería la siguiente: process recoger;
Si un candado mutex es usado por hilos en el mismo proceso pero no por hilos en diferentes procesos, los primeros dos pasos pueden simplificarse a:
Pthreads La biblioteca también soporta candados y variables de condición. Los candados pueden usarse para proteger la sección crítica, o pueden usarse en combinación con las variables de condición para
Sistemas Operativos Práctica 3
Sistemas Operativos Práctica 3 Ing. Andrés Bustamante afbustamanteg@unal.edu.co Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que
Otras formas de Sincronización en Java
75-62 Técnicas de Programación Concurrentes II Lic. Ing. Osvaldo Clúa 2008 Facultad de Ingeniería Universidad de Buenos Aires Otras formas de Sincronización en Java java.util.concurrent Class Exchanger
Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.
Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1
TEMA 2: PROCESOS E HILOS: CONCURRENCIA, SINCRONIZACIÓN Y COMUNICACIÓN
TEMA 2: PROCESOS E HILOS: CONCURRENCIA, SINCRONIZACIÓN Y COMUNICACIÓN 1. Introducción Definición de proceso (tarea según los fabricantes): Programa en ejecución. Cálculo computacional que puede hacerse
El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org>
El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por
Programación Concurrente y Paralela. P(S) ; sección crítica P(S);
2.5.2 Monitores Los semáforos, a pesar de su sencillez de uso, son el equivalente a las instrucciones goto y el manejo de apuntadores en los lenguajes de programación imperativos: son muy susceptibles
2.2 Nombres, Ligado y Ámbito
2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el
Receta general para resolver problemas de sincronización con semáforos
Receta general para resolver problemas de sincronización con semáforos La primera vez que te enfrentas a la tarea de implementar una solución a un problema de sincronización entre procesos, es normal que
Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas
Programación concurrente en Java. Breve introducción Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas Concurrencia en Java Hilos de ejecución Clase Thread e interfaz Runnable Pausas Interrupciones
Capítulo 3: Procesos. n Concepto de Proceso. n Despacho (calendarización) de Procesos. n Operaciones en Procesos. n Procesos en cooperación
3.- Procesos Capítulo 3: Procesos Concepto de Proceso Despacho (calendarización) de Procesos Operaciones en Procesos Procesos en cooperación Compunicación Interprocesos Communicación en sistemas Cliente-Servidor
Práctica 4 (2.5 ptos) PIPEs
(2.5 ptos) 1. Objetivo En esta práctica se va a aprender el uso de técnicas de comunicación entre procesos basadas en pipes, así como métodos de atención a varios canales de comunicación distintos (select)
Prof. Dr. Paul Bustamante
Prácticas de C++ Practica Nº 10 Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante INDICE 1.1 EJERCICIO 1: MI PRIMER FICHERO EN BINARIO... 1 1.2 EJERCICIO 2: LEYENDO MI PRIMER FICHERO
Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.
Punteros Definición Un puntero es un dato que contiene una dirección de memoria. NOTA: Existe una dirección especial que se representa por medio de la constante NULL (definida en ) y se emplea
Sistemas Operativos Práctica 4
Sistemas Operativos Práctica 4 Ing. Andrés Bustamante afbustamanteg@unal.edu.co Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que
Ingeniería Informática. Curso 3º. Sistemas Operativos Examen Final. TEORIA. 9 de Febrero de 2007
Ingeniería Informática. Curso 3º. Sistemas Operativos Examen Final. TEORIA. 9 de Febrero de 2007 Planteamiento del examen de TEORIA: El examen constará de 5 preguntas/cuestiones que pueden ser libremente
Concurrencia y paralelismo
Introducción a los Sistemas Operativos Concurrencia y paralelismo 1. Ejecución de programas. Procesos. 2. Multiprogramación Bibliografía Silberschatz and Galvin Sistemas Operativos. Conceptos fundamentales.
Construyendo Programas más Complejos
Arquitectura de Ordenadores Construcciones de Alto Nivel en Ensamblador Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Construyendo Programas más
Object 1. Threads en Java
Object 1 Threads en Java Introducción En este artículo voy a explicar cómo se usan los threads en Java (también traducidos como "hilos de ejecución"). La intención no es solamente explicar cuáles son las
Tema 1: Programación Multiproceso. Curso
Tema 1: Programación Multiproceso. Curso 2012-2013 1 Patricia Hurtado Sayas Índice de contenidos: 1. Elementos funcionales de un SI. Repaso. 2. Concepto de Proceso o Tarea. 1. PCB, Bloque de Control de
Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008
Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid de abril de 00 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los recursos
APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.
APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido
Paradigma de paso de mensajes
Paradigma de paso de mensajes Curso 2011-2012 Índice Visión lógica del paradigma de paso de mensajes. Operaciones básicas en paso de mensajes. Operaciones bloqueantes. Operaciones no bloqueantes. MPI:
PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores
PROGRAMACIÓN CONCURRENTE Tema 5 Monitores 1 Indice Definición de los monitores Sincronización condicional usando monitores Algunos problemas con monitores 2 Problemas de las regiones críticas condicionales
Procesos Definición y Estados
Procesos Definición y Estados Profesorado de Informática CeRP del Suroeste, Uruguay Contenidos Qué es un proceso Estructuras de datos para gestionar procesos API para trabajar con procesos Hilos (threads).
TEMA 7: Ficheros. TEMA 7: Ficheros. 7.1.-Concepto de fichero
TEMA 7: Ficheros 7.1.-Concepto de fichero Todas las estructuras de datos que hemos visto hasta ahora utilizan memoria principal. Esto tiene dos limitaciones importantes: 1. Los datos desaparecen cuando
Introducción a Java LSUB. 15 de enero de 2015 GSYC
Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada
Sincronizacion de procesos
Sincronizacion de procesos Sobre los procesos cooperantes: Pueden compartir espacios de direcciones o datos a través de un archivo. Problema a considerar: Como evitar la inconsistencia de los datos compartidos
T5-multithreading. Indice
T5-multithreading 1.1 Indice Proceso vs. Flujos Librerías de flujos Comunicación mediante memoria compartida Condición de carrera Sección Crítica Acceso en exclusión mutua Problemas Abrazos mortales 1.2
Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas
2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos
Procesos e Hilos en C
Procesos e Hilos en C 6 de febrero de 2012 En esta sesión vamos a escribir programas en lenguaje C que utilicen hilos y procesos para comparar el rendimiento del sistema ante la gestión de unos y otros.
Tema 13: Apuntadores en C
Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción
Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006
Lenguaje C Elementos de un Programa Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 Objetivos Conocer los elementos que conforman un programa en C 1. Elementos léxicos de un Programa Cuando el programa
Sistemas Operativos Practica 1: procesos y concurrencia.
Sistemas Operativos Practica 1: procesos y concurrencia. Objetivos: Introducir al alumno a los conceptos de programa, concurrencia, paralelismo y proceso o tarea. Manejo del concepto de concurrencia haciendo
Tema 6: Memoria dinámica
: Programación 2 Curso 2013-2014 Índice 1 2 3 El tamaño es fijo y se conoce al implementar el programa Declaración de variables int i=0; char c; float vf[3]={1.0, 2.0, 3.0}; i c vf[0] vf[1] vf[2] 0 1.0
1. INTRODUCCIÓN 1.1. Qué es un sistema operativo? 1.1.1. El sistema operativo como máquina extendida 1.1.2. El sistema operativo como gestor de
1. INTRODUCCIÓN 1.1. Qué es un sistema operativo? 1.1.1. El sistema operativo como máquina extendida 1.1.2. El sistema operativo como gestor de recursos 1.2. Historia de los sistemas operativos /* solo
Sistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos
Sistema Operativo Repaso de Estructura de Computadores Capítulo 1 Explota los recursos hardware de uno o más procesadores Proporciona un conjunto de servicios a los usuarios del sistema Gestiona la memoria
Tema: Arreglos de Objetos en C++.
Programación II. Guía 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Arreglos de Objetos en C++. Objetivos Específicos Describir la implementación de arreglos de Objetos.
Sistemas multiprogramados. Cooperan en realizar un trabajo: filtros. Comparten recursos del sistema
Introducción a los Sistemas Operativos Concurrencia 1. Introducción. Concurrencia y paralelismo. 2. Comunicación y sincronización. 3. Exclusión mutua y sincronización. 4. Modelos de programación. 5. Memoria
Sincronización. Arquitectura de Computadores
Sincronización Arquitectura de Computadores J. Daniel García Sánchez (coordinador) David Expósito Singh Javier García Blas Óscar Pérez Alonso J. Manuel Pérez Lobato Grupo ARCOS Departamento de Informática
Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.
LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan
MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar
MONITORES EN JAVA Un monitor es un objeto que implementa acceso bajo e.m. a todos sus métodos, y provee sincronización En Java, son objetos de una clase cuyos métodos públicos son todos synchronized Un
Arquitecturas cliente/servidor
Arquitecturas cliente/servidor Servidores y Clientes Sincronizados Contenido Procesos Semáforos Sincronización Lectura y Escritura de Archivos Servidores Orientados a Conexión Servidores No Orientados
Tema 2: Programas y procesos
Tema 2: Programas y procesos Enrique Soriano Laboratorio de Sistemas, Grupo de Sistemas y Comunicaciones, URJC 15 de febrero de 2010 (cc) 2010 Grupo de Sistemas y Comunicaciones. Algunos derechos reservados.
Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones
Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice
Prueba de Laboratorio Modelo B01 Semáforos y Memoria Compartida
Prueba de Laboratorio APELLIDOS: NOMBRE: GRUPO DE LABORATORIO: Indicaciones: No se permiten libros, apuntes ni teléfonos móviles. Cuando tenga una solución al ejercicio muéstrela al profesor (compilación
Paso de mensajes. Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura. Filosofía cliente-servidor.
Paso de mensajes Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons
Programación Básica Estructuras de Datos y Funciones en C
Arturo Vega González a.vega@ugto.mx Division de Ciencias e Ingenierías Universidad de Guanajuato Campus León Sesión 8 Universidad de Guanajuato, DCI, Campus León 1 / 33 Contenido 1 Estructuras de Datos
Programación estructurada (Introducción a lenguaje C)
Programación estructurada (Introducción a lenguaje C) M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 15-I Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada
Práctica 2. Implementación de un driver básico para la transmisión de datos a través de la UART.
Práctica 2. Implementación de un driver básico para la transmisión de datos a través de la UART. 1. Objetivo El objetivo de la siguiente práctica es el de implementar el software de control (driver) de
Secretos de la Programación Concurrente
Secretos de la Programación Concurrente Stuart Perez, Luis Castro Autómatas y Compiladores, Escuela de Ciencias de la Computación e Informática, San Pedro de Montes de Oca, Costa Rica jstuartp@gmail.com
Federico Peinado www.federicopeinado.es
Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es