Saturday, July 9, 2016

Procesos



Concepto de proceso

El concepto central en un sistema operativo es la idea de proceso.

Un programa es una colección de instrucciones. Ejemplo: el comando ls es un archivo ejecutable guardado en algún directorio, p.ej., /bin/ls.

Denicion
Un proceso es una abstracción que hace referencia a cada caso de ejecución de un programa.

Ojo: un proceso no tiene por qué estar siempre en ejecución. La vida de un proceso pasa por varias fases, incluyendo la ejecución.

Una analogía: receta de un pastel (el programa), ingredientes (los datos), cocinero (la CPU), la mesa de cocina (la memoria), cada pastel (un proceso), el horno (un dispositivo E/S).

Tipos de procesos

Podemos clasicarlos en función de distintos criterios.

Según su diseño:
Reutilizables: se cargan en memoria cada vez que se usan. Los programas de usuario suelen ser de este tipo.

Reentrantes: se carga una sola copia del código en memoria. Cada vez que se usan se crea un nuevo proceso con su zona de datos propia, pero compartiendo el código.

Según su acceso a CPU y recursos:
No apropiativos: permiten a otros procesos apropiarse de la forma voluntaria (mediante instrucción CPU).

Apropiativos: acceden a los recursos y sólo los abandonan de recursos que ahora poseen.

Según supermanencia en memoria:
Residentes: tienen que permanecer en memoria durante toda su evolución (desde creación hasta terminación).

Intercambiables (swappable): es lo más normal. El SO puede decidir llevarlos a disco a lo largo de su evolución.

Según su nivel de privilegio (no en todos los SO):
No privilegiados: los que normalmente ejecuta el usuario.

Privilegiados: se ejecutan en modo supervisor.

Según su propietario:
Procesos de usuario: son los diseñados por los usuarios. Se ejecutan en modo no protegido.

Procesos del sistema: son los que forman parte del SO (de E/S, de planicación de otros procesos, etc).

Estructuras de datos

¿Qué crees que necesita el SO para gestionar los procesos?

Antes que nada, cargar el código en memoria

El mismo programa puede dar lugar a varios procesos. Necesitará identicarlos: descriptor de proceso.

Si no está siendo ejecutado, necesitará guardar información de ejecución: registros, pila, recursos que está usando, etc.

Necesitará saber la lista de procesos que tiene y el estado en el que están.

Normalmente, usa colas de descriptores de procesos, una para cada estado o incluso para cada dispositivo E/S.

Veamos qué estructuras maneja típicamente el SO . . .

Bloque de Control del Sistema

Un primer grupo de datos es general para todos los procesos.

Denición (Bloque de Control del Sistema)
(en inglésSystem Control Block, SCB) es un conjunto de estructuras
de datos que usa el SO para gestionar la ejecución de los procesos.

El SCB normalmente incluye:

·        Lista de descriptores de procesos.
·        Puntero al descriptor de proceso que está usando la CPU.
·        Punteros a colas de procesos que se encuentran en distintos estados. Ejemplo: procesos en espera.
·        Puntero a la cola de descriptores de recursos.
·        Identicadores de las rutinas para tratar interrupciones hardware o software y errores indeseados.

Las interrupciones permiten al SO tomar el control de CPU, por ejemplo, cuando:

·        Se produce algún tipo de error
·        Hay algún evento externo. P.ej.: nalización de operación E/S
·        Reloj: se ha agotado algún tiempo límite

Un ejemplo de valores de interrupción:


Bloque de Control del Proceso

Además, el SO gestiona una tabla de procesos donde guarda la información de cada uno. Cada entrada de esa tabla se llama . . .

Denición (Bloque de Control de Proceso)

(en inglésProcess Control Block, PCB) son los datos particulares de cada procesoque usa el SO para gestionarlo.

El PCB normalmente incluye información de:

·        Identicación:
Ø id. del proceso
Ø id. delproceso padre(si hay jerarquía de procesos; ej. UNIX)
Ø id. delusuarioygrupodel propietario.

·        Planicación:
Ø Estadodel proceso
Ø Si estado=bloqueado, eleventopor el que espera el proceso
Ø Prioridaddel proceso
Ø Otra información usada por el algoritmo de planicación: contadores, colas, etc.

·        Punteros asegmentos de memoriaasignados:
Ø Segmento de datos
Ø Segmento de código
Ø Segmento de pila

·        Recursos asignados:
Ø Archivos abiertos: tabla de descriptores o “manejadores” de archivos (le descriptors / le handles).
Ø Puertos de comunicación asignados

·        Punteros para organizar los procesos encolas.
·        Información para comunicación entre procesos: señales, mensajes.


Mapa de Memoria de un Procesao

Posible mapa de memoria de un proceso:


Estados de un proceso



Terminología:

·        Preparado o listo (ready)
·        Corriendo en ejecución (running)
·        Bloqueado (blocked) o dormido (asleep) o en espera (waiting).
·        Suspender (swap out) = enviar el proceso a área de intercambio (swap)
·        reanudar(swap in) = traer el proceso desde área de intercambio a memoria

Transiciones de estado

·        Paso a preparado: puede haber 4 causas

Ø Creación: acaba de cargarse el programa en memoria e iniciamos el proceso
Ø Desde ejecución: porque la CPU va a pasar a ejecutar otro proceso (cambio de contexto). 
Ø Desde bloqueado: porque acabó una operación E/S por la que estaba esperando.

Ø Desde suspendido-listo: porque el SO decide traérselo a memoria (reanudarlo) y ya estaba preparado antes.

·      Paso a ejecución: se toma el primero de la cola de preparados cuando el reloj haya interrumpido el que estaba en ejecución.

·  Paso a bloqueado: bien desde ejecución, al solicitar E/S o bien desde suspendido-bloqueado porque volvió a memoria (reanudación) pero no acabó E/S.

·        Paso a suspendido-listo o suspendido-bloqueado: el SO puede decidir suspender un proceso parado (ya sea listo o bloqueado), pasando al estado correspondiente en cada caso.

Creación de un proceso

·        Al crear un proceso (suponemos que el código ya está en memoria) el SO debe:
1)   asignarle un identicador
2)  crear e inicializar su PCB.
3)  actualizar el SCB para llevar cuenta de él.
4)  pasarlo a la cola de preparados.

Un proceso puede ser creado por distintas causas:

·        Inicialización del sistema: al iniciar se crean muchos procesos:

Procesos primer plano (foreground) que interactúan con el usuario (ej: terminal, entorno gráco, etc).

Procesos segundo plano (background): actúan por detrás y la mayor parte del tiempo están a la espera (impresión de documentos, TCP/IP, recepción de correo, etc). Se denominan demonios (daemons).

Prueba: comando ps en UNIX o el task manager en Windows.

·        Llamada al sistema realizada por otro proceso para crear uno nuevo. Ejemplo: nuestro código crea otro proceso para meter datos en un buffer.

·        Petición del usuario: ejemplo, desde el shell o la interfaz gráca.

·        Inicio de un proceso por lotes (batch).

En realidad en todos ellos se realiza una llamada al sistema.
 


No comments:

Post a Comment