ResumenEjersPracticosLinux Procesos
Debe hacerse una distinción entre la definición de programa y proceso, un programa es una entidad pasiva y un
proceso es la entidad activa del programa que incluye más que el código del mismo.
Proceso:
Es un programa en ejecución.
La ejecución de los procesos debe progresar de forma secuencial. En un instante como máximo una instrucción es
ejecutada en nombre del proceso.
Unproceso es más que el código del programa.
Incluye también a la actividad actual representada por el valor del PC y el contenido de los registros del procesador.
Cuando el SO ejecuta un programa, se carga el código ejecutable en una zona libre de la memoria, y el sistema
operativo, además,
reserva
:
● Una zona de datos para las variables globales y las constantes (Espacio de direccionado)
:
Comoen tiempo de compilación se conocen perfectamente las variables globales y las constantes, se reserva
el espacio justo y necesario. Ni un byte de más. Además, aquellas variables globales que sean inicializadas a
un valor concreto y también a las constantes, se les puede dar valor cuando se reserva la zona de datos.
En esta zona no se reserva espacio para las variables locales. Una función (ométodo) en un instante
dado puede estar en ejecución o no (las que tienen algo en la pila están ejecutándose y el resto no). Sólo las
que están en ejecución necesitan espacio de memoria para sus variables y parámetros. Un programa más o
menos grande puede estar compuesto de varios cientos de funciones. Sería un desperdicio reservar memoria
para las variables locales de cada función, siendo que soloserán utilizadas si la función se ejecuta. Las
variables globales pueden ser utilizadas en cualquier momento, por eso están disponibles en el área de datos
estáticos desde el principio hasta el fin de la ejecución.
Además, si utilizamos recursividad, una función puede estar en ejecución varias veces en un instante dado, y
para cada una de esas veces necesita un conjunto de variables locales yparámetros cosa que no se podría
saber con anterioridad como para reservar ese espacio estáticamente, se necesita una estructura dinamica.
Algunos compiladores de lenguajes orientados a objetos guardan también en esta zona las variables de clase,
que son únicas para todas las instancias de una clase.
●
Una zona para las llamadas (Stack)
que almacenará los parámetros de las funciones o métodos, lasvariables
locales y los valores de retorno.
Cuando empieza la ejecución, la pila está inicialmente vacía. En el transcurso de la ejecución, seguro que se
efectúan llamadas a otras funciones (o métodos). En cada llamada, en la pila se almacena lo siguiente:
● La dirección a la que se debe retornar después de la llamada, es decir, la dirección de la instrucción
siguiente a la propia llamada.
● Los datospasados como parámetros de la llamada.
● Las variables locales utilizadas por la función llamada
● Si la función devuelve algo, lo dejará en la pila también.
En un instante dado, la pila almacena los datos de una serie de llamadas. Un método llama a otro, y éste a
otro, y éste a otro, y así sucesivamente, es posible que la pila alcance su capacidad máxima. En ese caso, la
ejecución no puedecontinuar, y se produce un error conocido como desbordamiento de pila o stack
overflow. Es poco corriente que esto ocurra en algoritmos iterativos, ya que cada llamada debe ser
programada explícitamente por el programador, y sería raro que un programador necesitara un gran número
de llamadas a métodos anidadas. No obstante, sí es frecuente este error en los algoritmos recursivos, ya que
ahí, un métodotermina por llamarse a sí mismo una y otra vez, y debe ponerse especial cuidado en que la
profundidad de estas llamadas no sea demasiado grande, ya que la pila tiene un tamaño limitado.
●
Una zona para la gestión dinámica de memoria (heap)
: Es decir, aquella memoria que se solicita durante la
ejecución del programa. Por ejemplo, en C con la orden malloc, en Pascal con getMem o en la mayoría...
Regístrate para leer el documento completo.