Sistemas operativos modernos
Espacio de direcciones virtual Espacio de direcciones asignado al árbol de análisis sintáctico Desocupado Espacio ocupado actualmente por el árbol de análisis sintáctico La tabla de sfmbolos se ha topado con la de texto fuente Figura 4-35. En un espacio de direcciones unidimensional con tablas que crecen, una tabla podría toparse con otra. Otra posibilidad es hacerla de Robin Hood y quitar espacio a las tablas que lo tienen de so bra para dárselo a las que no tienen. Estos desplazamientos son posibles, pero son análogos a administrar superposiciones propias, lo cual es una molestia en el mejor de los casos y una montaña de trabajo tedioso y desalentador en el peor. Lo que en verdad se necesita es una forma de evitarle al programador la necesidad de ad ministrar las tablas a medida que crecen y se contraen, así como la memoria virtual elimina la preocupación de organizar el programa en superposiciones. Una solución directa y extremadamente general consiste en proporcionar a la máquina va rios espacios de direcciones independientes por completo, llamados segmentos. Cada segmen to consta de una sucesión lineal de direcciones, desde Ohasta algún máximo. La longitud de cada segmento puede ser desde Ohasta el máximo permitido. Los segmentos pueden tener lon gitudes distintas, y por lo regular las tienen. Además, las longitudes de segmento pueden variar durante la ejecución. La longitud de un segmento de pila podría aumentar cada vez que algo entra y reducirse cada vez que algo sale de ella. Dado que cada segmento constituye un espacio de direcciones distinto, los segmentos pue den crecer o decrecer de forma independiente, sin afectarse unos a otros. Si una pila que está en un segmento dado necesita más espacio para crecer, se le puede conceder porque en su es pacio de direcciones no hay nada más con lo que pueda toparse. Claro que los segmentos pue den llenarse, pero por lo general son muy grandes, así que la posibilidad es remota. Para especificar una dirección en esta memoria segmentada o bidimensional, el programa debe pro porcionar una dirección de dos partes: un número de segmento y una dirección dentro del seg mento. La figura 4-36 ilustra el uso de una memoria segmentada para las tablas de compilador que vimos antes. Aquí se muestran cinco segmentos independientes.
RkJQdWJsaXNoZXIy MjI4NDcx