Fundamentos de Sistemas Operativos y Conceptos de Programación Concurrente

Compilación y Ejecución de Java

La compilación en Java convierte el código a bytecode, interpretado por la Java Virtual Machine (JVM). Todas las implementaciones de Java deben emular la JVM para permitir la ejecución en diferentes sistemas.

Java SE (Plataforma Java, Standard Edition): Permite desarrollar y desplegar
aplicaciones Java en desktops y servidores, como también en entornos empotrados
y en tiempo real.
Java EE (Plataforma Java, Enterprise Edition): La versión empresarial ayuda a
desarrollar y desplegar aplicaciones Java en el servidor portátiles, robustas,
escalables y seguras.
Java ME (Plataforma Java, Micro Edition): Proporciona un entorno para aplicaciones
que operan en una gama amplia de dispositivos móviles y empotrados, como
smartphones.

Conceptos Básicos

Aplicación → Tipo de programa informático, diseñado como herramienta para resolver de
manera automática un problema específico del usuario.


Ejecutable o binario → Nosotros como programadores, creamos un programa escribiendo
su código fuente y con la ayuda de un compilador obtenemos su código binario / interpretado. Este código lo guardamos en un archivo, este archivo es el ejecutable.


Proceso → Es un programa en ejecución.


Siempre que lancemos la ejecución de una aplicación, se creará, al menos un proceso
nuevo en nuestro sistema.

Tipos de Código

Binarios → Formados por un conjunto de instrucciones que directamente son ejecutadas por el procesador del ordenador. Se obtiene al compilar el código fuente de un programa y se guarda en un fichero ejecutable. (No es multiplataforma)


Interpretados → Requiere de un intérprete que se encargará de traducirlos al lenguaje máquina que ejecuta el procesador. Es más susceptible de ser multiplataforma o independiente de la máquina física en la que se haya compilado.


Scripts → Un tipo especial de interpretado, contienen instrucciones que serán ejecutadas una detrás de otra por él intérprete, se diferencia del resto de lenguajes interpretados ya que no son compilados, por lo que podemos abrirlos en un editor de texto plano.


Bibliotecas → Conjunto de funciones que permiten dar modularidad y reusabilidad a
nuestros programas. Su contenido es en código ejecutable, el código es altamente
reutilizable.

Multitarea y Tipos de Procesos

Multitarea → permite que varios procesos puedan ejecutarse al mismo tiempo, compartiendo el núcleo o núcleos del procesador.
Tipos de procesos:


-Por lotes → Están formados por una serie de tareas, de las que el usuario sólo está interesado en el resultado final. El usuario, sólo introduce las tareas y los datos iniciales, deja que se realice todo el proceso y luego recoge los resultados.


-Interactivos → Aquellas tareas en las que el proceso interactúa continuamente con el usuario y actúa de acuerdo a las acciones que éste realiza.


-Tiempo real → Tareas en las que es crítico el tiempo de respuesta del sistema.

Ejecución de Procesos

1.-Los procesos nuevos, entran en la cola de procesos activos en el sistema.

2.-Los procesos van avanzando posiciones en la cola de procesos activos, hasta que lestoca el turno para que el SO les conceda el uso de la CPU.

3.-El SO concede el uso de la CPU, a cada proceso durante un tiempo determinado y equitativo, que llamaremos quantum. Un proceso que consume su quantum, es pausado y enviado al final de la cola.

4.-Si un proceso finaliza, sale del sistema de gestión de procesos.
Estados de un Proceso:
-Nuevo → Proceso nuevo, creado.
-Listo → Proceso que está esperando la CPU para ejecutar sus instrucciones.
-En ejecución → Proceso que actualmente, está en turno de ejecución en la CPU.
-Bloqueado → Proceso que está a las espera de que finalice una E/S.
-Suspendido → Proceso que se ha llevado a la memoria virtual para liberar memoria RAM.
-Terminado → Proceso que ha finalizado y ya no necesitará más la CPU.

El Cargador

El cargador es el encargado de crear los procesosCarga el proceso en memoria principal: Reservar un espacio en la RAM para el proceso. En ese espacio copia las instrucciones del fichero ejecutable de la
aplicación, las constantes y deja un espacio para los datos (variables) y la pila (llamadas a funciones)

Crea una estructura de información llamada PCB (Bloque de Control de Proceso)formado :

Identificador del proceso o PID: Es un número identificador para cada proceso.
-Estado actual del proceso: En ejecución, listo, bloqueado, suspendido. finalizado.
Espacio de direcciones de memoria: Donde comienza la zona de memoria reservada y su tamaño.
Información para la planificación: Prioridad, quantum, estadísticas, …
-Información para el cambio de contexto: Valor de los registros de la CPU, entre ellos el contador y el puntero a pila.
-Recursos utilizados: archivos abiertos

El Planificador

El planificador es el encargado de tomar las decisiones relacionadas con la ejecución de los procesos, la política en la toma de decisiones del planificador que se siga es conocida como algoritmo de planificación:

Round-Robin: Este algoritmo de planificación favorece la ejecución de procesos
interactivos, cada proceso puede ejecutar sus instrucciones en la CPU durante un
quantum. Si no le ha dado tiempo a finalizar en ese quantum, se va al final de la cola
y espera su turno de nuevo.
Por prioridad: Se asignan prioridades a los distintos procesos y la ejecución de estos
se hace de acuerdo a esa prioridad asignada.
Múltiple colas: Es una combinación, se agruparan por prioridad, y se van
gestionando como el Round-Robin


En la planificación de procesos se busca conciliar los siguientes objetos:
❖ Equidad: Todos los procesos deben poder ejecutarse;
❖ Eficacia: Mantener ocupada la CPU un 100% del tiempo;
❖ Tiempo de respuesta: Minimiza el tiempo de respuesta al usuario;
❖ Tiempo de regreso: Minimizar el tiempo que deben esperar los usuarios de
procesos por lotes para obtener sus resultados;

La CPU

Una CPU, además de circuitos encargados de realizar las operaciones con los datos, tiene unos pequeños espacios de memoria (llamadosregistros), en los que se almacena temporalmente la información que, en cada instante, necesita la instrucción que esté procesando la CPU. El conjunto de registros de la CPU es su estado.

Contador de Programa: Almacena la dirección de la siguiente instrucción a ejecutar, nos
permitirá continuar en cada proceso por la instrucción en dónde los hubiéramos dejado
todo.

Puntero a Pila: Apunta continuamente a la parte superior de la pila del proceso en
ejecución.

Hilos

Realizar cambios de contexto entre hilos de un mismo proceso, es más rápido y menos costoso que el cambio de contexto entre procesos.Un proceso estará formado por, al menos , un hilo de ejecución.Un proceso es una unidad pesada de ejecución. Si el proceso tiene varios hilos, cada hilo es una unidad de ejecución ligera.

Creación de Procesos


Clase java.lang.Process: Proporciona los objetos Proceso, por lo que podremos controlar
los procesos creados desde nuestro código
Clase java.lang.Runtime: Clase que permite lanzar la ejecución de un programa en el
sistema, los más interesantes son los métodos exec()
Pasos generales a seguir:
1. Crear y generar la aplicación de la que lanzaremos sus procesos.
2. Crear un nuevo proyecto que será el creador de procesos.
3. Implementar el código necesario para crear procesos.
4. Probar la ejecución del creador de procesos.
5. Posibles mejoras

Windows
● tasklist: Mostrará los procesos presentes en el sistema.
● taskkill: Mata procesos. Con la opción /pid especificaremos el identificador del procesos que queremos mata

programación concurrente proporciona mecanismos de comunicación y sincronización entre procesos que se ejecutan de forma simultánea en un sistema informático. La programación concurrente nos permitirá definir qué instrucciones de nuestros procesos se pueden ejecutar de forma simultánea
Razones principales
● Optimizar la utilización de los recursos
● Proporcionar interactividad a los usuarios
● Mejorar la disponibilidad
● Conseguir un diseño conceptualmente más comprensible y mantenible
● Aumenta la protección
Interacciones básicas:
● Independientes: Sólo interfieren en el uso de la CPU.
● Cooperantes: Un procesos genera la información o proporciona un servicio que otro
necesita.
● Competidores: Procesos que necesitan usar los mismos recursos de forma
exclusiva.


Semáforos
Un semáforo es un componente de bajo nivel de abstracción que permite arbitrar los accesos a un recurso compartido en un entorno de programación concurrente ,Semáforos binarios (0 – 1)
Semáforos generales (Cualquier valor natural no negativo),Si valor igual a 0 está cerrado,Si valor mayor que 0 el semáforo está abierto
Cualquier semáforo permite dos operaciones seguras:
obj Semáforo.wait() si el semáforo no es nulo decrementa el valor del semáforo.
obj Semáforo.signal() el valor del semáforo aumenta en 1
Podemos utilizarlos para resolver cualquier problema de concurrencia.
Son peligrosos de manejar y son la causa de muchos errores


Cola de mensajes
Paso de mensajes asíncrono, el proceso que envía, no espera a que el mensaje sea
recibido
Paso de mensajes síncrono, el proceso que envía el mensaje espera a que un
proceso lo reciba.


Arquitectura
La arquitectura del software, es el diseño de más alto nivel del sistema, consiste en un conjunto de patrones y abstracciones coherentes, indican la estructura, funcionamiento e interacción entre las partes del software Busca satisfacer la amyor funcionalidad y requerimientos de desempeño tanto como la confiabilidad, escalabilidad, portabilidad y disponibilidad; mantenibilidad, auditabilidad, flexibilidad e interacción.
Las más comunes son
-Monolítica: El software se estructura en grupos funcionales muy acoplados.
-Cliente-Servidor: Reparte su carga de cómputo en dos partes independientes,
consumir un servicio y proporcionar un servicio
-Arquitectura de tres niveles → capa para presentación, capa para cálculo, capa
para almacenamiento.
otras son: pipeline ,Entre pares,pizarra,Orientada a servicios,Dirigida por eventos


Programas secuenciales → presentan una línea simple de control de flujo, ordenados como una secuencia temporal lineal.
-Comportamiento según las operaciones individuales y orden de ejecución.
-El tiempo no tiene consecuencias en el resultado.
-Para validar necesitamos las respuestas de cada sentencia y el orden de ejecución.
Programa concurrente → Para validar se requiere lo anterior más:
-Las sentencias solo se pueden validar si no están involucradas en usos de recursos compartidos.
-Los efectos de interferencias pueden ser muy variados y la validación es muy difícil.


Programación paralela y distribuida
En ambas existe la ejecución simultánea de tareas que resuelven un problema común

Diferencias:
1. La programación paralela se centra en microprocesadores multinúcleo o
supercomputadoras (muchos equipos idénticos interconectados)
2. La programación distribuida, en sistemas heterogéneos interconectados por redes de comunicaciones de propósito general.
Similitudes:
1. Cada procesador tiene asignado una porción del problema.
2. Pueden intercambiar datos en un caso a través de memorias compartidas y en la otra a través de mensajes.
3. El sistema se presenta como unidad ocultando la realidad de las partes que lo forman.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.