This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
1. Elementos funcionales de un SI. Repaso.2. Concepto de Proceso o Tarea.
1. PCB, Bloque de Control de Proceso2. Tabla de Procesos3. Tipos de Procesos4. Creación de Procesos5. Terminación de Procesos6. Estados y transiciones de Procesos
3. Multiprogramación y Multiproceso1. Principios de Concurrencia2. Planificación de Procesos3. Expulsión de un Proceso de la CPU
4. Razones para suspender un Proceso5. Problemas con los Procesos
4. Concepto de Hilos y SO Multihilos y Multiproceso.5. Programación Concurrente6. Comunicación entre Procesos7. Sincronización entre Procesos8. Programación Paralela y Distribuida9. Herramientas gráficas para la gestión de
Un programa es un conjunto de instrucciones listo para ser ejecutado. Es el resultado de un proceso de compilación y por tanto es un concepto pasivo dado que no se está ejecutando.
2.- Concepto de Proceso o Tarea:Un proceso o tarea es un concepto manejado por el sistema operativo 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 s u planificación.
2.- Concepto de Proceso o Tarea:Características de los procesos (II):�Los procesos pertenecientes a los usuarios se
ejecutan en el modo usuario del procesador (con restricciones de acceso a los recursos), los que pertenecen al sistema se ejecutarán en el modo kernel del procesador (podrán acceder a cualquier recurso).
�Para que un proceso de usuario acceda a los recursos tendrá que hacerlo por medio de llamadas al sistema.
�Los procesos se podrán comunicar, sincronizar y colaborar entre ellos.
Proceso init : es el primer proceso a nivel de usuario iniciado por el SO y es el padre de todos los procesos de usuario. Tiene el pid con valor 1. Si representásemos a todos estos procesos en un árbol, entonces Init quedaría como el nodo raíz.
s Procesos huérfanos : Cuando un proceso padre muere antes que el proceso hijo, este proceso hijo queda huérfano y es adoptado por el proceso Init. En la siguiente imagen vemos cómo, al morir un proceso padre, Init acepta a sus procesos hijos.
s Procesos zombies : Un proceso que termina no puede abandonar el sistema hasta que su padre acepte su c ódigo de retorno. Si el proceso padre ya está muerto, es adoptado por el proceso init . Si el proceso padre está vivo pero nunca ejecuta un wait() o proceso por el que espera a la finalización de su hijo, el código de retorno de l proceso hijo nunca será aceptado y tal proceso se convierte en zombie. Un proceso zombie no tiene ni código, ni pi la, ni datos, pero continúa habitando en la tabla de proce sos (que es de tamaño fijo).
Los procesos son creados y destruidos por el sistema operativo, así como también éste se debe hacer cargo de la comunicació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 .
Un proceso puede crear nuevos hijos mediante una llamada al SO. El proceso creador se denomina padre y, el creado hijo . En Windows se puede crear un proceso con CreateProcess , donde se indica el fichero ejecutable donde está el código del hijo. En sistemas UNIX, las llamadas al sistema son �fork , crea un proceso hijo que es un duplicado
del padre.�exec, sustituye el código por un nuevo fichero
Un proceso termina cuando invoca a una llamada al sistema específica, por ejemplo exit() . También si se genera una excepción y el SO decide abortarlo. En sistemas UNIX, cuando un proceso termina, muere también su descendencia.
�Listo : El proceso está listo para ser ejecutado y espera a que se le asigne tiempo de CPU. Todos los procesos en este estado están compitiendo por la CPU.
�Finalizado : Ha finalizado su ejecución ya sea de forma normal o anormal. En este estado los procesos permanecen mientras el SO libera sus recursos y extrae información necesaria para tareas de contabilidad.
Se denomina multiprogramación o multitarea , a la técnica que permite que dos o más procesos ocupen la misma unidad de memoria principal y que sean ejecutados al "mismo tiempo" (seudo-paralelismo, ya que en una única CPU sólo puede haber un proceso a la vez) en la unidad central de proceso o CPU, es decir, permite la ejecución de varios procesos al mismo tiempo corriendo sobre un único procesador.
Ventajas:� Permite la existencia de varios procesos en ejecuci ón.� Permite el servicio interactivo simultáneo a varios usuarios
de manera eficiente.� Aprovecha los tiempos que los procesos pasan espera ndo
a que se completen sus operaciones de E/S, por lo q ue aumenta el uso de la CPU.
� Las direcciones de los procesos son relativas, el programador no se preocupa por saber en dónde estar á el proceso dado que el sistema operativo es el que se encarga de convertir la dirección lógica en física.
El multiproceso implica la existencia de varios procesadores en el mismo sistema, ejecutando por ejemplo simultáneamente diferentes trabajos, pudiendo ser usados en multiprogramación.
En cambio un sistema de multiprogramación no podría ser utilizado en multiproceso si sólo tuvier a un procesador.
El grado de multiprogramación viene determinado por el número de procesos activos.
La ejecución aparentemente simultánea de varios procesos en un mismo sistema, requiere repartir el tiempo de CPU entre los objetos a ejecutar. Eso implica expulsar de la CPU, al proceso en ejecución y asignarla a un proceso preparado . Esta actividad se conoce como cambio de contexto .
Tipos de multitarea (I):�Multitarea Nula : es aquel SO que carece de
multitarea, por ejemplo MS-DOS.�Multitarea Corporativa, Cooperativa o No
apropiativa : es aquella donde los procesos de usuario son los que ceden la CPU al SO a intervalos regulares. Es el tipo de multitarea de los SO Windows anteriores a 1995 como Windows 3.11.
Tipos de multitarea (II):�Multitarea Preferente o Apropiativa : es aquella en
donde el SO se encarga de administrar el/los procesador/es, repartiendo el tiempo de uso del mismo entre los distintos procesos que esperan utilizarlo. Si hay un solo procesador, cada proceso lo utiliza en periodos cortísimos de tiempo, dando la sensación de que se ejecutan al mismo tiempo. Es el tipo de multitarea de los SO UNIX (y sus clones Linux), Windows NT, etc.
Tipos de multitarea (III):�Multitarea Real : es aquella en donde el SO ejecuta
los procesos realmente al mismo tiempo, haciendo uso de múltiples procesadores. En el caso de que los procesos o tareas sean más que la cantidad de procesadores, éstos comienzan a ejecutarse como en la multitarea preferente. Es el tipo de multitarea de los SO modernos. En este caso tenemos un sistema multiproceso.
La Concurrencia es la habilidad para ejecutar varias actividades en paralelo o simultáneamente en un sistema con un único procesador.
Comprende entre otras, la comunicación entre procesos, la compartición y competencia por los recursos, la sincronización de la ejecución de varios procesos y la asignación del procesador a los procesos.
El proceso del SO dedicado a la tarea de determinar el procesos a ejecutar, recibe el nombre de planificador.
Este proceso suele estar en estado bloqueado , y es despertado periódicamente, dependiendo del esquema de planificación, o cuando el proceso en ejecución no puede continuar y pasa a estado bloqueado .3.2.
Planificador de trabajos: Encargado del intercambio entre memoria y almacenamiento secundario. Controla el número de pr ocesos en memoria. Se ejecuta con menor frecuencia ���� puede ser lento.
Planificador de la CPU: Selecciona un proceso preparado y le asignar la CPU. Se ejecuta con mucha frecuencia ���� debe ser más rápido.
s La programación multiproceso supone la compartición y competencia entre los procesos por el uso de recursos físicos.Los procesos necesitan técnicas de:�Comunicación : necesidad de transmitir
información entre procesos concurrentes. �Sincronización : necesidad de que las
ejecuciones de los procesos concurrentes se produzcan según una secuenciación temporal, conocida y establecida entre ellos.
Una hebra o hilo (thread) o proceso ligero , es un punto de ejecución de un proceso. Un proceso tendrá una o más hilos.
Los hilos de un mismo proceso compartirán recursos, siempre pertenecen a un proceso y no pueden existir por ellos mismos, pero pueden ser planificados por ejecución .
Los hilos no son independientes entre sí. Como todo s los hilos pueden acceder a todas las direcciones de la tarea, un hilo puede leer la pila de cualquier otro hilo o escribir sobr e ella.
Los procesos pueden pertenecer a varios usuarios, pero los hilos de un proceso pertenecen a un mismo usuario y por tanto, se asume que estarán diseñados para colaborar, no para competir. La programación de procesos multihilo se ajusta a la programación concurrente sobre sistemas que comparten memoria.
Con los hilos distinguimos dos tipos o niveles de procesos:�Procesos pesados: contienen uno o varios
hilos que comparten la misma memoria y recursos. Así un proceso pesado puede contener centenares de hilos sin mucho coste adicional, tan solo los BCP de sus hilos.
�Procesos ligeros: implementados por el SO o por el programa de usuario.
EJEMPLOVeamos la diferencia entre la programación secuencial clásica, y la programación concurrente. Para ello supongamos que tenemos que realizar un programa que cada 3 seg. muestre el mensaje Hola y cada 5 seg. muestre el mensaje Mundo .
En este ejemplo estamos tratando las instrucciones de modificación de la variable n como atómicas. Pero, ¿qué pasaría si realmente cada modificación supone la ejecución de varias instrucciones atómicas? Una instrucción atómica no puede ser entrelazada con la ejecución de otras instrucciones. Dependiendo de la atomicidad, algunas soluciones serán correctas o no.
Las secciones de código de un programa que acceden a un mismo recurso (un mismo objeto de una clase, un fichero del disco, etc.) desde dos procesos o hilos distintos se denominan secciones críticas .
La comunicación de procesos es la capacidad de transmitir información de un proceso a otro. La forma de comunicarse varios procesos o hilos, normalmente consiste en compartir un mismo objeto (uso de memoria compartida), que suele pasarse como parámetro en la clase constructora de la clase hilo. Será necesario además, disponer de un sistema de sincronización para garantizar el acceso exclusivo a las variables compartidas.
Formas de conseguir la comunicación:�Memoria compartida , requiere un mecanismo de
sincronización externo y, la responsabilidad de comunicación recae en los procesos, mientras que el SO tan solo proporciona llamadas para manipular dicha memoria compartida.
�Paso de mensajes , la responsabilidad de comunicación y sincronización recae en el SO, que proporciona un e nlace lógico entre procesos. Los procesos sólo tienen que invocar correctamente a dos llamadas básicas: send y receive, que pueden ser bloqueantes o no.
La sincronización surge debido a la necesidad de ev itar que dos o más procesos o hilos traten de acceder a l os mismos recursos al mismo tiempo. La sincronización es la capacidad de informar de la situación de un proceso a otro y se puede obtener:�Por exclusión mutua , asegurando que un solo proceso
tiene acceso a un recurso compartido único.�Por condición , asegurando que un proceso no
progresa hasta que se cumpla una determinada condición.
Al igual como la comunicación, la sincronización pu ede conseguirse de dos formas distintas:�Memoria compartida , mediante los métodos siguientes:
� Inhibición de interrupciones que consiste en que un proceso inhabilita todas las interrupciones justo antes de entrar en su sección crítica, y las rehabilita cuando sale de ella;
� Espera activa ,� Semáforos , son mecanismos tanto de comunicación como
de sincronización.� Regiones críticas ,� Monitores .
�Paso de mensajes utilizando para ello canales o buzones. Son mecanismos tanto de comunicación como de sincronización.
El problema del productor-consumidor , en el que los procesos productores producen elementos de informac ión que se almacenan en un buffer compartido hasta ser retirados por los procesos consumidores. Si el buff er estávacío, los consumidores esperan; si está lleno, espe ran los productores hasta que se libere espacio. Este e s muy habitual en un sistema operativo. El esquema client e-servidor es un caso particular del productor-consum idor donde los procesos clientes producen peticiones que son consumidas por un proceso servidor. E
El problema de los lectores y escritores ; en el que hay un objeto de datos (fichero de texto) que es utilizado por varios procesos, unos leen y otro que escribe. Solo puede utilizar el recurso un proceso y solo uno, es decir, o bien un proceso estará escribiendo o bien leyendo, pero nunca ocurrirá simultáneamente (teniendo en cuenta que si no lo esta utilizando nadie, tendrápreferencia el escritor ante el lector).
El problema de los filósofos comilones , en el que cinco filósofos se sientan a la mesa, cada uno con un pla to de espagueti. El espagueti es tan escurridizo que un f ilósofo necesita dos tenedores para comerlo. Entre cada dos platos hay un tenedor. La vida de un filósofo const a de periodos alternos de comer y pensar. Cuando un filó sofo tiene hambre, intenta obtener un tenedor para su ma no derecha, y otro para su mano izquierda, cogiendo un o a la vez y en cualquier orden. Si logra obtener los dos tenedores, come un rato y después deja los tenedore s y continúa pensando. En este caso, el recurso compart ido son los tenedores.
La programación paralela requiere el uso de varios procesadores trabajando juntos para resolver una tarea común. El modo de uso de los procesadores puede ser diseñado por el programador, de forma que:�Cada procesador trabaja en una porción del
problema.�Los procesos pueden intercambiar datos, a
través de la memoria o por una red de interconexión.
La concurrencia es más general que el paralelismo, de forma que las soluciones que se utilizan en la programación concurrente para la sincronización y comunicación son válidas para la programación paralela
La programación distribuida supone la existencia de varios procesadores geográficamente distribuidos. Hay paso de mensajes pero se necesita infraestructura especial.