Sistemas operativos modernos

4.8.2 Segmentación con paginación: MULTICS Si los segmentos son grandes, podría no ser conveniente, o ni siquiera posible, mantenerlos en­ teros en la memoria. Esto conduce a la idea de paginarlos, de modo que sólo se tengan en la memoria las páginas que en realidad se necesiten. Varios sistemas importantes han manejado segmentos paginados. En esta sección describiremos el primero, MULTICS; en la que sigue veremos uno más reciente, el Pentium de Intel. MULTICS operaba en las máquinas Honeywell 6000 y sus descendientes, y proporciona­ ba a cada programa una memoria virtual de hasta 2^^ segmentos (más de 250,000), cada uno de los cuales podía tener hasta 65,536 palabras (de 36 bits) de longitud. Para implementar es­ to, los diseñadores de MULTICS optaron por tratar cada segmento como una memoria virtual y paginarlo, combinando las ventajas de la paginación (tamaño de página uniforme y no tener que mantener todo el segmento en la memoria si sólo se está usando una parte) con las de la segmentación (facilidad de programación, modularidad, protección y compartimiento). Cada programa en MULTICS tiene una tabla de segmentos, con un descriptor por segmen­ to. Puesto que podría haber más de un cuarto de millón de entradas en la tabla, la tabla de seg­ mentos misma es un segmento, y se pagina. Cada descriptor de segmento contiene una indicación de si el segmento está en la memoria principal o no. Si alguna parte del segmento está en la memoria, se considera que el segmento está en la memoria, y su tabla de páginas estará en la me­ moria. Si un segmento está en la memoria, su descriptor contendrá un apuntador de 18 bits a su tabla de páginas (vea la íigura 4-39a). Dado que las direcciones físicas son de 24 bits y las pá­ ginas están alineadas en fronteras de 64 bytes (lo que implica que los 6 bits de orden más bajo de las direcciones de página son 000000 ), sólo se necesitan 18 bits en el descriptor para alma­ cenar una dirección de tabla de páginas. El descriptor también contiene el tamaño de segmento, los bits de protección y unas cuantas cosas más. La figura 4-39b ilustra un descriptor de seg­ mento MULTICS. La dirección del segmento en la memoria secundaria no está en el descriptor de segmento sino en otra tabla empleada por el manejador de fallos de segmento. Cada segmento es un espacio de direcciones virtual ordinario y se pagina igual que la me­ moria paginada no segmentada que describimos en secciones anteriores del capítulo. El tama­ ño de página normal es de 1024 palabras (aunque unos cuantos segmentos pequeños que el mismo MULTICS utíliza no se paginan o se paginan en unidades de 64 palabras, a fin de aho­ rrar memoria física). Una dirección en MULTICS consta de dos partes: el segmento y la dirección dentro del segmento. La dirección dentro del segmento se subdivide en un número de página y una pala­ bra dentro de la página, como se muestra en la figura 4-40. Cuando se hace una referencia a la memoria, se ejecuta el algoritmo siguiente. 1. Se usa el número de segmento para encontrar el descriptor del segmento. 2. Se verifica si la tabla de páginas del segmento está o no en la memoria. Si está, se lo­ caliza; si no está, hay un fallo de segmento. Si hay una violación de protección, se ge­ nera un fallo (interrupción de sistema).

RkJQdWJsaXNoZXIy MjI4NDcx