domingo, 1 de octubre de 2017

2.6. Técnicas de administración del planificador.

Algoritmos de planificación.

Planificación   a   plazo fijo.

            En la planificación a plazo fijo, ciertos trabajos se planifican para ser terminados en un periodo específico. Estos trabajos tienen un alto valor si se entregan a tiempo y pueden carecer  de valor si se entregan después del límite. La planificación a plazo fijo es compleja por muchas razones:

* Los usuarios deben proporcionar por adelantado y en forma precisa las necesidades    de  recursos de su trabajo. Tal información rara vez está disponible.

* El sistema debe ejecutar el programa de plazo fijo sin una severa degradación de servicio  para los otros usuarios.

* El sistema debe planificar cuidadosamente las necesidades de recursos permitiendo un libre tránsito del plazo fijo. Esto puede ser difícil debido a la llegada de programas nuevos con demandas impredecibles.

* Si se activan muchos trabajos de plazo fijo, la planificación puede llegar a ser tan compleja que necesite métodos de optimización sofisticados para asegurar que el plazo fijo se cumpla.


* El manejo intenso de recursos requeridos por la planificación de plazo fijo puede generar una sobrecarga sustancial.

2.5. Niveles, objetivos y criterios de planificación.

Uno de los módulos más importantes de un sistema operativo es la de administrar los procesos y tareas del sistema de cómputo. En esta sección se revisarán dos temas que componen o conciernen a este módulo: la planificación del procesador y los problemas de concurrencia.
Planificación del procesador
La planificación del procesador se refiere a la manera o técnicas que se usan para decidir cuánto tiempo de ejecución y cuando se le asignan a cada proceso del sistema. Obviamente, si el sistema es monousuario y monotarea nohay mucho que decidir, pero en el resto de los sistemas esto es crucial para el buen funcionamiento del sistema. 

Niveles de planificación
En los sistemas de planificación generalmente se identifican tres niveles: el alto, em medio y el bajo. El nivel alto decide que trabajos (conjunto de procesos) son candidatos a convertirse en procesos compitiendo por los recursos del sistema; el nivel intermedio decide que procesos se suspenden o reanudan para lograr ciertas metas de rendimiento mientras que el planificador de bajo nivel es el que decide que proceso, de los que ya están listos (y que en algún momento paso por los otros dos planificadores) es al que le toca ahora estar ejecutándose en la unidad central de procesamiento. En este trabajo se revisaran principalmente los planificadores de bajo nivel porque son los que finalmente eligen al proceso en ejecución.
Objetivos de la planificación
Una estrategia de planificación debe buscar que los procesos obtengan sus turnos de ejecución apropiadamente, conjuntamente con un buen rendimiento y minimización de la sobrecarga (overhead) del planificador mismo. En general, se buscan cinco objetivos principales: 
·         Justicia o Imparcialidad: Todos los procesos son tratados de la misma forma, y en algún momento obtienen su turno de ejecución o intervalos de tiempo de ejecución hasta su terminación exitosa.
·         Maximizar la Producción: El sistema debe de finalizar el mayor numero de procesos en por unidad de tiempo.
·         Maximizar el Tiempo de Respuesta: Cada usuario o proceso debe observar que el sistema les responde consistentemente a sus requerimientos.
·         Evitar el aplazamiento indefinido: Los procesos deben terminar en un plazo finito de tiempo.
·         El sistema debe ser predecible: Ante cargas de trabajo ligeras el sistema debe responder rápido y con cargas pesadas debe ir degradándose paulatinamente. Otro punto de vista de esto es que si se ejecuta el mismo proceso en cargas similares de todo el sistema, la respuesta en todos los casos debe ser similar.
Características a considerar de los procesos
·         No todos los equipos de cómputo procesan el mismo tipo de trabajos, y un algoritmo de planificación que en un sistema funciona excelente puede dar un rendimiento pésimo en otro cuyos procesos tienen características diferentes. Estas características pueden ser:
·         Cantidad de Entrada/Salida: Existen procesos que realizan una gran cantidad de operaciones de entrada y salida (aplicaciones de bases de datos, por ejemplo).
·         Cantidad de Uso de CPU: Existen procesos que no realizan muchas operaciones de entrada y salida, sino que usan intensivamente la unidad central de procesamiento. Por ejemplo, operaciones con matrices.
·         Procesos de Lote o Interactivos: Un proceso de lote es más eficiente en cuanto a la lectura de datos, ya que generalmente lo hace de archivos, mientras que un programa interactivo espera mucho tiempo (no es lo mismo el tiempo de lectura de un archivo que la velocidad en que una persona teclea datos) por las respuestas de los usuarios.
·         Procesos en Tiempo Real: Si los procesos deben dar respuesta en tiempo real se requiere que tengan prioridad para los turnos de ejecución.
·         Longevidad de los Procesos: Existen procesos que tipicamente requeriran varias horas para finalizar su labor, mientras que existen otros que solonecesitan algunos segundos.
Planificación apropiativa o no apropiativa (preemptive or not preemptive)
La planificación apropiativa es aquella en la cual, una vez que a un proceso le toca su turno de ejecución ya no puede ser suspendido, ya no se le puede arrebatar la unidad central de procesamiento. Este esquema puede ser peligroso, ya que si el proceso contiene accidental o deliberadamente ciclos infinitos, el resto de los procesos pueden quedar aplazados indefinidamente. Una planificación no apropiativa es aquella en que existe un reloj que lanza interrupciones periodicas en las cuales el planificador toma el control y se decide si el mismo proceso seguirá ejecutándose o se le da su turno a otro proceso. Este mismo reloj puede servir para lanzar procesos manejados por el reloj del sistema. Por ejemplo en los sistemas UNIX existen los 'cronjobs' y 'atjobs', los cuales se programan en base a la hora, minuto, día del mes, día de la semana y día del año. 
En una planificación no apropiativa, un trabajo muy grande aplaza mucho a uno pequeño, y si entra un proceso de alta prioridad esté también debe esperar a que termine el proceso actual en ejecución.
Planificación de procesos
La planificación es el proceso por el cual el sistema operativo selecciona que proceso ejecutar. La selección del proceso se basa en alguno de los algoritmos de planificación que se describen más abajo.
Expulsión
Es la característica por el cual el sistema operativo puede o no expulsar del estado de ejecución a un proceso dado. En este sentido entonces tenemos la planificación apropiativa en la cual el sistema operativo puede cortar en cualquier momento la ejecución de un proceso y la planificación no apropiativa en la cual una vez que el proceso esta en ejecución el sistema operativo no puede sacarlo de ese estado.
Objetivos de la planificación
Los objetivos de la planificación de proceso son:
·         Equidad, todos los procesos deben poder ejecutarse
·         Eficacia, mantener ocupada la CPU un 100% del tiempo
·         Tiempo de respuesta, minimizar el tiempo de respuesta al usuario
·         Tiempo de regreso, minimizar el tiempo que deben esperar los usuarios por lotes para obtener sus resultados
·         Rendimiento, maximizar el número de tareas procesadas por hora.
Algoritmos de planificación
Los algoritmos de planificación son los que definen que política se va a seguir para que un proceso pase al estado de ejecución.

Planificación Round-Robin
En este tipo de planificación cada proceso tiene asignado un quantum de tiempo para ejecutarse y en el caso de que no pueda terminar la ejecución en su quantum el proceso pasa de nuevo a la cola de procesos para ser ejecutado por otro quantum luego de recorrer la cola para asegurarse que todos los procesos reciban ese quantum de procesamiento.

Planificación por prioridad

En la planificación round-robin todos los procesos son tratados con la misma prioridad. Para el caso de este tipo de planificación a cada proceso se le asigna una prioridad y los mismos son ejecutados
Colas múltiples
Las colas múltiples están basadas en una pila que sirve como índice de una lista de procesos que se tienen que ejecutar.


Primero el trabajo más corto
Este tipo de algoritmo de planificación se usa para trabajos en batch o de procesamiento por lotes en los cuales se puede saber cual es el tiempo de duración de la ejecución de cada proceso y entonces se puede seleccionar primero el trabajo más corto. El problema que se presenta con éste algoritmo es que los grandes procesos podrían sufrir de inanición dado que cualquier proceso pequeño se "cuela" sobre uno de mayor tamaño y como resultado final se podría dar el caso que el proceso grande nunca obtenga procesamiento.

Planificación garantizada

En este modelo de planificación se tiene en cuenta la cantidad de usuarios en el sistema y se le asigna a cada uno el tiempo de ejecución de 1/n (siendo n la cantidad total de usuarios) de esa forma el planificador tiene que llevar cuenta del tiempo de ejecución de los procesos y balancear el tiempo que están utilizando el procesador para cumplir con la ecuación previa.
Conceptos de planificación.

            El objetivo de la multiprogramación es que en todo momento se ejecute un proceso para maximizar la utilización del CPU. En un sistema monoprocesador nunca habrá  más de un proceso en ejecución. Si hay más procesos tendrán que esperar a que el CPU  esté libre y pueda volver a planificarse.
            El concepto de multiprogramación es muy sencillo: un proceso se ejecuta hasta que tenga que esperar, generalmente a que termine una solicitud de E/S. En un sistema de computo sencillo, el CPU permanecerá inactivo; todo este tiempo de espera se desperdicia sin efectuar una actividad útil. Con la multiprogramación tratamos de emplear productivamente este tiempo. Varios procesos se conservan en la memoria a la vez, y cuando uno de ellos tiene que esperar, el sistema operativo le quita el CPU al proceso y se lo da a otro; este modelo continúa, Cada vez que un proceso tiene que esperar, otro  pueda utilizar el CPU.
            Los beneficios de la multiprogramación son un aumento de la utilización del CPU y una mayor productividad.

Planificación del CPU

            La planificación es una función fundamental del sistema operativo. Casi todos los recursos de una computadora se planifican antes de usarse. Por supuesto, el CPU es una de los principales


            Recursos de la computadora, de modo que su planificación es parte modular del diseño de los sistemas operativos.


- Ciclo de ráfaga del CPU y de E/S.

            El éxito de la planificación del CPU depende de la siguiente prioridad observada de los procesos: la ejecución de un proceso consiste en un ciclo de ejecucióndel CPU y de E/S, y los procesos se alternan entre estos dos estados. La ejecución del proceso se inicia con una rafaga de CPU;  a ésta le siguen una ráfaga de E/S, otra ráfaga de CPU, una más de E/S, etc. Finalmente, la última ráfaga de CPU terminará con una solicitud al sistema para que concluya la ejecución, en vez de otra ráfaga de E/S.

            Las duraciones de estas ráfagas de CPU se han medido, y, aunque varían considerablemente de un proceso a otro y entre computadoras, Generalmente la curva se caracteriza como exponencial o hiperhexponencial. Hay un gran número de ráfagas de CPU de corta duración y un pequeño número de larga duración.




- Planificador del CPU.
            Siempre que el CPU queda inactivo, el sistema operativo debe seleccionar para su ejecución uno de sus procesos de la cola de procesos listos. El proceso de selección es revisado por el planificador a corto plazo. (o planificador del CPU). El planificador selecciona uno de los procesos en memoria que están listos para ejecución y le asigna el CPU.

- Estructura de planificación.
            Las decisiones de planificación del CPU pueden efectuarse en una de las cuatro circunstancias siguientes:
1.         Cuando un proceso cambia del estado de ejecución a estado de espera (por ejemplo, solicitud de E/S petición de esperar la terminación de uno de los procesos hijo).
2.         Cuando un proceso cambia del estado de ejecución al estado listo (por ejemplo, cuando ocurre una interrupción)
3.         Cuando un proceso cambia del estado de espera al estado listo (por ejemplo, al completarse la E/S).
4.         Cuando termina un proceso.

2.4. Concurrencia y secuenciabilidad.

Procesos concurrentes.

            Los procesos son concurrentes si existen simultáneamente. Los procesos concurrentes pueden funcionar en forma totalmente independiente unos de otros, o pueden ser asíncronos, lo cual significa que en ocasiones requiere cierta sincronización y cooperación.
            Las siguientes definiciones son esenciales para comprender los conceptos de concurrencia y secuencialidad.


* Actividad.

            . Procesos: Es un programa en ejecución.

            . Tarea:      Son las distintas partes de un proceso que se ejecutan simultáneamente.


* Sistemas:

. Multiprogramación: Admiten varias actividades que comparten el procesador, pero sólo una puede estar ejecutándose en un momento dado.

. Multiproceso: Las actividades se ejecutan en sus propios procesadores, conectados a través de una red de comunicaciones.


* Paralelismo:
            Es la ejecución de diversas actividades simultáneamente en varios procesadores. Si sólo existe un procesador gestionando multiprogramación, se puede decir que existe pseudo-paralelismo. Se trata de un concepto físico producido por la existencia de varios procesadores.

* Concurrencia:
            Es la existencia de varias actividades ejecutándose simultáneamente, y necesitan sincronizarse para actuar conjuntamente. Se trata, en este caso, de un concepto lógico, ya que sólo hace referencia a las actividades, sin importar el número de procesadores presentes.

            Para que dos actividades, sean concurrentes, es necesario que tengan relación entre sí, como puede ser la cooperación en un trabajo determinado o el uso de información compartida.

            En un sistema monoprocesador, la existencia de multiprogramación es condición necesaria, pero no suficiente para que exista concurrencia, ya que los procesos pueden ejecutarse independientemente. Por ejemplo, un editor y un compilador pueden estar ejecutándose simultáneamente en una computadora sin que exista concurrencia entre ellos. Por otro lado si un programa se está ejecutando y se encuentra grabando datos en un archivo, y otro programa también en ejecución está leyendo datos de ese mismo archivo, sí existe concurrencia entre ellos, pues el funcionamiento de uno interfiere en el funcionamiento de otro.
            Si un sistema es multiprocesador, también pueden presentarse situaciones de concurrencia siempre y cuando las actividades necesiten actuar entre sí, bien por utilizar información común, o por cualquier otra causa.

            Los procesos del sistema pueden ejecutarse concurrentemente, puede haber múltiples tareas en el CPU con varios procesos. Existen varias razones para permitir la ejecución concurrente:

* Compartir recursos físicos.

            Ya que los recursos del hardware de la computadora son limitados, nos podemos ver obligados a compartirlos en un entorno multiusuario.

* Compartir recursos lógicos.

Puesto que varios usuarios pueden interesarse en el mismo elemento de información (por ejemplo un archivo compartido), debemos proporcionar un entorno que permita el acceso concurrente a estos tipos de recursos.


* Acelerar los cálculos.

            Si queremos que una tarea se ejecute con mayor rapidez, debemos dividirla en subtareas, cada una de las cuales se ejecutara, en paralelo con las demás.

* Modularidad.

            Podremos construir el sistema en forma modular, dividiendo las funciones del sistema en procesos separados.

* Comodidad.

            Un usuario puede tener que ejecutar varias tareas a la vez, por ejemplo puede editar, imprimir y compilar en paralelo.

            La ejecución concurrente que requiere la cooperación entre procesos necesita un mecanismo para la sincronización y comunicación de procesos, exclusión mutua y sincronización.

Problemas de ConcurrenciaEn los sistemas de tiempo compartido (aquellos con varios usuarios, procesos, tareas, trabajos que reparten el uso de CPU entre estos) se presentan muchos problemas debido a que los procesos compiten por los recursos del sistema. Imagine que un proceso está escribiendo en la unidad de cinta y se le termina su turno de ejecución e inmediatamente después el proceso elegido para ejecutarse comienza a escribir sobre la misma cinta. El resultado es una cinta cuyo contenido es un desastre de datos mezclados. Así como la cinta, existen una multitud de recursos cuyo acceso debe der controlado para evitar los problemas de la concurrencia. 
El sistema operativo debe ofrecer mecanismos para sincronizar la ejecución de procesos: semáforos, envío de mensajes, 'pipes', etc. Los semáforos son rutinas de software (que en su nivel más interno se auxilian del hardware) para lograr exclusión mutua en el uso de recursos. Para entender este y otros mecanismos es importante entender los problemas generales de concurrencia, los cuales se describen enseguida. 

·         Condiciones de Carrera o Competencia: La condición de carrera (race condition) ocurre cuando dos o más procesos accesan un recurso compartido sin control, de manera que el resultado combinado de este acceso depende del orden de llegada. Suponga, por ejemplo, que dos clientes de un banco realizan cada uno una operación en cajeros diferentes al mismo tiempo.

·         El usuario A quiere hacer un depósito. El B un retiro. El usuario A comienza la transacción y lee su saldo que es 1000. En ese momento pierde su turno de ejecución (y su saldo queda como 1000) y el usuario B inicia el retiro: lee el saldo que es 1000, retira 200 y almacena el nuevo saldo que es 800 y termina. El turno de ejecución regresa al usuario A el cual hace su depósito de 100, quedando saldo = saldo + 100 = 1000 + 100 = 1100. Como se ve, el retiro se perdió y eso le encanta al usuario A y B, pero al banquero no le convino esta transacción. El error pudo ser al revés, quedando el saldo final en 800.

·         Postergación o Aplazamiento Indefinido(a): Esto se mencionó en el apartado anterior y consiste en el hecho de que uno o varios procesos nunca reciban el suficiente tiempo de ejecución para terminar su tarea. Por ejemplo, que un proceso ocupe un recurso y lo marque como 'ocupado' y que termine sin marcarlo como 'desocupado'. Si algún otro proceso pide ese recurso, lo verá 'ocupado' y esperará indefinidamente a que se 'desocupe'.

·         Condición de Espera Circular: Esto ocurre cuando dos o más procesos forman una cadena de espera que los involucra a todos. Por ejemplo, suponga que el proceso A tiene asignado el recurso 'cinta' y el proceso B tiene asignado el recurso 'disco'. En ese momento al proceso A se le ocurre pedir el recurso 'disco' y al proceso B el recurso 'cinta'. Ahi se forma una espera circular entre esos dos procesos que se puede evitar quitándole a la fuerza un recurso a cualquiera de los dos procesos.

·         Condición de No Apropiación: Esta condición no resulta precisamente de la concurrencia, pero juega un papel importante en este ambiente. Esta condición especifica que si un proceso tiene asignado un recurso, dicho recurso no puede arrebatársele por ningún motivo, y estará disponible hasta que el proceso lo 'suelte' por su voluntad.

·         Condición de Espera Ocupada: Esta condición consiste en que un proceso pide un recurso que ya está asignado a otro proceso y la condición de no apropiación se debe cumplir. Entonces el proceso estará gastando el resto de su time slice checando si el recurso fue liberado. Es decir, desperdicia su tiempo de ejecución en esperar. La solución más común a este problema consiste en que el sistema operativo se dé cuenta de esta situación y mande a una cola de espera al proceso, otorgándole inmediatamente el turno de ejecución a otro proceso.

·         Condición de Exclusión Mutua: Cuando un proceso usa un recurso del sistema realiza una serie de operaciones sobre el recurso y después lo deja de usar. A la sección de código que usa ese recurso se le llama 'región crítica'. La condición de exclusión mutua establece que solamente se permite a un proceso estar dentro de la misma región crítica. Esto es, que en cualquier momento solamente un proceso puede usar un recurso a la vez. Para lograr la exclusión mutua se ideo también el concepto de 'región crítica'. Para logar la exclusión mutua generalmente se usan algunas técnicas para lograr entrar a la región crítica: semáforos, monitores, el algoritmo de Dekker y Peterson, los 'candados'. Para ver una descripción de estos algoritmos consulte


·         Condición de Ocupar y Esperar un Recurso: Consiste en que un proceso pide un recurso y se le asigna. Antes de soltarlo, pide otro recurso que otro proceso ya tiene asignado.


Los problemas descritos son todos importantes para el sistema operativo, ya que debe ser capaz de prevenir o corregirlos. Tal vez el problema más serio que se puede presentar en un ambiente de concurrencia es el 'abrazo mortal', también llamado 'trabazón' y en inglés deadlock. El deadlock es una condición que ningún sistema o conjunto de procesos quisiera exhibir, ya que consiste en que se presentan al mismo tiempo cuatro condiciones necesarias: La condición de no apropiación, la condición de espera circular, la condición de exclusión mutua y la condición de ocupar y esperar un recurso. Ante esto, si el deadlock involucra a todos los procesos del sistema, el sistema ya no podrá hacer algo productivo. Si el deadlock involucra algunos procesos, éstos quedarán congelados para siempre.

2.3. Procesos ligeros: Hilos o hebras.

Procesos ligeros
Los procesos ligeros son programas en ejecución son básicamente procesos pero a diferencia de éstos últimos que solo tienen un hilo de ejecución los primeros tienen el hilo principal más hilos secundarios o hijos, en éste caso todos los procesos hijos comparten la información del hilo principal pero además puede cada hilo tener su información privada.

Dentro de la información propia tenemos:

·                     Contador de programa
·                     Pila
·                     Registros.
·                     Estado del proceso ligero.
·                     Dentro de la información compartida tenemos:
·                     Variables globales.
·                     Archivos abiertos
·                     Señales
·                     Semáforos.
·                     Contabilidad.



Los hilos o procesos ligeros son una parte de código o miniprograma que puede ser ejecutada independientemente, de forma que una aplicación o un applet puede tener varios hilos ejecutándose simultáneamente y efectuando distintas tareas; estos hilos se encuentran dentro de un programa y son parte de él. 
Los hilos, a veces también llamados contextos de ejecución, pueden ser utilizados para la implementación de algoritmos paralelos o procesos concurrentes, sin ser necesario disponer de equipos con estructura de multiprocesador. En el caso de un solo procesador, los procesos ligeros incorporan mecanismos para compartirlo, estableciéndose prioridades 
entre ellos y también facilidades de sincronización, cuando es necesario. 
Multiproceso se refiere a dos programas que se ejecutan "aparentemente" a la vez, bajo el controldel sistema operativo.
Multihilo se refiere a que dos o mas tareas se ejecutan "aparentemente" a la vez, dentro de un mismo programa.

2.2. Estados y transiciones de los procesos.

Un proceso puede estar en cualquiera de los siguientes tres estados: Listo, En ejecución y Bloqueado.
Los procesos en el estado listo son los que pueden pasar a estado de ejecución si el planificador los selecciona. Los procesos en el estado ejecución son los que se están ejecutando en el procesador en ese momento dado. Los procesos que se encuentran en estado bloqueado están esperando la respuesta de algún otro proceso para poder continuar con su ejecución. Por ejemplo operación de E/S.

Un proceso puede variar entre 5 distintos estados:

New: cuando el proceso esta siendo creado.
Running: cuando el proceso se esta ejecutando.
Waiting: cuando el proceso esta esperando que se cumpla algún otro evento.
Ready: cuando el proceso esta pronto para ejecutar, esperando por la CPU.
Terminated: cuando el proceso esta terminado.
Estado de los Procesos.Los bloques de control de los procesos se almacenan en colas, cada una de las cuales representa un estado particular de los procesos, existiendo en cada bloque, entre otras informaciones. Los estados de los procesos son internos del sistema operativo y transparentes al usuario.



Los estados de los procesos se pueden dividir en dos tipos: activos e inactivos.


1.- Estados activos: Son aquellos que compiten con el procesador o están en condiciones de hacerlo. Se dividen en:


Ejecución. Estado en el que se encuentra un proceso cuando tiene el control del procesador. En un sistema monoprocesador este estado sólo lo puede tener un proceso.
Preparado. Aquellos procesos que están dispuestos para ser ejecutados, pero no están en ejecución por alguna causa (Interrupción, haber entrado en cola estando otro proceso en ejecución, etc.).
Bloqueado. Son los procesos que no pueden ejecutarse de momento por necesitar algún recurso no disponible (generalmente recursos de entrada/salida).
2.- Estados inactivos: Son aquellos que no pueden competir por el procesador, pero que pueden volver a hacerlo por medio de ciertas operaciones. En estos estados se mantiene el bloque de control de proceso aparcado hasta que vuelva a ser activado. Se trata de procesos que no han terminado su trabajo que lo han impedido y que pueden volver a activarse desde el punto en que se quedaron sin que tengan que volver a ejecutarse desde el principio.


Son de dos tipos: 


·         Suspendido bloqueado. Es el proceso que fue suspendido en espera de un evento, sin que hayan desaparecido las causas de su bloqueo.
·         Suspendido programado. Es el proceso que han sido suspendido, pero no tiene causa parta estar bloqueado.
Estados de los procesos
•Nuevo: El proceso es creado.
•Ejecución: Se ejecutan instrucciónes.
•Espera: El proceso esta en espera por la ocurrencia de algún evento.
•Listo: El proceso esta esperando a que le asignen el procesador.
•Terminado: El proceso finaliza su ejecución.
•Diagrama de estados de los procesos.
Información asociada con cada proceso:
•Estado del proceso
•Program counter
•Registros del CPU
•Información de planificación del CPU
•Memoria
•Información para administración
•Información de estatus de E/S
Creación de Procesos.
En UNIX el lanzamiento de procesos se realiza a través de la llamada al sistema fork().

Para utilizar esta llamada al sistema se emplea el header  <unistd.h>.

Su sintaxis es:
                        Pid=fork();

Una llamada exitosa a fork() crea un proceso que es una copia del proceso que lo invoco. Duplica las variables del proceso original con una excepción, el nuevo proceso creado recibe le nombre de proceso hijo. El proceso que lo creo se denomina proceso padre, y el sistema devuelve un 0 al proceso hijo y un valor positivo distinto de 0 (pid del hijo) al proceso  padre.

Después de la llamada exitosa a fork(), tanto el proceso padre como el hijo corren en forma simultanea a partir del punto siguiente a la invocación del fork.

La figura siguiente muestra esta situación:


…..
Printf(“Antes del fork \n”);
Pid=fork();
Printf(“Después del fork\n”);
…….

AC

A




Antes
------------------------------------------ fork   ------------------------------------------------------------
Después
…..
Printf(“Antes del fork \n”); Pid=fork();
Printf(“Después del fork\n”);
…….

AC

…..
Printf(“Antes del fork \n”); Pid=fork();
Printf(“Después del fork\n”);
…….

AC

B

A



En la figura se muestran 3 líneas de código de un proceso; un printf, un fork y otro printf.
Hay 2 secciones en la figura: antes y después. La sección antes muestra la situación antes de la invocación al fork. Sólo existe el proceso A. El Apuntador AC (apuntador de código) señala a la instrucción que se está ejecutando. Como se está indicando el primer printf  Imprime el texto “Antes del fork”.
La sección después muestra la situación inmediatamente después de la llamada a fork. Existen ahora 2 procesos: Ay B. A es el proceso original, es decir, el proceso padre. B es una copia de A, es decir el proceso hijo. Ambos corren en forma simultánea. Dado que el apuntador AC, señala al último printf, se imprime el texto “Después del fork”. Se imprime 2 veces, una por parte del padre y la otra por parte del hijo.
h
Descriptor  de procesos y recursos.
            Es una estructura de datos asociada a una entidad informática ya sea un (Recurso o Proceso), en la cual se indica y actualiza todas las informaciones relativas a dicha entidad.
En el caso de un proceso la información general  que contiene es:
1).-      Identificador: Que puede ser interno y externo.
                                   - Interno:       Sistemas.
                                   - Externo:      Usuario.
2).-      Descripción de la máquina virtual asociada: como espacio virtual asignado, tipo de mapeo, tipo de acceso.
3).-      Descripción de los recursos de la máquina que usa como: Lista de recursos que el proceso tiene  derecho a solicitar, dirección real en la memoria principal, estado de las         variables internas  del CPU, prioridad, etc.
4).-      Estados funcionales del proceso:    Los  estados  de  los  procesos  son  internos  del sistema operativo  y  transparente  al   usuario.  Para  éste,  su proceso  estará  siempre en ejecución independientemente  del   estado  en que se encuentre internamente el sistema.

Los  procesos  se  pueden  encontrar  en  tres estados.

             Estados de los procesos.

            Un proceso puede encontrarse en estado de ejecución, bloqueado o listo (que también se llama ejecutable). 
            De estos estados de los procesos se derivan las siguientes transiciones y estados:

Transición: El paso de un estado a otro.

Transiciones:

            1. El proceso se bloquea en la entrada.
            2. El planificador elige otro proceso.
            3. El planificador elige este proceso.
            4. La entrada se vuelve disponible.

            Estados:

            1. Ejecución (que en realidad hace uso del CPU en ese instante).
            2. Bloqueado (incapaz de correr hasta que suceda algún evento externo.
3. Listo (ejecutable; se detiene temporalmente para permitir que se ejecute otro
     proceso).

En estos tres estados son posibles cuatro transiciones:

1.         Ocurre cuando un proceso descubre que no puede continuar. En algún sistema el proceso debe ejecutar una llamada al sistema, BLOCK, para entrar en estado bloqueado.
2 y 3.   Son ocasionadas por el planificador del proceso, que es parte del sistema operativo sin que el proceso llegue a saber de ella.
2.         Ocurre cuando el planificador decide que el proceso en ejecución ya ha corrido el tiempo suficiente y es tiempo de permitir que otro proceso tome tiempo de CPU.
3.         Ocurre cuando todos los procesos han utilizado su parte del tiempo y es hora de que el primer proceso vuelva a correr.
4.         Ocurre cuando aparece el evento externo que estaba esperando un proceso (como el arribo de alguna entrada). Si ningún otro proceso corre en ese instante, la transición  3 se  activará de inmediato y el proceso iniciara su ejecución, de lo contrario tendrá que esperar, en estado listo.

            Los estados de los procesos se pueden dividir en dos tipos:  activos  e  inactivos.



*          Estados activos.
            Son aquellos que compiten por  el  procesador o están en condiciones de hacerlo.

Estados de un proceso y sus transiciones.

. Ejecución.                Estado  en  el  que  se  encuentra un proceso cuando tiene el control del procesador. En un sistema monoprocesador este estado sólo lo puede tener proceso.
. Listo.                        Aquellos  procesos  que  están  dispuestos para ser ejecutados, pero no están en ejecución  por alguna causa (interrupción, haber entrado, en la cola estando otro proceso en ejecución, etc.
. Bloqueados.             Son  los  procesos  que  no  pueden  ejecutarse  de momento por necesitar algún recurso no disponible (generalmente recursos de E/S).

* Estados inactivos.
            Son aquellos que no pueden competir por el procesador, pero que puedan volver a hacerlo por medio de ciertas operaciones. En estos estados se mantiene el bloque de control de proceso suspendido hasta que vuelva a ser activado.
Son de dos tipos:
Suspendido bloqueado.
Es el proceso que fue suspendido en espera de un evento, sin que hayan desaparecido las causas de su bloqueo.

Suspendido preparado.
Es el proceso que ha sido suspendido, pero no tiene causa para estar bloqueado.


Transiciones de estado.

            Todo proceso a lo largo de su existencia puede cambiar de estado varias veces. Cada uno  de estos cambios se denomina transición de estado.

Transiciones de estado de proceso.

Transiciones de estado.

La asignación del CPU al primer proceso de la lista de listos es llamada despacho, y es ejecutado por la entidad del sistema llamada despachador. Indicamos esta transición de la manera siguiente:

            Despacho (nombre del proceso): Listo                                en   ejecución.
            Mientras el proceso tenga CPU,  se dice que esta en ejecución. Para prevenir que cualquier  proceso monopolice el sistema, ya sea de manera accidental o maliciosamente el sistema operativo ajusta un reloj de interrupción del hardware para permitir al usuario ejecutar su proceso durante un intervalo de tiempo especifico o cuanto. Si el proceso no abandona voluntariamente el CPU, antes de que expire el intervalo, el reloj genera una interrupción, haciendo que el sistema operativo recupere el control. El sistema operativo hace que el proceso que anteriormente  se hallaba en estado de ejecución pase al de listo, y hace que el primer proceso de la lista de listos pase al estado de ejecución.

Estas transiciones de estado se indican como:

            - tiempo excedido (nombre del proceso): en ejecución                   Listo

            - bloqueado (nombre del proceso): en ejecución                            bloqueado

            El proceso cambia del estado bloqueado al estado listo:

            - despertar ( nombre del proceso): bloqueado                                 Listo.

Con  esto tenemos definidas  4  transacciones de estado.

            - despacho ( nombre del proceso): Listo                                          en ejecución

            - tiempo excedido ( nombre del proceso): en ejecución                  Listo

            - bloqueado ( nombre del proceso): en ejecución                           bloqueado

            - despertar ( nombre del proceso ): bloqueado                                 Listo.


Suspensión y Reanudación.

            Un proceso suspendido no puede proseguir sino hasta que lo reanuda otro proceso. Reanudar (o activar) un proceso implica reiniciarlo a partir del punto en el que se suspendió.

            Las operaciones de suspensión y reanudación son importantes por diversa razones:

* Si un sistema está funcionando mal y es probable que falle, se puede suspender los      procesos activos para reanudarlos cuando se haya corregido el problema.

* Un usuario que desconfíe de los resultados parciales de un proceso puede suspenderlo (en vez de abortarlo) hasta que verifique si el proceso funciona correctamente o no.

* Algunos procesos se puede suspender como respuesta a las fluctuaciones a corto plazo  de la carga del sistema y reanudarse cuando las cargas regresen a niveles normales.


Transiciones de estados de los procesos con suspensión y reanudación.

 muestra el diagrama de transiciones de estado de los procesos, modificado para incluir las operaciones de suspensión y reanudación. Se han añadido dos nuevos estados, denominados suspendido-listo y suspendido bloqueado; no hay necesidad de un estado suspendido-ejecutado. Sobre la línea discontinua se encuentran los estados activos, y debajo de ella los estados suspendidos.

            Una suspensión puede ser iniciada por el propio proceso o por otro. En un sistema con un solo procesador el proceso en ejecución puede suspenderse a si mismo; ningún otro proceso podría  estar en ejecución al mismo tiempo para realizar la suspensión (aunque otro proceso sí podría solicitar la suspensión cuando se ejecute). En un sistema de múltiples procesadores, un proceso en ejecución puede suspender a otro que se esté ejecutando en ese mismo momento en un procesador diferente.
            Solamente otro proceso puede suspender un proceso listo. La transición correspondiente es:

1) Suspender (nombre_del_proceso): Listo                      Suspendido-Listo.


Un proceso puede hacer que otro proceso que se encuentre en el estado suspendido-listo pase al estado listo. La transición correspondiente es:

2)         reanudar ( nombre_del_proceso): Suspendido-Listo             Listo.

Un  proceso puede suspender a otro proceso que esté bloqueado. La transición correspondiente es:

3)         suspender ( nombre_del_proceso): Bloqueado                 Suspendido-Bloqueado.

Un proceso puede reanudar otro proceso que esté suspendido-bloqueado. La transición correspondiente es:

4)         reanudar ( nombre_del_proceso): Suspendido-Bloqueado                  Bloqueado.

Como la suspensión es por lo general una actividad de alta prioridad, se debe realizar de inmediato. Cuando se presenta finalmente el término de la operación ( si es que termina), el proceso suspendido-bloqueado realiza la siguiente transición.

5)         completar(nombre_del _proceso): suspendido-bloqueado             suspendido-listo.

6)         suspender (nombre_del_proceso): Ejecución                           Suspendido-Listo.


En conclusión los sistemas que administran procesos deben ser capaces de realizar ciertas operaciones sobre procesos y con ellos. Tales operaciones incluyen:

                        - Crear un proceso.
                        - Destruir un proceso.
                        - Suspender un proceso.
                        - Reanudar un proceso.
                        - Cambiar la prioridad de un proceso.
                        - Bloquear un proceso.
                        - Despertar un proceso.
                        - Despachar un proceso.
- Permitir que un proceso se comunique con otro (esto se denomina  
  comunicación entre procesos).

            Crear un proceso implica operaciones como:

            - Dar un nombre a un proceso.
- Insertarlo en la lista de procesos conocidos del sistema ( o tabla de procesos)
            - Determinar la prioridad inicial de proceso.
            - Crear el bloque de control de proceso.
             - Asignar los recursos iniciales al proceso.

Un proceso puede crear un nuevo proceso. Si lo hace el proceso creador se denomina proceso padre, y el proceso creado, proceso hijo. Sólo se necesita un padre para crear un hijo. Tal creación origina una estructura jerárquica de procesos. No se puede destruir un proceso cuando este ha creado otros procesos.

            Destruir un proceso implica eliminarlo del sistema. Se le remueve de la tabla o listas del sistema, sus recursos se devuelven al sistema y su bloque de control de proceso se borra (es decir, el espacio de memoria ocupado por su PCB se devuelve al espacio de memoria disponible.


Operaciones de procesos y recursos.

            Los sistemas operativos poseen una serie de funciones cuyo objetivo es el de la manipulación de los procesos. En general las operaciones que se pueden hacer sobre un proceso son las siguientes:

. Crear el proceso. Se produce con la orden de ejecución del programa y suele     necesitar 
   varios argumentos, como el nombre y la prioridad del proceso.

      Creación de un proceso.


La creación de un proceso puede ser de dos tipos:

. Jerárquica.  En  ella  cada proceso que se crea es hijo del proceso creador y hereda el entorno  de ejecución de su padre.  El primer proceso que ejecuta un usuario será hijo del intérprete  de comandos con el que interactúa.


 Jerarquía de procesos.


. No jerárquico. Cada proceso creado por otro proceso se ejecuta independientemente de su creador con un entorno diferente. Es un tipo de creación que no suele darse en los sistemas operativos actuales.

Además de los dos tipos anteriores se pueden realizar las operaciones siguientes:

. Destruir un proceso. Se trata de la orden de eliminación del proceso con la cual el sistema operativo destruye su PCB ( Proces control Block).
. Suspender un proceso. Es una operación de alta prioridad que paraliza un proceso que puede ser reanudado posteriormente. Suele utilizarse en ocasiones de mal funcionamiento o sobrecarga del sistema.
            . Reanudar un proceso. Trata de activar  un proceso que ha sido previamente      suspendido.
            . Cambiar la prioridad de un proceso.
. Temporizar la ejecución de un proceso. Hace que un determinado proceso se ejecute cada  cierto tiempo (segundos, minutos, horas,...) por etapas o de una sola vez, pero transcurrido un periodo de tiempo fijo.
. Despertar un proceso. Es una forma de desbloquear un proceso que habrá sido bloqueado previamente por temporización o cualquier otra causa.


2.1. Concepto de proceso

Un proceso es un programa en ejecución. Un proceso simple tiene un hilo de ejecución, por el momento dejemos esta última definición como un concepto, luego se verá en más detalle el concepto de hilo. Una vez definido que es un proceso nos podríamos preguntar cuál es la diferencia entre un programa y un proceso, y básicamente la diferencia es que un proceso es una actividad de cierto tipo que contiene un programa, entradas salidas y estados.
Los procesos pueden ser cooperantes o independientes, en el primer caso se entiende que los procesos interactúan entre sí y pertenecen a una misma aplicación. En el caso de procesos independientes en general se debe a que no interactúan y un proceso no requiere información de otros o bien porque son procesos que pertenecen a distintos usuarios.


•          Proceso - un programa en ejecución; la ejecucución del proceso debe progresar de manera secuencial.
•          Un proceso incluye:
–         program counter
–         stack
–         data section
Estados de los procesos
•          Nuevo: El proceso es creado.
•          Ejecución: Se ejecutan instrucciónes.
•          Espera: El proceso esta en espera por la ocurrencia de algún evento.
•          Listo: El proceso esta esperando a que le asignen el procesador.
•          Terminado: El proceso finaliza su ejecución.
•          Diagrama de estados de los procesos.
Información asociada con cada proceso:
•          Estado del proceso
•          Program counter
•          Registros del CPU
•          Información de planificación del CPU
•          Memoria
•          Información para administración
•          Información de estatus de E/S
Proceso:
programa o comando en ejecución.


Características:
·         Un proceso consta de código, datos y pila.
·         Los procesos existen en una jerarquía de árbol (varios Hijos, un sólo padre).
·         El sistema asigna un identificador de proceso (PID) único al iniciar el proceso.
·         El planificador de tareas asigna un tiempo compartido para el proceso según su prioridad (sólo root puede cambiar prioridades).


Ejecución en 1er plano:
proceso iniciado por el usuario o interactivo.
Ejecución en 2o plano:
proceso no interactivo que no necesita ser iniciado por el usuario.
Demonio:
proceso en 2o plano siempre disponible, que da servicio a varias tareas (debe ser propiedad del usuario root).
Proceso zombi:
proceso parado que queda en la tabla de procesos hasta que termine su padre. Este hecho se produce cuando el proceso padre no recoge el código de salida del proceso hijo.
Proceso huérfano:
proceso en ejecución cuyo padre ha finalizado. El nuevo identificador de proceso padre (PPID) coincide con el identificador del proceso init (1).
Concepto  de  proceso.
            Un proceso es  básicamente como un programa en ejecución. Consta del programa ejecutable, los datos y la pila del programa, su contador de programa, apuntador de pila y otros registros, y la  otra información que se necesita para ejecutar el programa.
            La manera sencilla de tener una noción intuitiva de lo que es un proceso consiste en pensar en los sistemas con tiempo compartido. En forma periódica el sistema operativo decide suspender la ejecución de un proceso y dar inicio a la ejecución de otro,  por ejemplo, porque el primero haya tomado ya más de su parte del tiempo del CPU, en terrenos del segundo.

            Cuando un proceso se suspende temporalmente como éste, debe reiniciarse después exactamente en el mismo estado en que se encontraba cuando se detuvo. Esto significa que toda la información relativa al proceso debe guardarse en forma explícita en algún lugar durante la suspensión.
            En muchos sistemas operativos, toda la información referente a cada proceso, diferente del contenido de su espacio de direcciones, se almacena en una tabla de sistema operativo, llamada tabla de procesos, la cual es un arreglo o lista enlazada de estructuras, una para cada proceso en existencia corriente.
            Si un proceso puede crear uno o más procesos diferentes (conocidos como proceso hijo) y estos procesos a la vez originan procesos hijos, se llega rápidamente a la estructura del árbol de procesos.

 Estructura de árbol. Proceso Padre - Hijo.
El proceso A creó dos procesos derivados, B y C.  El proceso B creó tres derivados, D, E y F.
            Se dispone de otras llamadas al sistema para solicitar más memoria ( o para liberar memoria no utilizada), esperar a que termine un proceso hijo y cubrir su programa con uno diferente.

            En un sistema de multiprogramación, el (CPU) también cambia de un programa a otro, ejecutando cada uno en decenas o cientos de milisegundos. En tanto que, en rigor, en cualquier instante de tiempo, el CPU está ejecutando sólo un programa, en el curso de un segundo puede trabajar en varios programas, con la ilusión de paralelismo.

Proceso: Informalmente se define como la actividad que resulta cuando un proceso ejercita un programa, y formalmente consiste en un vector formado por lo siguiente, figura # 15:


            P = < C, Co, E, S, A >
                                                           Algoritmo
                                                           Datos de salida
                                                           Conjunto de datos de entrada {E1, E2, ... En}
                                                           Contexto inicial
                                                           Conjunto de contexto inicial {C0, C1, C2, ... Cn}


            Un proceso puede tomar diferentes estados, puede estar corriendo, puede estar libre o puede estar detenido.  Si consideramos que todo proceso esta constituido de una serie finita de actividades elementales una región crítica de un proceso se define como el conjunto de  actividades elementales cuya ejecución exige el monopolio de recursos compartidos.

            Formalmente se define como el conjunto de partes de los contextos internos compartidos.
                             
  
 Regiones críticas.


Los problemas que deben resolverse en un contexto de procesos concurrentes (como regiones críticas) son los siguientes:
            - Exclusión mutua.
            - Sincronización.

            - Dead lock (Abraso mortal ó Interbloqueo)

6.7. Cifrado

Cifrado Existen muchas defensas frente a los ataques informáticos, que abarcan toda la gama que va desde la metodología a la tecnol...