Академический Документы
Профессиональный Документы
Культура Документы
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
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.
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
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
ANEXOS:
Figura 1.
Figura 2.
Figura 3.
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.