GUIA Procesos Sistemas Operativos
GUIA Procesos Sistemas Operativos
GUIA Procesos Sistemas Operativos
GESTIÓN DE PROCESOS
SISTEMAS OPERATIVOS
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 procedimental:
• 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.
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.
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.
• 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.
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
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
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) if (pid == 0)
{ sleep(5); exit(5); }
{
while (pid != wait(&status)); pid = fork();
if (pid == 0)
}
{ sleep(1); exit(1);
else }
{ sleep(5); exit(5); wait(&status); wait(&status);
} }
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()
– 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
El PCB sirve como depósito de cualquier información que pueda variar de un proceso a
otro
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.
Temporizador
Preparado Ejecutando
Asignación por el
E/S o evento Planificador de la CPU A la espera de un
Completado Evento o E/S
Bloqueado
– Suspendido bloqueado:
procesos suspendidos
mientras se esperaba un
evento, y las causas de su
bloqueo no han desaparecido.
Características:
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.
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.
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.
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.
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
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.
Carretero Pérez, Jesús y otros. Sistemas operativos: una visión aplicada. Primera
Edición, Editorial McGraw Hill, España, 2001.