FACULTAD DE CIENCIAS DE LA COMPUTACION PRIMER PARCIAL

Anuncio
FACULTAD DE CIENCIAS DE LA COMPUTACION
EXAMEN DE PROGRAMACION CONCURRENTE Y PARALELA
PRIMER PARCIAL
MATRICULA: 200319041
NOMBRE: ALBERTO LEON APARICIO
I.
Contesta las siguientes preguntas
1. tenemos un sistema basado en varios procesos indica cuales serian los posibles estados que
tendría un proceso y especifica que instrucción crea un proceso.
El proceso en un principio es creado bajo la instrucción new del metodo thread,
posteriormente entra en un estado de listo con la ayuda de la instrucción Start(), y espera a
que el Scheduler le de la oportunidad de ponerse en ejecución y si no acaba antes de que
termine su tiempo se pone en estado bloqueado bajo la instrucción sleep(); y una vez
terminado de ejecutarse por completo es terminado.
2. explica la diferencia entre un programa concurrente, paralelo y distribuido.
La programación concurrente es la ejecución de dos procesos o más, simultáneamente con
lapsos de tiempo entre cada uno de ellos que le da el procesador, la paralela es la ejecución de
estos procesos pero para cada proceso hay un procesador y la distribuida es similar a la
paralela pero sus memorias comunes están interconectadas y no comparten una memoria en
común.
3. cuales son los tipos de arquitectura de hardware que se puede ejecutar un programa concurrente.
Los programas concurrentes pueden ser ejecutados en arquitecturas tanto monoprocesadores
como los de tipo multiprocesadores.
4. cuales son las propiedades que debe cumplir un programa concurrente efectivo.
Debe cumplir además de sus especificaciones funcional las propiedades de seguridad que
asegura que nada malo va a pasar durante la ejecución del programa y viveza que asegura que
algo bueno pasara eventualmente durante su ejecución del programa
II.
Responde cual de las siguientes afirmaciones es concreta
a. Un hilo puede solo crearse en java utilizando la clase Thread.
Correcto
b. Los procesos tienen mas elementos que los hilos por eso pesan mas en el momento del
procesamiento.
Correcto
c. El cambio de contexto produce un cambio de estado.
Falso
d. Todos los hilos se ejecutan del modo supervisor o núcleo.
Correcto
e. Los programas concurrentes utilizan instrucciones que se intercalan para ejecutar su
código
Correcto
f. La aportación de la arquitectura de Von Neuman fue relevante para la programación
concurrente.
Correcto
g. Los programas concurrentes son totalmente deterministicos.
Falso
h. Java es el único lenguaje que permite el manejo de hilos.
Falso
III.
Aplica las condiciones de Beristein para las siguientes instrucciones y obtener:
a) conjunto de lectura y escritura
b) grafo
c) par cobegin/end
S1: p = r + t
S2: h = x – 1
S3: j = y + 1
S4: w = m + p
S5: z = j + x + h
S6: o = w + z
L(S1) ∩ E(S2) = ∅
E(S1) ∩ L(S5) = ∅
E(S1) ∩ E(S2) = ∅
L(S1) ∩ E(S3) = ∅
E(S1) ∩ L(S3) = ∅
E(S1) ∩ E(S3) = ∅
L(S1) ∩ E(S4) = {p} ≠ ∅
E(S1) ∩ L(S4) = ∅
E(S1) ∩ E(S4) = ∅
L(S1) ∩ E(S5) = ∅
E(S1) ∩ L(S5) = ∅
E(S1) ∩ E(S5) = ∅
L(S1) ∩ E(S6) = ∅
E(S1) ∩ L(S6) = ∅
E(S1) ∩ E(S6) = ∅
L(S2) ∩ E(S3) = ∅
E(S2) ∩ L(S3) = ∅
E(S2) ∩ E(S3) = {1} ≠ ∅
L(S2) ∩ E(S4) = ∅
E(S2) ∩ L(S4) = ∅
E(S2) ∩ E(S4) = ∅
L(S2) ∩ E(S5) = {h} ≠ ∅
E(S2) ∩ L(S5) = ∅
E(S2) ∩ E(S5) = {x} ≠ ∅
L(S2) ∩ E(S6) = ∅
E(S2) ∩ L(S6) = ∅
E(S3) ∩ E(S6) = ∅
L(S3) ∩ E(S4) = ∅
E(S3) ∩ L(S4) = ∅
E(S3) ∩ E(S4) = ∅
L(S3) ∩ E(S5) = {j} ≠ ∅
E(S3) ∩ L(S5) = ∅
E(S3) ∩ E(S5) = ∅
L(S3) ∩ E(S6) = ∅
E(S3) ∩ L(S6) = ∅
E(S3) ∩ E(S6) = ∅
L(S4) ∩ E(S5) = ∅
E(S4) ∩ L(S5) = ∅
E(S4) ∩ E(S5) = ∅
L(S4) ∩ E(S6) = {w} ≠ ∅
E(S4) ∩ L(S6) = ∅
E(S4) ∩ E(S6) = ∅
L(S5) ∩ E(S6) = {z} ≠ ∅
E(S5) ∩ L(S6) = ∅
E(S5) ∩ E(S6) = ∅
S1 S2 S3
S4
S5
S6
no si
si
S1 -
si
si
S2 -
-
no si
no si
S3 -
-
-
si
no si
S4 -
-
-
-
si
no
S5 -
-
-
-
-
no
S6 -
-
-
-
-
-
begin
cobegin
S1;
S2;
coend
S1
cobegin
S3;
S4;
coend
S5;
S6;
S2
S4
S3
S5
End
S1
IV.
Dado el siguiente código corregir e implementar con interfaz Runnable y decir que
imprime este programa
class A extend Trhead
{
public A (String nombre)
{ super (nombre); }
public void rum
{system.out println(“nombre=”+getName( ));}
Class B
{
public static void main (String[] args)
{
A a=new A (Mi hilo);
A b=new A( );
b.setName(“Otro Hilo”);
a.star ( );
b.star( );
}
class A extends Thread
{
public A (String nombre)
{ super (nombre); }
public void run()
{System.out.println("nombre = "+getName());}
}
class B
{
public static void main (String[] args)
{
A a = new A("Mi hilo");
A b = new A("");
b.setName("Otro Hilo");
a.start( );
b.start( );
}
}
El programa al ejecutarse muestra en la pantalla el mensaje Mi hilo que es de el proceso padre y
posteriormente Otro hilo que es de el proceso hijo, después terminan los dos procesos creados del
programa.
Descargar