Tema 16 – Sistemas operativos: Gestión de procesos.

1. Introducción. 2

1.1. Relación con los ciclos impartidos en FP. 2

1.2. Introducción a los SSOO. 2

1.3. Conceptos. 2

2. Procesos y el SO. 2

2.1. Modelo de procesos. 2

2.2. Compartición del Procesador 2

2.3. Creación de un nuevo proceso. 3

2.4. Hilos (threads) o procesos ligeros. 3

3. Planificación del procesador 3

3.1. Introducción. 3

3.2. Objetivos del planificador 3

3.3. Algoritmos de planificación. 4

4. Comunicación y sincronización entre procesos. 5

4.1. Introducción. 5

4.2. Soluciones: software, hardware, semáforos y mensajes. 5

5. Bibliografía y Personalidades Influyentes/Destacadas. 6

5.1. Bibliografía. 6

5.2. Personalidades Destacadas. 6

1. Introducción

1.1. Relación con los ciclos impartidos en FP

Este tema está directamente relacionado con los siguientes módulos y ciclos formativos de la rama de informática:

· CFGS Administración de Sistemas Informáticos: Sistemas informáticos monousuario y multiusuario (SyAI).

· CFGS Desarrollo de Aplicaciones Informáticas: Sistemas informáticos multiusuario y en red (SyAI).

· CFGM Explotación de Sistemas Informáticos: Sistemas operativos en entornos monousuario y multiusuario (SyAI).

1.2. Introducción a los SSOO

Stallings, 2001. “Un programa que controla la ejecución de los programas de aplicación y que actúa como interfaz entre el usuario de un computador y el hardware del mismo”

· Conjunto de programas de control cuya finalidad es hacer más fácil y eficiente el uso del ordenador en que se ejecutan

· Están presentes en todo tipo de sistemas electrónicos que necesiten un software de control sobre el que un usuario pueda trabajar fácilmente, desde super-ordenadores con cientos de microprocesadores (Solaris, AIX, Linux), hasta en aparatos tan comunes como agendas electrónicas (Windows Mobile o Palm OS), teléfonos móviles (Windows Mobile o Simbian OS, y como no, ordenadores personales (WXP, Linux, Mac OS X, etc.)

1.3. Conceptos

· Proceso: Programa en ejecución que comprende el valor actual del contador de programa, los registros y de las variables.

· Monoprogramación: Sólo se puede ejecutar un proceso y hasta que no se termine no puede iniciarse el siguiente. Ya no existen. MSDOS era multitarea pero no expulsiva

· Multiprogramación/Multitarea: Se pueden ejecutar varios procesos simultáneamente, compartiendo el tiempo de uso de procesador. Mejor aprovechamiento de los recursos y aumento del rendimiento del microprocesador

2. Procesos y el SO

2.1. Modelo de procesos

· De manera conceptual se considera que cada proceso tiene su propia CPU virtual, aunque la verdadera CPU alterna entre los procesos “listos” según un determinado algoritmo.

· Cada proceso puede estar básicamente en los estados “en ejecución”, “bloqueado” (esperando una E/S) o “listo”. Sólo un proceso estará en ejecución, y el planificador decidirá en cada instante a cual de los procesos en estado “listo” le cede la CPU.

· El planificador constituye el nivel inferior del sistema operativo, y en él están ocultos todo el manejo de interrupciones, así como el de arranque y parada de los procesos. Esto permite que el resto del SO. se estructure elegantemente en forma de procesos.

· El SO utiliza una tabla de procesos que tiene una entrada por cada proceso, en ésta, guarda información sobre el estado del proceso, su contador de programa el puntero de pila, memoria asignada, información relativa a su planificación y a su utilización de los recursos. Por ejemplo en Linux tiene el nombre de task_struct, y guarda, entre otras propiedades, la prioridad y la política de planificación (round robin, FIFO o tiempo real).

2.2. Compartición del Procesador

· Multitarea cooperativa: las tareas cooperan en el reparto del procesador. Si una tarea no cede el control el sistema quedará bloqueado. MSDOS/W3.11

· Multitarea expulsiva o apropiativa: El SO recupera el control en cada interrupción de reloj hardware y decide si se continúa ejecutando el mismo proceso, o si se le cede la CPU a otro proceso. W2K, Unix, Linux, etc.

2.3. Creación de un nuevo proceso

· Cuando se crea un nuevo proceso (por ejemplo ejecutando un programa) se realizan una serie de acciones:

o Cargar en memoria el código y los datos

o Crear una nueva pila para el proceso

o Iniciar el bloque de control de procesos

o Dar a conocer el nuevo proceso al dispatcher

· Pare crear un proceso en Unix se utiliza la llamada fork() que duplica el código, los datos y la pila del proceso llamante. la función fork() devuelve un cero al proceso hijo y el pid del hijo al proceso padre. En el proceso hijo se podrá llamar a continuación a exec() para ejecutar otro programa, cambiando así el código y los datos.

·

2.4. Hilos (threads) o procesos ligeros

· Unidad básica de ejecución que únicamente posee como propio el contador de programa, los registros del procesador y la pila, y que comparte recursos como la memoria o los archivos abiertos con los hilos de la misma tarea, facilitando así la comparición de recursos.

· Una tarea posee recursos, pero no posee capacidad de ejecución, debe tener al menos un hilo de ejecución. Un proceso clásico sería equivalente a una tarea con un hilo en ejecución.

· Empleando hilos podemos tener varias unidades de ejecución activas en una misma aplicación. Por ejemplo en un procesador de textos, un hilo recoge las pulsaciones del teclado y visualiza el texto y otro hilo realiza las tareas de corrector ortográfico. Otro ejemplo son los sistemas cliente-servidor, en los que el servidor genera un hilo para atender a cada proceso cliente, esto sucede en chats o servidores de páginas Web.

· Como ventajas, los cambios de contexto entre hilos de la misma tarea son mucho más rápidos que entre procesos, además, en sistemas multiprocesador los distintos hilos de una aplicación pueden ser ejecutados en paralelo en distintos procesadores.

· Existe una biblioteca estándar POSIX Threads (pthreads.h) soportada por Linux y Windows 2000 entre otros, que simplifica la creación, desarrollo, portabilidad y seguridad de aplicaciones multihilo para diferentes entornos. En esta, existen llamadas para generar hilos como pthread_creare() que recibe como parámetros la rutina (o función) que ejecutará el hilo, la memoria compartida y otras opciones.

· Sistemas como Solaris o W2K soportan hilos desde el núcleo, Linux en cambio está basado en procesos y para trabajar con hilos lo hace mediante un paquete que se ejecuta en modo usuario, esto acelera los cambios de contexto dentro de un mismo proceso, pero genera otros problemas como que al bloquear un hilo de un proceso, se bloqueen todos los de ese proceso.

3. Planificación del procesador

3.1. Introducción

· El objetivo de un sistema multiprogramado es tener varios procesos ejecutándose concurrentemente con objeto de maximizar la utilización de recursos del sistema. El problema es determinar cuál debe ser el orden en que el procesador es asignado a los diferentes procesos.

· Dispatcher (repartidor): Módulo encargado de realizar los cambios de contexto y transferir el control de unos procesos a otros

· Scheduler (planificador): Responsable de definir las políticas de planificación.

· Funcionamiento: Cada cierto tiempo, se lanzará una interrupción del reloj hardware del sistema. En este momento el sistema recupera el control y el scheduler decide a que proceso cederle la CPU. Por último el dispatcher realiza los cambios de contexto necesarios y le cede la CPU al nuevo proceso. De este modo se evita la monopolización de la CPU. Al tiempo que tarda en lanzarse la interrupción se le denomina “quantum”.

3.2. Objetivos del planificador

· Trato justo, equidad, eficiencia, tiempo de respuesta bajo, tiempo de retorno bajo y rendimiento alto.

· Los objetivos dependerán en parte de la función del sistema. Por ejemplo las versiones home y profesional de Windows XP tienen un quantum bajo para beneficiar a las aplicaciones interactivas, aún a costa de no tener un aprovechamiento alto de la CPU, lo que el usuario espera es que el ratón no se “atasque” y que el sistema responda rápidamente a sus acciones. Por el contrario, en las versiones Server, se aumenta en tiempo del quantum de modo que se benefician los servicios en segundo plano del sistema tales como el IIS, el servidor DNS o el servidor de AD, aumentando a la vez el aprovechamiento de la CPU.

3.3. Algoritmos de planificación

· FIFO: El procesador se asigna a los procesos en función del instante de llegada. Es un algoritmo simple pero perjudica a las aplicaciones interactivas o las que requieren E/S. No existen mecanismos de requisa por lo que se puede monopolizar la CPU.

· Primero el más corto: Asigna el procesador al trabajo cuya siguiente ráfaga de CPU sea más pequeña, minimizando así los tiempos de retorno y favoreciendo las aplicaciones interactivas. Calcula el tiempo de la siguiente ráfaga mediante la media de las anteriores. Puede producir inanición de los procesos con ráfagas más grandes.

· Algoritmos con prioridad: Asocian a cada proceso una prioridad y acorde con ello asignan el procesador al que tiene la prioridad más alta. Se usa la técnica de “envejecimiento”, incrementando progresivamente la prioridad de los procesos que esperan para que no se produzca inanición de los procesos con menos prioridad. La prioridad depende de factores internos (requisitos de memoria, E/S, etc.) y externos (políticas de usuarios, prioridad de unas aplicaciones sobre otras, etc.).

· Round Robin: En los algoritmos anteriores se puede monopolizar la CPU porque no existe requisa. Para solucionarlo en éste se limita la máxima cantidad de tiempo que un proceso puede correr sin producirse un cambio de contexto, a este tiempo se le conoce como “quantum”. Un reloj hardware lanza una interrupción periódicamente, requisando así la CPU al proceso y cediéndosela al siguiente proceso en la cola circular. Especialmente diseñado para sistemas de tiempo compartido. El problema es que sólo existe una cola y no se distingue entre tipos de trabajos.

· Colas multinivel: Dividen la cola de procesos preparados en colas separadas en función del tipo de trabajo. Cada cola puede tener su propio algoritmo de planificación y además debe existir otro algoritmo para determinar en qué cola se ubica inicialmente cada uno de los trabajos. Los trabajos de una cola de menos prioridad no se ejecutarán hasta que no existan procesos en las colas con más prioridad. En colas multinivel realimentadas, los procesos pueden moverse de una cola a otra de forma dinámica, normalmente, las aplicaciones interactivas y con mucha E/S se les aumenta la prioridad, y las tareas con poca E/S y uso intenso de la CPU se des disminuye la prioridad para que no monopolicen la CPU. Este técnica es muy usada en SO interactivos actuales.

· Algoritmo de Linux:

o Relativamente simple y equitativo, evitando posibles problemas de inanición. El quantum es de 200ms, si la tarea no libera la CPU en ese tiempo se le requisa la misma y se guardan sus registros y su información de estado en la estructura task_struct y se recupera el estado de la nueva tarea.

o Se distingue entre procesos ordinarios y de tiempo real y la prioridad de los mismos, guardando esta información en la task_struct en los campos policy, priority y rt_priority.

o Linux soporta sistemas con varios procesadores en configuración simétrica (SMP, symmetric multiprocessing), pudiendo repartir la carga entre los distintos procesadores.

o Se utilizan colas multinivel, en cada cola de procesos con la misma prioridad se asigna la CPU según el algoritmo round robin. Los procesos que más usan la CPU disminuyen su prioridad dinámicamente para evitar la inanición de otros procesos

· Algoritmo de Windows 2000:

o La unidad básica de planificación es el hilo o therad. La planificación es expulsiva, utiliza quantums de tiempo y está basada en prioridades, además es válida para sistemas con varios procesadores (SMP).

o Utiliza 32 niveles de prioridad (0-31), siendo las comprendidas entre 1 y 15 reservadas para hilos ordinarios y las comprendidas entre 16 y 31 para hilos con restricciones de tiempo real. Los hilos de tiempo real no ven modificada su prioridad a lo largo de su vida, sin embargo los hilos ordinarios sí. Éstos, heredan la prioridad de la tarea a la que pertenecen a la que se le suma un offset que se ajusta dinámicamente favoreciendo siempre a las aplicaciones interactivas. En caso de que no exista ningún hilo en estado listo, W2K ejecutará un hilo especial de prioridad mínima denominado idle thread.

o El quantum varía en función de la versión de W2K. En la versión profesional tiene un valor de 6 unidades (se decrementa en 3 con cada interrupción de reloj, normalmente cada 10ms, por lo que el quantum es de 20ms), y en la versión Server de 36 unidades (120ms). De este modo, en uno se beneficia el tiempo de respuesta en aplicaciones interactivas, y en otro se obtiene un mejor rendimiento al reducir los cambios de contexto. No obstante, el valor del quantum puede variarse dinámicamente por algunos procesos o manualmente modificando la variable Win32PrioritySeparation del registro de Windows.

4. Comunicación y sincronización entre procesos

4.1. Introducción

· En sistemas que soportan multiprogramación, los procesos pueden compartir recursos de todo tipo, tanto software como hardware, más aún si el sistema trabaja con hilos. Cuando varios procesos o hilos acceden simultáneamente a recursos compartidos, se pueden producir errores. Para evitar el problema es necesario aportar mecanismos que permitan el acceso sincronizado a los recursos.

· En ejemplo típico se produce cuando dos procesos acceden de forma simultánea a una variable compartida para incrementar su valor. Lo que en “C” sería A++;. Si descomponemos esta instrucción en ensamblador, sería:

load R0, A

add RO, 1

store A, R0

Si se ejecutan los dos procesos de forma concurrente, y el primer proceso ejecutara las instrucciones 1 y 2, a continuación se hiciera un cambio de contexto porque se acabara el quantum y el segundo proceso ejecutara las 3 y luego el primer proceso terminara ejecutando la tercera, la variable A se incrementaría en 1 en vez de en 2. A esto se le conoce como problema de condiciones de carrera.

· Para solucionarlo la sentencia que varía el valor de A debería ser “atómica”, es decir, se debería ejecutar de modo indivisible.

· Sincronización: consiste en emplear operaciones atómicas para asegurar la correcta ejecución de procesos cooperantes y evitar las condiciones de carrera.

· Sección crítica: es la sección de código en la que se actualizan datos comunes. Cuando un proceso está en una sección crítica, ningún otro proceso puede estar en una sección crítica.

· Exclusión mutua: es el mecanismo que asegura que sólo un solo proceso está haciendo algo en un instante determinado, en nuestro caso, ejecutando código de una sección crítica.

4.2. Soluciones: software, hardware, semáforos y mensajes

· Soluciones software: Existen diversos algoritmos, los más conocidos son los algoritmos de Dekker y de Peterson, ambos basados en variables de control compartidas. Requieren espera activa y se complican si existen más de dos procesos.

· Soluciones hardware: Basadas en instrucciones máquina específicas como test_and_set que recibe un parámetro y si el valor es 0 lo pone a uno, devolviendo verdadero en ese caso, todo de forma atómica, o swap que intercambia el contenido de dos posiciones de memoria de forma atómica. Requieren espera activa y son dependientes de la máquina.

· Soluciones a través de primitivas del sistema operativo (Semáforos): Creado por Dijkstra. Es proporcionado por el sistema operativo en forma de llamadas al sistema, por tanto, son independientes de la máquina, son simples, pueden trabajar con varios procesos y permiten que varios procesos entren en la sección crítica si es necesario. Consiste en una variable entera que solamente puede ser accedida, aparte de su iniciación, por dos operaciones atómicas denominadas P (wait) y V (signal). Si sólo pueden tener valor 0 ó 1 se les llama semáforos binarios. Permiten realizar la exclusión mutua y sincronizar procesos.

o clip_image001P (semáforo): espera hasta que la variable semáforo sea positiva, en ese momento la decrementa en 1.

o V (semáforo): incrementa la variable semáforo en 1.

Si queremos utilizar semáforos mediante la a biblioteca estándar POSIX threads (pthreads.h), se utilizará el tipo de datos creado para tal efecto pthread_mutex_t exmut;, y las funciones phtread_mutex_lock(&exmut) y pthread_mutex_unlock(&exmut) para realizar las operaciones P y V respectivamente.

· Comunicación con mensajes: Los mensajes proporcionan un mecanismo de comunicación sin necesidad de que los procesos deban compartir memoria, además, podrían estar en máquinas diferentes conectadas en red.

o Un mensaje es la parte de información que es pasada de un proceso a otro y que se depositará temporalmente en un buzón.

o Básicamente tienen dos operaciones: enviar, que copia el mensaje en el buzón del destinatario, y si está lleno se espera hasta que haya espacio libre (si es bloqueantes); y recibir, que emplea el receptor para sacar un mensaje de su buzón, si estuviera vacío, normalmente se espera hasta que llegue un mensaje (si es bloquearte). Si no son bloqueantes, simplemente devuelven un código indicando que el buzón está lleno o vacío.

o Las partes que se comunican pueden ser totalmente independientes, tanto las máquinas como los procesos y los programadores de los mismos. Sólo han de seguir un protocolo o unas reglas similares de envío y recepción de mensajes.

o Ejemplos son: RPCs, TCP/IP, Tuberías de Linux, etc.

5. Bibliografía y Personalidades Influyentes/Destacadas

5.1. Bibliografía

· Tanenbaum, A. S. “Sistemas operativos: diseño e implementación”. 2ª Ed. Prentice Hall. 1998.

· Tanenbaum, A. S. “Sistemas operativos modernos”. 2ª Ed. Prentice Hall. 2003.

· Stallings, W. “Sistemas operativos”. 5ª Ed. Prentice Hall.2005.

· S. Sánchez Prieto “Sistemas Operativos”. Universidad de Alcalá. 2001.

· Carretero, Jesús ”Sistemas operativos. Una visión aplicada”. McGraw Hill. 2001.

· http://es.tldp.org Documentación libre en español de Linux/Unix

· http://msdn.microsoft.com Centro de desarrollo de Microsoft.

· http://www.tutorialparaprofesores.com Documentación de Microsoft para profesores.

· http://technet.microsoft.com Documentación tecnológica de Microsoft

5.2. Personalidades Destacadas

· Linus Torvalds: Ingeniero informático finlandés, iniciador y desarrollador del núcleo (kernel) de Linux a partir del S.O. MINIX. Adoptó la licencia GPL permitiendo así su modificación, redistribución, copia y uso ilimitado.

· Andrew S. Tanenbaum: Director del Departamento de Sistemas en una universidad de Ámsterdam, es conocido por ser el creador de los sistemas operativos MINIX 3.0, con arquitectura micronúcleo y capaz de ejecutar programas UNIX, y Amoeba, sistema operativo completamente distribuido, creados con fines académicos, así como por escribir varios libros sobre sistemas operativos y redes de computadoras, muy valorados por los académicos de medio mundo.

Publicado: marzo 24, 2019 por Laura Gonzalez

Etiquetas: tema 16 informatica