Вы находитесь на странице: 1из 9

1

Procesos e Hilos en los Sistemas Operativos


Windows y Linux.
Luis F. Alvear, David A. Álvarez
Los hilos pueden crear hilos hijos y se pueden bloquear en
Resumen—Se presenta un breve resumen de cómo funcionan espera de que se terminen sus llamadas al sistema, es algo
los procesos e hilos tanto en los sistemas operativos Windows, similar a lo que ocurre con un proceso en una maquina, lo
como para Linux, como se crean y como son tratados por él mismo ocurre con un hilo en un proceso.
microprocesador, se analiza cómo se lleva a cabo la Todos los hilos tienen el mismo espacio de direcciones, lo
compartición de los recursos del sistema, entre otras
que implica que comparten las mismas variables locales. Un
características.
proceso pertenece a un usuario el cual consta de varios hilos
Términos para indexación—WINDOWS, LINUX, Procesos, para que cooperen entre si, lo cual implica que los elementos
Hilos. de un proceso son partes de los elementos de un hilo.

PROCESOS EN WINDOWS NT
I. PROCESOS E HILOS EN WINDOWS

E
El diseño de los procesos de Windows NT está dirigido por
N la totalidad de sistemas operativos, cada proceso tiene
la necesidad de dar soporte a varios entornos de sistemas
un espacio de direcciones y un hilo de control. Pero
existen situaciones en las cuales por el tipo de aplicaciones operativos. Los procesos aportados por los distintos sistemas
que se tiene necesitan tener varios hilos de control que operativos son diferentes en varios aspectos, incluyendo los
compartan un espacio de direcciones, pero que se ejecuten de siguientes:
manera simultánea, como si fueren procesos independientes • Cómo se les denomina a los procesos.
porque es espacio de direcciones si necesariamente lo • Si hay hilos disponibles dentro de los procesos.
comparten. • Cómo se representan los procesos.
Una aplicación de un servidor que debe desactivarse en • Cómo se protegen los recursos de los procesos.
forma ocasional, en espera de una solicitud al disco, por • Qué mecanismos se emplean para la comunicación y la
ejemplo necesita de varios hilos de control, se podría ejecutar sincronización entre procesos.
un hilo mientras los otros están como secundarios en espera • Cómo están relacionados los procesos entre sí.
de que sean llamados para lograr esto se necesita trabajar
Por lo cual, la estructura nativa de los procesos y de los
necesariamente con hilos.
servicios que brinda el núcleo de NT es relativamente simple
VER FIGURA 1. (ANEXOS) y de propósito general, permitiendo a cada subsistema emular
la estructura y la funcionalidad particular de los procesos de
Como observamos en el gráfico en una computadora se un sistema operativo. Las características más importantes de
están ejecutando tres procesos los cuales tienen su contador los procesos de NT son las siguientes:
de programa y su pila ( conjunto de registros y de espacios de • Los procesos de NT se implementan como objetos.
direcciones). Los procesos no se comunican son • Un proceso ejecutable puede tener uno o más hilos.
independientes unos con otros sin embargo a través de las • Los objetos proceso y los objetos hilo tienen capacidades
primitivas del sistema lo pueden hacer como semáforos, predefinidas de sincronización.
monitores o mensajes. • El núcleo de NT no conserva ninguna relación entre los
procesos que crea, incluyendo las relaciones padre-hijo.
Documento recibido el 14 de Octubre del 2009. Esta investigación se El proceso tiene una señal de acceso que le sirve para
realizó en la Escuela Politécnica Nacional (EPN), como parte del desarrollo de cambiar sus propios atributos.
la materia Aplicaciones Distribuidas. También tienen que ver con el proceso una serie de
L. F. Alvear participó en la investigación como miembro del curso de
Aplicaciones Distribuidas (teléfono: 5932-2564-111: e-mail: bloques que definen el espacio de direcciones virtuales
luis.alvear@meer.gov.ec). asignado. El proceso no puede modificar directamente estas
D. A. Álvarez participó en la investigación como miembro del curso de
Aplicaciones Distribuidas (teléfono: 5932-2259-514: e-mail: estructuras, sino que debe depender del administrador de
david.alvarez@meer.gov.ec). memoria virtual, quien le proporciona al proceso un servicio
de asignación de memoria.
En el otro extremo del grafico observamos un solo proceso Finalmente, el proceso incorpora una tabla de objetos, con
con varios hilos o también llamados procesos ligeros, que se los descriptores de otros objetos que conoce. Existe un
ejecutan en forma estrictamente secuencial y tiene su descriptor para cada hilo del proceso.
contador de programa y una pila para llevar un registro de su
posición. Razones para la Creación de Procesos

2

Terminado: Un proceso que ha sido excluido por el sistema


Nuevo trabajo por lotes.- El sistema operativo esta provisto operativo del grupo de procesos ejecutables.
de un flujo de control de trabajos por lotes, generalmente
para cinta o disco. VER FIGURA 3. (ANEXOS)
Cuando el sistema operativo se prepara para tomar un nuevo
trabajo, leerá a próxima secuencia de ordenes de control de Se le asocia un identificador al proceso y se construyen y
trabajos. asignan algunas tablas necesarias para gestionar el proceso.
Conexión interactiva.- Un usuario entra en el sistema desde En este punto, el proceso estará en el estado Nuevo. Esto
un terminal. significa que el sistema operativo ha llevado a cabo las
Creado por el SO para dar un servicio.- El sistema acciones necesarias para crear el proceso pero no se ha
operativo puede crear un proceso para llevar a cabo una comprometido aún a su ejecución.
función de parte de un programa usuario, sin que el usuario Aquí se muestran algunos ejemplos de procesos su estado y
tenga que esperar (por ejemplo, imprimir). el tiempo de ejecución.
Generado por un proceso existente.- Con afán de
modularidad o para aprovechar el paralelismo, un programa VER TABLA 1 (ANEXOS)
de usuario puede ordenar la creación de una serie de
procesos. Razones para la Suspensión de procesos
Cuando un proceso es creado por el sistema operativo tras la Intercambio.- El sistema operativo necesita liberar
solicitud explicita de otro proceso, la acción se conoce como suficiente memoria principal para cargar un proceso que está
generación de procesos. listo para ejecutarse.
Cuando un proceso genera otro, el proceso generador se Solicitud de un usuario.- Un usuario puede querer suspender
conoce como proceso padre y el proceso generado es el una ejecución de un programa con fines de depuración o en
proceso hijo. Normalmente, estos procesos “emparentados” conexión con el uso de un recurso.
necesitarán comunicarse y cooperar entre si. Por tiempo.- Un proceso puede ejecutarse periódicamente y
puede ser suspendido mientras espera el siguiente intervalo
Terminación de procesos de tiempo.
En cualquier sistema informático, debe haber alguna forma
de que un proceso pueda indicar que ha terminado. Elementos Típicos de una Imagen de Proceso
Estados de un Proceso Datos de Usuario.- La parte modificable del espacio de
Hay una cola sencilla de procesos. Cada entrada de la cola es usuario. Puede guardar datos del programa, una zona para
un puntero a un proceso en particular. Cuando un proceso se una pila del usuario y programas que pueden modificarse.
interrumpe, se le pasa a la cola de procesos en espera. Por
otra parte, si un proceso termina o se abandona, se le descarta Pila del Sistema
del sistema (sale del sistema). En cualquier caso, el, Cada proceso tiene una o más pilas (el último que entra es el
distribuidor selecciona entonces un proceso de la cola para primero en salir) asociadas a él. Una pila se utiliza para
ejecutarlo. almacenar los parámetros y as direcciones de retorno.
Bloque de Control de Proceso
VER FIGURA 2 (ANEXOS) Información necesaria para que el sistema operativo controle
al proceso.
Un modelo de cinco estados
Memoria Virtual en los Procesos.
Algunos procesos en el estado de No Ejecución están listos
para ejecutar, mientras que otros están bloqueados,
La memoria constituyó hace muchos años las personas
esperando a que termine una operación de E/S. Los procesos
enfrentaron por primera vez programas que eran demasiado
esperan cola en una lista en la cual el primero en entrar, es
grandes para caber en la memoria disponible. La solución
primero en salir. Así pues, utilizando una cola sencilla, el
que normalmente se adoptaba era dividir el programa en
distribuidor podría no seleccionar exactamente el proceso
fragmentos, llamados superposiciones. La superposición O
que está en el extremo más antiguo de la cola, por lo cual se
era la primera que se ejecutaba. Al terminar, esta
han incorporado algunos estados de gran utilidad.
superposición llamaba a otra. Algunos sistemas de
Ejecución: El proceso que está actualmente en ejecución. superposición eran muy complejos, pues permitían varias
Listo: Proceso que está preparado para ejecutar, en cuanto se superposiciones en la memoria a la vez. Las superposiciones
le dé la oportunidad. se mantenían en disco y el sistema operativo las
Bloqueados: Proceso que no puede ejecutar hasta que se intercambiaba con la memoria dinámicamente, según fuera
produzca cierto suceso, como la terminación de una necesario.
operación de E/S. Aunque el trabajo real de intercambiar las superposiciones
Nuevo: Proceso que se acaba de crear, pero que aún no ha corría por cuenta del sistema, la tarea de dividir el programa
sido admitido por el sistema operativo en el grupo de en fragmentos tenía que ser efectuada por el programador. La
procesos ejecutables. división de programas grandes en fragmentos modulares
3

pequeños consumía tiempo y era tediosa. No pasó mucho Otra forma de contabilizar la memoria es mantener una lista
tiempo antes de que a alguien se le ocurriera una forma de enlazada de segmentos de memoria libres y asignados, donde
dejar todo el trabajo a la computadora. un segmento es un proceso o bien un agujero entre dos
La idea en que se basa la memoria virtual es que el tamaño procesos. La memoria se representa en la como lista
combinado del programa, los datos y la pila puede exceder la enlazada de segmentos. Cada entrada de la lista especifica un
agujero (H) o un proceso (P), la dirección en la que principia,
cantidad de memoria física disponible para él. El sistema
la longitud y un apuntador a la siguiente entrada.
operativo mantiene en la memoria principal las partes del En este ejemplo, la lista de segmentos se mantiene ordenada
programa que actualmente se están usando, y el resto en el por dirección. Este ordenamiento tiene la ventaja de que
disco. cuando un proceso termina o es intercambiado a disco, es
La memoria virtual también puede funcionar en un sistema fácil actualizar la lista.
de multiprogramación, manteniendo Un proceso que termina normalmente tiene dos vecinos
Segmentos de muchos programas en la memoria a la vez. (excepto cuando está en el tope o la base de la memoria).
Mientras un programa está esperando que se traiga a la Éstos pueden ser procesos o agujeros, dando lugar a las
memoria una de sus partes, está esperando E/S y no puede cuatro combinaciones de la actualización de la lista requiere
ejecutarse, así que puede otorgarse la CPU a otro proceso, lo la sustitución de una P por una H. En las dos entradas se
mismo que en cualquier otro sistema de multiprogramación. funden para dar una sola, y el tamaño de la lista se reduce en
una entrada. En las tres entradas se funden y dos elementos
se eliminan de la lista. Puesto que la ranura de tabla de
Administración de memoria con mapas de bits procesos para el proceso que va a terminar normalmente
Cuando la memoria se asigna dinámicamente, el sistema
apunta a la entrada del proceso mismo en la lista,
operativo debe administrarla. En términos puede ser más recomendable tener una lista doblemente
generales, hay dos formas de contabilizar la utilización de enlazada, en lugar de la lista con un solo enlace . Esta
memoria: mapas de bits y listas libres. En esta sección y en la estructura facilita la localización de la entrada anterior para
siguiente examinaremos estos dos métodos por tumo. determinar si es posible
Con un mapa de bits, la memoria se divide en unidades de una fusión.
asignación, tal vez sólo de unas cuantas palabras o quizá de Cuatro combinaciones de vecinos para el proceso que
varios kilobytes. A cada unidad de asignación corresponde un termina, X. Si los procesos y agujeros se mantienen en una
bit del mapa de bits, que es 0 si la unidad está libre y 1 si está lista ordenada por dirección, se pueden usar varios
ocupada (o viceversa). se muestra una parte de la memoria y algoritmos para asignar memoria a un proceso recién creado
el mapa de bits correspondiente. o traído a la memoria. Suponemos que el administrador de
Una parte de la memoria con cinco procesos y tres agujeros. memoria sabe cuánta memoria debe asignar. El algoritmo
Las marcas indican las unidades de asignación de memoria. más sencillo es el de primer ajuste. El administrador de
Las regiones sombreadas (O en el mapa de bits) están libres, memoria examina la lista de segmentos hasta encontrar un
(b) El mapa de bits correspondiente, (e) La misma agujero con el tamaño suficiente. A continuación, el agujero
información en forma de lista. se divide en dos fragmentos, uno para el proceso y otro para
la memoria desocupada, excepto en el poco probable caso de
El tamaño de la unidad de asignación es una cuestión de que el ajuste sea exacto. El algoritmo de primer ajuste es
diseño importante. Cuanto menor sea la unidad de rápido porque la búsqueda es la más corta posible.
asignación, mayor será el mapa de bits. Sin embargo, incluso Una variante menor del primer ajuste es el siguiente ajuste.
con una unidad de asignación de sólo cuatro bits, 32 bits de Este algoritmo funciona igual que el de primer ajuste,
memoria sólo requerirán un bit del mapa. Una memoria de excepto que toma nota de dónde está cada vez que encuentra
32n bits usará n bits de mapa, y el mapa sólo ocupará 1/33 de un agujero apropiado. La siguiente vez que se invoque, el
la memoria. Si se escoge una unidad de asignación grande, el algoritmo comenzará a buscar en la lista a partir del lugar
mapa de bits será más pequeño, pero podría desperdiciarse donde se quedó
una cantidad apreciable de memoria en la última unidad si el la última vez, en lugar de comenzar por el principio, como
tamaño del proceso no es un múltiplo exacto de la unidad de hace el primer ajuste. Simulaciones ejecutadas demuestran
asignación. que el siguiente ajuste ofrece un rendimiento ligeramente
peor que el primer ajuste.
Un mapa de bits ofrece un método sencillo para contabilizar
las palabras en una cantidad fija de Otro algoritmo bien conocido es el de mejor ajuste, que
memoria, porque el tamaño del mapa de bits depende sólo examina toda la lista y toma el agujero
del tamaño de la memoria y del tamaño de la unidad de más pequeño que es adecuado. En lugar de partir un agujero
asignación. El problema principal que presenta es que una grande que podría necesitarse después, el mejor ajuste trata
vez que se ha decidido traer a la memoria un proceso de k de encontrar un agujero con un tamaño cercano al que se
unidades, el administrador de memoria debe buscar en el necesita.
mapa de bits una serie de k bits en O consecutivos. La
búsqueda de series de una longitud dada en un mapa de bits El mejor ajuste es más lento que el primer ajuste porque debe
es una operación lenta (porque la serie puede cruzar fronteras examinar toda la lista cada vez que
de palabra en el mapa); éste es un argumento en contra de los se invoca. Lo que resulta sorprendente es que también
mapas de bits. desperdicia más memoria que el primer ajuste o el siguiente
ajuste porque tiende a llenar la memoria de pequeños
Administración de memoria con listas enlazadas
4

agujeros inútiles. En promedio, el primer ajuste g nera mediante rodajas de tiempo muy rápidas que dan la sensación
agujeros más grandes. de simultaneidad.

A fin de sortear el problema de partir un agujero con un Para que Linux pueda gestionar los procesos en el sistema,
tamaño casi igual al requerido para obtener un área asignada cada proceso se representa por una estructura de datos
al proceso y un agujero diminuto, podríamos considerar el task_struct (las tareas (task) y los procesos son términos
peor ajuste, es decir, tomar siempre el agujero más grande intercambiables en Linux). El vector task es una lista de
disponible, de modo que el agujero sobrante tenga un tamaño punteros a estructuras task_struct en el sistema. Esto quiere
suficiente para ser útil. Las simulaciones han demostrado que decir que el máximo número de procesos en el sistema está
el peor ajuste tampoco es una idea muy buena. limitado por el tamaño del vector task; por defecto tiene 512
entradas. A medida que se crean procesos, se crean nuevas
estructuras task_struct a partir de la memoria del sistema y se
añaden al vector task. Para encontrar fácilmente el proceso
II.PROCESOS E HILOS EN LINUX en ejecución, hay un puntero (current) que apunta a este
proceso.

Linux soporta procesos de tiempo real así como procesos


El recurso más preciado en el sistema es la CPU; Linux es
un sistema operativo multiproceso. Y su principal objetivo es normales. Estos procesos tienen que reaccionar muy
rápidamente a sucesos externos (de ahí el término “tiempo
tener siempre un proceso ejecutándose en cada CPU del
sistema en todo instante, para maximizar el aprovechamiento real”') y reciben un trato diferente del planificador. La
estructura task_struct es bastante grande y compleja, pero sus
del uso de la CPU. Si existen más procesos que CPUs (lo
común es este caso), la cola de los procesos tiene que esperar campos se pueden dividir en áreas funcionales:
su turno hasta que una CPU quede libre para que ellos
ejecutarse. El multiproceso es una idea no muy compleja; un -State
(Estado) A medida que un proceso se ejecuta, su estado
proceso se ejecuta hasta que tenga que esperar, normalmente
por algún recurso del sistema; cuando obtenga dicho recurso, cambia según las circunstancias. Los procesos en Linux
tienen los siguientes estados:
puede ejecutarse otra vez. En un sistema uniproceso, por
ejemplo DOS, la CPU estaría simplemente esperando
- Running
estática, y el tiempo que no realiza ninguna Tarea se
desaprovecharía. (Preparado) El proceso se está ejecutando (es el proceso en
curso en el sistema) o está listo para ejecutarse (está
En un sistema multiproceso se mantienen varios procesos esperando a ser asignado a una de las CPUs del sistema).
en memoria al mismo tiempo. Cuando un proceso tiene que
pasar a un estado de espera, el sistema operativo le quita la - Waiting
(Esperando) El proceso está esperando algún suceso o por
CPU a ese proceso y se la da a otro proceso que le
corresponda o que tenga mayor prioridad. El planificador se algún recurso. Linux diferencia dos tipos de procesos;
interrumpibles e ininterrumpibles. Los procesos en espera
encarga de elegir el proceso más apropiado el cuál se deba
ejecutar a continuación. Linux usa diferentes estrategias de interrumpibles pueden ser interrumpidos por señales
mientras que los ininterrumpibles dependen directamente
organización del tiempo de la CPU para tratando de hacerlo
de la mejor manera (lo reparte de manera justa). de sucesos de hardware y no se pueden interrumpir en
ningún caso.
Hablar tanto de Procesos como de Hilos, es hablar de dos
- Stopped
conceptos muy similares y relacionados entre sí, entre los
cuales existen pequeñas diferencias nada más. (Detenido) El proceso ha sido detenido, normalmente
porque ha recibido una señal. Si se están depurando errores
Uno de los principales motivos de la existencia de la en un proceso, éste puede estar detenido.
informática es imitar el comportamiento de la mente
humana. En un comienzo surgieron los algoritmos, que no Zombie
son más que una secuencia de pasos para conseguir un Es un proceso que ya ha terminado pero cuya estructura
objetivo, a partir de los cuales surgió el pensamiento de “por task_struct permanece aún en el vector task. Se suele
qué no hacer varias cosas a la vez” y es precisamente de esta mantener para que el padre pueda extraer información útil de
inquietud de donde surgen los hilos o threads. él.

Si queremos que nuestro programa empiece a ejecutar En la Figura 4 (ANEXOS) podemos apreciar el diagrama de
varias cosas "a la vez", tenemos dos opciones. Por una parte estados, sobre los cuales se puede encontrar un proceso en el
podemos crear un nuevo proceso y por otra, podemos crear Sistema Operativo Linux.
un nuevo hilo de ejecución (un thread).
Información de la Planificación de Tiempo de la CPU
En realidad nuestro ordenador, salvo que tenga varias El planificador necesita esta información para hacer una
CPU’s, no ejecutará varias tareas a la vez esto se refiere a decisión justa sobre qué proceso en el sistema se merece más
que el sistema operativo, es este caso Linux, irá ejecutando ejecutarse a continuación.
los threads según la política del mismo, siendo lo mas usual
5

Identificadores Un proceso se puede ver como la suma total del estado


Cada proceso en el sistema tiene un identificador de proceso. actual del sistema. Cuando un proceso se ejecuta, está
El identificador no es un índice en el vector task, es utilizando los registros, las pilas, etc, del procesador. Todo
simplemente un número. Cada proceso también tiene esto es el contexto del procesador, y cuando se suspende un
identificadores de usuario y grupo, que se usan para controlar proceso, todo ese contenido específico de la CPU se tiene
el acceso de este proceso a los ficheros y los dispositivos del que salvar en la estructura task_struct del proceso. Cuando el
sistema. planificador reinicia un proceso, su contexto se pasa a la
CPU para seguir ejecutándose.
Enlaces
En un sistema de Linux ningún proceso es independiente de Planificación
otro proceso. Cada proceso en el sistema, excepto el proceso
Todos los procesos se ejecutan parcialmente en modo
inicial (init), tiene un proceso padre. Los procesos nuevos no
usuario y parcialmente en modo sistema. La manera como el
se crean, se copian, o más bien se clonan de un proceso
hardware soporta estos modos varía, pero en general hay un
existente. Cada estructura task_struct que representa un
mecanismo seguro para pasar de modo usuario a modo
proceso mantiene punteros a su proceso padre y sus
sistema y viceversa. El modo usuario tiene muchos menos
hermanos (los procesos con el mismo proceso padre) así
privilegios que el modo sistema. Cada vez que un proceso
como a sus propios procesos hijos. Se pueden ver las
hace una llamada de sistema, cambia de modo usuario a
relaciones entre los procesos en ejecución en un sistema
modo sistema y sigue ejecutándose. Llegado este punto, el
Linux con la orden pstree:
núcleo se está ejecutando por el proceso.
En Linux, un proceso no puede imponer su derecho sobre
init(1)-+-crond(98)
otro proceso que se esté ejecutando para ejecutarse él mismo.
|-emacs(387)
Cada proceso decide dejar la CPU que está usando cuando
|-gpm(146)
tiene que esperar un suceso en el sistema. Por ejemplo, un
|-inetd(110)
proceso puede estar esperando a leer un carácter de un
|-kerneld(18)
fichero. Esta espera sucede dentro de la llamada de sistema,
|-kflushd(2)
en modo sistema; el proceso utiliza una función de una
|-klogd(87)
biblioteca para abrir y leer el fichero y la función, a su vez,
|-kswapd(3)
hace una llamada de sistema para leer bites del fichero
|-login(160)---bash(192)---emacs(225)
abierto. En este caso el proceso en espera será suspendido y
|-lpd(121)
se elegirá a otro proceso para ejecutarse.
|-mingetty(161)
|-mingetty(162)
Los procesos siempre están haciendo llamadas de sistema
|-mingetty(163)
y por esto necesitan esperar a menudo. Aún así, si un proceso
|-mingetty(164)
se ejecuta hasta que tenga que esperar, puede ser que llegue a
|-login(403)---bash(404)---pstree(594)
usar una cantidad de tiempo de CPU desproporcionada y por
|-sendmail(134)
esta razón Linux usa planificación con derecho preferente.
|-syslogd(78)
Usando esta técnica, se permite a cada proceso ejecutarse
`-update(166)
durante poco tiempo, 200 ms, y cuando ese tiempo ha
pasado, otro proceso se selecciona para ejecutarse y el
Además, todos los procesos en el sistema también están en
proceso original tiene que esperar un tiempo antes de
una doble lista encadenada cuya raíz es la estructura
ejecutarse otra vez. Esa pequeña cantidad de tiempo se
task_struct del proceso init. Esta lista permite al núcleo de
conoce como una porción de tiempo. El planificador tiene
Linux observar cada proceso del sistema.
que elegir el proceso que más merece ejecutarse entre todos
los procesos que se pueden ejecutar en el sistema. Un
Tiempos y Temporizadores
proceso ejecutable es aquel que está esperando solamente a
El núcleo mantiene conocimiento de la hora de creación de
una CPU para ejecutarse, es decir, está en estado de
los procesos así como el tiempo de CPU que consume a lo
Preparado (Running).
largo de su vida. En cada paso del reloj, el núcleo actualiza
la cantidad de tiempo en jiffies que el proceso en curso ha
Linux usa un algoritmo razonablemente simple para
usado en los modos sistema y usuario. Linux también soporta
planificar las prioridades y elegir un proceso entre los
temporizadores de intervalo específicos a cada proceso; los
procesos que hay en el sistema. Cuando ha elegido un nuevo
procesos pueden usar llamadas del sistema para instalar
proceso para ejecutar, el planificador salva el estado del
temporizadores para enviarse señales a sí mismos cuando el
proceso en curso, los registros específicos del procesador y
temporizador acaba. Estos temporizadores pueden ser de una
otros contextos en la estructura de datos task_struct. Luego
vez, o periódicos.
restaura el estado del nuevo proceso (que también es
específico a un procesador) para ejecutarlo y da control del
Sistema de Ficheros
sistema a ese proceso. Para que el planificador asigne el
Los procesos pueden abrir y cerrar ficheros y la estructura
tiempo de la CPU justamente entre los procesos ejecutables
task_struct de un proceso contiene punteros a los descriptores
en el sistema, el planificador mantiene cierta información en
de cada fichero.
la estructura task_struct de cada proceso:
Contexto Específico del Procesador policy (política)
6

Esta es la política de planificación que se aplicará a este Los procesos que no estén ni RUNNING (Preparados) ni
proceso. Hay dos tipos de procesos en Linux, normales y sean INTERRUMPIBLE se quitan de la cola de
de tiempo real. Los procesos de tiempo real tienen una ejecución. Esto significa que no se les considerará para
prioridad más alta que los otros. Si hay un proceso de ejecución cuando el planificador busque un proceso para
tiempo real listo para ejecutarse, siempre se ejecutará ejecutar.
primero. Los procesos de tiempo real pueden tener dos
tipos de políticas: ”round robin” (en círculo) y ”first in Selección de un proceso
first out” (el primero en llegar es el primero en salir). En El planificador mira los procesos en la cola de ejecución
la planificación “round robin”, cada proceso de tiempo para buscar el que más se merezca ejecutarse. Si hay
real ejecutable se ejecuta por turnos, y en la algún proceso de tiempo real (aquellos que tienen una
planificación ”first in, first out” cada proceso ejecutable política de planificación de tiempo real) entonces éstos
se ejecuta en el orden que están en la cola de ejecución y recibirán un mayor peso que los procesos ordinarios. El
el orden no se cambia nunca. peso de un proceso normal es su contador counter pero
para un proceso de tiempo real es su contador counter
priority (prioridad) más 1000. Esto quiere decir que si hay algún proceso de
tiempo real que se pueda ejecutar en el sistema, estos se
Esta es la prioridad estática que el planificador dará a ejecutarán antes que cualquier proceso normal. El
este proceso. También es la cantidad de tiempo (en proceso en curso, que ha consumido parte de su porción
jiffies) que se permitirá ejecutar a este proceso una vez de tiempo (se ha decrementado su contador counter) está
que sea su turno de ejecución. Se puede cambiar la en desventaja si hay otros procesos con la misma
prioridad de un proceso mediante una llamada de prioridad en el sistema; esto es lo que se desea. Si varios
sistema y la orden renice. procesos tienen la misma prioridad, se elige el más
cercano al principio de la cola. El proceso en curso se
rt_priority (prioridad de tiempo real) pone al final de la cola de ejecución. En un sistema
equilibrado con muchos procesos que tienen las mismas
Linux soporta procesos de tiempo real y estos tienen una prioridades, todos se ejecutarán por turnos. Esto es lo
prioridad más alta que todos los otros procesos en el que conoce como planificación Round Robin (en
sistema que no son de tiempo real. Este campo permite círculo). Sin embargo, como los procesos normalmente
al planificador darle a cada proceso de tiempo real una tienen que esperar a obtener algún recurso, el orden de
prioridad relativa. La prioridad del proceso de tiempo ejecución tiende a verse alterado.
real se puede alterar mediante llamadas de sistema.
Cambiar procesos
counter (contador) Si el proceso más merecedor de ejecutarse no es el
proceso en curso, entonces hay que suspenderlo y poner
Esta es la cantidad de tiempo (en jiffies) que se permite
el nuevo proceso a ejecutarse. Cuando un proceso se está
ejecutar a este proceso. Se decrementa a cada paso de
ejecutando, está usando los registros y la memoria física
reloj y cuando el proceso se ejecuta y lo consume por
de la CPU y del sistema. Cada vez que el proceso llama
completo se iguala a priority.
a una rutina le pasa sus argumentos en registros y puede
El planificador se ejecuta desde distintos puntos dentro poner valores salvados en la pila, tales como la dirección
del núcleo. Se ejecuta después de poner el proceso en curso a la que regresar en la rutina que hizo la llamada. Así,
en una cola de espera y también se puede ejecutar al finalizar cuando el planificador se ejecuta, se ejecuta en el
una llamada de sistema, exactamente antes de que un proceso contexto del proceso en curso. Estará en un modo
vuelva al modo usuario después de estar en modo sistema. privilegiado (modo núcleo) pero aún así el proceso que
También puede que el planificador se ejecute porque el se ejecuta es el proceso en curso. Cuando este proceso
temporizador del sistema haya puesto el contador counter del tiene que suspenderse, el estado de la máquina,
proceso en curso a cero. Cada vez que el planificador se incluyendo el contador de programa (program counter,
ejecuta, hace lo siguiente: PC) y todos los registros del procesador se salvan en la
Proceso en curso estructura task_struct. A continuación se carga en el
procesador el estado del nuevo proceso. Esta operación
El proceso en curso tiene que ser procesado antes de es dependiente del sistema; diferentes CPUs llevan esta
seleccionar a otro proceso para ejecutarlo. operación a cabo de maneras distintas, pero normalmente
Si la política de planificación del proceso en curso es el hardware ayuda de alguna manera.
round robin entonces el proceso se pone al final de la El cambio del contexto de los procesos se lleva a cabo al
cola de ejecución. finalizar el planificador. Por lo tanto, el contexto
Si la tarea es INTERRUMPIBLE y ha recibido una señal guardado para el proceso anterior es una imagen
desde la última vez que se puso en la cola, entonces su instantánea del contexto del hardware del sistema tal y
estado pasa a ser RUNNING (Preparado). como lo veía ese proceso al final del planificador.
Si el proceso en curso a consumido su tiempo, su estado Igualmente, cuando se carga el contexto del nuevo
pasa a ser RUNNING (Preparado). proceso, también será una imagen instantánea de cómo
Si el proceso en curso está RUNNING (Preparado), estaban las cosas cuando terminó el planificador,
permanecerá en ese estado. incluyendo el contador de programa (program counter,
PC) de este proceso y los contenidos de los registros.
7

decir, acceden a las mismas variables globales o dinámicas,


Es importante diferenciar entre el algoritmo de planificación por lo que no necesitan costosos mecanismos de
propiamente dicho, y el cambio de contexto: comunicación para sincronizarse. Por ejemplo un hilo podría
- El algoritmo de planificación únicamente tiene que decidir encargarse de la interfaz gráfica (iconos, botones, ventanas),
cuál será el siguiente proceso que utilizará el procesador. mientras que otro hace una larga operación internamente. De
Se elige un proceso ganador entre todos los que no están esta manera el programa responde más ágilmente a la
bloqueados. interacción con el usuario.
- El cambio de contexto es el mecanismo que efectivamente En sistemas operativos que proveen facilidades para los
pone en ejecución a un proceso. Esta operación es muy hilos, es más rápido cambiar de un hilo a otro dentro del
dependiente de la arquitectura del procesador sobre el mismo proceso, que cambiar de un proceso a otro.
que se esté ejecutando, por lo que se tiene que realizar a Es posible que los hilos requieran de operaciones atómicas
bajo nivel (en ensamblador). para impedir que los datos comunes sean cambiados o leídos
mientras estén siendo modificados. El descuido de esto puede
Procesos generar estancamiento.
Un proceso es un concepto manejado por el sistema
operativo que consiste en el conjunto formado por: La Tabla 2 (ANEXOS) resume algunas diferencias entre
• Las instrucciones de un programa destinadas a ser procesos e hilos, y la Figura 5 (ANEXOS) muestra una
ejecutadas por el microprocesador. representación de los conceptos proceso e hilo. Nótese cómo
• Su estado de ejecución en un momento dado, esto en la figura 5 (ANEXOS) se puede apreciar que los procesos
es, los valores de los registros de la CPU para dicho son entidades independientes, mientras que los hilos son
programa. entidades relacionadas por la sección de datos en el interior
• Su memoria de trabajo, es decir, la memoria que ha del proceso que los contiene.
reservado y sus contenidos.
• Otra información que permite al sistema operativo
su planificación.

En un sistema Linux, que como ya sabemos es multitarea


(sistema operativo multihilo), se pueden estar ejecutando REFERENCIAS
distintas acciones a la par, y cada acción es un proceso que [1] http://www.monografias.com/trabajos26/estados-proceso-hilos/estados-
consta de uno o más hilos, memoria de trabajo compartida proceso-hilos.shtml#proceslinux
por todos los hilos e información de planificación. Cada hilo [2] http://www.chuidiang.com/clinux/procesos/procesoshilos.php
[3] http://www.ldc.usb.ve/~figueira/Cursos/AdminRedesTelematica/Materia
consta de instrucciones y estado de ejecución. l/procesos.pdf
Cuando ejecutamos un comando en el shell, sus instrucciones [4] http://www.esdebian.org/linux/28621/los-procesos-linux
se copian en algún sitio de la memoria RAM del sistema para [5] http://sopa.dis.ulpgc.es/ii-dso/leclinux/procesos/fork/LEC7_FORK.pdf
ser ejecutadas. Cuando las instrucciones ya cumplieron su [6] http://sopa.dis.ulpgc.es/ii-
dso/leclinux/procesos/planificador/LEC6_CHEDULER.pdf.
cometido, el programa es borrado de la memoria del sistema, [7] http://sopa.dis.ulpgc.es/ii-
dejándola libre para que más programas se puedan ejecutar a dso/leclinux/procesos/planificador/LEC6_SCHEDULER.pdf
la vez. Por tanto cada uno de estos programas son los [8] TANENBAUM S. Andrew, WOODHULL Albert, Sistemas Operativos
procesos. Distribuidos, Editorial Pretince Hall Hispanoamérica S.A.
Los procesos son creados y destruidos por el sistema [9] TANENBAUM S. Andrew, WOODHULL Albert, Sistemas Operativos
Diseño e Implementación, Editorial Pretince Hall Hispanoamérica S.A,
operativo, pero lo hace a petición de otros procesos. El Segunda Edición.
mecanismo por el cual un proceso crea otro proceso se [10] STALLINS Willian, Sistemas Operativos, Editorial Pretince Hall
denomina bifurcación (fork). Los nuevos procesos son Hispanoamérica S.A;Segunda Edición.
independientes y no comparten memoria (es decir,
información) con el proceso que los ha creado.
En definitiva, es posible crear tanto hilos como procesos. La Luis F. Alvear
diferencia estriba en que un proceso solamente puede crear Nació en Quito-Ecuador el 27 de Junio
hilos para sí mismo y en que dichos hilos comparten toda la de 1987. Realizó sus estudios
memoria reservada para el proceso. secundarios en el Colegio Particular
Técnico Industrial “Hermano Miguel”,
Hilos donde obtuvo el título de “Bachiller en
Ciencias” y “Auxiliar en Manejo de
Los hilos son similares a los procesos ya que ambos
Equipos de Cómputo” en el año 2004.
representan una secuencia simple de instrucciones ejecutada
En el mismo año ingresó a la Escuela Politécnica Nacional
en paralelo con otras secuencias. Los hilos son una forma de
(EPN), donde actualmente estudia la carrera de Ingeniería
dividir un programa en dos o más tareas que corren
Electrónica y Redes de la Información.
simultáneamente, compitiendo, en algunos casos, por la
CPU.
La diferencia más significativa entre los procesos y los hilos,
David A. Álvarez
es que los primeros son típicamente independientes, llevan
Nació en Quito el 26 de Marzo de 1987.
bastante información de estados, e interactúan sólo a través
Realizó sus estudios secundarios en el
de mecanismos de comunicación dados por el sistema. Por
colegio Particular Técnico “Hermano
otra parte, los hilos generalmente comparten la memoria, es
8

Miguel” de la ciudad de Latacunga, donde obtuvo el


bachillerato. En el 2004 ingresó a la Escuela Politécnica
Nacional.

ANEXOS:

Figura 1.

Figura 2.

Figura 3.

Figura 4. Estados de un proceso en Linux


9

Figura 5. Relación entre procesos e hilos

Tabla 1.

Tabla 2
Diferencias entre Procesos e Hilos
PROCESOS HILOS
Manejados por el S.O. Manejados por los procesos
Independientes de otros Relacionados con otros
procesos. hilos del mismo proceso.
Memoria privada, se necesitan Memoria compartida con el
mecanismos de comunicación resto de hilos que forman el
para compartir información. proceso.

Вам также может понравиться