Page 1

UNIVERSIDAD POLITÉCNICA TRRITORIAL DE LARA PROGRAMA NACIONAL DE FORMACIÓN EN INFORMÁTICA

GESTIÓN DE PROCESOS SISTEMAS OPERATIVOS

Prof. Pura Castillo. | Sistemas Operativos. | junio de 2018


INTRODUCCIÓN

Un programa no puede hacer nada si la CPU no ejecuta sus instrucciones. Todos los programas cuya ejecución solicitan los usuarios lo hacen en forma de procesos, de ahí la importancia de conocerlos en detalle Podemos pensar en un Proceso como la unidad de trabajo de un sistema. El “sistema” consiste en una colección de procesos, algunos de los cuales son procesos del sistema operativo (los que ejecutan código del sistema), siendo el resto procesos de usuario (los que ejecutan código de algún usuario como una porción de un programa en ejecución o todo el programa, pero su definición se ampliará a medida que avancemos en el estudio. Propósito de la unidad Con el estudio de este tema se pretende brindar una noción general acerca de los conceptos y problemas relacionados con la gestión de procesos y threads en sistemas operativos. Se conocerá en forma general cómo se realiza la comunicación entre los procesos y subprocesos. Objetivos Objetivo conceptual: que el alumno aprenda conceptos fundamentales de la gestión de procesos, métodos de planificación de procesos, comunicación entre procesos, sincronización de procesos y manejo de bloqueos mutuos. El tema también incluye un tratamiento de hilos.. Objetivo procedimental: . Que el alumno adquiera las destrezas necesarias para gestionar procesos en un sistema operativo multiusuario. •

Que Identifique los problemas más comunes que se dan en la comunicación de los procesos. . Que Identifique, analice y explique los diferentes algoritmos que se han diseñado para eliminar o disminuir los problemas de comunicación entre procesos.

Prof. Pura Castillo. Material recolectado con fines académicos

1


PROCESOS Y SUBPROCESOS Un proceso es en esencia un programa en ejecución. Cada proceso tiene asociado un espacio de direcciones, una lista de ubicaciones de memoria que va desde algún mínimo (generalmente 0) hasta cierto valor máximo, donde el proceso puede leer y escribir información. El espacio de direcciones contiene el programa ejecutable, los datos del programa y su pila. Un proceso necesita ciertos recursos, incluidos tiempo de CPU, memoria, archivos y dispositivos de E/S, para llevar a cabo su tarea. Estos recursos se otorgan al proceso en el momento en que se crea, o bien se le asignan durante su ejecución. Un proceso no es más que un programa en ejecución, e incluye los valores actuales del contador de programa, los registros y las variables. Conceptualmente cada uno de estos procesos tiene su propia CPU virtual. Desde luego, en la realidad la verdadera CPU conmuta de un proceso a otro Es de hacer notar que cuando se arranca un sistema operativo se crean varios procesos. Algunos de ellos son procesos en primer plano; es decir, procesos que interactúan con los usuarios (humanos) y realizan trabajo para ellos. Otros son procesos en segundo plano, que no están asociados con usuarios específicos sino con una función específica. OPERACIONES SOBRE LOS PROCESOS En general los procesos pueden ser creados y eliminados dinámicamente, por lo que los sistemas operativos deben proporcionar mecanismos para la creación y terminación de los mismos. 1. Crear: puede hacerse desde un proceso ya existente o a través del intérprete de comandos del S.O. en cualquier caso se considera hijo del proceso creador. El trabajo para el S.O. consiste en darle una entrada en el PCB y pasarlo a la cola de preparados. Hay varias formas de crear procesos: •

Inicialización del sistema. Cuando se inicia el sistema se crean varios procesos, algunos interactúan con el usuario y otros no (demonios)

Ejecución de una llamada al sistema para crear procesos por parte de un proceso en ejecución. Mediante una llamada al sistema. Por ejemplo para bajar datos es conveniente crear un proceso para que los ponga en el buffer.

Prof. Pura Castillo. Material recolectado con fines académicos

2


Solicitud de un usuario para crear un proceso. En modo interactivo es muy común por parte de los usuarios.

Inicio de un trabajo por lotes.

En UNIX sólo hay una llamada al sistema para crear un proceso: fork. Esta llamada crea un clon exacto del proceso que hizo la llamada. Después de fork, los dos procesos (padre e hijo) tienen la misma imagen de memoria, las mismas cadenas de entorno y los mismos archivos abiertos. Los pasos de creación de procesos en UNIX es el siguiente: Un proceso especial llamado init, está presente en la imagen de arranque. Cuando dicho proceso comienza a ejecutarse lee un archivo que indica cuantas terminales hay, y genera un proceso nuevo para cada una. Estos procesos esperan a que alguien inicie sesión. Si hay inicio de sesión login exitoso, el proceso login ejecuta un shell para aceptar comandos. Estos pueden generar más procesos, y así de forma sucesiva. Por lo tanto todos los procesos del sistema pertenecen a un árbol que tiene a init como raíz. El proceso hijo puede invocar la llamada al sistema exec (),   sustituye su imagen en memoria por la de un programa diferente En Windows una sola llamada a una función de Win32 (CreateProcess) maneja la creación de procesos y carga el programa correcto en el nuevo proceso. Tanto en UNIX como en Windows, una vez que se crea un proceso, el padre y el hijo tienen sus propios espacios de direcciones distintos. Si cualquiera de los procesos modifica una palabra en su espacio de direcciones, esta modificación no es visible para el otro proceso.

Prof. Pura Castillo. Material recolectado con fines académicos

3


EJEMPLO FORK()

EJEMPLO EXECVE()

#include <stdio.h> #include <sys/types.h> #include <unistd.h main() { int a,val=2; a=fork(); switch(a) { case -1: break; /*error */ case 0: val--; /*Proceso hijo */ break; /*Proceso padre */ default: val++; } printf("\n val= %d\n",val); }

#include <stdio.h> #include <unistd.h> main() { int error; char *arg[3],*argp[1]; arg[0]="ls"; arg[1]="-l"; arg[2]=NULL; argp[0]=NULL; /* entorno execve("/bin/ls",arg,argp);

*/

printf("\n error \n"); }

  El padre puede dedicarse a crear más hijos, o esperar a que termine el hijo –  wait() lo saca de la cola de “listos” hasta que el hijo termina

Prof. Pura Castillo. Material recolectado con fines académicos

4


Ejercicio Dado el siguiente programa en el cual se crea un proceso y se espera la finalización De su ejecución para crear otro y volver a esperar a su finalización, se pide modificarlo para que se creen los dos procesos y ejecuten en paralelo y el proceso padre espere por la finalización de los dos Solución #include <sys/types.h>

#include <sys/types.h>

#include <stdio.h>

#include <stdio.h> int main(int argc, char *argv[] )

int main(int argc, char *argv[] ) {

{

pid_t pid;

pid_t pid;

int status;

int status; pid = fork();

pid = fork(); if (pid == 0) { sleep(5);

if (pid != 0)

exit(5);

}

{ pid = fork();

while (pid != wait(&status));

if (pid == 0)

}

{

else {

sleep(1);

exit(1);

} sleep(5);

exit(5);

wait(&status);

wait(&status);

}

} pid = fork();

if (pid != 0)

{ while (pid != wait(&status)); } else {

sleep(1);

exit(1);

} }

Prof. Pura Castillo. Material recolectado con fines académicos

5


2. Terminar de Procesos Cuando un proceso termina todos los recursos asignados son liberados (memoria, ficheros abiertos, entradas en tablas,...), el kernel notifica al proceso padre el evento.   Un proceso puede terminar de 2 formas: • Voluntariamente: Llamada al sistema exit() La mayoría de los procesos terminan debido a que han concluido su trabajo. Cuando un compilador ha compilado el programa que recibe, ejecuta una llamada al sistema para indicar al sistema operativo que ha terminado. Esta llamada es exit en UNIX y ExitProcess en Windows. También podemos hablar de Salida por error (voluntaria). Por ejemplo, si un usuario escribe el comando cc foo.c para compilar el programa foo.c y no existe dicho archivo, el compilador simplemente termina • Involuntariamente: Error fatal, Eliminado por otro proceso La razón de terminación es un error fatal producido por el proceso, a menudo debido a un error en el programa. Por ejemplo cuando se hace referencia a una parte de memoria no existente o la división entre cero. En UNIX esta llamada es kill. La función correspondiente en Win32 es erminateProcess. En ambos casos, el proceso eliminador debe tener la autorización necesaria para realizar la eliminación  Cuando un proceso termina pueden suceder dos cosas: –  Sus hijos no se ven afectados –  Todos los hijos acaban también, terminación en cascada En Unix, los hijos del proceso terminado pasan a depender del proceso init, el proceso finalizado pasa a estado Zombie hasta que el proceso padre recoge su código de finalización. La terminación de un proceso y la eliminación de su BCP son tareas diferenciadas. Cuando el padre obtiene la información del hijo, se procede a eliminar las estructuras de datos 3. Cambiar La Prioridad Del Proceso. 4. Dormir O Bloquear La Ejecución De Un Proceso. Dormir un proceso un tiempo. 5. Despertar un Proceso. Una forma de desbloquear un proceso de forma artificial. Se suele emplear para procesos dormidos artificialmente.

Prof. Pura Castillo. Material recolectado con fines académicos

6


6. Suspender Un Proceso. Suele hacerse en situaciones de sobrecarga del S.O. 7. Reanudar Un Proceso. Activar un proceso suspendido. BLOQUE DE CONTROL DE SISTEMA Estructura básica para almacenar los datos necesarios para poder ejecutar el sistema operativo: – Lista de descriptores de procesos. – Puntero al descriptor del proceso que está haciendo uso del procesador. – Puntero a la cola de descriptores de procesos que no hacen uso del ordenador, pero están en espera. – Punteros a colas de procesos que se encuentran en diferentes situaciones. – Identificadores de las rutinas necesarias para tratar las interrupciones producidas por el hardware, el software o errores indeseados. Puntero a la cola de descriptores de recursos BLOQUE DE CONTROLDE PROCESOS Cada proceso se representa en el sistema operativo con un bloque de control de proceso PCB, en inglés (Process Control Block)), también llamado bloque de control de tarea. El BCP es un registro especial donde el sistema operativo agrupa toda la información que necesita conocer respecto a un proceso particular.

Estado del proceso: El estado puede ser: nuevo, listo, en ejecución, en espera, detenido, etcétera El contador indica la dirección de la siguiente instrucción que se ejecutará para este proceso. Registros de CPU: El número y el tipo de los registros varía dependiendo de la arquitectura del computador. Los registros incluyen acumuladores, registros índices, punteros de pila y registros de propósito general, así como cualquier información de códigos de condición que haya. Junto con el contador de program, esta información de estado se Prof. Pura Castillo. Material recolectado con fines académicos

7


debe guardar cuando ocurre una interrupción, para que el proceso pueda continuar correctamente después. Información de planificación de CPU: Esta información incluye una prioridad del proceso, punteros a colas de planificación y cualquier otro parámetro de planificación que haya. Información de gestión de memoria: Esta información puede incluir datos tales como el valor de los registros de base y límite, las tablas de páginas o las tablas de segmentos, dependiendo del sistema de memoria empleado por el sistema operativo. Información contable: Esta información incluye la cantidad de tiempo de CPU y tiempo real consumida, límites de tiempo, números de cuenta, números de trabajo o proceso, y demás. Información de estado de E/S: La información incluye la lista de dispositivos de E/S asignadas a este proceso, una lista de archivos abiertos, etcétera. El PCB sirve como depósito de cualquier información que pueda variar de un proceso a otro ESTADOS DE LOS PROCESOS Los procesos tienen un estado que cambia a lo largo de su ejecución y está definido parcialmente por la actividad actual del propio proceso. Los estados por los que puede pasar un proceso varían de un sistema operativo a otro, aunque los siguientes son comunes a todos ellos: o Nuevo. El proceso está siendo creado. o Ejecutando. El proceso está siendo ejecutado puesto que ha sido escogido por el planificador de la CPU. Sólo puede haber un proceso en este estado por CPU en el sistema. o Bloqueado. El proceso está esperando por algún evento, como por ejemplo que termine alguna operación de E/S o que se reciba alguna señal. Obviamente varios procesos pueden estar en este estado. o Preparado. El proceso está esperando a que se le asigne la CPU. Varios procesos pueden estar en este estado. Prof. Pura Castillo. Material recolectado con fines académicos

8


o Terminado. El proceso ha finalizado su ejecución y espera a que se liberen los recursos que le fueron asignados. Nuevo

Admitido

Salida

Terminado

Temporizador

Preparado

E/S o evento Completado

Ejecutando

Asignación por el Planificador de la CPU

A la espera de un Evento o E/S

Bloqueado

Podemos dividirlos en activos e inactivos Activos: compite por el procesador o está en condiciones de poder hacerlo •

Ejecución.

Preparado/Listo:

Bloqueado:

loqueado

Inactivos: Estado en el que se sitúan los procesos que no pueden competir por el procesador. – Suspendido bloqueado: procesos suspendidos mientras se esperaba un evento, y las causas de su bloqueo no han desaparecido. – Suspendido preparado: procesos suspendidos pero que no tienen causas para estar bloqueados

Prof. Pura Castillo. Material recolectado con fines académicos

9


PLANIFICACION DE PROCESOS La planificación de procesos se refiere a cómo determina el sistema operativo al orden en que irá cediendo el uso del procesador a los procesos que lo vayan solicitando, y a las políticas que empleará para que el uso que den a dicho tiempo no sea excesivo respecto al uso esperado del sistema. Características:   

La planificación es la base para lograr la multiprogramación. Es un módulo de SO que se encarga de mover los procesos entre las distintas colas de planificación. La ejecución de un proceso consiste en una alternancia entre ráfagas de CPU y ráfagas de E/S

Tipos de planificación: 

No Apropiativa: El proceso en ejecución conserva el uso de la CPU mientras lo desee.

Apropiativa: El sistema operativo puede expulsar a un proceso de la CPU.

Niveles de planificación 

Planificación a corto plazo: o planificador de CPU selecciona uno de los procesos en la cola de preparados y lo asigna a la CPU. Obviamente este planificador es invocado cuando un proceso en ejecución abandona la CPU Selecciona el siguiente proceso a ejecutar.

Planificación a medio plazo:   Selecciona qué procesos se añaden o se retiran (expulsión a swap) de memoria principal.

Planificación a largo plazo: En los sistemas de multiprogramación el planificador de largo plazo o planificador de trabajos selecciona los trabajos desde la cola de entrada en el almacenamiento secundario, dónde están todos almacenados, y los carga en memoria Realiza el control de admisión de procesos a ejecutar. Muy usada en sistemas batch.

Prof. Pura Castillo. Material recolectado con fines académicos

10


Objetivos de la Planificación de Procesos La Planificación de procesos tiene como principales objetivos los siguientes:     

Equidad: Todos los procesos deben ser atendidos. Eficacia: El procesador debe estar ocupado el 100% del tiempo. Tiempo de respuesta: El tiempo empleado en dar respuesta a las solicitudes del usuario debe ser el menor posible. Tiempo de regreso: Reducir al mínimo el tiempo de espera de los resultados esperados por los usuarios por lotes. Rendimiento: Maximizar el número de tareas que se procesan por cada hora.

Funciones del planificador de Procesos:  

Llevar el control del estado de cada proceso. Decidir qué proceso usará el procesador y durante cuánto tiempo, para ello empleará un cierto criterio en base al cual tomará las decisiones. Si implementa multiprogramación, deberá emplear un criterio que evite que un proceso monopolice el procesador. Asignar el procesador al proceso, restableciendo el contexto de la ejecución del proceso por donde fuere. El contexto de la ejecución se encuentra almacenado en el PCB del proceso asignado. Retirar el procesador al proceso, salvando el contexto de la ejecución del proceso, para poder restablecerlo posteriormente una vez que vuelva a ser asignado. El contexto de la ejecución se almacenará en el PCB del proceso retirado.

El planificador de procesos es software, por tanto, requiere emplear el procesador para ejecutar su código.

recurso

Criterios de Planificación: 

Utilización de la CPU: Mantener la CPU tan ocupada como sea posible (maximizar).

Rendimiento: Numero de procesos que se completan por unidad de tiempo (maximizar).

Tiempo de retorno: Tiempo transcurrido desde que se presenta el proceso hasta que se completa (minimizar).

Tiempo de espera: Tiempo que un proceso pasa en la cola de procesos listos esperando la CPU (minimizar).

Tiempo de respuesta: Tiempo que tarda un proceso desde que se le presenta una solicitud hasta que produce la primera respuesta.

Prof. Pura Castillo. Material recolectado con fines académicos

11


Algoritmos de Planificación Estos algoritmos tratan sobre la decisión de elegir a cuál de los procesos que están en la cola de listos se le asignara la CPU. Veamos algunos de ellos.

No Apropiativos ▪ First-Come, First-Serve (FCFS) Primero en llegar, primero en ser atendido Se le

asigna la CPU al proceso que la requirió primero. Se maneja a través de una cola Fifo, tal que cuando un proceso requiere CPU, su PCB se coloca la final de la cola. ▪ Cuando se debe elegir un proceso para asignarle CPU se elige el proceso cuya PCB

esta primera en la cola.

▪ ▪ Shortest-job-first Scheduling (SJF).

Planificación “primero el trabajo más corto”. Este algoritmo elige entre los procesos de la cola de listos, aquel que tenga la próxima ráfaga de CPU más corta. Para ello este dato debe ser conocido, obviamente.

▪ Es un algoritmo que permite que el tiempo de espera promedio sea bajo.Se puede

utilizar en planificadores de largo plazo, pero no en los de corto plazo pues no hay manera de conocer la medida de la próxima ráfaga. Se podría aproximar considerando el valor de la previa.

Prof. Pura Castillo. Material recolectado con fines académicos

12


▪ Por prioridad. Se le asocia un valor a cada proceso que representa la prioridad, y

se le asigna la CPU al proceso de la cola de ready que tenga la mayor prioridad.Los valores asociados a la prioridad son un rango fijo, de 0 a n, según cada sistema. También lo determina cada sistema si el número más bajo es la más alta o la más baja prioridad. POSIX proporciona planificación basada en prioridades.

Prof. Pura Castillo. Material recolectado con fines académicos

13


Algoritmos De Apropiación Algoritmo SRT (Shortest Remaining Time). Es una versión apropiativa de SJF, donde se tiene en cuenta también los procesos de la cola. En el caso de que existan procesos en cola más cortos, se expropia el proceso en ejecución y se ejecutaría el de la cola.

Round-Robin Scheduling (RR). Planificación por turno circular. Se la asigna a cada proceso de la cola de listos un intervalo de tiempo de CPU. Ese intervalo es llamado time slice o quantum. Para implementar este algoritmo la cola de listos se mantiene como una cola FIFO. Y la CPU se va asignando dándole un máximo de 1 quantum a cada proceso. Si el proceso no va a usar todo ese tiempo, usa lo necesario y libera la CPU. Se elige entonces otro proceso de la cola. Si excede el quantum, se produce una interrupción. En ambos casos al dejar la CPU hay un cambio de contexto.

Prof. Pura Castillo. Material recolectado con fines académicos

14


Colas Multinivel En un sistema conviven procesos mixtos. Puede haber requerimientos de tiempo de respuesta distintos si conviven procesos interactivos con procesos batch (o para aquellos que provienen del Unix, procesos en foreground y procesos en background). Existen algoritmos que contemplan esta situación dividiendo la cola de ready en distintas colas según el tipo de proceso, estableciendo una competencia entre las colas y entre los procesos del mismo tipo entre sí. Cada cola puede tener su algoritmo de scheduling: los procesos batch pueden ser “planificados” por un algoritmo FCFS y la cola de procesos interactivos, por un RR.

Prof. Pura Castillo. Material recolectado con fines académicos

15


PROCESOS LIGEROS, HILOS O THREADS

Debido a que los subprocesos tienen alguna de las propiedades de los procesos, a veces se les llaman procesos ligeros. También, se emplea el término múltiples subprocesos para describir la situación en la que se permiten varios subprocesos en el mismo proceso Un proceso ligero es un programa en ejecución (flujo de ejecución) que comparte la imagen de memoria y otras informaciones con otros procesos ligeros. Un proceso puede contener un solo fljo de ejecución, como ocurre en los procesos clásicos, o más de un flujo de ejecución (procesos ligeros). Desde el punto de vista de la programación, un proceso ligero se define como una función cuya ejecución se puede lanzar en paralelo con otras. El hilo de ejecución primario, o proceso ligero primario, corresponde a la función main . Todos los procesos ligeros de un mismo proceso comparten el mismo espacio de direcciones de memoria, que incluye el código, los datos y las pilas de los diferentes procesos ligeros La implementación de subprocesos en espacio de usuario es un método que consiste en colocar por completo el sistema de subprocesos en espacio de usuario. El kernel no sabe nada de ellos. En lo que a él respecta, está administrando procesos ordinarios, de un solo subproceso. La primera ventaja, y la más obvia, es que puede implementarse un sistema de subprocesos en el nivel de usuario en un SO que no maneje subprocesos. Todos los sistemas operativos solían pertenecer a esta categoría, y todavía subsisten algunos. Ahora consideremos la posibilidad de que el kernel esté enterado de la existencia de subprocesos y los administre. No se necesita un sistema de tiempo de ejecución en cada uno. Además, no existe una tabla de subprocesos en cada proceso. En vez de eso, el kernel tiene una tabla de subprocesos que lleva el control de todos los subprocesos del sistema. Cuando un subproceso quiere crear o destruir otro subproceso, emite una llamada al kernel, que se encarga de crearlo o destruirlo actualizando su tabla de subprocesos.

Prof. Pura Castillo. Material recolectado con fines académicos

16


Ventajas – Capacidad de respuesta: si un proceso se bloquea por alguna causa, el proceso puede continuar con otra parte del código. – Compartición de recursos: puede haber varias hebras accediendo a los mismos recursos (memoria, ficheros) – Economía: el trabajo de crear procesos es muy superior al de crear hebras. Los cambios de contexto también son más latosos. (30 y 5 en Solaris) Utilización de arquitecturas multiprocesador: la arquitectura multiprocesador puede ayudar en este sentido. Un proceso monohebra sólo se puede ejecutar sobre un procesador

Prof. Pura Castillo. Material recolectado con fines académicos

17


BIBLIOGRAFÍA Carretero Pérez, Jesús y otros. Sistemas operativos: una visión aplicada. Primera Edición, Editorial McGraw Hill, España, 2001. Silberschatz, Abraham y otros. Sistemas operativos. Sexta Edición, Editorial Limusa Wiley, México, 2002. Tanembaum, Andrew S. Sistemas operativos Modernos. 2ª Edición, Prentice-Hall Hispanoamericana, S.A., México. 2003.

Prof. Pura Castillo. Material recolectado con fines académicos

18

Gestión de Procesos.  

La presente guía presenta el concepto de proceso, el ciclo de vida básico de un proceso y la información asociada a un proceso. Además, se m...

Gestión de Procesos.  

La presente guía presenta el concepto de proceso, el ciclo de vida básico de un proceso y la información asociada a un proceso. Además, se m...

Advertisement