sábado, 2 de junio de 2012

4.2 Carga de programas y reubicación


Las tablas de páginas o segmentos proporcionan reubicación dinámica a nivel de
página o de segmento. En paginación, el cargador busca marcos de página libres en
memoria, carga las páginas del programa, crea la tabla de páginas con lacorrespondencia y carga su dirección en el PTBR. En segmentación el proceso es
similar, salvo que requiere la asignación de huecos adecuados al tamaño de cada
segmento del programa, así como la colaboración del compilador y el montador para
establecer los tamaños.

4.3 Gestión


La traducción de direcciones, un mecanismo complejo y crítico para el rendimiento,
ha de gestionarse a nivel hardware, genéricamente por una unidad de gestión de
memoria (MMU).
La memoria libre en segmentación se gestiona bajo los criterios de las particiones de
tamaño variable, mientras que en paginación es adecuado un mapa de bits.
La paginación presenta fragmentación interna en las páginas. Esto no ocurre en la
segmentación, si bien ahora aparece fragmentación externa al utilizar unidades de
ubicación de tamaños diferentes. Ya que el tamaño de los segmentos es típicamente
mayor que el de las páginas, el problema de la fragmentación en la segmentación es
más importante.
El mismo mecanismo permite que los programas compartan páginas o, más
propiamente, segmentos. Por ejemplo, una única copia de código puede compartirse
por varios programas simplemente haciendo que las entradas correspondientes alsegmento de código en sus tablas de segmentos (o el conjunto de entradas de sus
tablas de páginas, en paginación) coincidan. Los bits de sólo lectura estarán activados, para evitar que un programa pueda corromper el código.



4.4 Sistemas combinados


Para evitar el problema de la fragmentación externa en segmentación pura, y para
evitar el tener cargada una tabla de páginas demasiado grande en paginación,
aparecen sistemas que combinan paginación y segmentación. Se denominan sistemas
de segmentación paginada (o segmentado-paginados) o de paginación segmentada
(o paginado-segmentados), según se entienda que los segmentos se dividen en
páginas o que la tabla de páginas se segmenta en varias, respectivamente4. La
dirección lógica se divide en tres partes: número de segmento, de página y
desplazamiento dentro de la página. El número de segmento identifica en la tabla de
segmentos la dirección base de una tabla de páginas, que se direcciona mediante el
número de página para obtener el marco de página en memoria, según se ilustra en
la Figura 4.5. El cálculo de la dirección lógica es ahora más complejo y lento,requiriendo dos indirecciones. El soporte hardware para traducción (TLB) es ahora
aún más importante.
Son también habituales los sistemas doblemente paginados (con dos niveles de
paginación), que siguen un esquema parecido. Generalizando, se pueden concebir
sistemas que dividen la dirección virtual en más de tres partes, especificando
diferentes niveles de paginación y/o segmentación5.

5 Enlace dinámico


La necesidad de ejecutar programas de tamaño mayor que la memoria física
disponible ha originado a lo largo de la historia la introducción de sofisticados
mecanismos de gestión de la ubicación de programas en memoria. Un primer
enfoque es el de dividir en programa en varios módulos, denominados overlays o
solapamientos, a partir de su estructura y cargar dinámicamente sólo aquellos que se
necesiten. La carga de un solapamiento la realiza una rutina de enlace, que se
encarga también de seleccionar el(los) solapamiento(s) reemplazado(s), si se requiere
espacio para la carga. Tradicionalmente, el programador determinaba qué rutinas
constituían los solapamientos, construía la rutina de enlace y las tablas de rutinas de
los solapamientos, y elaboraba el programa de forma que las llamadas a las rutinas
de los solapamientos se llamasen a través de la rutina de enlace. También eran suyos
los criterios de reemplazo de los solapamientos.
El enfoque alternativo al problema es la memoria virtual, más general y
completamente transparente al programador, al que dedicaremos la siguiente
Sección.
Sin embargo, una evolución de los overlays ha quedado en los sistemas de hoy en día
para cubrir un objetivo diferente del originalmente asignado a aquellos: las rutinas
de enlace dinámico6.
Una librería de enlace dinámico es un conjunto de rutinas agrupadas en módulos que
se cargan dinámicamente en el momento de la llamada, como ocurría en los overlays,
pero de forma transparente al programa. El sistema operativo proporciona como
soporte una llamada al sistema donde se especifica como parámetro la rutina de
enlace dinámico a ejecutar. Cuando en un programa aparece una llamada a una
rutina de este tipo, el montador, en vez de enlazar estáticamente a la rutina en el
código ejecutable, enlaza a la llamada al sistema. Cuando esta llamada al sistema seejecuta, comprueba si el módulo que contiene la rutina especificada como parámetro
está cargado en memoria. Si no lo está, lo carga y establece la referencia (indirecta)
desde el programa. A esto se le llama montaje dinámico o en tiempo de ejecución.
Se requiere una tabla que especifique el estado de cada módulo de enlace dinámico
(cargado o no) y la dirección de memoria donde se carga. En principio, hay que
destinar un espacio de memoria específico para los módulos de enlace dinámico, y
proporcionar una política de reemplazo, pero cuando se combina con memoria
virtual, que es lo habitual hoy en día, el reemplazo se realiza página a página de
forma integrada en el propio mecanismo de memoria virtual.
Aunque esta técnica se podría utilizar con el mismo objetivo de los overlays,
actualmente, ya que todos los sistemas tienen soporte de memoria virtual, el enlace
dinámico se utiliza por otros motivos:
· Los ficheros ejecutables de los programas almacenados en disco son más
pequeños. Esto tiene cierta importancia si se tiene en cuenta que hoy en día los
programas hacen un amplio uso de rutinas que consumen un gran volumen
de espacio, como por ejemplo las rutinas de tratamiento gráfico.
· Las rutinas de enlace dinámico cargadas en memoria se comparten por varios
programas, lo que permite ahorrar espacio también en memoria.
· El tiempo de carga de los programas, y por lo tanto su latencia, es menor.
· Facilita la actualización de las aplicaciones. La instalación de una nueva
aplicación aporta nuevas versiones de las librerías de enlace dinámico (por
ejemplo, rutinas de tratamiento gráfico más elaborado) que sustituyen a las
versiones antiguas, de lo que se benefician otras aplicaciones que usan dichas
rutinas