S.O.: Concurrencia 2

Tamaño: px
Comenzar la demostración a partir de la página:

Download "S.O.: Concurrencia 2"

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)

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

Más detalles

Introducción a Sistemas Operativos: Concurrencia

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

Más detalles

7. Programación Concurrente

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

Más detalles

Examen de Fundamentos de sistemas distribuidos

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

Más detalles

Concurrencia. Primitivas IPC con bloqueo

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

Más detalles

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia

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

Más detalles

Concurrencia: Exclusión mutua y Sincronización

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

Más detalles

SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009

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

Más detalles

Implementación de monitores POSIX

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

Más detalles

Concurrencia entre Procesos.

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

Más detalles

Examen de Fundamentos de sistemas operativos

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

Más detalles

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria

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

Más detalles

Sistemas Operativos Ingeniería de telecomunicaciones Sesión 3: Concurrencia

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

Más detalles

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 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

Más detalles

LENGUAJE. Tema 1 - Introducción

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

Más detalles

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 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

Más detalles

Tema 3. Monitores Programación Concurrente

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

Más detalles

Introducción a C++ y Code::Blocks

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

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

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

Más detalles

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 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

Más detalles

Sistemas Operativos. Procesos

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

Más detalles

Lección 10: Ejemplos de programación con semáforos

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

Más detalles

PROGRAMACIÓN CONCURRENTE

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

Más detalles

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

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

Más detalles

Message Passing Interface (MPI)

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

Más detalles

Arquitecturas cliente/servidor

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?

Más detalles

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 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

Más detalles

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. 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

Más detalles

Monitores. Implementación de un Buffer con monitores

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

Más detalles

Estructuras de Datos Declaraciones Tipos de Datos

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

Más detalles

Tema 3: Concurrencia de procesos

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

Más detalles

Linux Devices DriversDesarrollo de un char device

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

Más detalles

PROGRAMACION CONCURRENTE

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

Más detalles

07 << Acceso en exclusiva al recurso compartido >>

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

Más detalles

PROBLEMAS CLÁSICOS DE LA COMUNICACIÓN N ENTRE PROCESOS

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

Más detalles

S.O.: Asignación de memoria dinámica

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

Más detalles

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: 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

Más detalles

Usando el Sistema Operativo

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

Más detalles

El problema de los Filósofos

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

Más detalles

Elementos de un programa en C

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

Más detalles

Ejercicios de Hilos. Índice

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

Más detalles

Funciones Definición de función

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

Más detalles

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 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

Más detalles

S.O.: Memoria virtual

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

Más detalles

Mensajes. (versión preliminar)

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,

Más detalles

Mensajes. Interbloqueo

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

Más detalles

Programación Estructurada

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

Más detalles

SOLUCIONES A ALGUNOS DE LOS EJERCICIOS DE SINCRONIZACION Y COMUNICACION ENTRE PROCESOS

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;

Más detalles

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:

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

Más detalles

Sistemas Operativos Práctica 3

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

Más detalles

Otras formas de Sincronización en Java

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

Más detalles

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: 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

Más detalles

TEMA 2: PROCESOS E HILOS: CONCURRENCIA, SINCRONIZACIÓN Y COMUNICACIÓN

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

Más detalles

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org>

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

Más detalles

Programación Concurrente y Paralela. P(S) ; sección crítica P(S);

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

Más detalles

2.2 Nombres, Ligado y Ámbito

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

Más detalles

Receta general para resolver problemas de sincronización con semáforos

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

Más detalles

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 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

Más detalles

Capítulo 3: Procesos. n Concepto de Proceso. n Despacho (calendarización) de Procesos. n Operaciones en Procesos. n Procesos en cooperación

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

Más detalles

Práctica 4 (2.5 ptos) PIPEs

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)

Más detalles

Prof. Dr. Paul Bustamante

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

Más detalles

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. 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

Más detalles

Sistemas Operativos Práctica 4

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

Más detalles

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 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

Más detalles

Concurrencia y paralelismo

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.

Más detalles

Construyendo Programas más Complejos

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

Más detalles

Object 1. Threads en Java

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

Más detalles

Tema 1: Programación Multiproceso. Curso

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

Más detalles

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008

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

Más detalles

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. 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

Más detalles

Paradigma de paso de mensajes

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:

Más detalles

PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores

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

Más detalles

Procesos Definición y Estados

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).

Más detalles

TEMA 7: Ficheros. TEMA 7: Ficheros. 7.1.-Concepto de fichero

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

Más detalles

Introducción a Java LSUB. 15 de enero de 2015 GSYC

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

Más detalles

Sincronizacion de procesos

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

Más detalles

T5-multithreading. Indice

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

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

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

Más detalles

Procesos e Hilos en C

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.

Más detalles

Tema 13: Apuntadores en C

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

Más detalles

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 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

Más detalles

Sistemas Operativos Practica 1: procesos y concurrencia.

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

Más detalles

Tema 6: Memoria dinámica

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

Más detalles

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 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

Más detalles

Sistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos

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

Más detalles

Tema: Arreglos de Objetos en C++.

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.

Más detalles

Sistemas multiprogramados. Cooperan en realizar un trabajo: filtros. Comparten recursos del sistema

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

Más detalles

Sincronización. Arquitectura de Computadores

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

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

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

Más detalles

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

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

Más detalles

Arquitecturas cliente/servidor

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

Más detalles

Tema 2: Programas y procesos

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.

Más detalles

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 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

Más detalles

Prueba de Laboratorio Modelo B01 Semáforos y Memoria Compartida

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

Más detalles

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. 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

Más detalles

Programación Básica Estructuras de Datos y Funciones en C

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

Más detalles

Programación estructurada (Introducción a lenguaje C)

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

Más detalles

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. 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

Más detalles

Secretos de la Programación Concurrente

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

Más detalles

Federico Peinado www.federicopeinado.es

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

Más detalles