domingo, 1 de octubre de 2017

Introducción a los Sistemas Operativos



Un Sistema operativo es un programa que administra el hardware de una computadora. También proporciona las bases para los programas de aplicación, y actúa como intermediario entre el usuario y el hardware. Estas tareas, pueden ser llevadas a cabo de varias formas, lo que permite que algunos sistemas Operativos se diseñen para ser prácticos, otros eficientes y otros para ser ambas cosas. Dado que un sistema operativo es un software grande y complejo, debe crearse pieza por pieza. En este curso veremos, entre otras cosas, una introducción a los principales componentes de un sistema operativo. 

Resultado de imagen para introduccion a los sistemas operativos
¿Qué hace un sistema Operativo? Un sistema informático puede dividirse en cuatro componentes: el hardware, el sistema Operativo, los programas de aplicación, y los usuarios. El Sistema operativo controla y coordina el uso del hardware entre los diversos programas de aplicación por parte de los distintos usuarios. También podemos ver un sistema informático como hardware, software y datos. El sistema operativo proporciona los medios para hacer un uso adecuado de estos recursos durante el funcionamiento del sistema informático.
Resultado de imagen para introduccion a los sistemas operativos

Definición Sistema Operativo Un sistema operativo es un programa, o conjunto de programas que torna amigable, eficiente y productivo el uso de un computador (hardware), permitiendo la ejecución aplicaciones de usuario. Es el intermediario entre las aplicaciones de usuario y el hardware. Metas: • Brindar un ambiente de realización y ejecución de aplicaciones • Proveer un entorno sin interferencias a cada usuario (interferencia: Lo que un usuario modifica en su entorno, no interfiera ni modifique lo de otro usuario) • Administrar en forma equitativa los recursos(hardware y software) • Hacerlo de la forma mas amigable e intuitiva posible Todas las aplicaciones de usuario requieren un conjunto común de operaciones que son incorporadas al sistema operativo. Tareas principales: • Implementar diferentes entornos para diferentes usos (interfaz grafica, shells, tipo web, etc) • Proveer una o más interfaces con el usuario. • Proveer a las aplicaciones un conjunto de servicios(a través de los “system services”) • Eficiencia y equidad en la administración de recursos. 

2.5. NIVELES, OBJETIVOS Y CRITERIOS DE PLANIFICACION

La planificación de la CPU, en el sentido de conmutarla entre los distintos procesos, es una de las funciones del sistema operativo. Este despacho es llevado a cabo por un pequeño programa llamado planificador a corto plazo o dispatcher (despachador). La misión del dispatcher consiste en asignar la CPU a uno de los procesos ejecutables del sistema, para ello sigue un determinado algoritmo. En secciones posteriores estudiaremos algunos algoritmos posibles. Para que el dispatcher conmute el procesador entre dos procesos es necesario realizar un cambio de proceso.


Los acontecimientos que pueden provocar la llamada al dispatcher dependen del sistema (son un subconjunto de las interrupciones), pero son alguno de estos:

  • El proceso en ejecución acaba su ejecución o no puede seguir ejecutándose (por una E/S, operación WAIT, etc). 
  • Un elemento del sistema operativo ordena el bloqueo del proceso en ejecución (ver estados de un proceso). 
  • El proceso en ejecución agota su cuantum o cuanto de estancia en la CPU. 
  • Un proceso pasa a estado listo.
El scheduling está muy relacionado con la gestión de los recursos. Existen tres niveles de scheduling, como se ilustra en la figura, estos niveles son:

  • Planificador de la CPU o a corto plazo. 
  • Planificador a medio plazo. 
  • Planificador a largo plazo. 
Ya hemos hablado del planificador de la CPU, y en los subapartados posteriores se comentan los dos restantes:

Planificación a largo plazo

Este planificador está presente en algunos sistemas que admiten además de procesos interactivos trabajos por lotes. Usualmente , se les asigna una prioridad baja a los trabajos por lotes, utilizándose estos para mantener ocupados a los recursos del sistema durante períodos de baja actividad de los procesos interactivos. Normalmente, los trabajos por lotes realizan tareas rutinarias como el cálculo de nóminas; en este tipo de tareas el programador puede estimar su gasto en recursos, indicándoselo al sistema. Esto facilita el funcionamiento del planificador a largo plazo.
El objetivo primordial del planificador a largo plazo es el de dar al planificador de la CPU una mezcla equilibrada de trabajos, tales como los limitados por la CPU (utilizan mucho la CPU) o la E/S. Así, por ejemplo, cuando la utilización de la CPU es baja, el planificador puede admitir más trabajos para aumentar el número de procesos listos y, con ello, la probabilidad de tener algún trabajo útil en espera de que se le asigne la CPU. A la inversa, cuando la utilización de la CPU llega a ser alta, y el tiempo de respuesta comienza a reflejarlo, el planificador a largo plazo puede optar por reducir la frecuencia de admisión de trabajos.
Normalmente, se invoca al planificador a largo plazo siempre que un proceso termina. La frecuencia de invocación depende, pues, de la carga del sistema, pero generalmente es mucho menor que la de los otros dos planificadores. Esta baja frecuencia de uso hace que este planificador pueda permitirse utilizar algoritmos complejos, basados en las estimaciones de los nuevos trabajos.

Planificación a Medio Plazo

En los sistemas de multiprogramación y tiempo compartido varios procesos residen en la memoria principal. El tamaño limitado de ésta hace que el número de procesos que residen en ella sea finito. Puede ocurrir que todos los procesos en memoria estén bloqueados, desperdiciándose así la CPU. En algunos sistemas se intercambian procesos enteros (swap) entre memoria principal y memoria secundaria (normalmente discos), con esto se aumenta el número de procesos, y, por tanto, la probabilidad de una mayor utilización de la CPU.
El planificador a medio plazo es el encargado de regir las transiciones de procesos entre memoria principal y secundaria, actúa intentando maximizar la utilización de los recursos. Por ejemplo, transfiriendo siempre a memoria secundaria procesos bloqueados, o transfiriendo a memoria principal procesos bloqueados únicamente por no tener memoria.

2.4. CONCURRENCIA Y SENCUENCIALIDAD


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.
  1. Actividad.
  • Procesos: Es un programa en ejecución.
  • Tarea: Son las distintas partes de un proceso que se ejecutan simultáneamente.
  1. 2. 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.
  1. 3. 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.
  1. 4. 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:
  1. 5. 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.
  1. 6. 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.
  1. 7. 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.
  1. 8. Modularidad.
  • Podremos construir el sistema en forma modular, dividiendo las funciones del sistema en procesos separados.
  1. 9. Comodidad.
  • 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.

    • 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 Concurrencia En 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
    Resultado de imagen para Concurrencia y secuenciabilidad.
    1.1 EJEMPLO DE CONCURRENCIA Y SECUENCIALIDAD

    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






    El concepto de proceso engloba dos conceptos separados y potencialmente independientes: uno relativo a la propiedad de recursos y otro que hace referencia a la ejecución.


    • Unidad que posee recursos: A un proceso se le asigna un espacio de memoria y, de tanto en tanto, se le puede asignar otros recursos como dispositivos de E/S o ficheros.
    • Unidad a la que se le asigna el procesador: Un proceso es un flujo de ejecución (una traza) a través de uno o más programas. Esta ejecución se entremezcla con la de otros procesos. De tal forma, que un proceso tiene un estado (en ejecución, listo, etc) y una prioridad de expedición u origen. La unidad planificada y expedida por el sistema operativo es el proceso.

    Dentro de un proceso puede haber uno o más hilos de control cada uno con:


    1. Un estado de ejecución (en ejecución, listo, bloqueado).
    2. Un contexto de procesador, que se salva cuando no esté ejecutándose.
    3. Una pila de ejecución.
    4. Algún almacenamiento estático para variables locales.
    5. Acceso a la memoria y a los recursos de ese trabajo que comparte con los otros hilos.


    CARACTERISTICAS


    • Se comparten recursos. 
    • La compartición de la memoria permite a las hebras pares comunicarse sin usar ningún mecanismo de comunicación inter-proceso del SO.
    • La conmutación de contexto es más rápida gracias al extenso compartir de recursos
    • No hay protección entre las hebras. 
    • Una hebra puede escribir en la pila de otra hebra del mismo proceso
    • Estado de los procesos ligeros


    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
    • Estado del proceso ligero.· Registros.
    • 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 PROCESOS

    Estados de procesos

    El estado de un proceso define su actividad actual. Durante su existencia, un proceso pasa por una serie de estados discretos. Estos estados son se muestran en el siguiente diagrama:







    A continuación se describe cada uno de estos procesos:


    1. Nuevo: Se dice que un proceso está en estado de nuevo cuando apenas se encuentra en proceso de crearse.
    2. Listo: Un proceso está en estado de listo, cuando podría usar una UCP, si hubiera una disponible.
    3. En ejecución: Se dice que un proceso está estado de ejecución, si en ese momento tiene esta ocupando la CPU.
    4. Bloqueado: Se dice que un proceso está en estado de bloqueado, si espera que ocurra algo, como por ejemplo, la terminación de una E/S, para así poder ponerse en marcha.
    5. Terminado: Cuando un proceso se ha completado su ejecución pasa a ser un proceso terminado.
    Transiciones de estados

    Cuando un trabajo es admitido se crea un proceso equivalente, y es insertado en la ultima parte de la cola de listos (ésta se tratara más adelante). Cuando un proceso pasa de un estado a otro se dice que hace una transición de estado, estas transiciones se describen a continuación.


    1. Admitido(Proceso)(Nuevo Listo): Cuando un proceso se ha creado y se le es permito para competir por la CPU.
    2. Despacho(Proceso)/Listo En ejecución: La asignación de la CPU al primer proceso de la lista de listos es llamado despacho y es ejecutado por la entidad de sistema llamada despachador. Mientras que el proceso tenga la CPU se dice que esta en ejecución.
    3. Tiempo excedido(Proceso)/En ejecución Listo: El S.O , cuando un proceso se le expira el intervalo de tiempo asignado para estar en ejecución (CUANTO), hace que este proceso que se hallaba en estado de ejecución pase al estado de listo y inmediatamente el despachador hace que el primer proceso de la lista pase a estado de ejecución.
    4. Bloqueo(Proceso)/En ejecución Bloqueado: Si un proceso que se encuentra en estado de ejecución inicia una operación de E/s antes que termine su cuanto, el proceso voluntariamente abandona la CPU, es decir, el proceso se bloquea a sí mismo.
    5. Despertar(Proceso)/Bloqueo Listo: La única transición posible en nuestro modelo básico ocurre cuando acaba una operación de E/S (o alguna otra causa por la que esté esperando el proceso), y esta termina pasa a el estado de listo.
    6. Salir(Proceso)/En ejecución Terminado: Esta transición ocurre cuando el proceso se ha terminado de ejecutarse, y pasa a un estado de terminado
    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:

    1. New: cuando el proceso esta siendo creado.
    2. Running: cuando el proceso se esta ejecutando.
    3. Waiting: cuando el proceso esta esperando que se cumpla algún otro evento.
    4. Ready: cuando el proceso esta pronto para ejecutar, esperando por la CPU.
    5. 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. 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).

    1. 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 instrucciones.
    • 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

    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.



    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 no es mas que un programa en ejecución, e incluye los valores actuales del contador de programa, los registros y las variables. Conceptualmente cada unos de estos procesos tiene su propia CPU virtual. Desde luego, en la realidad la verdadera CPU conmuta de un proceso a otro.

    Un proceso es un concepto manejado por el sistema operativo que consiste en el conjunto formado 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 varía ligeramente en el caso de sistemas operativos multihilo, donde un proceso consta de uno o más hilos, la memoria de trabajo (compartida por todos los hilos) y la información de planificación. Cada hilo consta de instrucciones y estado de ejecución.

    Los procesos son creados y destruidos por el sistema operativo, así como también este se debe hacer cargo de lacomunicación entre procesos, pero lo hace a petición de otros procesos. El mecanismo por el cual un proceso crea otro proceso se denomina bifurcación (fork). Los nuevos procesos pueden ser independientes y no compartir el espacio de memoria con el proceso que los ha creado o ser creados en el mismo espacio de memoria.

    En los sistemas operativos multihilo es posible crear tanto hilos como procesos. La diferencia estriba en que un proceso solamente puede crear hilos para sí mismo y en que dichos hilos comparten toda la memoria reservada para el proceso.

    En este modelo: todo software ejecutable de la computadora, lo que a menudo incluye al sistema operativo, esta organizado en una serie del proceso secuenciales, o simplemente procesos.

    La idea clava aquí es que un proceso es una actividad de algún tipo: tiene programa, entrada, salida y un estado. Se puede compartir un procesador entre varios procesos, usando algún algoritmo de planificación para determinar cuando debe de trabajar en un proceso para atender a uno distinto.



    Jerarquías de procesos

    Los sistemas operativos que manejan el concepto de proceso deben contar con algún mecanismo para crear todos los procesos necesarios. en los sistemas muy sencillos, o en los diseñados para ejecutar solo una aplicación.

    En otros sistemas operativos existen llamadas al sistema para crear un proceso, cargar su memoria y ponerlo en ejecutar. Sea cual sea la naturaleza exacta de la llamada al sistema. Los procesos necesitan poder crear otros procesos.

    En MINIX, los procesos se crean con la llamada al sistema FORK (bifurcar), que crea una copia idéntica del proceso invocador. El proceso hijo también puede ejecutar FORK, así que es posible tener un árbol de proceso.
    Un proceso puede estar en cualquiera de los siguientes tres estados: Listo, En ejecución y Bloqueado.