martes, 31 de agosto de 2010

Colas de planificación, procesos cooperativos, hilos.

Es un conjunto de procesos listos a la espera de ser ejecutados y movidos por un planificador a la memoria. Generalmente este se inplementa mediante una lista de encadenamiento, donde cada elemento es una estructura de control a la espera de alguna petición. Su administración se lleva a cabo de acuerdo con la política de planificación ejecutada por el planificador de recursos.

Operaciones que se pueden realizar con los procesos : como ya se sabe un progreso es un programa en ejecución a la espera de ser llamado por el sistema, este realiza varias funciones:

1) Un proceso se puede dejar en cola mientras se espera a ser llamado y controlado por el planificador.

2) Se puede parar este para darle prioridad a otro proceso que se requiera y después retomar el proceso parado.

3) Estos pueden ser destruidos por el sistema operativo.

4) Puede ser creado para distintas aplicaciones dependiendo de lo que se requiera.

Procesos cooperativos: nosotros al analizar estos procesos llegamos a la definición de que el proceso cooperativo puede afectar o ser afectado por la ejecución de otro.

La ventaja de este proceso es compartir información, también incrementa la velocidad de computo, crea un sistema de modulación para mejor ejecución de los procesos y es muy conveniente al momento de trabajar con este proceso en si, por el ¡hecho de que puede evitar el usuario que se le acumule gran cantidad de tareas.

Procesos de hilos: es una característica que permite 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.

Comunicación entre procesos: los procesos pueden comunicarse entre sí a través de compartir espacios de memoria, ya sean variables compartidas o buffers, o a través de las herramientas provistas por las rutinas de IPC. La IPC provee un mecanismo que permite a los procesos comunicarse y sincronizarse entre sí, normalmente a través de un sistema de bajo nivel de paso de mensajes que ofrece la red. Los protocolos de internet son los mas usados para la comunicación entre procesos a través de la ip.

Excepciones: nuestro análisis apunta de que las excepciones es cuando la cpu intenta de ejecutar una instrucción incorrecta construida, la unidad de control lanza dicha excepción para que el sistema operativo puede tratar dicha excepciones importante que cada excepción este identificada.

Planificación de procesos

La planificación de proceso está enfocado al sistema de multiprogramación, significa que hace múltiples procesos la vez que se mantienen en la memoria principal, esto hace ejecutar de mejor manera las aplicaciones y darle mejor rendimiento a la CPU.

Este sistema funciona de la siguiente manera:

Cuando un proceso entra al sistema es colocado en una cola de trabajos. Una vez que el proceso se encuentra en memoria principal y está listo para ejecutar, este es colocado en la cola de procesos listos. Cuando al proceso se le asigna el CPU, ejecuta por un tiempo y eventualmente el proceso terminará, o será interrumpido o esperará por la ocurrencia de algún evento. En caso de que dos procesos son ejecutables en el sistema, el sistema de operación debe decidir cuál de ellos se debe ejecutar primero, esta parte de decisión se usa un algoritmo llamado planificación.

Con la planificación de procesos se busca:

1) 1) Garantizar que cada proceso obtenga una proporción justa de tiempo de CPU.
2) Mantener ocupado el CPU.
3) Minimizar el tiempo de respuesta de los procesos interactivos.
4) Maximizar el número de tareas procesadas por hora.

Planificadores de CPU:

Ya sabemos que La ejecución de un trabajo, trabaja por ráfagas que vienen de la cpu.

Los procesos van quedando en cola esperando a ser llamados por algún planificador y ser ejecutados al sistema.

Algunos objetivos de la planificación de la cpu:

1) equidad

2) bajo tiempo en respuesta

3) eficiencia

4) rendimiento alto

5) minimizar los tiempos de espera

Dentro del sistema de planificación esta se divide en tres funciones; planificación a largo plazo, planificación a mediano y corto plazo.

Planificación a largo plazo: determina que programas serán admitido en el sistema de ejecución, una vez admitido este es puesto en la cola de procesos listos, en el caso de que el archivo sea por batch o por lote este es enviado a una memoria secundaria (discos ) y mantenido en la cola de trabajo. Este planificador debe decidir si el sistema de operación puede tomar uno o más trabajos y que trabajos van a ser admitidos.

Planificación a mediano plazo: consiste en remover procesos en memoria , y después reintroducirlo de nuevo, este proceso ayuda a reducir el grado de multiprogramación. Este proceso es conocido también como swapping.

Planificación a corto plazo: este planificador funciona cuando la memoria esta ociosa, escoje un proceso en la cola de trabajo listo y le asigna a la cpu. Este planificador es invocado cada vez que ocurra un evento que conlleve la interrupción del proceso actual o cuando se quiera dar la oportunidad a algún otro proceso.

Despachador: El despachador es el módulo del sistema de operación que le da al proceso seleccionado por el planificador el control del CPU. Las funciones que realiza son:

1) Cambio de Contexto

2) Cambio a modo Usuario

3) Saltar a la dirección apropiada para continuar con la ejecución del proceso seleccionado.

Criterios para la evaluación de los algoritmos de planificación:

Existen 2 criterios:

1) Criterio orientado al usuario

2) Criterio orientado al sistema

Criterio orientado al usuario: Mide el tiempo entre la emisión de una solicitud y la obtención de la primera respuesta, Tiempo que toma en contestar (response time).Mide cuánto tiempo se demora en ejecutar un proceso. Esto incluye el tiempo que el proceso se demora en entrar en memoria, el tiempo en la cola de procesos listos, el tiempo ejecutando y el tiempo realizando E/S (turnaround time). Tiempo de Espera (Waiting Time). Se mide el tiempo que el proceso permanece en la cola de procesos listos.

Criterio de sistema: Utilización del CPU. Queremos mantener al CPU tan ocupado como sea posible. La utilización del CPU puede estar entre 0 y 100 por ciento.

Algoritmos de planificación:

Existen algoritmos capaces de planificar de mejor manera las ordenes un cola de sistema de operaciones y haci mejorar el rendimiento de la cpu.

Algunos de estos son:

First Come, First Served (FCFS)

Shortest Job First (SJF)

Prioridad

Round Robin (RR)

Multicola

Multicola Retroalimentado.

Criterios de rendimiento

Primero deberemos entender lo que es rendimiento en la informática, y es:

Medida de velocidad/resultado con que se realiza una tarea o proceso.

Aclarado esto, veremos cuales son los criterios de rendimiento.

Primero, deberemos entender que no todos los procesos piden la misma cantidad de recursos.
No es lo mismo ejecutar el block de notas que un juego de última generación con todos los gráficos al tope. Nosotros deberemos entender que el rendimiento, esta limitado por el hardware y software de la máquina.

Limitación por Software: el rendimiento depende de la optimización de la tarea o proceso.
Esto es lo que diferencia un "buen programa de un mal programa". Un programa que aprobeche los requisitos es muy importante a la hora de programar (aunque esta rutina ya no se ejerce tanto debido a la constante evolución desproporcional de la tecnología).

Limitación por Hardware: si uno tiene un computador del año 1993, no se debería esperar un buen rendimiento en aplicaciones de ùltima generaciòn del 2010. En este caso, cuando una computadora no logra satisfacer a los usuarios para poder utilizar con un buen rendimiento las aplicaciones actuales, se les denomina "Computadoras Obsoletas".

Las aplicaciones, normalmente vienen con un "Leeme" con un sector denominado "Requisitos del Sistema", y en este, especifica cuales los requisitos necesarios para correr de forma mínima y óptima la determinada aplicación.

Los principales recursos que se deben de ir actualizando con el tiempo son: Procesador, Memoria RAM y Tarjeta de Vídeo.

Continuaremos con cosas que han quedado en el tintel.

Cambio de Contexto

Según la amiga Wikipedia define "Cambio de Contexto" como:

La ejecución de una rutina perteneciente al núcleo del sistema operativo multitarea de una computadora, cuyo propósito es parar la ejecución de un proceso para dar paso a la ejecución de otro distinto.

Esto en palabras simples es poder utilizar otro proceso sin perder la información de otro.

Esto produce una confusión para las personas que piensan y dicen:

- ¡Pero si yo con mi computador hago varias cosas a la véz, uso Messenger, escucho música y escribo todo a la misma vez!

La verdad es qué los computadores (que cuentan con un microprocesador) solo realizan una instrucción a la vez, y la única razón que se crea que hacen más de una, es porque las realiza demasiado rápido y en forma alternada, haciendo parecer que las hace al mismo tiempo. A esto se le denomina como "Ejecución concurrente".

Primero se debe detener un proceso, y esto se hace por medio de una intervención del hardware, y a esto le denominamos "Interrupción".

Los pasos que realiza la máquina para cumplir con el simulado multiproceso son:

Guardar el estado del programa (contexto) que se estaba ejecutando: todos los valores almacenados en los registros del procesador, se almacenan en la memoria RAM para después ser rescatados.

Seleccionar otro programa: la rutina selecciona otro proceso de manera equitativa.

Restaurar el estado del programa seleccionado: se hace el proceso inverso al primer paso.

Ejecutar el programa seleccionado: la rutina salta a la instrucciones pendientes del programa seleccionado.

Este ciclo se repite bien cada vez que ocurre un evento de entrada/salida, bien cuando vence un temporizador programado en el hardware. Dicho temporizador hace saltar una interrupción cada 150 milisegundos aproximadamente (según sistema operativo).

Bloque de control de proceso BCP

El sistema operativo, para correr un proceso, necesita saber cierta información importante de él, y esta, se encuentra almacenada en un registro, que es el "Bloque de control de proceso BCP".

Cuando un proceso termina, su información que estaba almacenada en el Bloque se elimina, y este puede ser utilizado por otros procesos.

La información "típica" almacenada suelen ser los siguientes datos:

  • Identificador del proceso (Process Identificator -PID-, de sus siglas en Inglés).
  • Estado del proceso. Por ej. listo, en espera, bloqueado.
  • Contador de Programa: Dirección de la próxima instrucción a ejecutar.
  • Valores de registro de CPU. Se utilizan también en el Cambio de Contexto.
  • Espacio de direcciones de memoria.
  • Prioridad en caso de utilizarse dicho algoritmo para planificación de CPU.
  • Lista de recursos asignados (incluyendo descriptores de archivos y sockets abiertos).
  • Estadísticas del proceso.
  • Datos del propietario (owner).
  • Permisos asignados.
  • Signals pendientes de ser servidos. (Almacenados en un mapa de bits)
Queda señalar que cada sistema operativo tiene su propio diseño (estructura) de BCP.

Algunos conceptos mencionados los retomaremos más adelante.

Estados y Transiciones de un Proceso

Estados: Las personas en su vida laboral tienen distintos estados: pueden estar estables, inestables, cesantes, y otras más. Los procesos también tienen estados, y vendrían siendo las siguientes:

  • En Ejecución: el proceso se esta ejecutando (trabajando).
  • Listo o preparado: tiene todos los recursos necesarios listos para su trabajo, solo falta la CPU.
  • Bloqueado (Locked): el programa no cumple con un recurso para su ejecución.

Estos son los tres estados más "típicos".
Transiciones de estado de los proceso: volviendo al tema laboral como ejemplo, una persona puede estar felizmente y establemente trabajando, pero esto puede en algún momento cambiar, es decir, de un trabajo estable a cesante. Esto es una transición de estado.

En el caso de los procesos, existen como ejemplo de transiciones:

  • De ejecución á Bloqueado: al iniciar una operación de E/S, al realizar una operación WAIT sobre un semáforo a cero.
  • De ejecución á Listo: por ejemplo, en un sistema de tiempo compartido, cuando el proceso que ocupa la CPU lleva demasiado tiempo ejecutándose continuamente el sistema operativo decide que otro proceso ocupe la CPU, pasando el proceso que ocupaba la CPU a estado listo.
  • De Listo á en ejecución: cuando lo requiere el planificador de la CPU (veremos el planificador de la CPU en el tema de planificación de procesos).
  • De Bloqueado á Listo: se dispone del recurso por el que se había bloqueado el proceso. Por ejemplo, termina la operación de E/S, o se produce una operación SIGNAL sobre el semáforo en que se bloqueó el proceso, no habiendo otros procesos bloqueados en el semáforo.
Esta explicación la encontre en internet, y esta muy buena, el único problema es que aún no explicamos lo que son los semáforos, pero lo veremos a su debido tiempo.

Ráfagas de CPU y ráfagas de E/S.

Anteriormente habiamos mencionado lo que era un proceso, ahora, viéndolo del área más "física", un proceso es un conjunto de ráfagas de CPU y ráfagas de E/S, pero ¿qué son estas?

Bueno, definiremos los conceptos como:

Ráfagas de CPU: es el ciclo en donde se realizan las instrucciones del proceso.
Ráfagas de E/S: es el ciclo en donde se utilizan o esperan los dispositivos de Entrada y Salida.

Nota: se dice que son ciclos puesto que que estas ráfagas, para lograr su ejecución, se deben de alternar de manera sucesiva.

Explicaremos esto de la forma más fácil:

primero se realiza una ráfaga de CPU, y luego una ráfaga de E/S, luego una ráfaga de CPU, luego una de E/S, luego una de CPU, y otra de E/S, y así indefinidamente hasta que el programa se le pida terminar, en este caso, la última ráfaga es de CPU, puesto que se necesitan las instrucciones de cerrar.

Por ahora, dejaremos lo de las ráfagas hasta aquí.

Codigo Linux



Este es un entre paréntesis, a los procesos, pues este es el vídeo que nuestro querido profesor nos recomendó, el código linux, está dividido en 6 partes, y esta es la primera parte, si accedes a Youtube puedes encontrar las otras partes.

Este video nos muestra la filosofía de la distribución libre, el derecho de acceder al código creado por Linus Torvald, historia y como influencia en la sociedad y economía.

Nota: Código libre (Tener acceso al código fuente).
Distribución libre (acceso gratuito a distros de este S.O)

lunes, 30 de agosto de 2010

Procesos

Como ya habrán visto en el título, el primer elemento que analizaremos será los procesos de la máquina computadora, y primero que ello, la Gestión de procesos.

Para explicar esto bien deberemos entender cada palabra de esta frase:

Gestión: Administrar algo.
Procesos: cualquier programa del computador que necesite recursos para trabajar.
Recursos: elementos necesarios tales como dispositivos de entrada y salida, procesador, memoria, etc.

Gracias a esta explicación entenderemos como la gestión de procesos, la forma en que un sistema operativo, administra los procesos para realizar su labor.

La gestión normalmente se divide en 3 partes:

  • Crear y matar procesos.
  • Pausar y Reanudar procesos.
  • Comunicación y Sincronización entre los procesos.

No necesita explicación lo antes mencionado.

Los procesos tienen una prioridad, es decir, hace que la computadora se dedique a los procesos "más importantes".

Esta explicación la podemos aclarar en un ejemplo:

Usted se encuentra en su oficina, y su jefe le pide eufóricamente que lleve unos informes al área de contabilidad, puesto que si no se entrega esto de inmediato, la empresa se irá a la quiebra (Exagerado ejemplo debes de pensar).

Pasado dos minutos este momento, cuando vas a hacer lo que el jefazo pidió, tu mujer te llama pidiendo que por favor, vayas a la tienda a comprar cebolla para la cena siendo que son recién las 9 de la Mañana.

Analizando esto podemos decir que:

En este caso, deberemos dedicar el tiempo, a lo que pidó el jefe, puesto que tiene mayor importancia en el momento, que lo que pidió la señora, es decir, tiene mayor prioridad.

¿Fácil no?

Continuemos...


Ahora definiremos mejor lo que es un proceso (en informática).

  • Proceso: es un programa en ejecución, los procesos son gestionados por el sistema operativo y están formados por:
    • Las instrucciones de un programa destinadas a ser ejecutadas por el microprocesador.
    • Su estado de ejecución en un momento dado, esto es, los valores de los registros de la CPU para dicho programa.
    • Su memoria de trabajo, es decir, la memoria que ha reservado y sus contenidos.
    • Otra información que permite al sistema operativo su planificación.
Esta definición la encontré muy precisa, y la he conseguido de nuestra amiga Wikipedia.


En la siguiente entrada, explicaremos el proceso lógico de los procesos (valga la redundancia).