3. PROGRAMAS Y PROCESOS DE COMPUTACIÓN Un programa software, es un sistema informático elaborado por un desarrollador de software, utilizando algún lenguaje de programación, cuando un programa se ejecuta en un computador se representa como un proceso. Un proceso consiste en un programa que se ejecuta, con valores, información de su estado, y asignación de los recursos necesarios para que el sistema operativo pueda gestionar la ejecución de dicho proceso.
4.
5. Listo o preparado: El proceso dispone de todos los recursos para su ejecución, sólo le falta la CPU.
6. Bloqueado: Al proceso le falta algún recurso para poder seguir ejecutándose, además de la CPU. Solo puede haber un proceso en ejecución a la vez, pero pueden existir varios listos y varios pueden estar bloqueados. Así, se forman una lista de procesos listos y otra de procesos bloqueados
7. TIPOS DE PROGRAMA EN JAVA El código para crear procesos se lo realizará en Java, existen tres tipos de programas Java que independientemente del tipo, cada uno escribe como una clase Java : Aplicaciones.- Esta clase (aplicación) tiene un método principal (main), y se ejecuta como un proceso independiente (stand-alone). Applets .- Se ejecuta mediante el uso de un navegador o de una herramienta que permite visualizar applets (appletviewer). Servlets.- es parecido al applets , en el hecho que no tiene un método mainy se ejecuta en el contexto de un servidor web. Un programa Java, que se compile sin importar el tipo de programa, se convierte en un código denominado bytecode (código objeto universal).
8. PRINCIPIOS DE CONCURRENCIA La concurrencia es el punto clave en los conceptos de multitarea, multiprogramación y multiproceso, la concurrencia comprende un gran numero de cuestiones de diseño incluyendo la comunicación entre procesos, la compartición y competencia por los recursos, la sincronización de la ejecución de varios procesos y la asignación del procesador a los procesos.
9. CARACTERÍSTICAS DE LOS SISTEMAS CONCURRENTES Orden de ejecución: A diferencia de los programas secuenciales el flujo del programa sigue un orden parcial. Ante una misma entrada no se sabe cuál va a ser el orden seguido. Indeterminismo: El orden parcial produce consecuentemente un comportamiento indeterminista. Es decir, repetidas ejecuciones sobre un mismo conjunto de datos resultan “diferentes resultados
13. PROCESOS CONCURRENTES EJECUTADOS EN UN UNICO COMPUTADOR La concurrencia puede ser real o virtual. La concurrencia real multitarea es posible cuando el computador tiene múltiples CPU, de forma que cada CPU pueda ejecutar un proceso. En un computador con un solo CPU, los procesos concurrentes se realizan por tiempo compartido, lo cual permite que los procesos puedan ejecutarse por turnos, creando una ilusión que se ejecutan en paralelo. Los procesos concurrentes que se ejecutan en un solo computador es una funcionalidad del sistema operativo, por tanto no se necesita una programación especial para llevar a cabo este tipo de programación.
14. PROGRAMACIÓN CONCURRENTE DENTRO DE UN PROCESO Muchas veces un único programa necesita iniciar diferentes tareas que se ejecuten concurrentemente, como por ejemplo un programa, podría necesitar realizar otras tareas mientras espera que se descargue un archivo de correo. También se puede necesitar que se ejecuten varias tareas en paralelo por motivo de rendimiento. La programación concurrente dentro de un proceso se lleva a cabo a través de dos tipos de herramientas, proporcionadas por el sistema operativo: 1. Procesos Padres e Hijos 2. Threads o Hilos
15. PROCESOS PADRES E HIJOS En tiempo de ejecución, un proceso puede crear procesos subordinados o procesos hijosa través de la multitarea real o virtual, el proceso original, denominado proceso padre, continúa ejecutándose simultáneamente con el proceso hijo. Un proceso hijo es un proceso completo que consiste en un programa en ejecución, con valores propios información de estado, que hereda del proceso padre. Un proceso padre puede saber cuando un proceso hijo ha finalizado.
17. THREADS O HILOS Permiten a una aplicación realizar varias tareas a la vez (concurrentemente). Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente. Un hilo es básicamente una tarea que puede ser ejecutada en paralelo con otra tarea. Los hilos de ejecución que comparten los mismos recursos, sumados a estos recursos, son en conjunto conocidos como un proceso. El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar éstos.
18. Threads/hilos en Java Java proporciona un API para el uso de hilos: clase Threaddentro del paquete java.lang.Thread. Es de gran utilidad tener un lenguaje de alto nivel para programar concurrentemente utilizando threads/hilos, de ahí el potencial y la fama de Java. Cuando arranca un programa existe un hilo principal (main), y luego se pueden generar nuevos hilos que ejecutan código en objetos diferentes o el mismo. La clase Thread dispone de una serie de métodos para caracterizar el thread/hilo en el programa: isAlive(), isDaemon(), setName(),setDaemon(), run(), etc.