TTE EM MA A 33 S SIIS STTE EM MA AS SO OP PE ER RA ATTIIV VO OS S.. G GE ES STTIIÓ ÓN ND DE EM ME EM MO OR RIIA A.. 11.. IIN NTTR RO OD DU UC CC CIIÓ ÓN N 22.. M MO OD DE ELLO OS SB BÁ ÁS SIIC CO OS SD DE EA AS SIIG GN NA AC CIIÓ ÓN ND DE EM ME EM MO OR RIIA A 22..11 M MO ON NO OP PR RO OG GR RA AM MA AC CIIÓ ÓN N 22..22 M MU ULLTTIIP PR RO OG GR RA AM MA AC CIIÓ ÓN N 22..22..11 M MU ULLTTIIP PR RO OG GR RA AM MA AC CIIÓ ÓN NC CO ON NP PA AR RTTIIC CIIO ON NE ES S FFIIJJA AS S 22..22..22 M MU ULLTTIIP PR RO OG GR RA AM MA AC CIIÓ ÓN NC CO ON NP PA AR RTTIIC CIIO ON NE ES S V VA AR RIIA AB BLLE ES S 22..22..33 A AD DM MIIN NIIS STTR RA AC CIIÓ ÓN ND DE E LLA AM ME EM MO OR RIIA A ** A AD DM MIIN NIIS STTR RA AC CIIÓ ÓN ND DE E LLA AM ME EM MO OR RIIA AC CO ON N M MA AP PA AD DE EB BIITTS S ** A AD DM MIIN NIIS STTR RA AC CIIÓ ÓN ND DE E LLA AM ME EM MO OR RIIA AC CO ON N LLIIS STTA AS SE EN NLLA AZZA AD DA AS S ** A AD DM MIIN NIIS STTR RA AC CIIÓ ÓN ND DE E LLA AM ME EM MO OR RIIA AC CO ON N TTA AB BLLA AD DE EP PA AR RTTIIC CIIO ON NE ES S // TTA AB BLLA AS SD DE EÁ ÁR RE EA AS S LLIIB BR RE ES S 33.. M ME EM MO OR RIIA AA AU UX XIILLIIA AR R 33..11 O OV VE ER RLLA AY YS S 33..22 M ME EM MO OR RIIA AV VIIR RTTU UA ALL 33..22..11 P PA AG GIIN NA AC CIIÓ ÓN N 33..22..22 S SE EG GM ME EN NTTA AC CIIÓ ÓN N 33..22..33 S SE EG GM ME EN NTTA AC CIIÓ ÓN N // P PA AG GIIN NA AC CIIÓ ÓN N 11.. IIN NTTR RO OD DU UC CC CIIÓ ÓN N Para gestionar el S.O la memoria principal del ordenador debe mantener una estructura de datos donde almacena la información sobre que zona de la memoria ocupa cada proceso, así como de las zonas de la memoria libres. De esta forma, cuando el S.O reciba una solicitud de creación de un proceso debe almacenar su código en una zona libre de la memoria (si hay) registrándose la zona de memoria que ocupa el nuevo proceso como ocupada. De igual forma, cuando un proceso finaliza hay que registrar que la zona de memoria que ocupaba queda como libre. (* DEBEREMOS DIFERENCIAR ENTRE SISTEMA MONOPROGRAMADO Y MULTIPROGRAMADO*) La gestión de la memoria de un S.O monoprogramado es mucho más sencilla que la de uno multiprogramado, ya que en éste la memoria principal sólo es compartida por él y por el único programa en ejecución. En un S.O multiprogramado la Memoria Principal se comparte entre varios programas. La parte del S.O que se encarga de la gestión de la memoria se llama Administrador de la Memoria. Su labor es la de llevar el control de qué partes de la memoria están en uso y cuales no lo están, asignar memoria a procesos cuando la necesiten y retirárselas cuando terminen, y administrar el intercambio entre la MP y el disco cuando la MP no baste para contener todos los procesos. Ahora veremos los distintos esquemas de Administración de la Memoria desde la más simple hasta la más compleja. 22.. M MO OD DE ELLO OS S B BÁ ÁS SIIC CO OS S D DE E A AD DM MIIN NIIS STTR RA AC CIIÓ ÓN N D DE E LLA A M ME EM MO OR RIIA A 22..11 M MO ON NO OP PR RO OG GR RA AM MA AC CIIO ON N El esquema de Administración de la Memoria más simple posible consiste en tener un solo proceso en la memoria a la vez y en permitir que ese proceso use toda la memoria. La memoria se divide entre el S.O y un solo proceso de usuario: SISTEMA OPERATIVO PROG. DE USUARIO 22..22 M MU ULLTTIIP PR RO OG GR RA AM MA AC CIIÓ ÓN N Aunque la monoprogramación a veces se utiliza en ordenadores pequeños, rara vez se emplea en macrocomputadoras con múltiples usuarios. Las razones por las que se usa la multiprogramación son: 1. Para facilitar la programación de una aplicación dividiéndola en dos o más procesos. 2. Para que los grandes ordenadores proporcionen servicio interactivo a varias personas en forma simultánea. (Lo cual requiere tener más de un proceso en la memoria al mismo tiempo). 3. Porque la mayoría de los procesos pasan una fracción sustancial de su tiempo esperando a que termine la E/S del disco. 4. Para mejorar la utilización de la Unidad Central de Proceso (CPU), ya que cuando un proceso está en memoria no está todo el tiempo haciendo uso de la CPU. 22..22..11 M MU ULLTTIIP PR RO OG GR RA AM MA AC CIIÓ ÓN NC CO ON NP PA AR RTTIIC CIIO ON NE ES S FFIIJJA AS S Para que la Memoria Principal pueda albergar más de un proceso, ésta se divide en cierto número de partes posiblemente distintas y de tamaño constante. Cuando llega un trabajo, éste se puede colocar en una lista de espera de entrada hasta que se tenga la menor partición posible, lo suficientemente grande para contenerlo. Cualquier espacio que no utilice un trabajo en una partición se pierde. La finalización del proceso libera la partición. Se pueden tener listas de espera separadas para cada partición, pero la desventaja de ordenar los trabajos que llegan en listas de espera separadas se vuelve evidente cuando la lista de espera de una partición grande está vacía pero la de una partición pequeña está repleta. Partición 3 Partición 2 Partición 1 S.O Ej. Particiones Fijas con listas de Entrada separadas para cada partición. Una organización alternativa consiste en conservar una sola lista de espera: Partición 3 Partición 2 Partición 1 S.O Ej. Particiones Fijas con una sola lista de espera única. En los sistemas con particiones fijas existen las denominadas: Fragmentación interna: Desperdicio de la memoria porque el tamaño de la petición no se adapta a la de la partición, normalmente siendo el de la petición menor que el de la partición, y, dependerá del tamaño de los procesos que entren. Fragmentación externa: Ante una petición de tamaño X, no se puede atender aunque exista memoria suficiente por pertenecer ésta a particiones diferentes. La forma de controlar las particiones, es una estructura de datos: TABLA (control del uso de la memoria): Existe una fila por partición con la posición base, tamaño y estado (ocupada o no). 22..22..22 M MU ULLTTIIP PR RO OG GR RA AM MA AC CIIÓ ÓN NC CO ON NP PA AR RTTIIC CIIO ON NE ES SV VA AR RIIA AB BLLE ES S En la práctica, las particiones fijas no son atractivas cuando la memoria es escasa porque una parte muy grande de ella es desperdiciada por programas que son menores que sus particiones. En su lugar se utiliza un algoritmo diferente para el manejo de la memoria: particiones variables. El tamaño de Memoria Principal ocupado por cada proceso es el exacto que éste solicita. S. Pa. (a) Entra Pa. (b) EntraPb. S. Pa. S. Pa. S. O Pa. S. O Pa. Pb. Pb. P Pb. P P Pb. Hueco (c) Entra Pc. (d) Entra Pd. P (e) Sale Pc Si quiere entrar un proceso con un tamaño mayor que cualquier hueco que queda libre aparecera un Problema: FRAGMENTACIÓN EXTERNA. Se produce un desperdicio de memoria debido a que quedan trozos de memoria pequeños y no contiguos, y que no pueden ser usados por otros programas por ser demasiado pequeños. Solución: * Fusión de huecos adyacentes: Dos huecos contiguos se unen en uno solo. Esto se realiza en cada liberación de memoria, si es posible. * Compactación: Se desplazan todas las zonas ocupadas de memoria a uno de los extremos. Inconvenientes: * Consume recursos del sistema (tiempo de CPU). * Relocalización de los programas. * El sistema se detiene cuando se realiza la compactación. Tiempo de respuesta variable. * Si el cambio de trabajos es grande, es necesario compactar frecuentemente (Demasiado). 22..22..33 A AD DM MIIN NIIS STTR RA AC CIIÓ ÓN ND DE E LLA AM ME EM MO OR RIIA A (Para sistemas de particiones variables) En términos generales existen tres maneras de llevar el control del uso de la memoria: - Mapa de bits. - Listas enlazadas. - Tablas de particiones / tablas de áreas libres. ** A AD DM MIIN NIIS STTR RA AC CIIÓ ÓN ND DE E LLA AM ME EM MO OR RIIA AC CO ON NM MA AP PA AD DE EB BIITTS S Con un mapa de bits, la memoria se divide en unidades de asignación, quizás tan pequeñas como unas cuantas palabras y tal vez tan grandes como varios Kilobytes. En correspondencia con cada unidad de asignación hay un bit en el mapa de bits, que es 0 si la unidad está libre y 1 si está ocupada (o viceversa). Ejemplo: Pa Pc 111111 110001 100001 111110 011110 H Pb H Pe H Pf Mapa de Bits La elección del tamaño de la unidad de asignación es un aspecto importante en el diseño. Cuanto menor es la unidad de asignación, tanto mayor es el mapa de bits. Si la unidad de asignación se escoge grande se puede desperdiciar memoria en la última unidad si el tamaño del proceso no es múltiplo exacto de asignación. Problema: Cuando se haya decidido traer un proceso de ‘K’ palabras a la memoria, el administrador de la memoria deberá buscar en el mapa de bits ‘K’ bits 0 consecutivos en el mapa y esta búsqueda es una operación lenta. ** A AD DM MIIN NIIS STTR RA AC CIIÓ ÓN N E EN NLLA AZZA AD DA AS S.. D DE E LLA A M ME EM MO OR RIIA A C CO ON N LLIIS STTA AS S Otra manera de llevar el control de la memoria es mediante conservación de una lista enlazada de segmentos de la memoria asignados y libres, donde un segmento es un proceso o una cavidad entre dos procesos. Campos de la Lista : Proceso/hueco Dirección Base Tamaño Puntero siguiente Ejemplo : 0K 3K Pa Pa 0 3 8K 11K 13K 17K Pc H Pb H Pc 3 5 23K 25K 29K Pe H Pf H 8 3 Pb11 2 ........ Cuando los procesos y los huecos se conservan en una lista clasificada por dirección, se pueden emplear varios algoritmos para asignar memoria para un proceso recién creado o intercambiado. Se supone que el administrador de la memoria sabe cuánta memoria debe asignar. Algoritmo del primer ajuste El administrador de la memoria rastrea la lista de segmentos hasta que hay una cavidad que sea lo suficientemente grande. Después la cavidad se divide en 2 partes, una para el proceso y una para la memoria no usada, salvo en el caso improbable de un ajuste exacto. Es un algoritmo veloz porque busca en la lista lo menos posible. Algoritmo del siguiente ajuste Funciona igual que el de antes, salvo que la siguiente vez que es llamado éste empieza a buscar a partir de donde se quedó, en vez desde siempre el inicio, como lo hace el primer ajuste. Algoritmo el que mejor se ajusta Busca en toda la lista y toma la cavidad más pequeña que sea ocupada. Este algoritmo intenta hallar una cavidad que está próxima al tamaño real que se necesita. Problema: Es más lento que los anteriores y da lugar a un mayor gasto de la memoria porque tiende a llenar la memoria con cavidades muy pequeñas sin utilizar. Algoritmo el que peor se ajusta Toma siempre la cavidad más grande disponible, de manera que la cavidad dividida sea lo suficientemente grande para ser útil. Algoritmo de ajuste rápido Los huecos están agrupados por tamaños. ** A AD DM MIIN NIIS STTR RA AC CIIÓ ÓN N D DE E LLA A M ME EM MO OR RIIA A C CO ON N TTA AB BLLA A D DE E P A R T I C I O N E S / T A B L A S D E Á R E A S L I B R E S PARTICIONES / TABLAS DE ÁREAS LIBRES En este tipo de estructuras existen dos tablas distintas: una para procesos/huecos y otra sólo para huecos. En la liberación de procesos por tanto se actualizan las dos tablas. S.O. Nº partición Pa Pb Pc 4 Tabla de particiones Comienzo Tamaño 40 60 100 100 200 30 230 26 Estado Asignada Asignada Asignada Libre Nº partición 1 Tabla de Áreas Libre Comienzo Tamaño 230 26 Estado Libre 0K 40K Pa = 60 K 100K S.O. Pb = 100K Pc = 30 K 200K 230K El S.O. no se cuenta al contar el nº de particiones. Hueco = 26 256K La búsqueda de espacio libre, comienza en la tabla de Áreas libre. 33.. M ME EM MO OR RIIA AA AU UX XIILLIIA AR R La Memoria Principal tiene capacidad limitada, lo que conlleva restricciones en cuanto: a) Número de procesos que pueden estar en MP en ejecución concurrente. Se presenta en los sistemas de multiprogramación y se resuelve con la técnica de swapping. b) Limitar la capacidad del código de los programas que, en principio, no puede ser superior a la capacidad física de la memoria principal. Para resolver este problema existen dos soluciones: - Overlays Memoria virtual. 33..11 O OV VE ER RLLA AY YS S Antes con programas que eran muy grandes y no cabían en M.P, la solución que solía adoptarse consistía en dividir el programa en partes, llamadas superposiciones (overlays), formadas por módulos, cada uno de los cuales puede estar en más de una capa. La superposición 0 (overlay 0) empezaría primero su ejecución. Cuando terminara, llamaría a otro overlay (el S.O hacía el intercambio de overlays, los cuales estarían en disco) pero el programador era quien tenía que dividir el programa en pequeños módulos (overlays) lo que suponía un trabajo excesivo para el programador. (Con esta técnica solo estará en memoria las instrucciones y los datos necesarios a un mismo tiempo) 33..22 M ME EM MO OR RIIA AV VIIR RTTU UA ALL Permite a los usuarios hacer programas de una capacidad superior a la que físicamente tiene la computadora. Se basa en que las instrucciones de un programa que se ejecutan sucesivamente (en un corto intervalo de tiempo) están en direcciones muy próximas y en que los programas suelen estas redactados con gran linealidad, es decir, no suelen abundar los saltos entre posiciones de memoria distantes. Para implantarse utiliza técnicas como: -- Gestión de memoria por páginas. Gestión de memoria Segmentada. Gestión de memoria segmentada –página. 33..22..11 P PA AG GIIN NA AC CIIÓ ÓN N La mayoría de los sistemas de Memoria Virtual emplean una técnica llamada paginación. Las direcciones generadas por el programa se llaman direcciones virtuales y forman el espacio de dirección virtual. En un ordenador sin Memoria Virtual, la dirección virtual se coloca directamente en el bus de la memoria y se provoca que la palabra de la dirección virtual (que coincide con la dirección real) sea leida o escrita. Cuando se usa Memoria Virtual las direcciones virtuales no pasan directamente al bus de la memoria. En su lugar, se dirigen a una Unidad de Administración de la Memoria (MMU) que es un chip o un conjunto de chips que transforma las direcciones virtuales en las direcciones de memoria física (M.P). Además de la traducción deberá: - Detectar si la dirección aludida esta en MP o no. Generar una interrupción si se encuentra en disco. La CPU envía direcciones virtuales a la MMU La MMU envía direcciones físicas a la M.P CPU MMU MEMORIA CONTROLAD ORA DE DISCO PRINCIPAL BUS Ej. La CPU puede generar direcciones de 16 bits -> 216 = 64 KB (Programas de hasta 64 KB), sin embargo tenemos una MP de 32 KB. De manera que aunque pueden generarse programas de 64 KB, no pueden cargarse en la MP en su totalidad y ejecutarse, por lo que en disco deben estar una copia de la imagen del núcleo del programa (swapping). La traducción propiamente dicha deberá: •• •• Detectar si la dirección aludida se encuentra en M.P o no. Generar una interrupción si se encuentra en disco (fallo de página). ** M ME EC CA AN NIIS SM MO OS SB BÁ ÁS SIIC CO OS SD DE EP PA AG GIIN NA AC CIIÓ ÓN N La memoria virtual está dividida en bloques de tamaño fijo o páginas. La Memoria Real (M.P) está dividida en bloques de igual tamaño denominados marcos de páginas. Un mecanismo de paginación se encarga de establecer la correspondencia entre nº de página ÅÆ nº de marcos de página. Memoria Secundaria Página 0 Tabla de páginas. Página 1 Página 2 D ha caído en la Página 2 d Página 3 Páginas virtuales Nº Pág.ina (NP) 0 1 2 3 Nº Marco de Memoria (NMP) Memoria Principal Marco Pag. 0 Marco Pag. 1 Marco Pag. 2 4 Marco Pag. 3 Marco Pag. 4 d Marcos de página Para realizar la transformación de direcciones, se necesita mantener una tabla por proceso (tabla de páginas) donde se almacenará para cada página: Páginas Nº de MarcoPresente PáginaModifi. Página Autorizado 1 10 1 1 Lectura 2 5 0 1 Lectura/Escrit. 3 15 1 0 Lectura Nº de Marco ---------> Nº de marco en el que está almacenada la página i (0..n) Presente Página ----> 1 La página se encuentra en M.P 0 La página no se encuentra en M.P. Modif. ----------------->Indica si se ha modificado dicha página después de su carga en M.P o no. Autorizado -----------> Modelo de acceso autorizado a la página (leer, modificar....) Una tabla de páginas representa el contenido de una memoria virtual particular (cada proceso tendrá la suya propia). Deberá existir un registro de la CPU que almacene la dirección de comienzo de la tabla de páginas. Su valor formará parte del entorno volátil del proceso; se almacenará en el descriptor del proceso. Las tablas de páginas se encuentran en M.P en una zona del S.O. Reg. Base de la Tabla de Páginas (CPU) + Dirección Virtual = Dirección Real (M.P) Si tengo una dirección lógica (D) y quiero convertirla en una dirección física (Y), tendré que realizar los siguientes cálculos: NP = D div p (NP: Nº de página, p: tamaño de la página) d = D mod p (d: dirección dentro de la página) Por tanto la conversión quedaría como: Y = Tp[NP]*p + d ( Y: Dirección física) (Tp : Valor de Marco para esa página dentro de la tabla) Ejemplo Una computadora usa páginas de 4Kb. Su tabla de páginas usa entradas de 3 bits cuya situación en un instante es la siguiente: NP 8 MP 0 9 010 1 001 110 2 3 000 100 4 011 5 000 000 6 000 7 101 ¿Cual es la dirección física generada para la dirección lógica 2989? NP=D div p; 2989 div 4096=0 decimal T[0] = 2) ==> d=D mod p; 2989 mod 4096=2989 = 2 · 4096+2989= 11181 MarcoPágina 010 (en ==> Y = T[0] · 4096+2989 Nota : El operador div, se queda con la parte entera de la división. Ante la interrupción de falta de página, el S.O deberá realizar las siguientes operaciones: 1. 2. 3. 4. 5. Bloquear el proceso. Encontrar la ubicación en disco de la página solicitada. Encontrar un marco de página libre en M.P Efectuar la carga de página desde disco al marco de página anterior. Desbloquear el proceso. En cuanto al tamaño ideal de la página, debemos encontrar un tamaño intermedio que dependa tanto del tamaño de los procesos, como en el gasto de entrada en la tabla de páginas. Esta tamaño normalmente es múltiplo de dos y lo elige el diseñador del S.O.,. Ventajas ¾ Si es muy pequeño... Inconvenientes nº de páginas elevado educe la fragmentación interna Tabla con muchas entradas Búsquedas lentas. Trasiegos entre M.P. y M.S. elevado ¾ Si es muy grande.......... Fragmentación interna aumenta Reduce entradas en la tabla Búsquedas más rápidas Menos trasiegos Ventaja de la M. Virtual: Eliminación de la fragmentación externa. Problema de la M. Virtual : La velocidad de la M.P queda reducida a la mitad debido a que cada acceso a memoria conlleva un acceso adicional a la tabla de páginas, esto es: 1. Acceso a la M.P para ejecutar cierto proceso por la CPU. 2. Acceso a la Tabla de Páginas para obtener la dirección física de M.P. Solución: Uso de memoria caché. Se emplea para albergar las filas de la tabla de páginas de los accesos más frecuentes. Debido a la propiedad de localización de los programas, su tamaño puede ser muy pequeño. Sólo en caso de fallo se consultará la tabla de páginas. A A ccoonnttiinnuuaacciióónn ccoom moo ssee ccaallccuullaa,, llaass ddiirreecccciioonneess eenn ppaaggiinnaacciióónn:: ** A ALLG GO OR RIITTM MO OS SD DE ES SU US STTIITTU UC CIIÓ ÓN ND DE EP PÁ ÁG GIIN NA AS S.. Cuando ocurre una fallo de una página, el S.O tiene que escoger una página y retirarla de la M.P (swapp out) con el fin de dejar espacio para la página que tiene que traerse (swapp in). Si la página por ser retirada se ha modificado en su estancia en la M.P ésta debe rescribirse en el disco para actualizar la copia del disco. El sistema es más óptimo si se elige una página que no se ha utilizado en demasía. FIFO El S.O conserva una lista de todas las páginas que están actualmente en M.P donde la página que está a la cabeza de la lista es la más antigua y la de la cola es la de más reciente ingreso. Al haber un fallo de página, la página que está a la cabeza se retira y se anexa la nueva en la cola de la lista. Ejemplo: Sea la siguiente cadena de referencia de páginas de memoria. Suponer arranque en frío y que la máquina sólo admite 3 marcos de pagina. El algoritmo de reemplazo utilizado será el FIFO. Nota: Arranque en frío: Se denomina así cuando no existe ninguna página cargada en memoria. 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 7 0 7 3 2 1 * 0 3 2 * 4 0 3 * 2 4 0 * 3 2 4 * 0 3 2 * 0 3 2 0 3 2 1 0 3 * 2 1 0 * 2 1 0 2 1 0 * 2 1 0 * 2 1 0 * 1 0 7 * 7 2 1 * 0 7 2 * 0 1 2 3 0 4 2 3 0 1 7 1 Array Páginas 1 Marco 1 0 Marco 2 7 Marco 3 * * Interrupció n 2 Página víctima ¿ Cuántas interrupciones por falta de página se han producido ? - 15 interrupciones. ¿ En el instante t=2, cuál es la situación de los marcos ? - 1, 0, 7. ¿ Y en el instante final ? - 1, 0, 7 ¿ Orden de salida ? 7 -> 0 -> 1 ¿ Cuál será el tiempo dedicado a las interrupciones (para una es de 2 ms) ?- 15 x 2 =30 ms. Sustitución de página usada menos recientemente – LRU Cuando ocurre un fallo de página, se desecha la página que ha estado sin uso por el periodo de tiempo más largo. Para implementar completamente LRU se necesita conservar una lista enlazada de todas las páginas que están en memoria con la usada más recientemente en el frente y la usada menos recientemente en el fondo. Ejemplo: Sea la siguiente cadena de referencia de páginas de memoria. Suponer arranque en frío y que la máquina sólo admite 3 marcos de pagina. El algoritmo de reemplazo utilizado será el LRU. 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 Array Páginas 1 Marco 1 7 * * 0 7 * 1 0 * 7 2 1 0 2 * 3 2 1 0 3 * 4 0 * 2 4 * 3 2 * 2 3 0 4 0 2 3 0 2 3 * 1 1 3 2 1 * 3 0 2 1 0 * 2 7 1 0 Marco 2 7 Marco 3 * Interrupció n Página víctima ¿ Cuántas interrupciones por falta de página se han producido ? - 12 interrupciones. Nota : Aquellas columnas en las que nos se produce interrupción, las páginas que son referidas pasan como más usada a la parte más alta de la columna, reordenando las demás una posición después. Algoritmo aleatorio Se elige al azar una página. 33..22..22 S SE EG GM ME EN NTTA AC CIIÓ ÓN N Consiste en utilizar un espacio de direcciones lógicas dividido en segmentos de distinto tamaño. Cada segmento de por sí, tiene sentido lógico, es decir, cada segmento representa una parte del programa. Los primeros segmentos de 64 KB podrían reservarse para procedimientos, datos, pilas y grupos que pertenecen al programa en ejecución. Los segmentos restantes podrán contener cada uno un archivo por segmento, de modo que los procesos pudieran direccionar en forma directa todos sus archivos, sin tener que abrirlos y utilizar primitivas especiales de E/S para leerlos y escribirlos. Ejemplo : Segmento 1 Zona de declaraciones Segmento 2 Zona de Datos PROCESO 1 Segmento 3 Pila Segmento 4 Procedimiento A En este esquema de memoria, el transformaciones es el COMPILADOR. encargado de realizar las Al igual que en la paginación las direcciones lógicas son bidimensionales, es decir, con dos campos por dirección: DIR. LÓGICA (S,a) [ número de segmento (S) y dirección de dentro del segmento (a) ]. Para la conversión de las direcciones lógicas a direcciones físicas el compilador genera las tablas de segmentos (una tabla para cada proceso) que luego serán usadas por el S.O. para el direccionamiento. C Caallccuulloo ddee uunnaa ddiirreecccciióónn :: 33..22..33 S SE EG GM ME EN NTTA AC CIIÓ ÓN N // P PA AG GIIN NA AC CIIÓ ÓN N Los sistemas que combinan la paginación con la segmentación ofrecen las ventajas de ambas técnicas de organización del almacenamiento virtual. Los segmentos tienen por lo general un tamaño múltiplo de páginas; no es necesario que todas las páginas de un segmento estén en almacenamiento primario a la vez, y las páginas que son contiguas en el almacenamiento virtual no son por fuerza contiguas en el almacenamiento real. Las direcciones son tridimensionales, y una dirección del almacenamiento virtual, v, se compone de un segmento, s, un número de página dentro del segmento p, y el desplazamiento dentro de la página donde se encuentra el elemento deseado, d.