Anda di halaman 1dari 7

DEPARTAMENTO DE ELÉCTRICA Y

ELECTRÓNICA

INGENIERÍA ELECTRÓNICA E
INSTRUMENTACIÓN

TECNOLOGIA DE SOFTWARE
Nombres:

 Sofía Liseña Intriago Laverde


 Daniela Estefanía Paredes Troya
Docente: Rolando Marcelo Alvarez Veintimilla

Fecha: Latacunga, 23 de abril de 2018

Nrcs: 2192

ABRIL 2017-AGOSTO 2017


Informe de laboratorio

Tema

Sistemas operativos multiprocesos

Objetivo de Aprendizaje:
 Evidenciar el funcionamiento de los Sistemas Operativos Multiproceso
(Asimétrico y Simétrico).
Introducción
En esta práctica de laboratorio se implementaron los conocimientos básicos de la
programación orientada a objetos (POO) con la finalidad de recordar y conocer el
lenguaje básico en java. Para ello se ara algunas referencias sobre el código utilizado en
los ejercicios y observar el proceso de ejecución de cada uno de los programas para poder
ver sus diferencias.
Marco teórico
Sistemas operativos multiprocesos
Se sabe que el procesador puede ejecutar una sola instrucción a la vez, pero realizamos
varias actividades en nuestros ordenadores como escuchar música, navegar por internet,
entre otros programas, pero en realidad “el ordenador va intercalando la ejecución con la
velocidad adecuada para ofrecernos una percepción de simultaneidad. A la capacidad de
ejecutar múltiples programas a la vez se le llama multitarea (también podemos hablar de
multiproceso).” [1]
Los procesos son como las tareas que hacen las clases ya que asiendo una referencia se
puede decir que el programa es una clase y los procesos son las tareas a ejecutarse
entendiendo eso se deriva el concepto de multiprocesos que se denomina hilo
Los thread
“Un hilo es una parte de un proceso, que tiene variables locales propias y comparte la
memoria con el resto de hilos del mismo proceso” [1]
“La diferencia básica entre un proceso de Sistema Operativo y un Thread (hilo) Java es
que los hilos corren dentro de la JVM, que es un proceso del Sistema Operativo y por
tanto comparten todos los recursos, incluida la memoria y las variables y objetos allí
definidos. A este tipo de procesos donde se comparte los recursos se les llama a veces
procesos ligeros (lightweight process). " [2]

 El ciclo de vida de un thread


“Cuando se instancia la clase Thread (o una subclase) se crea un nuevo Thread que está
en su estado inicial. En este estado es simplemente un objeto más
No existe todavía el thread en ejecución. El único método que puede invocarse sobre él
es el método start(). Cuando se invoca el método start() sobre el hilo el sistema crea los
recursos necesarios, lo planifica (le asigna prioridad) y llama al método run().
En este momento el hilo está corriendo, se encuentra en el estado ‘runable’. Si el método
run() invoca internamente el método sleep() o wait() o el hilo tiene que esperar por una
operación de entrada/salida, entonces el hilo pasa al estado 'no runnable' (no ejecutable)
hasta que la condición de espera finalice.
Durante este tiempo el sistema puede ceder control a otros hilos activos. Por último
cuando el método run finaliza el hilo termina y pasa a la situación 'Dead' (Muerto).”” [2]
El gráfico resume el ciclo de vida de un Thread

Figura Nº 1 Ciclo de un hilo


Entrada y salida de datos
Ahora veremos la entra y salida de datos por teclado conocido como el flujo de java ya
que por lo general la mayoría de los procesos necesita leer datos del exterior procesarlos
y presentarlos en consola
“Los resultado de la ejecución de un programa se pueden presentar por la consola, la
impresora o en un fichero. El tipo de información que se utiliza tanto en la entrada como
en la salida pueden tener diversos formatos: texto, sonido, binario, entre otros.” [3]
En java para el flujo de datos utilizando la librería java.util.Scanner, es por medio de el
teclado la entrada System.in ; la clase Scnner permite realizar la lectura con el método
next(), nextLine(), nextInt()
Operadores en java
Los operadores aritméticos son los siguientes símbolos

Figura Nº 2 Operadores Aritméticos


Planteamiento de Problema
a) Realizar un programa que permita Ingresar la información de un empleado, calcule
su sueldo y finalmente muestra la información del mismo.
- Desarrollo

package lab;
import java.util.Scanner;
public class Lab {
public static void main(String[] args) {
String nombre;
String apellidos;
String cargo;
String estadoCivil;
int cedula, horasDeTrabajo,valorPorhora,sueldo,sueldo1;
int seguroSocial = 20;
System.out.println("-----------INGRESE SUS DATOS ----------");
Scanner entradaTeclado =new Scanner(System.in);
System.out.println("Nombre ");
nombre= entradaTeclado.nextLine();
System.out.println("Apellidos ");
apellidos = entradaTeclado.nextLine();
System.out.println("Estado Civil ");
estadoCivil = entradaTeclado.nextLine();
System.out.println("Cargo");
cargo = entradaTeclado.nextLine();
System.out.println("Cedula ");
cedula= entradaTeclado.nextInt();
System.out.println("Horas De Trabajo ");
horasDeTrabajo= entradaTeclado.nextInt();
System.out.println("Valor Por hora ");
valorPorhora= entradaTeclado.nextInt();
sueldo = horasDeTrabajo * valorPorhora ;
sueldo1= sueldo-seguroSocial;
System.out.println("Sueldo "+ sueldo);
System.out.println("-----------EMPLEADO----------");
System.out.println("Nombre: " +nombre);
System.out.println("Apelido: " +apellidos);
System.out.println("Cedula " + cedula );
System.out.println( "Estado Civil: " + estadoCivil);
System.out.println( "Horas de trabajo: " + horasDeTrabajo);
System.out.println( "Valor por hora: " + valorPorhora);
System.out.println( "Sueldo: " + sueldo);
System.out.println("Descuento de seguro social:" + seguroSocial);
System.out.println( "Sueldo: " + sueldo1);
Ejecución

Figura Nº 3 Run del primer problema


b) Realizar un programa que ingrese el nombre de dos competidores y simule una
carrera donde cada uno de los atletas se encuentre implementado mediante threads
- Desarrollo
package hilos;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
class competidores extends Thread {
//private float tra,cost;
private String nom;
private int limite;
public void ingresa() {
Scanner tec = new Scanner(System.in);
System.err.print("ingrese nombre: ");
nom = tec.next();
System.err.print("ingrese limite: ");
limite = tec.nextInt();
}
public void run() {
for (int i = 0; i < limite; i++) {
try {
Thread.sleep(1000);
System.err.println(nom + " avanza");
} catch (InterruptedException ex) {
Logger.getLogger(competidores.class.getName()).log(Level.SEVERE, null, ex);
}
}
System.err.println(nom + " ha llegado al final");
yield();
}
}
public class Hilos {
public static void main(String[] args) {
Scanner tec = new Scanner(System.in);
int topec = 0;
do {
System.out.print("Ingrese cuantos competidores hay: ");
topec = tec.nextInt();
} while (topec < 1 || topec > 20);
competidores[] comp = new competidores[topec];
for (int i = 0; i < topec; i++) {
System.out.println("competidos numero -" + (i + 1) + "-");
comp[i] = new competidores();
comp[i].ingresa();
}
for (int i = 0; i < topec; i++) {
comp[i].start();
System.out.println(" termina la carreara");
}

}
}

Ejecución

Figura Nº 4 Run de el problema 2


Conclusiones
 Los códigos de los programas se completaron el primero con el segundo, por la
entrada de datos que se usa en el primero
 Se pudo observar que las ejecuciones de ambos programas fueron distintas ya que
el primero fue un proceso simétrico porque ejecuta las sentencias una tras otra y
finaliza. En cambio, con el segundo se ejecutan dos procesos o tareas de la misma
clase siendo este asimétrico
 El proceso generado en el segundo problema también es conocido como procesos
ligueros ya que se comparten recursos para ejecutar dando la sensación de
simultaneidad
Recomendaciones
 Entender bien los problemas antes de comenzar con el código para estar claro de
lo que se desea obtener y no perder tiempo.
 Es impórtate conocer las bases de la programación orientada a objetos (POO) para
poder realizar programación del código ya q sin estas bases no se podrá realizar
nada.
 Es importante identificar cuáles son las diferencias entre cada termino para evitar
confusiones al momento de programar .

Bibliografía

[1] C. J. G. Marcos, «6 TAZAS DE JAVA EN 2 SEMANAS,» Cristian Jorge Garcia


Marcos, 13 JUNIO 2009. [En línea]. Available:
https://eaddfsi.wordpress.com/2009/06/13/concurrencia-en-java/. [Último acceso:
21 04 2018].

[2] EUI-SG/INFOR.UVA.ES, «Sistemas Distribuidos,» [En línea]. Available: EUI-


SG/INFOR.UVA.ES. [Último acceso: 21 abril 2018].

[3] J. M. L. d. Guevara, Fundamentos de programacion en Java, 2011.

[4] «leenguaje de programacion,» [En línea]. Available:


file:///C:/Users/USER/Desktop/pintura/tema3_2_concurrencia2.pdf. [Último
acceso: 21 04 2018].

Anda mungkin juga menyukai