lunes, 28 de noviembre de 2011

Unidad 2

"ADMINISTRACIÓN DE PROCESOS"

Comandos del Sistema


Inicio/Accesorios/Símbolo del sistema


Comandos "HELP"














Comandos NET















Unidad 2
Administración de Procesos

2.1 Descripción y Control de Procesos
En algunos sistemas operativos como en los de tiempo compartido, cada programa que se ejecuta, por ejemplo mediante una orden de EJECUTAR dada por el usuario, se trata como un proceso independiente. Estos procesos generados por el SO se denominan IMPLÍCITOS. Una vez terminada la ejecución de los mismos, su eliminación también la realiza el propio SO. Así mismo, el SO proporciona en tiempo real los servicios que son necesarios para que el usuario pueda definir procesos de forma explícita. Los programas acceden a estos servicios realizando LLAMADAS AL SISTEMA (SYSTEM CALL).

Estas llamadas pueden aparecer incrustadas en el código de un programa de usuario o del propio sistema, en cuyo caso, se asemejan a llamadas a procedimientos o funciones que dan lugar a transferencias de rutinas del SO cuando se invocan en tiempo real. Las llamadas al sistema se realizan también, pero de forma indirecta, cuando se dan ordenes al SO a través de un terminal (SHELL) la rutina de monitorización del terminal( que es a su vez un proceso) se encarga de transformar la ordenes en llamadas al sistema.

De este modo, al comienzo de la ejecución del programa principal de un usuario se inicia la ejecución de un proceso. A su vez el proceso podría crear nuevos procesos. En este caso, el proceso que crea otro nuevo se denomina proceso padre (parent process), y el proceso creado de denomina proceso hijo (child process). Una vez creado un proceso hijo, la ejecución de padre e hijo transcurre de manera concurrente. De esta forma se puede crear una jerarquía arborescente de procesos, en la que un padre puede tener varios hijos y estos pueden tener otros hijos, etc, pero donde cada hijo sólo tiene un padre.


2.2 Definición de Proceso

Proceso es una instancia de ejecución de un programa, caracterizado por su contador de programa.
Palabra de estado: Palabra que recoge en binario el estado del entorno de programa, después de la ejecución de cada instrucción; Registros: Pequeña memoria interna del microprocesador, formada generalmente por bi-estables del procesador; Segmento de texto; Pila: Zona reservada de la memoria o registros hardware donde se almacena temporalmente el estado o información de un programa, rutina; y datos, etc.


2.3 Estados de los Procesos
El proceso es un elemento dinámico que puede pasar por diferentes estados a lo lo largo de su existencia. De forma general, un proceso puede encontrarse en un instante determinado en uno de lo siguientes estados:
Activo, Preparado, Bloqueado o suspendido, Nonato y Muerto.

  • La tarea activa es la que está ejecutándose en un instante dado. En el caso de sistemas con un único procesador, sólo puede haber una tarea en dicho estado en cada instante.
  • En el estado de preparado, se encuentran todas las tareas que están listas para ejecutarse pero que esperan a que un procesador quede libre (hay otros procesos más prioritarios en ejecución).
  • Las tareas que están a la espera de que se cumpla una condición y que por lo tanto, no están preparadas para ejecutase, se dice que están en el estado bloqueado o suspendido; alguno ejemplos de condición son: que se termine una operación de E/S o que se reciba una señal de sincronización.
  • Un proceso está muerto cuando ha terminado su ejecución o bien el sistema operativo a detectado un error fatal y lo ha transferido a dicho estado. También es posible que haya entrado él como resultado de un fallo del propio sistema operativo (cuestión que desgraciadamente suele ocurrir frecuentemente en algunos SO.
  • El estado de nonato indica que el programa realmente existe pero todavía no es conocido por el SO.

2.4 Control de los Procesos



La mayoría de los procesadores dan soporte para dos modos de ejecución por lo menos. Ciertas instrucciones pueden ejecutarse sólo en modo privilegiado. Entre éstas están la lectura o modificación de registros de control (como la palabra de estado del programa), instrucciones primitivas de E/S e instrucciones relativas a la gestión de memoria. Además, se puede acceder a ciertas regiones de memoria sólo en el modo más privilegiado.
El modo menos privilegiado a menudo se conoce como modo de usuario, ya que los programas de usuario ejecutan normalmente en ese modo. Al modo más privilegiado normalmente se le conoce como modo del sistema, modo de control o modo del núcleo.
La razón por la que se usan dos modos debe quedar clara. Es necesario proteger al sistema operativo y a las tablas importantes del mismo, tales como los bloques de control de procesos, de las injerencias de los programas de usuario. En el modo del núcleo, el software tiene control completo del procesador y de todas sus instrucciones, registros y memoria. Este nivel de control no es necesario y, por seguridad, tampoco conveniente para los programas de usuario.


2.5 Proceso o Hilos
Proceso
Es una ejecución concreta de un programa, con un camino determinado y un valor de sus variables determinados. La unidad mínima de expedición y de asignación de recursos es el proceso.

Estados en los que puede estar un proceso
  • Listo. Tiene todo lo necesario para ejecutarse excepto el procesador.
  • Suspendido. No está en memoria principal.
  • Bloqueado. Está esperando un evento.
  • Bloqueado y suspendido.
  • Listo y suspendido.


Tareas e hilos
Unidad mínima de asignación: Tarea
Unidad mínima de expedición: Hilo

Dos hilos de una misma tarea (denominados hilos pares) comparten el segmento de código, el segmento de datos y un espacio de pila, es decir, los recursos asignados a la tarea.
Podemos captar la funcionalidad de los hilos si comparamos el control de múltiples hilos con el control de múltiples procesos. En el caso de los procesos, cada uno opera independientemente de los otros; cada proceso tiene su propio contador de programa, registro de pila, y espacio de direcciones. Este tipo de organización es muy útil cuando los trabajos que los procesos efectúan no tienen ninguna relación entre si.
Pero cuando los trabajos a realizar van a necesitar, por ejemplo, la llamada a una misma función o bien, la compartición de una variable en memoria, nos interesará englobarlos en una tarea.

Ejemplo
Avion-Torre.

Cuando un hilo está en ejecución, posee el acceso a todos los recursos que tiene asignados la tarea.
Un hilo tendrá lo siguiente:
  • Estado. 
  • Contexto del procesador. Punto en el que estamos ejecutando, la instrucción concretamente en la que nos hallamos.
Es útil a la hora de reanudar un hilo que fue interrumpido con anterioridad, puesto que al guardar el contexto, guardamos la última instrucción que ejecutamos, y así podemos conocer por donde tenemos que continuar la ejecución del hilo.

Pila de ejecución donde se irá metiendo y sacando instrucciones.
(Lugar donde almacenaremos las instrucciones que van a ser ejecutadas).

Espacio de almacenamiento estático donde almacenará las variables.
Acceso a los recursos de la tarea, que son compartidos por todos los hilos de la tarea.

Ventajas del uso de hilos
  • Se tarda menos tiempo en crear un hilo de una tarea existente que en crear un nuevo proceso.
  • Se tarda menos tiempo en terminar un hilo que en terminar un proceso.
  • Se tarda menos tiempo en cambiar entre dos hilos de una misma tarea que en cambiar entre dos procesos (porque los recursos no cambian)
  • Es mas sencillo la comunicación (paso de mensajes) entre hilos de una misma tarea que entre diferentes procesos.
  • Cuando se cambia de un proceso a otro, tiene que intervenir el núcleo del sistema operativo para que haya protección.
  • Cuando se cambia de un hilo a otro, puesto que la asignación de recursos es la misma, no hace falta que intervenga el sistema operativo,

2.6 Concurrencia, Exclusión mutua y Sincronización

Concurrencia
Dos o más procesos decimos que son  paralelos, o que se ejecutan o son procesados al mismo tiempo, es decir, que para ejecutar uno de ellos, no hace falta que se haya ejecutado otro.
En sistemas multiprocesador, esta ejecución simultánea podría conseguirse completamente, puesto que podremos asignarle. Cuando tenemos un solo procesador se producirá un intercalado delas instrucciones de ambos procesos, de tal forma que tendremos la sensación de que hay un paralelismo en el sistema (concurrencia, ejecución simultánea de más de un proceso).
Ahora bien, está claro que en esto tenemos que tener en cuenta que mientras un proceso está escribiendo un valor en una variable determinada, puede darse el caso que otro proceso que es concurrente al primero vaya a leer o escribir en esa misma variable, entonces habrá que estudiar el caso en el que un proceso haga una operación sobre una variable (o recurso en general) y otro proceso concurrente a él realice otra operación de tal forma que no se realice correctamente. Para estudiaresto, y determinar el tipo de operaciones que se pueden realizar sobre recursos compartidos.


Exclusión mutua
Los algoritmos de exclusión mutua (comúnmente abreviada como mutex por mutual exclusion) se usan en programación concurrente para evitar el uso simultáneo de recursos comunes, como variables globales, por fragmentos de código conocidos como secciones críticas.

La mayor parte de estos recursos son las señales, contadores, colas y otros datos que se emplean en la comunicación entre el código que se ejecuta cuando se da servicio a una interrumpción y el código que se ejecuta el resto del tiempo. Se trata de un problema de vital importancia porque, si no se toman las precauciones debidas, una interrupción puede ocurrir entre dos instrucciones cualesquiera del código normal y esto puede provocar graves fallos.

La técnica que se emplea para conseguir la exclusión mutua es inhabilitar las interrupciones durante el conjunto de instrucciones más pequeño que impedirá la corrupción de la estructura compartida (la sección crítica). Esto impide que el código de la interrupción se ejecute en mitad de la sección crítica.

La mayoría de los métodos de exclusión mutua clásicos intentan reducir la latencia y espera activa mediante las colas y cambios de contexto. Algunos investigadores afirman que las pruebas indican que estos algoritmos especiales pierden más tiempo del que ahorran.

A pesar de todo lo dicho, muchas técnicas de exclusión mutua tienen efectos colaterales. Por ejemplo, los semáforos permiten interbloqueos.


Sincronización
Es cuando varios procesos se ejecutan para completar una tarea. Sincronización es un funcionamiento coordinado en la resolución de una tarea encomendada. El SO ofrece mecanismos básicos de comunicación, que permiten trasferir cadenas de bytes. Deben ser procesos que se comunican quienes interpretan el significado de las cadenas trasferidas para su labor coordinada.
Los mecanismos de sincronización son dinámicos. Es decir, cuando se necesita un mecanismo de este estilo, se crea, se usa y destruye, de forma que no se establezca de forma definitiva ningún mecanismo de comunicación.



2.7 Principios Generales de la Concurrencia
En un sistema multiprogramado con un único procesador, los procesos se intercalan en el tiempo aparentando una ejecución simultánea. Aunque no se logra un procesamiento paralelo y produce una sobrecarga en los intercambios de procesos, la ejecución intercalada produce beneficios en la eficiencia del procesamiento y en la estructuración de los programas.

La intercalación y la superposición pueden contemplarse como ejemplos de procesamiento concurrente en un sistema monoprocesador, los problemas son consecuencia de la velocidad de ejecución de los procesos que no pueden predecirse y depende de las actividades de otros procesos, de la forma en que el sistema operativo trata las interrupciones surgen las siguientes dificultades:
  • Compartir recursos globales es riesgoso
  • Para el sistema operativo es difícil gestionar la asignación óptima de recursos
  • Las dificultades anteriores también se presentan en los sistemas multiprocesador
  • El hecho de compartir recursos ocasiona problemas, por esto es necesario proteger a dichos recursos
  • Los problemas de concurrencia se producen incluso cuando hay un único procesador.

Elementos de gestión y diseño que surgen por causa de la concurrencia:
  1. El sistema operativo debe seguir a los distintos procesos activos
  2. El sistema operativo debe asignar y retirar los distintos recursos a cada proceso activo, entre estos se incluyen: Tiempo de procesador, Memoria, Archivos y Dispositivos de E/S.
  3. El sistema operativo debe proteger los datos y los recursos físicos de cada proceso contra injerencias no intencionadas de otros procesos.
  4. Los resultados de un proceso deben ser independientes de la velocidad a la que se realiza la ejecución de otros procesos concurrentes.

2.8 Exclusión mutua
Consiste en que un solo proceso excluye temporalmente a todos los demás para usar un recurso compartido de forma que garantice la integridad del sistema.
Es la comunicación requerida entre dos o más procesos que se están ejecutando en paralelo y que necesitan a la vez el uso de un recurso no compatible. Consiste en asignar el recurso no compatible a sólo uno de los procesos, mientras que los otros deben permanecer a la espera hasta que finalice la utilización de dicho recurso por el proceso al que se le asigno. Cuando este proceso termine, el recurso será asignado a uno de los procesos en espera.

2.9 Semáforos
Semáforos es un algoritmo de control de procesos, que tiene solo dos operaciones básicas, las cuales son:
  • Wait: Pregunta a los procesos si su contador es > ó = que cero, en caso de no ser así, los decrementa. El proceso que cambia en este caso a negativo (−1) desde la cola de procesos Listos a ser ejecutados es el que automáticamente toma el control del procesador.
  • Signal: A partir de un tiempo t definido por el despachador se ejecuta, y pregunta a los procesos si su contador es < que cero en caso de que sea afirmativa la respuesta, saca a este proceso de su ejecución y depende de su estado.

2.10 Monitores
Un monitor encapsula el código relativo a un recurso compartido en un solo módulo de programa.

Ventajas:
  • Mantenimiento más simple
  • Menos errores de programación
La interfaz del monitor es un conjunto de funciones que representan las diferentes operaciones que pueden hacerse con el recurso. La implementación del monitor garantiza la exclusión mutua mediante semáforos o algún otro mecanismo.


2.11 Paso de mensajes

El paso de mensajes es imprescindible en sistemas distribuidos dado que en este caso no existen recursos directamente compartidos para intercambiar información entre los procesos.

Sin embargo, también si se trabaja con un solo procesador pasar mensajes entre procesos es un buen método de sincronizar procesos o trabajos, respectivamente.

El paso de mensajes es una técnica empleada en programación concurrente para aportar sincronización entre procesos y permitir la exclusión mutua, de manera similar a como se hace con los semáforos, monitores, etc.

Los elementos principales que intervienen en el paso de mensajes son el proceso que envía, el que recibe y el mensaje.

Existen dos tipos de paso de mensajes, tales como:
  • Asíncrono: El proceso que envía no espera a que sea recibido el mensaje enviado. Estos puede que tengan un buzón para mantener los mensajes que se han enviado previamente y no han sido recibidos aún.
  • Síncrono: El proceso que envía el mensaje, espera a que este sea recibido, antes de generar y enviar otro mensaje.

2.12 Concurrencia e Interbloqueo (Deadlock)

En computación, la concurrencia es la propiedad de los sistemas que permiten que múltiples procesos sean ejecutados al mismo tiempo, y que potencialmente puedan interactuar entre sí.

Los procesos concurrentes pueden ser ejecutados realmente de forma simultánea, sólo cuando cada uno es ejecutado en diferentes procesadores. En cambio, la concurrencia es simulada si sólo existe un procesador encargado de ejecutar los procesos concurrentes, simulando la concurrencia, ocupándose de forma alternada en uno y otro proceso a pequeñísimos intervalos de tiempo. De esta manera simula que se están ejecutando a la vez.


Debido a que los procesos concurrentes en un sistema pueden interactuar entre otros también en ejecución, el número de caminos de ejecución puede ser extremadamente grande, resultando en un comportamiento sumamente complejo.
En SO, el bloqueo mutuo (también conocido como interbloqueo, traba mortal, deadlock, abrazo mortal) es el bloqueo permanente de un conjunto de procesos o hilos de ejecución en un sistema concurrente que compiten por recursos del sistema o bien se comunican entre ellos.
A diferencia de otros problemas de concurrencia de procesos, no existe una solución general para los interbloqueos.
Todos los interbloqueos surgen de necesidades que no pueden ser satisfechas, por parte de dos o más procesos. 


2.13 Principios de Interbloqueo

En la política del sistema operativo, deben darse tres condiciones para que pueda producirse un interbloqueo:
1- Condición de exclusión mutua: Cada recurso esta asignado a un único proceso o está disponible.
2- Condición de posesión y espera: Los procesos que tienen, en un momento dado, recursos asignados con anterioridad, pueden solicitar nuevos recursos.
3Condición de no apropiación: Los recursos otorgados con anterioridad no pueden ser forzados a dejar un  proceso. El proceso que los posee debe liberarlos en forma explícita.
4- Condición de espera circular (o circulo vicioso de espera): Debe existir una cadena circular de dos o más procesos, cada uno de los cuales espera un recurso poseído por el siguiente miembro de la cadena.



2.14 Acciones a realizar en Interbloqueo
Prevención del interbloqueo:  La estrategia básica de la prevención del interbloqueo consiste, a grandes rasgos, en diseñar su sistema de manera que esté excluida, a priori, la posibilidad de interbloqueo.
Los métodos para prevenir el interbloqueo son de dos tipos:
  • Los métodos indirectos que consisten en impedir la aparición de alguna de las tres condiciones necesarias para que se dé el interbloqueo.
  • Los métodos directos que consisten en evitar la aparición del círculo vicioso de espera.
Un proceso cuando solicita un nuevo recurso, libera los que ya tiene. Si el nuevo recurso se le puede dar, se le devuelven los que ya tenían, sino, no se le da ninguno. El problema es que hay recursos que no son fácilmente expropiables. (Actualización de una base de datos)
No expropiación. El sistema puede expropiar la asignación de un recurso a un proceso. Problema: Hay recursos que no son fácilmente expropiables.
Espera circular: Los recursos se clasifican por categorías y los procesos solo pueden solicitar los recursos en orden creciente, además todos los recursos de una categoría deben ser solicitados a la vez. Una vez que un proceso ha solicitado un recurso de una categoría, no puede solicitar otro de una categoría inferior.

Evitación del interbloqueo: Se conceden solamente aquellas peticiones de recursos que no lleven al sistema a un estado de interbloqueo. Para determinar si un estado es seguro o no usaremos el algoritmo del banquero.
  • Estado seguro: si todos los procesos que ya tienen concedidos los recursos tienen la posibilidad de ser completados en algún orden determinado, incluso si cada uno de esos procesos utilizara todos los recursos a los que esta autorizado.
  • Estado no seguro. No implica la existencia de interbloqueo. Indica que se podría dar alguna secuencia de solicitudes que llevara al sistema a un estado de interbloqueo.
Predicción del interbloqueo: Con predicción del interbloqueo, por otro lado, se pueden alcanzar las tres condiciones necesarias, pero se realizan elecciones acertadas para asegurar que nunca se llega al punto de interbloqueo.
Se decide dinámicamente si la petición actual de asignación de un recurso podría, de concederse, llevar potencialmente a un interbloqueo.
La predicción del interbloqueo necesita, por lo tanto, conocer las peticiones futuras de recursos.
Detección del interbloqueo: Con la detección del interbloqueo, se concederán los recursos que los procesos necesiten siempre que sea posible. Periódicamente, el S. O. ejecuta un algoritmo que permite detectar la condición de círculo vicioso de espera.  
La detección del interbloqueo es el proceso de determinar si realmente existe un interbloqueo e identificar los procesos y recursos implicados en él. Este método está basado en suponer que un interbloqueo no se presente y que los recursos del sistema que han sido asignados, se liberarán en el momento que otro proceso lo requiera.
Recuperación del interbloqueo: Para recuperar un sistema interbloqueado necesitamos conocer los procesos que producen el interbloqueo y después realizaremos una de las siguientes acciones:
- Reiniciar un proceso (abandonar). Se pierde todo lo que el proceso haya ejecutado. Si persiste el interbloqueo abandonamos más procesos. Abandonar y comprobar el estado del sistema.
- Reiniciar todos los procesos. Devolvemos los procesos a un estado anterior en el cual no haya interbloqueo. Para volver atrás tengo que haberlo guardado en memoria.
- Expropiar o apropiar recursos. Vamos a expropiar recursos a procesos hasta que deje de existir el interbloqueo. Hay recursos fácilmente expropiables o no fácilmente expropiables.

Recuperación Manual: Está forma de recuperación consiste en avisarle al administrador o al operador del sistema que se ha presentado un interbloqueo, y será el administrador el que solucione dicho problema de la manera más conveniente posible, de modo que su decisión no afecte demasiado a al usuario del proceso en conflicto, y sobre todo que no afecte a los demás usuarios del sistema.

Recuperación Automática: Dentro de esta recuperación automática tenemos dos opciones para romper el interbloqueo: Una consiste en abortar uno o más procesos hasta romper la espera circular, y la segunda es apropiar algunos recursos de uno o más de los procesos bloqueados.