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.
Definicion
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 clasificarlos
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 planificació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á identificarlos: 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.
Definició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.
·
Identificadores 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.: finalizació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 . . .
Definició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:
·
Identificación:
Ø id. del proceso
Ø id. delproceso padre(si hay jerarquía
de procesos; ej. UNIX)
Ø id. delusuarioygrupodel propietario.
·
Planificación:
Ø Estadodel proceso
Ø Si estado=bloqueado, eleventopor el
que espera el proceso
Ø Prioridaddel proceso
Ø Otra información usada por el
algoritmo de planificació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 (file descriptors / file
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 identificador
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áfico,
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áfica.
·
Inicio de un proceso por lotes (batch).
En realidad en todos ellos se realiza
una llamada al sistema.
No comments:
Post a Comment