Está en la página 1de 6

IS-344

Sistemas Operativos
Ingeniera de Sistemas

Captulo II

GESTION DE PROCESOS

El concepto fundamental en cualquier sistema operativo es el concepto de proceso que consiste en una
abstraccin de lo que es un programa en ejecucin.
En este capitulo nos vamos a ocupar de como el sistema operativo se encarga de controlar todos los procesos
cargados en memoria, de la asignacin de la CPU a coda uno de los procesos, y, cuando se trate de procesos
cooperantes, de la comunicacin y sincronizacin entre ellos (captulo posterior).
1. Concepto de Proceso
Se han odo muchas definiciones de proceso, pero, sin duda, la ms popular y acertada es la que dice que
"un proceso es un programa en ejecucin".
Ya que no es nada fcil dar una definicin autoexplicativa de lo que es un proceso, vamos a tratar de
explicarlo mediante ideas y ejemplos. Ante todo, se debe tener muy presente que un proceso asocia
programa+actividad.
Cuando decimos que un proceso es un programa en ejecucin, nos referimos al hecho de Ilevar a cabo o
realizar las instrucciones que contiene el programa en el orden establecido. Un programa es una lista de
instrucciones escritas en un papel, un fichero en disquete, disco duro, memoria RAM o cualquier otro
soporte, pero el simple hecho de que estas instrucciones estn escritas no implica que se estn Ilevando a
cabo. Pues bien, cuando se leen estas
instrucciones y se hacen ejecutar, entonces
ya tenemos programa+actividad, es decir,
un proceso.
Hacemos hincapi en actividad para
diferenciarlo bien de un mero programa, ya
que una caracterstica bsica de los
programas es que son estticos. Ya hemos
dicho que un programa es una secuencia de
rdenes que, por mucho que la miremos,
no varia nunca. Las variables no tienen
valores, las rutinas no tienen direccin,
las condiciones estn sin evaluar. Un
programa es simplemente un algoritmo a
ejecutar.
En cambio, un proceso es dinmico. Tiene
vector de estado indicando el momento y
estado de su ejecucin, las variables tienen valores, las rutinas se encuentran en alguna direccin de
memoria, y las condiciones son evaluables. El proceso es la ejecucin del algoritmo.
Un ejemplo que puede describir la
relacin programa-proceso puede ser
el manual de montaje de un
aeromodelo que viene despiezado.
Las instrucciones de montaje que
vienen en la caja son algo esttico
(por eso aunque dejemos mucho
tiempo las instrucciones en la caja, el
aeromodelo no aparece construido al
cabo de un tiempo. Sin embargo,
cuando cogemos las instrucciones y
empezamos a hacer lo que indican, es
cuando empieza la actividad, entonces
comienza el proceso de montaje.
Si en la construccin del aeromodelo,
quien Ileva a cabo las instrucciones del
manual de montaje es la persona, que lee las instrucciones y las va ejecutando; en un ordenador, el ente que
va leyendo las instrucciones del programa (que esta en memoria) y ejecutndolas, es la CPU. As, tenemos
que el tandem programa+procesador es el que hace que el estado de desarrollo de un determinado trabajo
evolucione y cambie de un estado a otro.
UNSCH/QECM

Pgina 1 de 6

Sistemas Operativos
Ingeniera de Sistemas

IS-344
Captulo II

Al igual que para la construccin del aeromodelo se necesita un rea de trabajo (una mesa o algo similar),
para la ejecucin de un programa, tambin se requiere un rea de trabajo, esto es, la pila del proceso. La
pila es la zona de memoria en la que se guardan los parmetros, variables locales, direcciones de retorno de
subprogramas y, en general, los datos temporales del proceso. Un proceso tambin se caracteriza porque en
un momento dado de su ejecucin dispone de ciertos valores en los registros del procesador, entre ellos, el
Contador de Programa, que contiene la direccin de la instruccin que va a ejecutar el proceso a
continuacin. As, el Contador de Programa es el registro que indica el punto de ejecucin del programa en
el que se encuentra el proceso.

Se debe tener en cuenta que la relacin entre un programa y su proceso no es biunvoca. Esto se debe al
hecho de que en un momento dado puede haber varios procesos correspondientes al mismo programa. Por
ejemplo, en una clase de trabajos manuales pueden estar escritas en la pizarra las instrucciones de montaje
de un aeromodelo (un programa) y todos los alumnos estn montando un aeromodelo siguiendo las mismas
instrucciones (varios procesos). Un ejemplo ms informtico puede ser el de varios alumnos que, en un
momento dado, estn utilizando el editor de texto en distintos terminales de un sistema de tiempo
compartido. Hay un nico programa editor de texto, pero puede haber varios procesos simultneos
ejecutando tal programa.
2. El modelo de procesos
En este modelo, todo el software ejecutable en el ordenador, incluyendo a veces al propio sistema operativo,
se organiza en un nmero de procesos secuenciales, o simplemente procesos para acortar. Un proceso es
justamente un programa en ejecucin, incluyendo los valores actuales del contador de programa, registros y
variables. Conceptualmente cada proceso tiene su propia CPU virtual. En realidad, por supuesto, la CPU real
conmuta sucesivamente de un proceso a otro, pero para entender el sistema, es mucho ms fcil pensar
sobre una coleccin de procesos ejecutndose en (pseudo) paralelo, que intentar seguir la pista de cmo la
CPU conmuta de un programa a otro. Esta rpida conmutacin de un proceso a otro en algn orden se
denomina multiprogramacin

En la Figura 2(a) vemos un ordenador multiprogramado con cuatro programas en memoria. En la Figura 2(b)
vemos cuatro procesos cada uno con su propio flujo de control (es decir su propio contador de programa
lgico), y cada uno ejecutndose independientemente de los otros. Por supuesto que existe un nico
contador de programa fsico, por lo que cada vez que un proceso retoma su ejecucin, su contador de
programa lgico debe cargase en el contador de programa real. Cuando el proceso agota el intervalo de
tiempo que se le ha concedido, se salva su contador de programa fsico en su contador de programa lgico en
memoria. En la Figura
2(c) vemos que desde la perspectiva de un intervalo de tiempo suficientemente largo, todos los procesos han
progresado, pero que en cualquier instante dado solamente un nico proceso est realmente ejecutndose.

UNSCH/QECM

Pgina 2 de 6

IS-344

Sistemas Operativos
Ingeniera de Sistemas

Captulo II

3. Contexto de Proceso
Como ya sabemos, en un sistema multiprogramado se pueden ejecutar simultneamente varios programas, es
decir, en un momento dado puede haber varios procesos. En un sistema con un nico procesador no se puede
decir que haya varios programas ejecutndose estrictamente de una forma simultnea. En realidad, la
posesin del procesador se va repartiendo entre los distintos procesos, dando lugar a una ejecucin
pseudoparalela. No obstante, por simplicidad, nos referiremos, en general, a ejecucin simultanea o
paralela, tanto si es estricta (sistema multiprocesador) como si no lo es (con un solo procesador).
El contexto de un proceso se define como la informacin necesaria para especificar completamente su
estado actual. Esto incluye toda la informacin que ha de salvarse cuando un proceso pierde la posesin de la
CPU, y hay que restaurar cuando se le vuelve a conceder la posesin del procesador.
El contexto de un proceso, dependiendo del lugar donde reside la informacin, esta formado por tres tipos de
informacin:

Bloque de Control de Proceso (BCP)


Contexto de Memoria
Contexto del Procesador

El Bloque de Control de Proceso (o Descriptor de


Proceso) comprende la informacin que siempre esta
en la memoria principal durante la existencia del proceso. El BCP contiene la informacin relativa a un
proceso que requiere el sistema operativo para gestionarlo. Igual que en una empresa se dispone de las fichas
de los empleados, con los datos necesarios para la administracin (Datos personales, profesionales, salarios,
horas extraordinarias, etc.), el sistema operativo dispone de los BCP de cada uno de los procesos que tiene
en cada momento. Aunque el contenido de los descriptores de procesos varia de un sistema a otro. A lo largo
de este capitulo se ira viendo el significado y utilidad de estos datos del BCP, as como las estructuras de
datos que contiene el sistema operativo para mantener los BCP's de todos los procesos.
El Contexto de Memoria contiene lo que es el programa en si, es decir, las instrucciones y los datos del
programa. Esta parte solamente necesita estar en memoria principal cuando el proceso esta realmente en
ejecucin, o sea, que tiene la CPU asignada; el resto del tiempo, el contexto de memoria puede encontrarse
en disco, liberando as espacio de memoria principal.
El Contexto del Procesador es la parte del contexto del proceso almacenado en los registros del procesador.
En estos registros se mantienen datos tales como el Contador de Programa, el estado de la CPU, el puntero
de la pila utilizada por el proceso, registros de control y registros de propsito general para mantener datos
de las variables o constantes del programa.
Como ya hemos dicho, el BCP es algo as como la ficha de control del proceso, por esto, en el tambin se
encuentra la informacin necesaria para poder acceder tanto al contexto de memoria como al del
procesador.
4. Sistemas Multiproceso. Paralelismo
Tenemos, dos buenas razones para la multiprogramacin:
Los procesos cooperantes, para realizar un trabajo
en conjunto.
Mejorar el rendimiento del ordenador,
aprovechando la CPU en sus tiempos de espera por
dispositivos de E/S, dando lugar a sistemas
multiusuario o simplemente de multiproceso.
No debemos confundir un sistema multiproceso con
multiusuario. Un entorno multiproceso es el que permite
varios procesos simultneos, por ejemplo, una persona en
un terminal con ventanas tal que en cada ventana tiene
distintos procesos en ejecucin (un editor de texto, un
reloj, un videoclip, etc.). En este sistema es posible que
no haya ms puestos de trabajo o terminales, con lo que
seria un entorno multiproceso monousuario. Si se dispone
de varios terminales en un sistema, entonces, adems de
multiproceso, es multiusuario.

UNSCH/QECM

Pgina 3 de 6

Sistemas Operativos
Ingeniera de Sistemas

IS-344
Captulo II

5. Sistemas Multiprocesador/Monoprocesador. Multiplexacin de la CPU


Sabemos que para que un programa se ejecute, hay que convertirlo en proceso, y para que este evolucione
de un estado a otro se requiere un procesador. Si hablamos de sistemas multiproceso, es decir, que hay
varios programas simultneamente en memoria, lo ms conveniente para la ejecucin mas rpida es asignar
un procesador a cada uno de los procesos, para que evolucionen todos de una forma realmente paralela o
simultanea. Este es el caso de los ordenadores con mltiples procesadores, en los que en un momento dado
se encuentran realmente en ejecucin varios programas. Si bien esta es la forma ms rpida de ejecutar
mltiples programas, tambin resulta ser, obviamente, la ms cara. No solamente por la cantidad de
hardware utilizado (cuando menos, varias CPU's), sino tambin por el hardware y software adicional
necesario para poder sincronizar y gestionar mltiples CPU's, algo mucho mas complejo que cuando
solamente se dispone de un nico procesador. (Resultan mucho ms sencillos los departamentos de personal,
marketing, fabricacin, distribucin etc. de una empresa de 2, 3 o 4 empleados, que los de una multinacional
de miles de empleados).
Ya que resulta fundamental la comprensin del funcionamiento de sistemas con un solo procesador, vamos a
centrarnos aqu en los ordenadores monoprocesadores, dejando los de mltiples procesadores para captulos
y/o asignaturas posteriores.
Si tenemos un sistema operativo multiproceso y contamos con un nico procesador, solamente tenemos una
eleccin: Hay que repartir el procesador entre los procesos. De esta manera, lo que conseguimos es simular
una maquina multiprocesador, es decir, tendremos un pseudoparalelismo en la ejecucin de los procesos.
As, aunque no obtengamos todas las ventajas de una ejecucin puramente paralela, si aprovecharemos el
hecho de que durante la ejecucin de un
programa hay muchos momentos en que no se
puede continuar su ejecucin hasta que no se
produzca algn evento externo a la CPU, como
por ejemplo la realizacin de una operacin
solicitada a un dispositivo de E/S, la pulsacin de
un caracter en el teclado, la Ilegada de un
caracter por la lnea de comunicaciones, una
interrupcin generada por un detector, etc.
Se debe aclarar que en nuestros ordenadores, en
el reparto de la CPU a menudo, tambin hay
procesos a los que se les quita la posesin de la
CPU antes de que ellos la liberen por una de sus
esperas a un evento externo, por lo que nos
encontramos con procesos que estn parados
cuando si podran ejecutarse de tener una CPU
disponible. En el peor de los casos, es decir
cuando se disponga de varios procesos que no
tienen esperas de EIS, la diferencia entre
ejecutarlos en un entorno multiprocesador o
monoprocesador es la que se muestra en el
grafico de la Figura 5, en la que se aprecia que
Figura 5
la CPU se reparte en porciones de tiempo entre
los distintos procesos, por lo que mientras uno se
ejecuta, los dems deben esperar su turno de CPU. En este caso decimos que la utilizacin de la CPU esta
multiplexada en el tiempo
6. Creacin de Procesos
Los sistemas operativos necesitan asegurar de alguna forma que puedan existir todos los procesos necesarios.
En sistemas muy sencillos, o en sistemas diseados para ejecutar tan solo una nica aplicacin (por ejemplo
el controlador de un microondas), puede conseguirse que cuando el sistema termine de arrancar estn
presentes ya todos los procesos que puedan necesitarse en el futuro. Sin embargo, en sistemas de propsito
general es necesaria alguna manera de poder crear y destruir los procesos segn sea necesario durante la
operacin del sistema.
Los cuatro principales sucesos que provocan la creacin de nuevos procesos son:
i. La inicializacin del sistema
ii. La ejecucin por parte de un proceso (en ejecucin) de una llamada al sistema de creacin de un
nuevo proceso.
UNSCH/QECM

Pgina 4 de 6

Sistemas Operativos
Ingeniera de Sistemas

IS-344
Captulo II

iii. La peticin por parte del usuario de la creacin de un nuevo proceso.


iv. El inicio de un trabajo en batch.
Cuando un sistema operativo arranca, se crean tpicamente varios procesos. Algunos de esos procesos son
procesos de superficie (o en primer plano), esto es, procesos que interactan con los usuarios (humanos) y
realizan trabajo para ellos. Otros son procesos de fondo (o en segundo plano), que no estn asociados con
usuarios particulares, sino que tienen alguna funcin especfica. Por ejemplo, un proceso de fondo puede
disearse para que se encargue de aceptar el correo electrnico entrante, de manera que est durmiendo la
mayor parte del da pero vuelva repentinamente a la vida tan pronto como llegue algn correo. Otro proceso
de fondo puede disearse para aceptar peticiones entrantes de pginas web residentes en esa mquina,
despertndose cada vez que llegue una nueva peticin para servir una cierta pgina. Los procesos que se
ejecutan como procesos de fondo para llevar a cabo alguna actividad tal como el correo electrnico, las
pginas web, las news o la impresin de ficheros de salida, etc., se denominan demonios. Los sistemas
grandes tienen comnmente docenas de ellos. En UNIX, el programa ps puede utilizarse para listar los
procesos que estn en marcha. En Windows 95/98/Me tecleando CTRL-ALT-SUPR una vez, se muestra todo lo
que est en marcha. En Windows 2000 se utiliza el administrador de tareas.
Adicionalmente a los procesos creados en el momento del arranque, tambin pueden crearse nuevos procesos
despus. A menudo un proceso en ejecucin puede hacer llamadas al sistema para crear uno o ms procesos
nuevos para que le ayuden en su trabajo. Crear nuevos procesos es particularmente til cuando el trabajo a
realizar puede formularse fcilmente en trminos de varios procesos relacionados, pero por otra parte
independientes, que interactan entre s. Por ejemplo, si se est extrayendo una gran cantidad de datos a
travs de una red de comunicacin para su procesamiento subsiguiente, puede ser conveniente crear un
proceso para extraer los datos y ponerlos en un buffer compartido mientras que un segundo proceso va
retirando los datos del buffer y los procesa. En el caso de un sistema multiprocesador podemos conseguir que
todo el trabajo se haga efectivamente ms rpido si permitimos que esos dos procesos se ejecuten cada uno
en una CPU diferente.
En sistemas interactivos los usuarios pueden arrancar un programa tecleando un comando o pinchando (dos
veces) con el ratn sobre un icono. Realizando cualquiera de esas acciones conseguimos que comience un
nuevo proceso y se ejecute el programa correspondiente. En sistemas UNIX basados en comandos y
ejecutando X Windows, el nuevo proceso creado se ejecuta sobre la ventana en la cual se le activ. En
Microsoft Windows, cuando un proceso comienza no tiene ninguna ventana asignada, aunque puede crear una
(o ms), y la mayora de los programas efectivamente eso es lo que hacen. En ambos sistemas, los usuarios
pueden tener mltiples ventanas abiertas a la vez, cada una de ellas ejecutando algn proceso. Utilizando el
ratn, el usuario puede seleccionar una ventana e interactuar con el proceso, por ejemplo, proporcionando
datos de entrada cuando sean necesarios.
La ltima situacin que provoca la creacin de procesos se aplica slo a los sistemas en batch que podemos
encontrar en los grandes mainframes. En esos sistemas los usuarios pueden lanzar (submit) al sistema
trabajos en batch (posiblemente de forma remota). Cuando el sistema operativo detecta que dispone de
todos los recursos necesarios para poder ejecutar otro trabajo, crea un nuevo proceso y ejecuta sobre l el
siguiente trabajo que haya en la cola de entrada. Tcnicamente, en todos los casos, se crea un nuevo
proceso haciendo que un proceso ya existente ejecute una llamada al sistema de creacin de un nuevo
proceso. El proceso que hace la llamada puede ser un proceso de usuario, un proceso del sistema invocado
desde el teclado o el ratn, o un proceso gestor de los trabajos en batch. Lo que ese proceso hace es
ejecutar una llamada al sistema para crear el nuevo proceso. Esa llamada al sistema solicita al sistema
operativo que cree un nuevo proceso, indicndole directa o indirectamente, qu programa debe ejecutar
sobre l.
En UNIX slo existe una llamada al sistema para crear un nuevo proceso: fork. Esta llamada crea un clon (una
copia exacta) del proceso que hizo la llamada. Despus del fork, los dos procesos, el padre y el hijo, tienen
la misma imagen de memoria, las mismas variables de entorno y los mismos ficheros abiertos. Eso es todo lo
que hay. Usualmente, a continuacin el proceso hijo ejecuta execve o una llamada al sistema similar para
cambiar su imagen de memoria y pasar a ejecutar un nuevo programa. Por ejemplo cuando un usuario teclea
un comando del shell como por ejemplo, sort, el shell ejecuta un fork para crear un proceso hijo, el cual es
el que realmente ejecuta el programa correspondiente al sort. La razn de realizar estos dos pasos es
permitir al hijo que manipule los descriptores de fichero del shell despus del fork pero antes de que el
execve lleve a cabo la redireccin de la entrada estndar, la salida estndar y la salida de errores estndar.
Lo anterior contrasta con lo que sucede en Windows, donde mediante una nica llamada al sistema de Win32,
CreateProcess, se realiza tanto la creacin del proceso como la carga del programa correcto dentro del
nuevo proceso. Esta llamada tiene 10 parmetros que incluyen entre ellos el programa que hay que ejecutar,
los parmetros de la lnea de comandos que va a recibir el programa, varios atributos de seguridad, bits que
controlan si se heredan los ficheros abiertos, informacin sobre la prioridad del proceso, una especificacin
UNSCH/QECM

Pgina 5 de 6

Sistemas Operativos
Ingeniera de Sistemas

IS-344
Captulo II

de la ventana que hay que crear (en su caso) para el proceso, y un puntero a una estructura (un registro) en
la que se enve de retorno toda la informacin sobre el nuevo proceso creado, al proceso que hace la
llamada. Adicionalmente a CreateProcess, Win32 cuenta con unas 100 llamadas al sistema ms, para
gestionar y sincronizar los procesos, as como para operaciones relacionadas.
Tanto en UNIX como en Windows, despus de crear un proceso, tanto el padre como el hijo cuentan con sus
propios espacios de direcciones disjuntos. Si cualquiera de los procesos modifica una palabra en su espacio de
direcciones, ese cambio es invisible para cualquier otro proceso. En UNIX, el espacio de direcciones inicial
del hijo es una copia del espacio de direcciones del padre, pero hay dos espacios de direcciones distintos
involucrados; la memoria no escribible se comparte (algunas implementaciones de UNIX comparten el rea de
cdigo entre los dos, ya que el cdigo nunca se modifica). Sin embargo es posible que un nuevo proceso
creado comparta algunos de los dems recursos del padre, tales como los ficheros abiertos. En Windows, los
espacios de direccionamiento del padre y el hijo son diferentes desde el primer momento.

7. Terminacin de los Procesos


Tras la creacin de un proceso comienza su ejecucin realizando el trabajo que se le ha encomendado. Sin
embargo nada dura para siempre, ni siquiera los procesos. Pronto o tarde el nuevo proceso debe terminar,
usualmente debido a una de las siguientes causas:
i. El proceso completa su trabajo y termina (voluntariamente).
ii. El proceso detecta un error y termina (voluntariamente).
iii. El sistema detecta un error fatal del proceso y fuerza su terminacin.
iv. Otro proceso fuerza la terminacin del proceso (por ejemplo en UNIX mediante la llamada al sistema
kill).
La mayora de los procesos terminan debido a que han completado su trabajo. Cuando un compilador ha
compilado el programa que se le ha dado, el compilador ejecuta una llamada al sistema para decirle al
sistema operativo que ha finalizado. Esta llamada es exit en UNIX y ExitProcess en Windows. Los programas
orientados a la pantalla soportan tambin la terminacin voluntaria. Los procesadores de texto, navegadores
y programas similares cuentan siempre con un icono o una opcin de men para que el usuario pueda pinchar
con el ratn indicndole al proceso que borre cualquier fichero temporal que est abierto y a continuacin
termine.
La segunda causa de terminacin es que el proceso descubra un error fatal. Por ejemplo, si un usuario teclea
el comando cc foo.c para compilar el programa foo.c sin que exista tal fichero, el compilador simplemente
termina.
Generalmente los procesos interactivos orientados a la pantalla no dan por concluida su ejecucin cuando
reciben parmetros errneos. En vez de eso despliegan una ventana de dilogo emergente solicitando al
usuario que intente introducir de nuevo los parmetros correctos.
La tercera causa de terminacin es la aparicin de un error causado por el proceso, a menudo debido a un
error de programacin. Algunos ejemplos son: la ejecucin de una instruccin ilegal, una referencia a una
posicin de memoria inexistente, o una divisin por cero. En algunos sistemas (por ejemplo en UNIX), un
proceso puede indicar al sistema operativo que quiere tratar por s mismo ciertos errores, en cuyo caso el
proceso recibe una seal que lo interrumpe, en vez de terminar bruscamente al ocurrir uno de tales errores
previstos.
La cuarta razn por la cual un proceso puede terminar, es que un proceso ejecute una llamada al sistema
dicindole al sistema operativo que mate a algn otro proceso. En UNIX esta llamada es kill (matar). La
funcin Win32 correspondiente es TerminateProcess. En ambos casos el proceso asesino debe contar con la
debida autorizacin. En algunos sistemas, cuando un proceso termina, bien sea voluntariamente o no, el
sistema mata automticamente tambin a todos los procesos que pudiera haber creado el proceso. Sin
embargo, ni UNIX ni Windows funcionan de esa manera.

UNSCH/QECM

Pgina 6 de 6

También podría gustarte