Programación concurrente en Ada. Breve introducción
|
|
|
- Felisa Gutiérrez Serrano
- hace 9 años
- Vistas:
Transcripción
1 Programación concurrente en Ada. Breve introducción Joaquín EZPELETA Dept. de Informática e Ingeniería de Sistemas Universidad de Zaragoza J. Ezpeleta 1
2 Índice Declaración y uso de tareas Ada Dependencia y activación de tareas Ada Sincronización por citas en Ada La instrucción Select Tipo Duration y acción Delay Paquete Calendar y tipo Time Uso de Select y citas Manejo de excepciones Más sincronización en ADA: tipos protegidos La buena educación en el uso de objetos protegidos J. Ezpeleta 2
3 Declaración y uso de tareas Ada Vars en1:bool:=false en2:bool:=false ult:ent:=1 en2: boolean := FALSE; task P1:: body P2 is P2:: ult: integer := 1; Mq TRUE Mq TRUE while TRUE loop task declaración en1:=true en2:=true P1; en2 TRUE task P2; ult:=1 ult:=2 := Mq en2 while en1 ult=1 and ult=2 loop task Mq body en1 P1 ult=2 is null; seguir seguir end loop; FMq FMq while TRUE loop --put_line("p2 en CS"); en1 := TRUE seccrit1 en2 := FALSE; seccrit2 ult := 1 en1:=false --put_line("p2 en NCS"); en2:=false while en2 and ult=1 loop end loop; secnocrit1 secnocrit2 null; end P2; FMq FMq end loop; --put_line("p1 en CS"); en1 := FALSE; null; --put_line("p1 en NCS"); end peterson; end loop; end P1; with Ada.Text_IO; use Ada.Text_IO; procedure peterson is en1: boolean := FALSE; J. Ezpeleta 3
4 Declaración y uso de tareas Ada task body P2 is while TRUE loop en2 := TRUE ult := 2 while en1 and ult=2 loop null; end loop; --put_line("p2 en CS"); en2 := FALSE; --put_line("p2 en NCS"); end loop; end P2; null; end peterson; with Ada.Text_IO; use Ada.Text_IO; procedure peterson is en1: boolean := FALSE; en2: boolean := FALSE; ult: integer := 1; task P1; declaración task P2; task body P1 is while TRUE loop en1 := TRUE ult := 1 while en2 and ult=1 loop null; end loop; --put_line("p1 en CS"); en1 := FALSE; --put_line("p1 en NCS"); end loop; end P1; J. Ezpeleta 4
5 Declaración y uso de tareas Ada task type T() is end T; type R is record latarea: T; end record; type pttask is access T; * vectores de tareas * punteros a tareas *tipo tarea *parametrizada (sólo discretos y punteros) vectordetareas: array(1..10) of T; vectorderegistros: array(1..3) of R; reg: R; pt: pttask; declare T1:T(v); T2:T(v ); pt := new T(v ); J. Ezpeleta 5
6 Dependencia y activación de tareas Ada Una tarea declarada en un procedimiento, bloque u otra tarea (en la parte de implementación) depende de dicha unidad de programa. La activación de una tarea es automática al comenzar la ejecución de la unidad en la que está declarada. Esta unidad no acaba hasta que todas las tareas declaradas en ella han concluido su ejecución Una tarea creada dinámicamente se activa en el momento de su creación, y depende del bloque que contiene la declaración Comunicación entre tareas: mediante variables globales compartidas entre varias tareas mediante el mecanismo de cita (rendez-vous). una cita puede estar parametrizada para permitir la comunicación entre tareas J. Ezpeleta 6
7 Dependencia y activación de tareas Ada declare end padre declarada activación ejecución T1 declarada activación ejecución T2 declare T1,T2:T; J. Ezpeleta 7
8 Sincronización por citas en Ada Ejemplos de uso de citas: task T1 is entry C1; entry C2(n: in integer; r: out real); end T1; task body T1 is accept C2(n,r) do end C2; accept C1; end T1; task body T2 is T1.C1; end T2; task body T3 is T1.C2(h,s); end T3; J. Ezpeleta 8
9 Sincronización por citas en Ada entry C(x: in ; y: in out ; z: out ); task body T1 is accept C(x,y,z) do instr end C2; end T1; task body T2 is T1.C(a,b,c); end T1; J. Ezpeleta 9
10 La instrucción Select Dos problemas!! task buffer is entry leer(d: out Dato); entry escribir(d: in Dato); end buffer; task T1; task T2; task body buffer is N: constant := 100; --maxdatos X: array(1..n) of Dato; i,j: integer range 1..N := 1; ndatos: integer range 0..N := 0; loop end loop; end buffer; select accept escribir(d: in Dato) do X(i):=D; i:=i mod N+1; ndatos:=ndatos+1; end escribir; or accept leer(d: out Dato) do D:=X(j); j:=j mod N+1; ndatos:=ndatos-1; end leer; end select; buffer.leer(d1) T1 parámetros actuales se evalúan antes buffer.escribir(d2) T2 J. Ezpeleta 10
11 La instrucción Select task buffer is entry leer(d: out Dato); entry escribir(d: in Dato); end buffer; task body buffer is N: constant := 100; --maxdatos X: array(1..n) of Dato; i,j: integer range 1..N := 1; ndatos: integer range 0..N := 0; loop end loop; end buffer; select accept escribir(d: in Dato) do X(i):=D; end escribir; i:=i mod N+1; ndatos:=ndatos+1; or accept leer(d: out Dato) do D:=X(j); end leer; j:=j mod N+1; ndatos:=ndatos-1; end select; Un problema!! J. Ezpeleta 11
12 La instrucción Select task buffer is entry leer(d: out Dato); entry escribir(d: in Dato); end buffer ; task body buffer is N: constant := 100; --maxdatos X: array(1..n) of Dato; i,j: integer range 1..N := 1; ndatos: integer range 0..N := 0; loop end loop; end buffer; select when ndatos<n => accept escribir(d: in Dato) do X(i):=D; end escribir; i:=i mod N+1; ndatos:=ndatos+1; or when ndatos>0 => accept leer(d: out Dato) do D:=X(j); end leer; j:=j mod N+1; ndatos:=ndatos-1; end select; J. Ezpeleta 12
13 Tipo Duration y acción Delay Ada tiene predefinido el tipo Duration un tipo numérico de coma fija un dato de este tipo representa intervalos de tiempo medidos en segundos. El rango de valores representables depende de la implementación al menos, debe posibilitar representar valores positivos y negativos de un día: [ ] Precisión: Duration'small no debe superar los 20 ms, aunque se recomienda que no sobrepase los 50 µs. Ada ofrece la posibilidad de programar esperas mediante la acción delay <tiempodeespera> <tiempodeespera> de tipo Duration, medido en segundos Por qué al menos? Ejemplo: delay 2.0 provoca la suspensión de la tarea durante, al menos, 2.0 segundos. J. Ezpeleta 13
14 Paquete Calendar y tipo Time El tipo Time es un TAD, especificado en el módulo predefinido Calendar, que representa valores absolutos del tiempo. package calendar is -- especificación type TIME is private; subtype year_number is integer range ; subtype month_number is integer range ; subtype day_number is integer range ; subtype day_duration is duration range ; function clock return time; -- devuelve el valor del tiempo actual J. Ezpeleta 14
15 Paquete Calendar y tipo Time function year(date: time) return year_number; -- devuelve el año de date function month(date: time) return month_number; -- devuelve el mes de date function day(date: time) return day_number; -- devuelve el dia de date function seconds(date: time) return day_duration; -- devuelve el número de segundos -- transcurridos en el día de date procedure split(date: in time;year: out year_number; month: out month_number; day: out day_number; second: out day_duration); -- descompone date function time_of(year: in year_number; month: in month_number; day: in day_number; second: in day_duration) return time; -- compone un tiempo y devuelve su valor J. Ezpeleta 15
16 Paquete Calendar y tipo Time function "+"(left:time; right: duration) return time; function "+"(left:duration; right: time) return time; function "-"(left:time; right: duration) return time; function "-"(left:duration; right: time) return duration; function "<"(left:time; right: time) return boolean; function "<= (left:time; right: time) return boolean; function ">"(left:time; right: time) return boolean; function ">="(left:time; right: time) return boolean; Time_error: exception; J. Ezpeleta 16
17 Paquete Calendar y tipo Time with calendar; use calendar; task rutina; task body rutina is periodo: constant duration := 10.0; loop delay periodo; -- acción a iterar end loop; end rutina; with calendar; use calendar; task rutina; task body rutina is periodo: constant duration := 10.0; siguiente: time; siguiente := clock+periodo; loop delay siguiente-clock; -- acción a iterar siguiente := siguiente+periodo; end loop; end rutina; J. Ezpeleta 17
18 Uso de Select y citas select accept cita1() do -- acción a ejecutar -- durante la cita1 end cita1; or accept cita2() do -- acción a ejecutar -- durante la cita2 end cita1; or delay 5.0; -- timeout end select; Si en 5.0 sgs. no recibo petición select accept cita1() do -- acción a ejecutar -- durante la cita1 end cita1; or accept cita2() do -- acción a ejecutar -- durante la cita2 end cita1; else or -- acción a ejecutar -- alternativamente end select; delay 0.0; Si no tengo petición J. Ezpeleta 18
19 Uso de Select y citas operador.llamar("apagar fuego"); select accept confirmacion; or delay 100.0; bomberos.dar_aviso; end select; operador.llamar("apagar fuego"); select accept confirmacion; else delay 100.0; bomberos.dar_aviso; end select; select operador.llamar("apagar fuego"); or select delay 100.0; operador.llamar("apagar fuego"); bomberos.dar_aviso; else end select; delay 100.0; bomberos.dar_aviso; end select; Si en sgs. no me atienden Si no me atienden ya.. J. Ezpeleta 19
20 Uso de Select y citas select accept cita1() do -- acción a ejecutar -- durante la cita1 end cita1; or accept cita2() do -- acción a ejecutar -- durante la cita2 end cita1; or or terminate; end select; La alternativa terminate, termina la ejecución de la tarea, y se ejecuta cuando: la unidad de la que depende la tarea ha alcanzado su final y las restantes tareas dependientes o han acabado o también están en disposición de ejecutar una alternativa terminate. J. Ezpeleta 20
21 Manejo de excepciones Una excepción es una situación anómala en la ejecución de un programa División por cero, acceso a un elemento de un vector cuyo índice esté fuera de rango, desbordamiento en un cálculo, error en la gestión dinámica de la memoria, problemas al crear o acceder a una tarea, etc. Exception es un tipo predefinido en Ada errordeparidad: exception; alarma: exception; exc1, exc2: exception; J. Ezpeleta 21
22 Manejo de excepciones Ada tiene ya prededefinidas algunas excepciones de aparición frecuente: Constraint_Error: problemas en rangos, índices, Numeric_Error: división por cero, desbordamiento, Program_Error: acceso indebido a procedimientos, módulos, etc., uso indebido de estructuras de selección, Storage_Error: problemas en la gestión de la memoria (datos dinámicos, procedimientos, etc.) Tasking_Error: problemas en la sincronización, comunicación y ejecución de tareas J. Ezpeleta 22
23 Manejo de excepciones Las excepciones se manejan en la parte final del bloque, cuerpo de subprograma, cuerpo de paquete, tarea, instrucción accept tienen acceso a todos los objetos declarados en dicha unidad --sec. de instrucciones exception when Constraint_Error Program_Error => --lo que haya que hacer específico para estos casos when Storage_Error => --lo que haya que hacer específico para este caso when others => --lo que haya que hacer para el resto de casos --no es obligatorio completar las excepciones a tratar J. Ezpeleta 23
24 Manejo de excepciones Una excepción se crea explícitamente mediante raise: errordeparidad: exception; if sumadebits /= paridadesperada then raise errordeparidad; end if; exception when errordeparidad => Put_Line( Me estás engañando ); Cuando ocurre una excepción, la ejecución normal del programa se abandona, pasando al manipulador de la excepción La excepciones se propagan hacia arriba, siguiendo la cadena dinámica de invocación si en un nivel determinado no se encuentra un manipulador para una excepción, se propaga hacia arriba Conviene usarlas sólo en condiciones excepcionales J. Ezpeleta 24
25 Manejo de excepciones with ada.exceptions; use ada.exceptions; En p1 main detecta incontrolada procedure pruebaexcepciones is procedure p1 is miex1: exception; put_line("en p1"); raise miex1; end p1; procedure p2 is miex2: exception; put_line("en p2"); raise miex2; end p2; p1; p2; exception when others => put_line("main detecta incontrolada ; J. Ezpeleta 25
26 Manejo de excepciones with ada.exceptions; use ada.exceptions; procedure pruebaexcepciones is procedure p1 is miex1: exception; put_line("en p1"); raise miex1; exception when miex1 => put_line("p1 caza miex1"); end p1; procedure p2 is En p1 miex2: exception; P1 caza miex1 En p2 put_line("en p2"); main detecta incontrolada raise miex2; end p2; p1; p2; exception when others => put_line("main detecta incontrolada"); J. Ezpeleta 26
27 Manejo de excepciones En p1 main detecta PRUEBAEXCEPCIONES.P1.MIEX1 with ada.exceptions;use ada.exceptions; procedure pruebaexcepciones is procedure p1 is miex1: exception; put_line("en p1"); raise miex1; end p1; p1; exception when Event: others => put("main detecta "); put_line(exception_name(event)); J. Ezpeleta 27
28 Más sincronización en ADA: tipos protegidos Métodos de sincronización en ADA: variables compartidas citas objetos protegidos Objeto protegido encapsula datos restringe el acceso a los procs/funcs protegidos y a las entry protegidas ADA asegura que la ejecución de los procs/funcs y entry se lleva a cabo en exclusión mutua implica acceso en mutex a lectura/escritura sobre las variables funciones: no pueden modificar las variables varios accesos concurrentes a funciones (respetando lo anterior) J. Ezpeleta 28
29 Más sincronización en ADA: tipos protegidos Ejemplo: un entero con acceso en exclusión mutua protected type shared_integer(initial_value: integer) is function read return integer; procedure write(new_value: integer); procedure increment(by: integer); private the_data: integer := initial_value; end shared_integer; es un tipo limited (no = := ) interfaz: procs, funcs, entries discriminante: discreto/puntero Orden de servicio? el ARM no lo especifica Todos los datos en la parte privada (no en el body) protected body shared_integer is function read return integer is return the_data; procedure write(new_value: integer) is the_data:= new_value; procedure increment(by: integer)is the_data:= the_data + by; end shared_integer; J. Ezpeleta 29
30 Más sincronización en ADA: tipos protegidos Sobre las entries protegidas: también se ejecutan en mutex puede leer/escribir sobre las variables privadas siempre está guardada (barrera) si barrera no activa, la tarea que llama se queda en suspenso hasta que se haga cierta y no haya otra tarea activa en el cuerpo implementación natural para la sincronización por condición una estrategia FIFO (salvo cambio forzado, claro) Un ejemplo: un buffer limitado compartido por varias tareas J. Ezpeleta 30
31 Más sincronización en ADA: tipos protegidos buffer_size: constant integer := 10; type index is mod buffer_size; subtype count is natural range 0..buffer_size; type buffer is array(index) of data_item; protected type bounded_buffer is entry get(item: out data_item); entry put(item: in data_item); private first: index := index first; last: index := index last; number_in_buffer: count := 0; buf: buffer; end bounded_buffer; my_buffer: bounded_buffer.. my_buffer.put(my_item).. protected body bounded_buffer is entry get(item: out data_item) when number_in_buffer /= 0 is item := buf(first); first := first + 1; number_in_buffer := number_in_buffer - 1; entry put(item: in data_item) when number_in_buffer < buffer_size is last := last + 1; buf(last) := item; number_in_buffer := number_in_buffer + 1; end bounded_buffer; J. Ezpeleta 31
32 Más sincronización en ADA: tipos protegidos Las barreras de las entradas protegidas se (re) evalúan cuando: una tarea invoca una entrada protegida cuya barrera usa una variable que ha podido cambiar desde que se evaluó por última vez una tarea termina de ejecutar un procedimiento o entrada protegida y quedan tareas en la cola de alguna entrada cuya barrera usa alguna variable modificada desde la última vez que se evaluó Qué pasa en el caso de las funciones? J. Ezpeleta 32
33 Más sobre uso de objetos protegidos Qué pasa cuando una tarea invoca un procedimiento/entrada protegida de un obj. protegido que está siendo usado por otra tarea? reglas definidas por el ARM (ver [Burns-Wellings]) Si alguien está ejecutando una función, el objeto protegido tiene un cerrojo de lectura (read lock) activo Si alguien está ejecutando un proc. o entrada protegida, el objeto protegido tiene un cerrojo de lectura-escritura (read-write lock) activo Lo que sigue, en orden, es una película de lo que ocurre cuando una tarea trata de invocar algo de un objeto protegido: J. Ezpeleta 33
34 Más sobre uso de objetos protegidos 1) si el objeto tiene un cerrojo de lectura activo, y se invoca una función, la función se ejecuta, y nos vamos al punto 14 2) si el objeto tiene un cerrojo de lectura activo y se invoca un proc. o entrada protegida, la ejecución de la llamada se retrasa hasta que no haya ninguna tarea usando el objeto 3) si el objeto tiene un cerrojo de lectura-escritura activo, la tarea se retrasa mientras hay tareas con requerimientos de acceso en conflicto con él 4) si el objeto no tiene ningún cerrojo activo, y se invoca una función, se activa el cerrojo de lectura, y vamos a 5 5) la función se ejecuta, y vamos a 14 6) si el objeto no tiene ningún cerrojo activo y se invoca un proc. o entrada protegida, se activa el cerrojo de lectura-escritura, y vamos a 7 7) si la llamada es un proc., se ejecuta, y vamos a 10 8) si la llamada es una entrada, la barrera asociada se evalúa; si da cierto, el cuerpo se ejecuta, y vamos a 10 9) si la barrera da falso, la llamada va a la cola asociada a la entrada, y vamos a 10 J. Ezpeleta 34
35 Más sobre uso de objetos protegidos 10) todas las barreras con tareas en espera y que referencian variables que han podido cambiar desde la última vez que se evaluaron, son re-evaluadas, y vamos a 11 11) si hay varias barreras abiertas, se elige una, se ejecuta el cuerpo asociado, y vamos a 10 12) si no hay barreras abiertas con tareas en la cola, vamos a 13 13) si hay tareas esperando para acceder al objeto protegido, o bien una única que necesite el cerrojo de lectura-escritura accede al objeto, o bien todas que deseen ejecutar una función se activan, ejecutándose los pasos 5), 7) u 8), según sea el caso. Si no hay tareas esperando, el protocolo termina 14) si no hay ninguna tarea activa usando el objeto protegido vamos a 13. En caso contrario, el protocolo termina. J. Ezpeleta 35
36 Implementación de semáforos mediante objetos protegidos protected type semaforo (vi: natural) is entry wait; procedure s private val: natural := vi end semaforo; protected body semaforo is entry wait when val>0 is val := val-1; procedure send is val := val+1; end semaforo; s: semaforo(3); s.wait; s.s tarea u objeto protegido? tarea: elemento activo terminación dependiendo de estructura objeto: elemento pasivo desaparece al terminar el bloque en que se declara J. Ezpeleta 36
37 La buena educación en el uso de objetos protegidos Recomendación: el código a ejecutar en un proc/func/entry de un objeto protegido debe ser tan pequeño como se pueda durante su ejecución, otras tareas están esperando Se considera un bounded error ejecutar operaciones potencialmente bloqueantes : instrucción select instrucción accept llamada a un entry instrucción delay creación o activación de tareas Si se detecta un bounded error salta la excepción Program_Error llamar a un subprograma con instrucciones potencialmente bloqueantes J. Ezpeleta 37
38 La buena educación en el uso de objetos protegidos También es de mala educación llamar a un proc. externo que invoque a un proc. interno el cerrojo de lectura-escritura ya está activo, por lo que seguro que se bloquea Bounded errors: The language rules define certain kinds of errors that need not be detected either prior to or during run time, but if not detected, the range of possible effects shall be bounded. The errors of this category are called bounded errors. The possible effects of a given bounded error are specified for each such error, but in any case one possible effect of a bounded error is the raising of the exception Program_Error. ARM95 J. Ezpeleta 38
39 La buena educación en el uso de objetos protegidos procedure malaeducacion is protected type uno is procedure p; u: uno; protected body dos is entry e when n>3 is null; protected type dos is entry e; private n: integer := 1; d: dos; protected body uno is procedure p is d.e; u.p; $> gnatmake malaeducacion gcc -c malaeducacion.adb malaeducacion.adb:27:18: warning: potentially blocking operation in protected operation ganatbind -x malaeducacion.ali gnatlink malaeducacion.ali J. Ezpeleta 39
Lección 9: Programación concurrente con semáforos
Lección 9: Programación concurrente con semáforos Semáforos: sintaxis y semántica Técnicas de programación con semáforos: el ejemplo de la sección crítica un ejemplo de barreras el caso de productores/consumidores
Parte I: Programación en Ada
Parte I: Programación en Ada 1. Introducción a los computadores y su programación 2. Elementos básicos del lenguaje 3. Modularidad y programación orientada a objetos 4. Estructuras de datos dinámicas 5.
TEMA 5. PROGRAMACIÓN CONCURRENTE.
TEMA 5. PROGRAMACIÓN CONCURRENTE. 5.1. Ejecución concurrente. 5.2. Representación de procesos. 5.3. Tareas en Ada. 5.4. Ejemplo. 5.5. Comunicación y sincronización con variables comunes. 5.6. Comunicación
Gestión del tiempo en Ada
dit UPM Gestión del tiempo en Ada Juan Antonio de la Puente DIT/UPM El tiempo en Ada La gestión del tiempo en Ada está integrada en el lenguaje y en el modelo de tareas relojes relojes de tiempo de ejecución
Introducción al Lenguaje de Programación Ada
Instrumentación de Tiempo Real Introducción al Lenguaje de Programación Ada Mario Aldea Rivas Departamento de Electrónica y Computadores Universidad de Cantabria GRUPO DE COMPUTADORES Y TIEMPO REAL Mario
Seminario de Programación en Ada
Seminario de Programación en Ada Bloque II Programación de tiempo real GRUPO DE COMPUTADORES Y TIEMPO REAL Michael González, J. Javier Gutiérrez, Héctor Pérez 19 Programación de Tiempo Real El Ada soporta
UPM Concurrencia en Ada
UPM Concurrencia en Ada Juan Antonio de la Puente DIT/UPM Objetivos Veremos el modelo de concurrencia de Ada tareas comunicación y sincronización con objetos protegidos otras formas de comunicación (citas)
Lección 6: Ejemplos de programación con semáforos
Lección 6: 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
Planificación de tareas en Ada
dit UPM Planificación de tareas en Ada Juan Antonio de la Puente DIT/UPM Características generales Modelo básico planificación con prioridades dinámicas» también EDF políticas de despacho para tareas con
TEMA 4. EXCEPCIONES Y MANEJO DE EXCEPCIONES.
TEMA 4. EXCEPCIONES Y MANEJO DE EXCEPCIONES. 4.1. Introducción. 4.2. Tratamiento de excepciones. 4.2.1. Excepciones en lenguajes tradicionales. 4.2.2. Tratamiento de excepciones moderno. 4.3. Tratamiento
Excepciones. dit. Juan Antonio de la Puente DIT/UPM UPM
dit UPM Excepciones Juan Antonio de la Puente DIT/UPM Transparencias basadas en el capítulo 6 del libro de A. Burns y A. Wellings Real Time Systems and Programming Languuages, 3ª edición (2001) Objetivos
Fiabilidad y Tolerancia a Fallos
Fiabilidad y Tolerancia a Fallos Los sistemas empotrados es usual que presenten requerimientos de fiabilidad y seguridad Cada vez mas se utilizan sistemas de control de tiempo real en sistemas críticos
Tema 4.- Pilas y Colas
Apuntes elaborados por: Eduardo Quevedo, Raquel López y Aaron Asencio Revisado por: Javier Miranda el???? Tema 4.- Pilas y Colas Las pilas y colas son estructuras de datos que se utilizan generalmente
Introducción a PL/SQL
Introducción a PL/SQL Grupo de Ingeniería del Software y Bases de Datos Departamento de Lenguajes y Sistemas Informáticos Universidad de Sevilla noviembre 2011 Objetivos de este tema Conocer PL/SQL. PL/SQL
Lección 7: Sincronización de procesos El problema de la sección crítica
Lección 7: Sincronización de procesos El problema de la sección crítica Metodología de resolución de problemas de sincronización El problema de la sección crítica Especificaciones de diseño Esquema algorítmico
Fundamentos de Programación
Fundamentos de Programación COMENTARIOS Microsoft Visual Basic interpreta que todo lo que está a la derecha del carácter ( ) en una línea cualquiera de programa es un comentario y no ejecuta acción alguna.
PROBLEMAS CLÁSICOS. EL PROBLEMA DE LOS FILÓSOFOS COMENSALES.
PROBLEMAS CLÁSICOS. EL PROBLEMA DE LOS FILÓSOFOS COMENSALES. Cinco filósofos pasan su vida pensando y comiendo. Los filósofos comparten una mesa circular rodeada por cinco sillas, una para cada uno de
Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1
Semáforos Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons
GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS
GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS A.- ASPECTOS FUNDAMENTALES DEL CÓDIGO ORIENTADO A OBJETOS MÓDULOS DE CÓDIGO: El código en Visual Basic se almacena en módulos. Hay tres tipos de módulos: de formulario,
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
Introducción a PL/SQL
22/11/2016 Grupo de Ingeniería del Software y Bases de Datos Departamento de Lenguajes y Sistemas Informáticos Universidad de Sevilla Noviembre 2014 Objetivos de este tema Conocer el lenguaje procedimental
Comunicación mediante mensajes
dit UPM Comunicación mediante mensajes Juan Antonio de la Puente DIT/UPM Objetivos Comprender los problemas relacionados con la comunicación entre procesos basada en el interambio de mensajes Estudiar
Manual de turbo pascal
Universidad Nacional Experimental De Los Llanos Occidentales Ezequiel Zamora UNELLEZ-Barinas Manual de turbo pascal Bachilleres: Martinez Ninibeth C.I:20.867.002 Mora Yaco C.I:17.205.073 Estructura de
Semáforos. Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1. Exclusión mutua con semáforos
Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons License
Apunte Laboratorio ALPI - El lenguaje de programación Pascal
Apunte Laboratorio ALPI - El lenguaje de programación Pascal 1 2 ÍNDICE GENERAL Índice 1. Estructura de un Programa en Pascal 3 2. Sintaxis de Pascal 4 2.1. Uso de mayúsculas.....................................
Guías técnicas Grupo Danysoft: Creación de Componentes en Delphi (parte II)
Guías técnicas Grupo Danysoft: Creación de Componentes en Delphi (parte II) Por Pablo Reyes Grupo Danysoft mayo de 2001 - (902) 123146 www.danysoft.com Segunda parte Este artículo es el segundo de una
Los Tipos Abstractos de Datos. Estructuras de Datos y Algoritmos 03/04
Los Tipos Abstractos de Datos Estructuras de Datos y Algoritmos 03/04 Qué son los TAD s? Metodología de programación con TAD s Especificación Algebraica de TAD s Qué son los TAD s? Con los lenguajes de
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
Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos
Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende
Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1. Exclusión mutua con semáforos
Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons License
Estructuras de control selectivas
Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2 Concepto de sentencia y estructura de control El cuerpo de los métodos
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
Programación concurrente
Programación concurrente Master de Computación I Conceptos y recursos para la programación concurrente: I.6 Sincronización basada en memoria compartida. J.M. Drake M. Aldea Procesos concurrentes y memoria
Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta
Centro Asociado Palma de Mallorca Introducción Práctica de Programación Java Antonio Rivero Cuesta Sesión III La Sintaxis de Java II... 6 Estructuras de Control... 7 Estructuras de Selección... 8 Sentencia
Primitivas de Sincronización (continuación) MONITORES: Primitiva de alto nivel, es a nivel de lenguajes como: ADA, PASCAL, JAVA.
Primitivas de Sincronización (continuación) MONITORES: Primitiva de alto nivel, es a nivel de lenguajes como: ADA, PASCAL, JAVA. Carácterísticas: Construcción de alto nivel. Estructura de datos estática:
Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta
Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...
PRÁCTICA: LENGUAJE VHDL
PRÁCTICA: LENGUAJE Introducción Los lenguajes permiten manejar mejor grandes tamaños Los lenguajes son más flexibles que las tablas Los lenguajes son légibles por las máquinas más fácilmente que los gráficos
Tema 3: Listas Enlazadas
Apuntes elaborados por: Eduardo Quevedo/ Raquel López García Revisado por: Javier Miranda el???? Tema 3: Listas Enlazadas En este tema se va a trabajar con memoria de tipo dinámico, organizada por nodos
Lección 7: Sincronización de procesos mediante monitores
Lección 7: Sincronización de procesos mediante monitores Introducción Qué es un monitor? Características y funcionamiento de un monitor Implementación de un monitor en C++ y Java Algunos ejemplos de aplicación:
Estructura de datos y Programación
Estructura de datos y Programación Tema: Conceptos Básicos- Estructuras de control - Arreglos Ing. Analia Méndez Ing. Raquel Zarco Año: 2012 ELEMENTOS DE UN PROGRAMA EN JAVA El programa Java consta de
SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC
SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC INTRODUCCIÓN Los subprogramas son otro tipo de bloques PL/SQL Se diferencian de los bloques anónimos porque
Concurrencia Monitores. Guillermo Román Díez
Concurrencia Monitores Guillermo Román Díez [email protected] Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Monitores 1/25 Recursos Compartidos Pregunta La especificación de
GLOSARIO DE MICROSOFT VISUAL BASIC (HAZ CLIC EN LA OPCION DEL MENU Y ACCEDERAS RAPIDAMENTE)
GLOSARIO DE MICROSOFT VISUAL BASIC (HAZ CLIC EN LA OPCION DEL MENU Y ACCEDERAS RAPIDAMENTE) Menú 1. Operadores Matemáticos 2. Operadores relacionales 3. Funciones de Visual Basic 4. Tipos de variables
//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui
PL/SQL - Oracle PL/SQL (Procedural Language/SQL) es una extensión de SQL, que agrega ciertas construcciones propias de lenguajes procedimentales, obteniendose como resultado un lenguaje estructural mas
FUNDAMENTOS DE INFORMÁTICA
FUNDAMENTOS DE INFORMÁTICA Tema 1 Introducción a la Programación en Visual Basic Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo undamentos de Informática. Departamento de Ingeniería
Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN
Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN - Introducción - Sintaxis - Semántica básica - Tipos de datos - Expresiones y enunciados - Procedimientos y ambientes - Tipos abstractos de datos y módulos
Los procedimientos almacenados son nuevas funcionalidades de la versión de MySQL 5.0. Un procedimiento
PROCEDIMIENTOS ALMACENADOS Los procedimientos almacenados son nuevas funcionalidades de la versión de MySQL 5.0. Un procedimiento almacenado es un conjunto de comandos SQL que pueden almacenarse en el
JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.
Javascript (II) 1 Elementos Básicos: Comentarios: Para una línea // Esto es un Comentario Para un bloque /*......... */ Literales: Valores que puede tomar una variable o una constante. Ejemplos: "Soy una
Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)
Tags Fundamentos PHP La Sintaxis de PHP se deriva de muchos lenguajes de programación principalmente de C pero Perl también ha tenido mucha influencia en esta sintaxis Con las últimas incorporaciones agregadas,
abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples
Desarrollo de aplicaciones en Java Generación de código fuente Compilación Ejecución Elementos de aplicaciones simples EII147-01-02 Introducción a las tecnologías de información Escuela de Ingeniería Industrial
Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:
Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades: La prueba es individual y sin material. La duración es 3 horas.
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA PRACTICA 8 MONITORES BASADOS EN SEMÁFOROS
Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero
Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 1: Recursividad Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Ejemplos recursivos Recursividad
PL/SQL. DECLARE /* Parte Declarativa */ BEGIN /* Parte de Ejecución */ EXCEPTION /* Parte de Excepciones */ END;
18 de marzo de 2002 1 1. Declaraciones Variables y constantes Cursores Excepciones 2. Instrucciones Asignación Control de flujo Bucles 3. Manejadores de excepciones 4. Anidamiento de bloques 5. Tipos de
FUNDAMENTOS DE INFORMÁTICA
FUNDAMENTOS DE INFORMÁTICA Tema 2 Expresiones, operadores y estructuras de control Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo Fundamentos de Informática. Departamento de Ingeniería
ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid. Indíce Algoritmo Elementos de un algoritmo: Variables, Constantes, Expresiones Datos: Definición y
Concurrencia, exclusión mutua y sincronización. Capítulo 5 HungriaBerbesi
Concurrencia, exclusión mutua y sincronización Capítulo 5 HungriaBerbesi 1 Concurrencia Múltiples aplicaciones Aplicaciones estructuradas Estructura del sistema operativo 2 Concurrencia 3 Sección Crítica:
Procedimientos Almacenados. Miguel Angel Garduño Cordova Isaac Méndez Hernández
Reporte Procedimientos Almacenados Catedrático: Alumnos: Ing. María Elena Reyes Castellanos Miguel Angel Garduño Cordova Isaac Méndez Hernández Índice General Índice de tablas 2 Introducción 4 Objetivo
FUNDAMENTOS DE OBJECT PASCAL
FUNDAMENTOS DE OBJECT PASCAL 1. ASPECTOS GENERALES DE LA SINTAXIS Los bloques de código quedan delimitados por y end. Se usa punto y coma como separador de sentencias de código. Comentarios: - ias líneas:
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
PROGRAMACIÓN CON VBA: MACROS EXCEL Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE
PROGRAMACIÓN CON VBA: MACROS EXCEL 2010 Manual de Referencia para usuarios Salomón Ccance CCANCE WEBSITE PROGRAMACIÓN CON VBA: MACROS Para comenzar a programar en VBA tenemos que entrar al editor de Visual
Tema 3 - Modelado con HDL a nivel RTL
- Modelado con HDL a nivel RTL Eduardo Rodríguez Martínez Departamento de Electrónica División de Ciencias Básicas e Ingeniería Universidad Autónoma Metropolitana Unidad Azcapotzalco Email: [email protected]
Motivación. 4: Control de flujo Condicionales. Motivación. Condicionales
4: Control de flujo Condicionales Motivación Secuencia de acciones Programas lineales Limitación en el tipo de programas que se pueden desarrollar Cómo se puede construir un programa que calcule el valor
Hoja de ejercicios del Tema 9
Facultad de Informática Universidad Complutense Fundamentos de la programación Curso 2013 2014 Hoja de ejercicios del Tema 9 1. Sin ejecutarlo, qué mostraría el siguiente código? int x = 5, y = 12, z;
Ingeniería del software I 9 - Diseño detallado
Diseño detallado Ingeniería del software I 9 - Diseño detallado El diseño de alto nivel no especifica la lógica. Esto es incumbencia del diseño detallado. En este sentido, una notación textual provee mejor
Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez
Algoritmos y Estructuras de Datos Iteradores Guillermo Román Díez [email protected] Universidad Politécnica de Madrid Curso 2015-2016 Guillermo Román, UPM AED: Introducción 1/26 Iteradores Es muy común
PHP: Lenguaje de programación
Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054
Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.
EQUIVALENCIAS BÁSICAS ENTRE PASCAL Y C A continuación se presentan algunas equivalencias básicas entre estos lenguajes de programación : Operadores en lenguaje C: Operador Descripción % Módulo = Asignación
Parte 4: Estructuras de Control
Parte 4: Estructuras de Control Las estructuras de control le permiten controlar el flujo de ejecución del programa. Tenemos dos tipos de estructuras de control: Estructuras de decisión Estructuras de
Capítulo 3. Subprogramas. 3.1 Subprogramas FUNCTION
Capítulo 3 Subprogramas Con lo explicado hasta aquí se pueden escribir programas sencillos y no demasiado largos. Pero varias razones justifican la necesidad de disponer de otro tipo de recursos. Por una
III. Generación de Código orientado a objetos
III. Generación de Código orientado a objetos UNIDAD III Aspectos fundamentales Del código orientado a objetos. MÓDULOS DE CÓDIGO 1 DE FORMULARIO Almacenan el código en VB 2 ESTÁNDAR 3 DE CLASE Contiene
RESUMEN GAMBAS. TIPOS DE DATOS Y DECLARAR VARIABLE: DIM nombre_variable AS
RESUMEN GAMBAS http://gambaswiki.org/wiki/doc TIPOS DE DATOS Y DECLARAR VARIABLE: DIM nombre_variable AS tipo_variable Boolean: Solo acepta valores True o False. Byte: Representa un numero entero positivo
Unidad 1: Gestión de Procesos
Unidad 1: Gestión de Procesos Tema 1, Concurrencia: Exclusión mutua y sincronización. 1.1 Problema de la sección crítica, alternativas al uso de semáforos: - Regiones críticas, Monitores, Variables de
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
Parte I: Programación en un lenguaje orientado a objetos
Parte I: Programación en un lenguaje orientado a objetos 1. Introducción a los lenguajes de programación 2. Datos y expresiones 3. Estructuras algorítmicas 4. Datos compuestos 5. Modularidad 6. Tratamiento
Funciones y paquetes PL/SQL. Jonathan Medina Gómez Facultad de ingeniería Universidad de Antioquia
Funciones y paquetes PL/SQL Jonathan Medina Gómez Facultad de ingeniería Universidad de Antioquia Funciones Una función es un subprograma que retorna un valor simple. Las funciones se pueden invocar dentro
ESTRUCTURAS DE CONTROL
ESTRUCTURAS DE CONTROL En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa. Con las estructuras de control se puede: De
Programación Orientada a Objetos en C++
Unidad I Programación Orientada a Objetos en C++ Programación Orientada a Objetos en C++ Programación I - 0416202 Contenido Esta lección abarca los siguientes temas: Estructura y declaración de una clase
Métodos. CI-1101, Programación I Prof. Braulio Solano Rojas
Métodos CI-1101, Programación I Prof. Braulio Solano Rojas Para qué? Será nuestra mejor herramienta para dividir el problema en subproblemas. Nos permitirán evitar repetirnos (redundancia de código). Mejorarán
Estructuras de Control
Algorítmica y Lenguajes de Programación Estructuras de Control Estructuras de Control. Introducción Hasta ahora algoritmos han consistido en simples secuencias de instrucciones Existen tareas más complejas
Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN
Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN ÍNDICE Definición Conceptos básicos Ejemplos recursivos Recursión mútua Recursión e iteración DEFINICIÓN Técnica
Lección 3 Sentencias de control
3.1. INTRODUCCIÓN - Hasta aquí: ejecución secuencial de los programas. - Aquí vamos a ver: Lección 3 Sentencias de control Sentencias de control Sentencias condicionales: if- y switch-case Sirven para
SINTAXIS BÁSICA DEL VHDL SIMPLIFICADO
SINTAXIS BÁSICA DEL VHDL SIMPLIFICADO ENTIDAD: ARQUITECTURA: ENTITY IS PORT : : END ; = IN / OUT / IN OUT ARCHITECTURE
dit Programación concurrente Sincronización condicional UPM
20151028 dit UPM Programación concurrente Sincronización condicional Juan Antonio de la Puente Algunos derechos reservados. Este documento se distribuye bajo licencia Crea9ve Commons
Instrumentación de Tiempo Real
Instrumentación de Tiempo Real Tema 1. Introducción Tema 2. Recursos de acceso al hardware Tema 3. Interrupciones Tema 4. Puertas básicas de entrada/salida (I) Tema 5. Recursos de temporización de bajo
ELEMENTOS BÁSICOS PARA LA PROGRAMACIÓN DE FUNCIONES TIPOS DE DATOS. Constantes
ELEMENTOS BÁSICOS PARA LA PROGRAMACIÓN DE FUNCIONES TIPOS DE DATOS Constantes Una constante se usa para guardar o identificar a un dato que mantiene un valor constante a través de la ejecución de un programa.
