ICOM 5007- SISTEMAS OPERATIVOS

 

Instructor: Héctor M Lugo Cordero

e-mail: hector.lugo@ece.uprm.edu

 

Laboratorio 2 – Creación de Procesos y Comunicación desde Java

I Objetivos


II Teoría

El curso de sistemas operativos se concentra mayormente en la creación de procesos, su monitoreo y uso. Un proceso no es nada más que un programa que corre en un área de memoria designada para el mismo, o sea todos y cada uno de los procesos tienen su propia área de memoria.

En la práctica pasada tuvieron la oportunidad de crear un script en bash. Al invocar el intérprete que corría el mismo se creaba un proceso. Para ver los procesos que están corriendo en el sistema utilizamos el comando ps o top. El comando ps muestra una lista de los procesos corriendo al momento de la invocación del mismo, mientras que el comando top despliega lo mismo a diferencia de que lo hace de manera dinámica o sea monitorea los procesos que siguen creándose y terminando aun después de su invocación (algo similar al task manager de Windows). Cualquiera de estos procesos pueden ser terminados forzadamente utilizando el comando kill -9 <pid>; donde pid es el process id del proceso a ser terminado.

Java provee una clase para obtener información de procesos. La clase Process permite comunicación entre los procesos y el JVM. Los métodos para dicha comunicación son getErrorStream, getInputStream y getOutputStream los cuales serán estudiados más adelante. Además esta clase provee dos métodos waitFor, el cual espera ordena al JVM que detenga el proceso padre hasta que el Proceso cuyo método waitFor fue invocado termine. El otro método es exitValue que retorna la salida del proceso para que se pueda analizar desde Java. Finalmente tenemos el método destroy que termina la ejecución del proceso.    

Bien digamos ahora que queremos poner a correr estos procesos.  Los mismos al igual que nuestra aplicación en Java corren usando un espacio reservado por el JVM. La instancia (Runtime) del JVM puede ser obtenida utilizando el metodo Runtime.getCurrentRuntime(). Dicho método retorna una referencia a la instancia del JVM. Esta instancia puede invocar nuevos procesos utilizando el método exec. Este método contiene varias sobrecargas:

Existen otras variaciones de estas llamadas, las cuales simplemente cambian la cantidad de parámetros pero su descripción es la misma. Todas estas llamadas retornan una referencia a un objeto tipo Process para ser monitoreado.


III Práctica

1)

2)

·         Crear un bash script que lea un número del teclado. Este número será usado como seed de un programa en Java llamado Randomizer.

·         El Randomizer.java usara el número recibido como parámetro para generar 1, 000, 000 de datos aleatorios y obtendrá el promedio de los mismos.

·         También deberá guardar en un archivo el valor del promedio, el seed utilizado y cuantos datos fueron generados.

·         Al finalizar el shell script desplegará un mensaje de “Randomizer.java Call Finished …”

·         Favor de correr el Randomizer.java de dos modos y vea la diferencia en comportamiento:

o       Invocación “serial”: java Randomizer

o       Invocación “paralela”: java Randomizer &