Anda di halaman 1dari 12

TEMA 3 ESTRUCTURAS DE DATOS DE CONTROL DE PROCESOS

1.- INTRODUCCION Una regin o segmento es un subconjunto o rea de direcciones contiguas de memoria virtual. En cualquier programa se pueden distinguir al menos tres regiones: la regin de cdigo o texto, la regin de datos y la regin de pila. Un proceso es una instancia de un programa en ejecucin. Consiste en un conjunto de bytes que la CPU interpreta como cdigo (instrucciones mquina), datos o elementos de una pila. En un sistema UNIX los procesos parecen ejecutarse de forma simultnea, aunque, si se tiene una arquitectura monoprocesador, en un determinado instante de tiempo, realmente slo uno de ellos estar ejecutndose en la CPU. Desde un punto de vista prctico, un proceso es una entidad que se crea con la llamada al sistema fork, el proceso que invoca a esta llamada se denomina proceso padre y el proceso que se crea como resultado de la llamada fork se denomina proceso hijo. Los procesos son unidades funcionalmente independientes ya que se debe tener en cuenta que un proceso no puede ejecutar instrucciones de otro proceso. Evidentemente ante esta situacin se hace necesario implementar mecanismos de comunicacin entre los procesos. Puesto que UNIX es un sistema multitarea y multiusuario, el ncleo asigna a cada proceso varios identificadores numricos con el fin de llevar un control de los procesos que se estn ejecutando en el sistema y saber a qu usuarios pertenecen. Asimismo, el ncleo mantiene diferentes estructuras de datos asociadas a los procesos, las cuales son fundamentales para la ejecucin de los mismos. De manera poco formal, pero muy grfica, se puede afirmar que el contexto de un proceso A es una fotografa de los valores de ciertas posiciones de memoria asociados al proceso A y de los registros de la CPU. En determinadas circunstancias, el ncleo debe realizar un cambio de contexto, es decir, aplazar o finalizar la ejecucin del proceso A y comenzar o continuar con la ejecucin de otro proceso B. Asimismo, cuando se produce una interrupcin, una llamada al sistema o un cambio de contexto el ncleo debe salvar el contexto del proceso (tomar una fotografa). En la explicacin de este captulo se va a tomar como referencia principalmente el ncleo de una distribucin clsica como SVR3. Las variantes modernas de UNIX tales como SVR4, OSF/1, BSD4.4 y Solaris 2.x (y superiores) presentan ciertas diferencias con respecto a este modelo clsico. 2.- ESPACIO DE DIRECCIONES DE MEMORIA VIRTUAL ASOCIADO A UN PROCESO FORMATO LOGIGO DE UN ARCHIVO EJECUTABLE Al compilar el cdigo fuente de un programa se crea un archivo ejecutable que consta bsicamente de cuatro partes: Cabecera primaria. Contiene la siguiente informacin: El nmero mgico. Entero pequeo que identifica el tipo de archivo ejecutable. El nmero de secciones que hay en el archivo. La direccin virtual de inicio, imprescindible para comenzar con la ejecucin del proceso. Cabeceras de las secciones. Describen cada una de las secciones del archivo. Entre otras informaciones contienen el tipo y el tamao de la seccin, adems de la direccin virtual que se le debe asignar al comienzo de la regin cuando el proceso se ejecute en el sistema. Secciones. Contienen los datos, que son cargados inicialmente en el espacio de direcciones de l proceso, tpicamente, el cdigo (tambin denominado texto), los datos inicializados (variables estticas y externas del programa conocidas en el momento de la compilacin) y los datos no inicializados (tambin denominado bss7).

Otras informaciones. Tales como la tabla de smbolos y otros datos. La tabla de smbolos es una tabla que se utiliza para almacenar los nombres definidos por el usuario en el programa fuente: variables, nombres de funciones, nombres de tipos, constantes, etc.

La informacin que se guarda en esta tabla depende del tipo de smbolo de que se trate. Lo habitual (excepto en compiladores muy sencillos) es implementar la tabla de smbolos utilizando una tabla de dispersin (hash) para optimizar el tiempo de bsqueda. REGIONES DE UN PROCESO El ncleo carga un fichero ejecutable en memoria principal durante la realizacin, por ejemplo, de una llamada al sistema exec. El proceso cargado tiene asignado por el compilador un espacio de direcciones de memoria virtual, tambin denominado espacio de direcciones de usuario. Este espacio se divide en varias regiones, cada una de las cuales delimita un rea de direcciones contiguas de memoria virtual. El espacio de direcciones de memoria virtual de un proceso consiste al menos de tres regiones: Las regiones de cdigo y de datos se corresponden con las secciones de cdigo y datos del fichero ejecutable. La regin de datos inicializados o zona esttica de la regin de datos es de tamao fijo. Por el contrario el tamao de la regin de datos no inicializados o zona dinmica de la regin de datos puede variar durante la ejecucin de un proceso. La regin de pila o pila de usuario se crea automticamente y su tamao es ajustado dinmicamente en tiempo de ejecucin por el ncleo. La ejecucin del cdigo del programa ir marcando el crecimiento o decrecimiento de la pila, el ncleo asignar espacio para la pila conforme se vaya necesitando. La pila est constituida por marcos de pila lgicos. Un marco se aade a la pila cuando se llama a una funcin y se extrae cuando se vuelve de la misma. Existe un registro especial de la mquina denominado puntero de la pila donde se almacena la direccin, dependiendo de la arquitectura de la mquina, de la prxima entrada libre o a la ltima utilizada. Un marco de pila contiene usualmente la siguiente informacin: los parmetros de la funcin, sus variables locales y las direcciones almacenadas en el instante de la llamada a la funcin en diferentes registros especiales de la mquina Adicionalmente, puede contener regiones de memoria compartida, que posibilitan la comunicacin de un proceso con otros procesos.

Adems de las regiones descritas, existe otra parte del espacio de direcciones virtuales de un proceso denominada espacio del ncleo que se utiliza para ubicar estructuras de datos relativas a dicho proceso que son utilizadas por el ncleo. Existen bsicamente dos estructuras locales a un proceso que deben ser manipuladas por el ncleo y que se suelen implementar en el espacio de direcciones del proceso: el rea de usuario o rea U y la pila del ncleo. Conceptualmente ambas estructuras aunque locales a un proceso son propiedad del ncleo. Obviamente, estas estructuras slo pueden ser accedidas en modo ncleo o supervisor. OPERACIONES CON REGIONES IMPLEMENTADAS POR EL NUCLEO El ncleo dispone de una estructura local asociada a cada proceso denominada tabla de regiones por proceso, que mantiene informacin relevante sobre las regiones de cdigo, datos, pila de usuario y memoria compartida (si existe) de un cierto proceso. Cada entrada de esta tabla contiene un puntero que apunta a una entrada de la tabla de regiones. sta es una estructura global del ncleo que contiene informacin sobre cada regin. Las entradas de la tabla de regiones se organizan en dos listas: una lista enlazada de regiones libres y una lista enlazada de regiones activas. Simultneamente una entrada slo puede pertenecer a una de las dos listas. Existen varias llamadas al sistema (fork, exec, ...) que tienen que manipular durante su ejecucin el espacio de direcciones virtuales de un proceso. El ncleo dispone de algoritmos bien definidos para la realizacin de diferentes operaciones con las regiones. Las principales operaciones con regiones implementadas por el ncleo son:

Bloquear y desbloquear una regin. El ncleo debe bloquear una regin para prevenir los posibles accesos de otros procesos mientras se encuentra trabajando con ella. Cuando termina de usarla la desbloquea. Estas operaciones son independientes de las operaciones de asignar y liberar una regin. Asignar una regin. Consiste en eliminar la primera entrada disponible de la lista enlazada de regiones libres y situarla en la lista enlazada de regiones activas. Usa allocreg(). Las llamadas al sistema que usan esta operacin son: fork, exec y shmget. Ligar una regin al espacio de direcciones virtuales de un proceso. Consiste en asociar a una regin (que previamente ha tenido que ser asignada) una entrada de la tabla de regiones por proceso. El ncleo implementa esta operacin con el algoritmo attachreg(). Las llamadas al sistema que usan esta operacin son: fork, exec y shmat. Cambiar el tamao de una regin. Las nicas regiones cuyo tamao pueden ser modificados son las regiones de datos y de pila. Las regiones de cdigo y las regiones de memoria compartida no pueden crecer despus de ser inicializadas. El ncleo implementa esta operacin con el algoritmo growreg(). Existen dos llamadas al sistema brk y sbrk que usan esta operacin, ambas trabajan con la regin de datos. Adems el ncleo tambin utiliza esta operacin para implementar el crecimiento de la pila de usuario. Cargar una regin con el contenido de un fichero. El ncleo implementa esta operacin con el algoritmo loadreg() que es usada por la llamada al sistema exec. Desligar una regin del espacio de direcciones de un proceso. El ncleo implementa esta operacin con el algoritmo detachreg(). Las llamadas al sistema que usan esta operacin son: exec, exit y shmdt. Liberar una regin. Cuando una regin ya no est unida a ningn proceso, el ncleo puede liberar la regin y devolverla a la lista enlazada de regiones libres. El ncleo implementa esta operacin con el algoritmo freereg(). Duplicar una regin. El ncleo implementa esta operacin con el algoritmo dupreg(), que es usado por la llamada al sistema fork.

3.- IDENTIFICADORES NUMERICOS ASOCIADOS A UN PROCESO La forma de identificacin utilizada es asignar a cada proceso un nmero entero positivo distinto denominado identificador del proceso o pid. La llamada al sistema getpid devuelve el pid del proceso que realiza esta llamada. Su sintaxis es: salida=getpid(); IDENTIFICADORES DE USUARIO Y DE GRUPO El ncleo asocia a cada proceso dos identificadores enteros positivos de usuario y dos identificadores enteros positivos de grupo. Los identificadores de usuario son el identificador de usuario real (uid) y el identificador de usuario efectivo (euid). Mientras que para el grupo, se tiene el identificador del grupo real (gid) y el identificador del grupo efectivo (egid).

El uid identifica al usuario que es responsable de la ejecucin del proceso. El gid identifica al grupo al cual pertenece dicho usuario. El euid se utiliza, principalmente, para determinar el propietario de los ficheros recin creados, para permitir el acceso a los ficheros de otros usuarios y para comprobar los permisos para enviar seales a otros procesos. El uso del egid es similar al del euid pero desde el punto de vista del grupo. El ncleo reconoce un usuario privilegiado denominado superusuario, normalmente a este usuario privilegiado se le identifica con el nombre de root. El superusuario tiene asignados los valores uid=0 y gid=1

Las llamadas al sistema getuid, geteuid, getgid y getegid permiten determinar qu valores toman los identificadores uid, euid, gid y egid, respectivamente. Su sintaxis es similar a la de la llamada al sistema getpid. Para cambiar los valores que toman estos identificadores, es posible utilizar las llamadas al sistema setuid y setgid. La sintaxis de la llamada al sistema setuid es: salida = setuid (par); La llamada al sistema setuid permite asignar el valor par al euid y al uid del proceso que invoca a la llamada. Se distinguen los siguientes casos: El identificador de usuario efectivo del proceso que efecta la llamada es el del superusuario. En este caso uid=par y euid=par. El identificador del usuario efectivo del proceso que efecta la llamada no es el del superusuario. En este caso euid=par si se cumple alguna de las siguientes condiciones:

El valor del parmetro par coincide con el valor del uid del proceso.

Esta llamada se est invocando dentro de la ejecucin de un programa que tiene su bit S_ISUID activado y el valor del parmetro par coincide con el valor del uid del propietario del programa. La explicacin del funcionamiento de la llamada al sistema setguid es anloga a la explicada para setuid pero referido a los identificadores gid y egid. 4.- ESTRUCTURAS DE DATOS DEL NUCLEO ASOCIADAS A LOS PROCESOS El ncleo mantiene diferentes estructuras de datos asociadas a los procesos, las cuales son imprescindibles para la ejecucin de los mismos. Algunas de estas estructuras como la pila del ncleo, el rea U y la tabla de regiones por proceso son locales a cada proceso, es decir, cada proceso tiene asignada su propia estructura privada. Otras estructuras, como la tabla de procesos y la tabla de regiones son globales para todos los procesos, es decir, slo existe en el ncleo una estructura para todos los procesos. Por otra parte, algunas de estas estructuras como la pila del ncleo y el rea U se implementan en el espacio de direcciones virtuales de cada proceso. Mientras que otras como la tabla de procesos, la tabla de regiones por proceso y la tabla de regiones se implementan en el espacio de direcciones virtuales del ncleo. Todas estas estructuras tienen en comn que son propiedad del ncleo y por tanto solo pueden ser accedidas en modo ncleo. Otras estructuras de datos del ncleo asociadas a los procesos son las tablas de pginas y la tabla de descriptores de ficheros. Las tablas de pginas permiten traducir las direcciones de memoria virtual a direcciones de memoria fsica. Por su parte, la tabla de descriptores de ficheros identifica a los ficheros abiertos por un proceso. PILA DEL NUCLEO La existencia en UNIX de dos modos distintos de ejecucin, modo usuario y modo ncleo, hace necesario la existencia de una pila independiente para cada modo y para cada proceso: la pila de usuario y la pila del ncleo. La pila de usuario contiene los marcos de pila de las funciones que se ejecutan en modo usuario. De forma anloga, la pila del ncleo contiene los marcos de pila de las funciones que se ejecutan en modo ncleo. La pila del ncleo se puede definir como una estructura local a cada proceso que contiene los marcos de pila de las funciones o rutinas del ncleo invocadas durante la ejecucin del proceso en modo ncleo. Frecuentemente la pila del ncleo se implementa dentro del rea U del proceso, pero tambin puede implementarse en un rea de memoria independiente.

TABLA DE PROCESOS La tabla de procesos es una estructura global del ncleo donde se almacena informacin de control relevante sobre cada proceso existente en el sistema. Cada entrada de la tabla de procesos contiene distintos campos con informacin sobre un determinado proceso, como por ejemplo: El identificador del proceso (pid). Los identificadores de usuario (uid, euid) y de grupo (gid, egid) del proceso. Punteros que permiten al ncleo localizar la tabla de regiones por proceso y el rea U del proceso. El estado del proceso. Un proceso durante su tiempo de vida puede pasar por diferentes estados, cada uno de los cuales posee ciertas caractersticas que determinan el comportamiento del proceso. Punteros para enlazar a los procesos en diferentes listas, las cuales permiten al ncleo controlar a los procesos, como por ejemplo, la lista de procesos planificados para ejecucin, la lista de procesos dormidos, etc. Canal o direccin de dormir asociada al evento por el que el proceso ha entrado en el estado dormido. Informacin asociada a la prioridad de planificacin del proceso que es consultada por el algoritmo de planificacin del ncleo para determinar qu proceso debe pasar a utilizar el procesador. Informacin asociada al tratamiento de las seales como por ejemplo, las mscaras de las seales que son ignoradas, bloqueadas, notificadas y tratadas. Informacin genealgica, que describe la relacin de este proceso con otros procesos, como por ejemplo, el pid de su proceso padre, un puntero al primer hijo creado, un puntero al ltimo hijo creado, etc. El tiempo de ejecucin del proceso y el tiempo de utilizacin de los recursos de la mquina. Estas informaciones son usadas por el ncleo, entre otras cosas, para el clculo del valor de la prioridad de planificacin del proceso. AREA U El rea de usuario o rea U es una estructura local asociada a cada proceso que contiene informacin de control relevante sobre el mismo que el ncleo necesita consultar nicamente cuando ejecuta dicho proceso. Entre la informacin contenida en los campos del rea U se encuentra: Un puntero a la entrada de la tabla de procesos asociada a dicho proceso. Los identificadores de usuario (uid, euid) y de grupo (gid, egid) del proceso. Los identificadores de usuario y de grupo almacenados en el rea U pueden, en determinadas circunstancias, diferir de los almacenados en la tabla de procesos. Los argumentos de entrada, los valores de retorno y el identificador del error (si se produjese) de la llamada al sistema en ejecucin. Las direcciones de los manipuladores de las seales y otras informaciones relacionadas. Informacin acerca de las regiones de cdigo, datos y pila obtenida de la cabecera del programa. La tabla de descriptores de ficheros que mantiene informacin sobre los ficheros abiertos por el proceso. El directorio de trabajo actual y el directorio raz actual. El terminal de acceso asociada con el proceso, si existe alguno. Estadsticas de uso de la CPU.

El rea U de un proceso se puede considerar en ciertos aspectos como una extensin de la entrada asignada a dicho proceso en la tabla de procesos. Sin embargo, mientras que la informacin contenida en la tabla de procesos debe ser estar siempre accesible para el ncleo, el rea U contiene informacin que necesita nicamente estar accesible para el ncleo cuando se est ejecutando el proceso. El ncleo puede acceder directamente a los campos del rea U del proceso que se est ejecutando pero no al rea U de otros procesos. Internamente, el ncleo referencia a una variable denominada u para acceder al rea U del proceso (A) que actualmente se est ejecutando. Cuando se ejecuta otro proceso (B), el ncleo reorganiza su espacio de direcciones virtuales de forma que la variable u referencie al rea U del

nuevo proceso B. Esta implementacin permite al ncleo identificar fcilmente al proceso actual siguiendo el campo puntero del rea U que apunta a la correspondiente entrada de la tabla de procesos. TABLA DE REGIONES DE PROCESO La tabla de regiones por proceso es un estructura local a cada proceso que contiene una entrada por cada regin (cdigo, datos y pila de usuario) asociada al proceso. Si existen regiones de memoria compartida cada una de ellas tambin tendr asignada una entrada. Cada entrada de la tabla de regiones por proceso apunta a una entrada en la tabla de regiones y contiene la direccin virtual de comienzo de una regin. Adems cada entrada contiene el tipo de acceso permitido al proceso sobre dicha regin. La tabla de regiones por proceso de un proceso puede implementarse dentro de la entrada de la tabla de procesos asociada a dicho proceso, o puede implementarse dentro del rea U de dicho proceso. Tambin puede implementarse en un rea de memoria independiente. TABLA DE REGIONES La tabla de regiones es una estructura global del ncleo que contiene una entrada por cada regin asignada por el ncleo. Cada entrada de esta tabla contiene la informacin necesaria para describir una regin, como por ejemplo: Un puntero al nodo-i del fichero cuyo contenido fue cargado dentro de la regin. El tipo de regin (cdigo, datos, pila de usuario o memoria compartida). El tamao de la regin. La localizacin de la regin en memoria principal, tpicamente un puntero a una tabla de pginas. El estado de la regin, que puede ser una combinacin de: bloqueada, bajo demanda, en proceso de ser cargada en memoria y vlida (cargada en memoria). El contador de referencias, que indica el nmero de procesos que estn referenciando a una regin. Las entradas de la tabla de regiones se organizan en dos listas: una lista enlazada de regiones libres y una lista enlazada de regiones activas. Simultneamente una entrada slo puede pertenecer a una de las dos listas 5.- CONTEXTO DE UN PROCESO El contexto de un proceso en un cierto instante de tiempo est formado por su espacio de direcciones virtuales, los contenidos de los registros hardware de la mquina y las estructuras de datos del ncleo asociadas a dicho proceso. Formalmente, el contexto de un proceso se puede considerar como la unin del contexto a nivel de usuario, contexto de registros y contexto a nivel del sistema El contexto a nivel de usuario de un proceso est formado por su cdigo, datos, pila de usuario y memoria compartida que ocupan el espacio de direcciones virtuales del proceso. El contexto de registros de un proceso est formado por el contenido de los siguientes registros de la mquina: El contador del programa que indica la direccin de la siguiente instruccin que debe ejecutar la CPU. Esta direccin es una direccin virtual del espacio de memoria del ncleo o del usuario. El registro de estado del procesador que indica el estado del hardware de la mquina en relacin al proceso en ejecucin. Contiene diferentes campos para almacenar la siguiente informacin: el modo de ejecucin, el nivel de prioridad de interrupcin, el indicador de rebose, el indicador de arrastre, etc. El puntero de la pila donde se almacena la direccin virtual, dependiendo de la arquitectura de la mquina, de la prxima entrada libre o de la ltima utilizada en la pila de usuario (ejecucin en modo usuario) o en la pila del ncleo (ejecucin en modo ncleo). Anlogamente, la mquina indica la direccin de crecimiento de la pila, hacia las direcciones altas o bajas.

Los registros de propsito general, que contienen datos generados por el proceso durante su ejecucin. Para simplificar la discusin, se van a considerar slo dos registros, el registro 0 y el registro 1.

El contexto a nivel del sistema de un proceso est formado por: La entrada de la tabla de procesos asociada a dicho proceso. Su rea U. Su pila del ncleo. Su tabla de regiones por proceso. Las entradas de la tabla de regiones apuntadas por las entradas de su tabla de regiones por proceso. Las tablas de pginas asociadas a dichas entradas de la tabla de regiones.

PARTE ESTATICA Y DINAMICA DE UN PROCESO En el contexto de un proceso se distinguen una parte dinmica, cuyo contenido es necesario salvar ante la aparicin de ciertos sucesos, y una parte esttica, cuyo contenido no es necesario salvar. La parte dinmica de un proceso est formada por el contexto a nivel de registros y su pila del ncleo. Los restantes elementos del contexto de un proceso constituyen su parte esttica. A la parte dinmica del contexto de un proceso que ha sido salvada se le denomina capa de contexto. As durante el tiempo de vida de un proceso dependiendo de la secuencia de sucesos que se produzcan pueden existir varias capas de contexto. La manipulacin que el ncleo realiza de las capas de contexto puede visualizarse como una pila, denominada pila de capas de contexto. La pila de capas de contexto se almacenan en el rea U. El ncleo almacena en la entrada de la tabla de procesos asociada al proceso en ejecucin la informacin necesaria para localizar la capa de contexto superior de la pila de capas de contexto asociada al proceso. De esta forma el ncleo conoce dnde debe almacenar una nueva capa de contexto o dnde debe buscar la ltima capa de contexto almacenada. El ncleo aade una capa de contexto en la pila de capas de contexto de un proceso en los siguientes casos: Cuando se produce una interrupcin. Cuando el proceso realiza una llamada al sistema. Cuando se produce un cambio de contexto. Asimismo, el ncleo extrae una capa de contexto de la pila de capas de contexto de un proceso cuando: El ncleo vuelve de manipular una interrupcin. El proceso vuelve al modo usuario despus de que el ncleo completa la ejecucin de una llamada al sistema. Se produce un cambio de contexto.

El nmero de capas de contexto de la parte dinmica est limitado por el nmero de niveles de interrupcin que soporte la mquina. SALVAR Y RESTAURAR EL CONTEXTO DE UN PROCESO Se entiende por salvar el contexto de un proceso a la accin del ncleo de aadir una capa de contexto en la pila de capas de contexto asociada a dicho proceso. Exactamente la parte dinmica del mismo. Asimismo se entiende por restaurar el contexto de un proceso a la accin del ncleo de extraer la capa superior de la pila de capas de contexto asociada a dicho proceso e inicializar el contexto de registros y la pila del ncleo con los valores que se haban salvado en dicha capa. Por lo tanto, se deber restaurar el contexto de un proceso cuando se termina de atender una interrupcin, cuando se vuelve a modo usuario tras finalizar una llamada al sistema o cuando se realiza un cambio de contexto.

Las operaciones asociadas a salvar o restaurar el contexto de un proceso se suelen implementar por hardware o microcdigo, ya que se obtiene una mayor velocidad en su realizacin. En consecuencia, la implementacin de estas acciones es fuertemente dependiente de la mquina. En ciertas circunstancias, el ncleo debe realizar una vuelta abortiva, es decir, abortar su secuencia de ejecucin actual, restaurar una capa de contexto salvada con anterioridad en el rea U del proceso, y reiniciar su ejecucin dentro del contexto restaurado. El ncleo usa el algoritmo setjmp()para salvar una capa de contexto en el rea U del proceso. Asimismo, usa el algoritmo longjmp()para extraer dicha capa salvada en el rea U e inicializar el contexto de registros y la pila del ncleo con los valores que se haban salvado en dicha capa. No confundir con funciones de libreria con mismo nombre. CAMBIO DE CONTEXTO Se define el cambio de contexto como el conjunto de tareas que debe realizar el ncleo para aplazar o finalizar la ejecucin del proceso (A) actualmente en ejecucin, y comenzar o continuar con la ejecucin de otro proceso (B). Entre las principales circunstancias que motivan la realizacin de un cambio de contexto se encuentran: La entrada de un proceso en el estado dormido. La realizacin de un cambio de contexto en esta circunstancia est plenamente justificada ya que puede transcurrir una cierta cantidad de tiempo hasta que el proceso despierte, con lo que mientras tanto se pueden ejecutar otros procesos. La finalizacin de la ejecucin de una llamada al sistema exit. Esta llamada al sistema provoca la terminacin del proceso en cuyo contexto se est ejecutando el ncleo. Por lo tanto, puesto que el proceso actual ha sido finalizado el ncleo debe hacer un cambio de contexto para continuar o iniciar la ejecucin de otro proceso. La vuelta al modo usuario tras ejecutarse una llamada al sistema y la existencia de un proceso esperando para ser ejecutado con mayor prioridad de planificacin que el actual. En este caso se produce un cambio de contexto porque si hay otro proceso con mayor prioridad de planificacin, sera injusto mantenerle esperando. La vuelta al modo usuario tras atenderse una interrupcin y la existencia de un proceso esperando para ser ejecutado con mayor prioridad de planificacin que el actual. La justificacin del cambio de contexto en esta circunstancia es anloga al caso anterior. La finalizacin del tiempo de uso del procesador de un proceso ejecutndose en modo usuario. En esta circunstancia, de acuerdo con el tipo de algoritmo de planificacin utilizado en UNIX, se planifica otro proceso para ser ejecutado en modo usuario y por tanto es necesario realizar un cambio de contexto.

Las principales tareas que realiza el algoritmo del ncleo para implementar un cambio de contexto son: Decidir si hay que hacer un cambio de contexto, de acuerdo con las circunstancias que lo motivan expuestas anteriormente, y si puede realizarse en el instante actual. Salvar el contexto del proceso actual (A). Usar el algoritmo de planificacin de procesos para elegir el prximo proceso (B) cuya ejecucin se va a iniciar o se va a continuar. Restaurar el contexto del proceso (B) que ha sido elegido para ser ejecutado.

Antes de hacer un cambio de contexto, el ncleo debe asegurarse de que el estado de sus estructuras de datos sea consistente, es decir, que se hayan hecho todas las actualizaciones correctamente, que las colas estn enlazadas apropiadamente, que se han colocado los bloqueos adecuados para evitar la intrusin de otros procesos, que no se ha quedado bloqueada innecesariamente ninguna estructura de datos, etc.

6.- TRATAMIENTO DE LAS INTERRUPCIONES Las interrupciones (hardware o software) son atendidas en modo ncleo dentro del contexto del proceso que se encuentra actualmente en ejecucin, aunque dicha interrupcin no tenga nada que ver con la ejecucin de dicho proceso. npi, es el nivel de prioridad de interrupcin actual almacenado en el registro de estado del procesador. npii, es el nivel de prioridad de interrupcin asociado a un determinado tipo de interrupcin. Cuando se produce una interrupcin, sta es tratada por el ncleo si npii>npi, en dicho caso el ncleo invoca al algoritmo inthand() para el tratamiento de las interrupciones. Este algoritmo realiza principalmente las siguientes acciones: Salvar el contexto del proceso actual. Elevar el nivel de prioridad de interrupcin. Es decir, se hace npi=npii. Por tanto, las interrupciones que lleguen con un nivel de prioridad de interrupcin igual o menor que npi quedan bloqueadas o enmascaradas temporalmente. De esta forma se logra preservar la integridad de las estructuras de datos del ncleo. Obtener el vector de interrupcin. Normalmente, las interrupciones aparte del npii pasan al ncleo alguna informacin que le permite identificar el tipo de interrupcin de que se trata. En un sistema con interrupciones vectorizadas, cada dispositivo suministra al ncleo un nmero nico denominado nmero del vector de interrupcin que se utiliza como un ndice en una tabla, denominada tabla de vectores de interrupcin. Cada entrada de esta tabla es un vector de interrupcin, que contiene, entre otras informaciones, un puntero al manejador o rutina de servicio de la interrupcin apropiada. Invocar al manipulador o rutina de servicio de la interrupcin. Restaurar el contexto del proceso, una vez que se ha concluido la rutina de servicio de la interrupcin.

En consecuencia cuando finaliza inthand() el nivel del npi es restaurado al valor que tena antes de atenderse la interrupcin. Las peticiones de interrupcin que pudieran haber quedado bloqueadas o enmascaradas durante la ejecucin de inthand() son almacenadas en un registro especial de peticiones de interrupcin. Estas interrupciones sern atendidas cuando el npi disminuya suficientemente. Algunas mquinas disponen de una pila especial denominada pila de interrupciones que es utilizada por todos los manejadores de interrupciones. En las mquinas que no disponen de un pila de interrupciones los manejadores utilizan la pila del ncleo asociada al proceso. Por otra parte, el tratamiento de la interrupcin provoca un pequeo impacto en el proceso en cuyo contexto es atendida, ya que el tiempo utilizado para atender la interrupcin es cargado al cuanto del proceso. Asimismo, es importante resaltar que el contexto del proceso no est protegido de forma explcita de ser accedido por los manipuladores de interrupciones. Un manipulador incorrectamente escrito potencialmente puede corromper cualquier parte del espacio de direcciones del proceso. 7.- INTERFAZ DE LAS LLAMADAS AL SISTEMA Las llamadas al sistema son el mecanismo que los procesos de usuario utilizan para solicitar al ncleo el uso de los recursos del sistema. Un proceso invoca a una llamada al sistema como si se tratase de una funcin de librera cualquiera. El compilador de C utiliza una librera predefinida de funciones, denominada librera C que contiene los nombres de las llamadas al sistema y que es enlazada, por defecto, con todos los programas de usuario.

Estas funciones de librera, entre otras instrucciones, ejecutan una instruccin que provoca una interrupcin software especial denominada trap del sistema operativo. El tratamiento del trap por parte del ncleo provoca el cambio de modo de ejecucin a modo ncleo, salvar el contexto del proceso actual y la invocacin del algoritmo del ncleo que trata las llamadas al sistema, tpicamente denominado syscall().

Una vez finalizado syscall(), el ncleo concluye el tratamiento del trap restaurando el contexto del proceso y cambiando el modo de ejecucin a modo usuario, donde se continuar con la ejecucin del cdigo de la funcin de librera asociada a la llamada al sistema. Si el bit de acarreo del registro de estado del procesador est desactivado, es decir, no se produjo ningn error durante la llamada al sistema, concluye la funcin de librera asociada a la llamada al sistema. Si una llamada al sistema falla, la funcin de librera asociada devolver el valor -1. Para averiguar cul es el error que se ha producido, se ha de consultar el identificador numrico del error almacenado en la variable global errno. En el fichero de cabecera <errno.h> hay una descripcin de todos los valores que puede tomar errno. Existen dos formas de obtener el mensaje de error asociado a la variable errno: la primera es usar errno como ndice para acceder a la cadena correspondiente de sys_errlist. La segunda es usar la funcin perror, cuya sintaxis es: perror(cadena); 8.- ESTADOS DE UN PROCESO El tiempo de vida de un proceso en un sistema UNIX puede ser conceptualmente dividido en un conjunto de estados que describen el comportamiento del proceso. Los nueve estados en que se puede encontrar un proceso en un sistema UNIX (SVR2 o SVR3) son: Ejecutndose en modo usuario. Ejecutndose en modo ncleo o supervisor. Preparado en memoria principal para ser ejecutado. El proceso no est ejecutndose, pero est cargado en memoria principal listo para ser ejecutado tan pronto lo planifique el ncleo. Dormido o bloqueado en memoria principal. El proceso se encuentra esperando en memoria principal a que se produzca un determinado evento, como por ejemplo, la finalizacin de una operacin de E/S. Preparado en memoria secundaria para ser ejecutado. El proceso est listo para ser ejecutado pero se encuentra en memoria secundaria. Dormido o bloqueado en memoria secundaria. El proceso est esperando en memoria secundaria a que se produzca un determinado evento.

Creado. El proceso se ha creado recientemente y est en un estado de transicin. El proceso existe, pero no se encuentra preparado para ser ejecutado ni tampoco est dormido. Este estado es el inicial para todos los procesos excepto para el proceso con pid=0. Zombi. Este es el estado final de un proceso al que se llega mediante la ejecucin explcita o implcita de la llamada al sistema exit.

Un proceso tiene control sobre algunas transiciones de estado. En primer lugar, un proceso puede crear otro proceso. Sin embargo, es el ncleo quien decide en qu momento se realizar la transicin desde el estado creado al estado preparado para ejecucin en memoria principal o al estado preparado para ejecucin en memoria secundaria. En segundo lugar, un proceso puede invocar a una llamada al sistema lo que provocar que pase del estado ejecucin en modo usuario al estado ejecucin en modo ncleo. Sin embargo, el proceso no tiene control de cundo volver de este estado, incluso algunos eventos pueden producir que nunca retorne y pase al estado zombi. En tercer lugar, un proceso puede finalizar realizando una invocacin explcita de la llamada al sistema exit, pero por otra parte eventos externos tambin pueden hacer que se produzca la terminacin del proceso. El resto de las transiciones de estado sigue un modelo rgido codificado en el ncleo. Por lo tanto, el cambio de estado de un proceso ante la aparicin de ciertos eventos se realiza de acuerdo a unas reglas predefinidas. ESTADOS ADICIONALES En el UNIX BSD4 se definieron algunos estados adicionales que no son soportados en SVR2 ni SVR3, pero s en SVR4. Como por ejemplo, el estado parado o suspendido (en memoria principal o secundaria) y el estado dormido y parado (en memoria principal o secundaria). En el estado parado, la ejecucin del proceso es detenida por la accin de una seal pero posteriormente puede retomarse. ESTADO DORMIDO El estado dormido en memoria principal es uno de los posibles estados de un proceso, por su importancia requiere de una atencin especial. Un proceso siempre pasa al estado dormido en memoria principal desde el estado ejecucin en modo supervisor. Principalmente, un proceso pasa al estado dormido cuando se produce alguna de los siguientes circunstancias:

Durante la ejecucin de una llamada al sistema el ncleo requiere usar un recurso que se encuentra ocupado, o debe esperar a que termine una transferencia de E/S. Se produce un fallo de pgina como resultado de acceder a una direccin virtual que no est cargada en memoria principal.

Un proceso permanecer en el estado dormido hasta que tenga lugar el evento por el que se encuentra esperando. Cuando dicho evento ocurra, el proceso ser despertado y pasar al estado preparado para ejecucin en memoria (principal o secundaria). Cuando un proceso pasa al estado dormido en espera de un determinado evento el ncleo lo aade a una lista de procesos dormidos. Adems almacena la direccin de dormir en el campo correspondiente de la entrada asociada al proceso en la tabla de procesos. Cuando se produce un evento asociado a dicha direccin de dormir el ncleo pasa a estado preparado a todos los procesos que estaban a la espera de un evento en dicho canal. Esta implementacin del estado dormido presenta dos anomalas. En primer lugar, cuando un evento tiene lugar, el ncleo despierta a todos los procesos de la lista de procesos dormidos que se encuentran esperando por la ocurrencia de dicho evento, y los pasa al estado preparado para ejecucin en memoria (principal o secundaria). Puesto que slo uno de ellos puede ser planificado para ser ejecutado y usar el recurso por el que espera, el resto de los procesos tendr que volver al estado dormido despus de una breve visita al estado ejecucin en modo supervisor, lo que genera cambios de contextos y procesamientos innecesarios. La segunda anomala es que distintos eventos pueden estar asociados a un mismo canal o direccin de dormir.

Una seal es un mecanismo de comunicacin que utiliza el ncleo para informar a un proceso de la ocurrencia de algn evento asncrono. La posibilidad de poder interrumpir a un proceso en el estado dormido, es decir, de poder despertarlo cuando llega una seal para l, permite distinguir entre dos tipos de estado dormido: Estado dormido no interrumpible por seales. En este estado el proceso no puede ser interrumpido (no puede ser despertado) cuando llegue una seal para l. Si bien conviene matizar que existen algunas seales que no pueden ser ignoradas. Un proceso entra en este estado si se encuentra esperando por un evento que no tardar mucho en producirse, como por ejemplo que se complete una operacin de E/S con el disco o que se libere un recurso (nodo-i o buffer) bloqueado. Estado dormido interrumpible por seales. En este estado el proceso puede ser interrumpido (puede ser despertado) cuando llegue una seal para l. Un proceso entra en este estado si se encuentra esperando por un evento que puede tardar en producirse, como por ejemplo que el usuario pulse alguna tecla del teclado.

El parmetro que usa el ncleo para determinar si un proceso entra en el estado dormido interrumpible o no interrumpible es el valor de la prioridad de planificacin de un proceso en modo ncleo. El ncleo asigna una determinada prioridad de planificacin en modo ncleo en funcin del evento por el que el proceso se encuentra esperando. A dicha prioridad se le suele denominar prioridad para dormir. Adems define un valor lmite o umbral de tal forma que si la prioridad para dormir de un proceso es mayor que dicho valor umbral el proceso entrar en el estado dormido no interrumpible. En caso contrario, el proceso entrar en el estado dormido interrumpible.

Anda mungkin juga menyukai