Recuperacion Segundo Examen

7
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACION PROGRAMACION CONCURRENTE Y PARALELA RECUPERACION SEGUNDO EXAMEN Nombre del Estudiante: Luis Alfredo Martinez Reyes Matricula :201100745 Sección:_____________ 1. Contesta las siguientes preguntas a) Explica la diferencia del funcionamiento y estructura entre un monitor y semáforo. Los monitores son una construcción concurrente, diseñada para resolver el problema de la exclusión mutua, contiene los datos y procedimientos necesarios para la asignación de un recurso compartido y son llamados por los procesos, por otra parte un semáforo es un tipo de variable que obtiene una señal que detiene un proceso hasta que reciba otra señal específica. b) ¿Qué es un socket y explica los tipos de sockets que se pueden utilizar en Java? Sockets Stream (TCP, Transport Control Protocol) Son un servicio orientado a conexión donde los datos se transfieren sin encuadrarlos en registros o bloques. Si se rompe la conexión entre los procesos, éstos serán informados. Sockets Datagrama (UDP, User Datagram Protocol) Son un servicio de transporte sin conexión. Son más eficientes que TCP, pero no está garantizada la fiabilidad. Los datos se envían y reciben en paquetes, cuya entrega no está garantizada. Los paquetes pueden ser duplicados, perdidos o llegar en un orden diferente al que se envió. Sockets Raw Son sockets que dan acceso directo a la capa de software de red subyacente o a protocolos de más bajo nivel. Se utilizan sobre todo para la depuración del código de los protocolos.

Transcript of Recuperacion Segundo Examen

  • BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACION PROGRAMACION CONCURRENTE Y PARALELA

    RECUPERACION SEGUNDO EXAMEN

    Nombre del Estudiante: Luis Alfredo Martinez Reyes Matricula :201100745

    Seccin:_____________

    1. Contesta las siguientes preguntas a) Explica la diferencia del funcionamiento y estructura entre un monitor y

    semforo. Los monitores son una construccin concurrente, diseada para resolver el problema de la exclusin mutua, contiene los datos y procedimientos necesarios para la asignacin de un recurso compartido y son llamados por los procesos, por otra parte un semforo es un tipo de variable que obtiene una seal que detiene un proceso hasta que reciba otra seal especfica.

    b) Qu es un socket y explica los tipos de sockets que se pueden utilizar en Java?

    Sockets Stream (TCP, Transport Control Protocol) Son un servicio orientado a conexin donde los datos se transfieren sin encuadrarlos en registros o bloques. Si se rompe la conexin entre los procesos, stos sern informados. Sockets Datagrama (UDP, User Datagram Protocol) Son un servicio de transporte sin conexin. Son ms eficientes que TCP, pero no est garantizada la fiabilidad. Los datos se envan y reciben en paquetes, cuya entrega no est garantizada. Los paquetes pueden ser duplicados, perdidos o llegar en un orden diferente al que se envi. Sockets Raw Son sockets que dan acceso directo a la capa de software de red subyacente o a protocolos de ms bajo nivel. Se utilizan sobre todo para la depuracin del cdigo de los protocolos.

  • 2. Resuelve el siguiente problema utilizando monitores en Java (4 puntos)

    Suponga que se tiene dos procesos que cooperan entre si un productor y consumidor donde el productor le enva una lista de nmeros aleatorios y el consumidor solo consumir los nmeros impares mostrndolos cada uno y su suma final.

    public class Monitor_Examen { public int numero; private boolean disponible = false; public synchronized int get() { while (disponible == false) { try { wait(); } catch (InterruptedException e) { } } disponible = false; notify(); return numero; } public synchronized void put(int valor) { while (disponible == true) { try { wait(); } catch (InterruptedException e) { } } numero = valor; disponible = true; notify(); } } class Productor extends Thread { private Monitor_Examen monitor1; private int num; public Productor(Monitor_Examen m, int num1){ monitor1 = m;

  • this.num = num1; } public void run() { for (int i = 0; i < 10; i++) { int x; x=((int)(Math.random() * 100)); System.out.println("Numero generado"+x); monitor1.put(x); System.out.println("Productor #"+this.num+" pone: "+x); try { sleep((int)(Math.random() * 100)); } catch (InterruptedException e) { } } } } class Consumidor extends Thread { private Monitor_Examen monitor1 ; private int num,suma=0; public Consumidor(Monitor_Examen m, int num1){ monitor1 = m; this.num = num1; } public void run() { int valor = 0; for (int i = 0; i < 10; i++){ valor = monitor1.get(); if((valor%2)!=0){ System.out.println("Consumidor #"+this.num+" obtinene:"+valor); suma=suma+valor; } else System.out.println("Numero par:"+valor); } System.out.println("Suma:"+suma); } } class Examen

  • { public static void main(String args[ ] ) { int numero=1; Monitor_Examen m = new Monitor_Examen( ); Productor P1= new Productor (m, numero); Thread H1= new Thread(P1); H1.start(); Consumidor C1=new Consumidor(m,numero); Thread H2 = new Thread(C1); H2.start(); } }

  • 3. Resuelve el siguiente problema utilizando sockets en Java (4 puntos)

    Una empresa recibe sus pedidos de sus clientes, suponga que 10 clientes requieren enviar su pedido al vendedor (servidor) y a su vez les envi un mensaje de confirmacin de que ya recibi su solicitud y el total a pagar de acuerdo al nmero de productos solicitados y no pueda atender a ms de 4 clientes, lo cual deber indicar a los dems clientes que esperen su turno para ser atendidos.

    //Cliente

    import java.io.*; import java.net.*; class Cliente { static final String HOST = "192.168.1.7"; static final int Puerto=5000; public Cliente( ) { try{ Socket skCliente = new Socket( HOST , Puerto ); InputStream aux = skCliente.getInputStream(); OutputStream aux2 = skCliente.getOutputStream(); DataInputStream flujo = new DataInputStream( aux ); DataOutputStream flujo2= new DataOutputStream( aux2 ); flujo2.writeUTF( "Solicitando Pedido"); System.out.println( flujo.readUTF() ); skCliente.close(); } catch( Exception e ) { System.out.println( e.getMessage() ); } } public static void main( String[] arg ) { for(int i=0;i

  • import java.io.* ; import java.net.* ; class Servidor { static final int PUERTO=5000; int Ncli=0, Total=0; public Servidor( ) { try { ServerSocket skServidor = new ServerSocket( PUERTO ); System.out.println("Escucho el puerto " + PUERTO ); for ( Ncli = 0; Ncli < 10; Ncli++ ) { while(Ncli