Administración de
Memorias
Autores
Nakfour Abraham
C.I. 19.831.386
Mavarez Liribeth
C.I. 22.134.122
Olarte Paola
C.I. 19.545.099
Jerarquía de almacenamiento
Traducción en tiempo de compilación
Traducción en tiempo de carga
Traducción en tiempo de ejecución
Algoritmos de colocación
Multiprogramación con particiones variables o dinámicas
Algoritmo de colocación de un programa en memoria
Elementos de control de la memoria
El mapa de bits
La lista enlazada
Sistema compañero
Explicación
Paginación
Los fundamentos básicos de la paginación
La carga de un programa en memoria en un sistema paginado
Tabla de marcos
Tabla de páginas
Traducción de direcciones de un sistema paginado
La compartición
La protección de memoria
La fragmentación
Tamaño de la página
La segmentación
Traducción de direcciones en segmentación
Características del sistema segmentado
Segmentación paginada
JERARQUÍA DE ALMACENAMIENTO
Cuando el diseñador se plantea lo que es la gestión de memoria del sistema debe tener en
cuenta que la memoria es unos de los recursos críticos del sistema, es crítica porque un
programa al ejecutarse debe estar cargado en M. entonces cuanta más memoria tengamos o
mejora la optimicemos más programas podremos guardar en ella.
¿Qué quiere un diseñador?Que sea barata, gran capacidad y muy rápida.
Registros
Caché
Volátil Memoria principal Interna
Caché de disco
No volátil Disco Magnético Externa
Cinta Magnética
Cinta magnética Disco óptico Jerarquía moderna de memoria
Vamos a ver los pasos que hay que realizar para la carga de un programa en M.p:
Programa
fuente
Compilador
otros o ensamblador
módulos biblioteca
objeto Módulo del
objeto sistema
Enlazador
biblioteca Módulo
del sistema de carga
cargada
dinámicamente
Cargador
Tenemos un programa fuente, cuando lo compilamos obtenemos un módulo objeto que luego
necesita ser enlazado con el resto de los módulos objetos que tenga el sistema, para formar un
módulo de carga que es el que finalmente se introduce en memoria, una vez cargado de
memoria es cuando verdaderamente podemos decir que es un proceso, entonces tenemos toda
la imagen del proceso.
Una vez cargado en memoria se puede enlazar con bibliotecas del sistema de forma dinámica.
Esas son las fases por las que pasa el programa para convertirse en proceso.
El proceso está definido por la imagen que si recordamos tenía:
El Bloque de control de procesos
Datos relativas
Instrucciones Referencias a datos físicas
Referencias a instrucciones: lógicas o simbólicas:
La Pilas
Si se observa, consta de datos e instrucciones que tienen referencias a memoria, referencias a
datos y referencias a sus propias instrucciones.
Esas referencias, o direcciones, en realidad pueden ser de tres tipos:
Lógicas, relativas o absolutas.
Dir simbólicas: no tienen nada que ver con la posterior ubicación física de ese dato, son
normalmente las direcciones que emplea el programador.
Dir relativa: vienen expresadas respecto a un conjunto determinado, normalmente al principio
del programa.
Estas direcciones normalmente son las que utiliza el cargador y el enlazador.
JUMP 400: desde el principio saltar 400.
Dir. absolutas o físicas: son las que realmente ocupan de memoria real, de memoria física.
Son las que realmente se usan en ejecución, el programa solo entiende de direcciones
físicas, para ellos necesitamos hacer una traducción de las simbólicas y relativas a las
físicas.
Esa traducción de direcciones, también conocida como ligadura de direcciones se puede hacer
en distintos instantes, en cualquiera de las fases que hemos vistos, por las que pasa el
programa a proceso.
Tiempo de compilación
Tiempo de carga
Tiempo de ejecución.
dirección dirección
relativa absoluta si
CPU + <= Memoria
no
error de direccionamiento
El programa que está ubicado en memoria sólo tiene direcciones relativas, entonces las CPU
va generando todas la direcciones relativas, y nosotros le sumamos el contenido de un registro
hardware que contiene el inicio donde está ubicado el proceso, entonces obtenemos la
dirección absoluta, posteriormente podemos comparar esa dir absoluta con otro registro
hardware que lo que contiene es el límite de la zona de memoria ocupada por el proceso, si
está dentro del límite podremos acceder a memoria, si está fuera del límite provocaremos un
error de direccionamiento.
Observar que con dos registros hardware y una suma y comparación podemos realizar la
traducción
Proporciona un mecanismo de protección de la memoria porque si se pasa del límite que tiene
cada proceso daríamos un error de direccionamiento.
Con este esquema el proceso lo puedo poner en cualquier parte de la memoria, porque la
traducción la hago justo cuando lo voy a ejecutar.
Cada vez que cambiemos de proceso o de contesto, esos registros límite y base deben
actualizarse, y deben almacenarse en el BCP para que cada vez que cambiemos de proceso
tengamos un valor válido.
Debe conocer:
Qué zonas de la memoria están libres y qué zonas ocupadas.
Introducir los procesos en memoria.
Se encarga de asignar y desasignar memoria a los procesos conforme vayan necesitando y
liberando.
Debe controlar el intercambio entre Mp y Ms.
Además de esas funciones, el administrador de memoria debe cumplir 3 requisitos:
Protección:
No solo debe proteger la zona de memoria del proceso, sino de la memoria del sistema
operativo u otro proceso.
Compartición de memoria:
cuando se ejecutan dos procesos iguales, debe permitir que dos procesos compartan la
memoria.
Reubicación:
Un proceso puede cambiar de zona de memoria durante su ejecución.
Este requisito tiene sentido evidentemente es sistema multiprogramado.
En un sistema mono programado no tiene sentido porque si solo hay un proceso, ¿para
qué lo voy a cambiar de sitio.
Máquina desnuda: Es un sistema donde no hay S.O y no hay gestor de Memoria, quien lleva
la cuenta es el propio programador.
Suelen ser pequeños microprocesadores, señales de humo, dedicados a una sola cosa.
Particiones múltiples:
Particiones fijas
Sistema compañero
Particiones variables.
Usuario
Límite
Registro Libre inferior
Límite
Sistema Libre
Operativo
+ Vector de
Libre Vector de Interrupciones
interrupciones
ALGORITMOS DE COLOCACIÓN
Procesos
Nuevos
Sistema
Operativo
Procesos nuevos
Llega un proceso y lo situó en la cola, cuando una partición queda libre tendré que seleccionar
que proceso de la cola va en esa partición, es digamos la selección de un proceso.
Para seleccionar ese proceso hay diversos algoritmos, los que más se suelen emplear son:
Mejor ajuste: Cuando una partición queda libre, elegimos el proceso que menor
fragmentación interna produzca.
Primer ajuste: Vamos recorriendo la cola hasta encontrar el primer proceso que quepa en la
partición.
Si se observa, toda esta función de colocar procesos en memoria, en una partición determinar
es en hacer que un proceso sea aceptado en el sistema, que pase de ese estado de nuevo a un
estado de listo, esa transición de nuevo a listo es del planificador a largo plazo.
Todos estos algoritmos es el planificador a largo plazo.
Protección entre particiones: debo evitar que un proceso acceda a zonas de memoria fuera de
su partición:
Hay dos alternativas:
dos registros límites, zona superior y zona inferior de la partición: parto de una dirección
absoluta.
dir. absoluta
CPU >= < si Memoria
no no
error de direccionamiento
Partimos de una dirección absoluta, y a hay que comprobar que la dirección se encuentre entre
los dos límites
longitud base
no
error de direccionamiento
Partimos de una dirección relativa, se compara con la longitud, si está dentro de la partición se
puede acceder a él.
¿Cuál es mejor?El de base y longitud: Al ejecutarse direcciones relativas la traducción de
direcciones se produce en el momento de ejecución, por lo cual el proceso es reubicable y
puede cambiar de partición, mientras que con uno de registro límite la traducción debe ser
previa a la ejecución del proceso.
Con el registro longitud y base, la ventaja que tiene es que al partir de una dirección relativa
mientras realiza la protección hace la traducción direcciones en tiempo de ejecución y con eso
se puede reubicar el proceso en otra partición.
El otro aspecto son los elementos de control que necesitamos para llevar a cabo el control de
la memoria, qué zona de la memoria están libres y qué zonas están ocupadas.
En este caso el único elemento que necesitamos en usa tabla de particiones, que tiene una
entrada por partición, y contiene la dirección base de la partición el tamaño y como se
encuentra.
Número de la Base de la partición Tamaño de la Estado de la partición
partición partición
0 0K 100K ASIGNADA
1 100K 300K LIBRE
2 400K 100K ASIGNADA
3 500K 250K ASIGNADA
4 750K 150K ASIGNADA
5 900K 100K LIBRE
576k 288k
320k Proceso 3
64k
Inconveniente: si observamos a cada proceso le damos la memoria que él necesita, por lo cual
el proceso no tienen fragmentación interna.
Pero al final vamos creando huecos en memoria cada vez más pequeños, esos huecos tan
pequeños son difíciles de asignar a un proceso, por lo cual nos podemos encontrar con lo que
se conoce como fragmentación externa: memoria libre en el sistema que no puede ser
asignada a ningún proceso.
Para solucionar la fragmentación externa hay una técnica que se conoce como compactación:
o recolección de basura, incluso en algunos libres aparece como reducto de la basura.
La idea de la compactación es agrupar todos los procesos que están en memoria para formar
un gran huevo libre, esa es la idea.
El problema de la compactación son dos.
Uso Uso
Libre
Uso Libre
Libre
Se encarga de colocar un proceso en uno de los bloques libres que haya, a la hora de decidir
qué algoritmo de colocación se va a usar, es necesario hacer un examen cuidadoso, no vaya a
ser que se produzca mucha fragmentación externa.
8k 8k
12k 12k
Primer Ajuste
22k
6k
Mejor Ajuste
18k 2k
ultimo bloque
asignado 14k
8k 8k
6k 6k
14k 14k
Siguiente ajuste
36k Peor ajuste
20k
Se asigna un bloque de 16 k
En Primer ajuste: entra al principio en el hueco de 22.
En mejor ajuste: entra en el hueco de 18 k
En el peor ajuste : entra en el mayor, el de 36 k.
En el siguiente ajuste: entra en el siguiente después del anterior, donde quepa, es decir el de
36, si llega al final y no hay se debe empezar de nuevo.
Hay que ver los elementos que necesita el sistema para ver qué lugar está libre y cual
ocupado.
Se recurre a dos estrategias:
El mapa de bits:
Es una estrategia simple, lo que hace es tener un bit por unidad de asignación.
Puede ser bit, byte, kbyte, tan grande o tan pequeña como uno quiera.
Si el bit vale 1 es que esa unidad de asignación está ocupada, si vale 0 significa que está libre.
P1 P2 P3 P4 P5
1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0
Cuanto más grande sea la unidad de asignación, el mapa de bits es más pequeño, a mayor.
¿Cuál es mejor?
Grande: su problema es que tiene mayor fragmentación interna, porque lo mínimo que asigno
es una unidad de asignación, y si es de 32k, eso será lo mínimo que tenga asignado.
No debe ser uno muy grande ni muy pequeño.
La lista Enlazada
Es una estructura que contiene información sobre todos los elementos que hay.
Cada elemento de esa lista tiene la siguiente información:
Hueco libre
Proceso
Una alternativa a esa lista enlazada es tener en realidad dos listas enlazadas:
una lista de procesos
una lista de huecos
ahora cada lista la puedo ordenar como quiera, ej: la lista de procesos la ordeno por
direcciones y la de huecos por tamaño de mayor a menor. El ordenarla de menor a mayor
tamaño va a facilitar la política de colocación del proceso.
Liberar un proceso implicaría pasar de una lista a otra el elemento.
Esta estrategia de tener dos listas enlazadas, permite incluso tener una optimización, que
consiste en implementar la lista de huecos directamente en los propios huecos de memoria,
¿qué significa? voy a tener en el sistema un montón de procesos y huecos
El sistema tendrá un montón de procesos y huecos, dentro de la memoria que yo destino a los
procesos del usuario, habrá una parte que destine al sistema operativo, dentro de la parte del
sistema operativo tendré que tener almacenada la lista de procesos y la lista de huecos.
SISTEMA COMPAÑERO
Hemos visto el sistema de particiones fijas, con el problema del grado de multiprogramación
fijo, tantas particiones tantos procesos.
El sistema de particiones variables, el problema era la fragmentación interna, y aparte el
control de la memoria, sea con mapa de bits o lista enlazada, no es tan fácil como en las
particiones fijas.
El Sistema Compañero intenta vencer las dificultades y un sistema con un grado de
multiprogramación variable, que no tenga fragmentación externa y además con un control de
la memoria sencillo.
Idea Base: Asignar a los procesos, bloques de memoria, de longitud variable pero limitados.
¿en qué sentido?
Considera un tamaño de bloque mínimo= 2i
Considera un tamaño de bloque máximo=2m, la memoria física que hay para los procesos.
Entonces cada bloque que asigna se caracteriza porque se encuentra entre esos dos tamaños
pero siempre en potencia de dos.
2i 2k 2m
Inicialmente tenemos las listas i: es la lista de bloques libres de tamaño 2 n, para cada uno de
los tamaños posibles tenemos una lista de bloques libres, inicialmente todas vacías menos la
del tamaño máximo que tendrá un elemento.
Cuando un proceso pide un bloque de tamaño B, el sistema se busca un bloque 2 i libre tal que
2i-1 < B 2i, el bloque libre que más se adapte a él.
Si no hay libre, divide 2i+1, en 2 bloques de tamaño 2i, uno se queda libre y otro se asigna.
Si no hay 2i+1 se divide en uno más superior.
Se llama sistema compañero porque los que se dividen en 2 son los bloques compañeros.
Si no hay libre:
divide 2i+1 en 2 bloques:
2i (libre) y 2i (asigna)
i+1
si no hay 2
divide 2i+2 en :
2i+1 (libre)
2i+1:
2i (libre)
2i (asigna)
Ej: Un proceso pide 45K y tengo un bloque de 1M, entonces voy dividiendo.
512
1M 256
512 128
256 64
128
64 (asigna)
Memoria física 1 MB
Fin P4 1 Mb
Explicación:
Tenemos un bloque de 1 Mb.
Llega un P1 y pide 45 k, lo que hago es: cojo el bloque de 1 Mb y lo divido en dos de 512 k,
uno me queda libre y divido el otro en dos de 256, uno queda libre, el otro lo divido en dos de
128, uno queda libre y el otro lo divido en dos de 64 k, los divido y queda uno de 32 k pero no
satisface los de 45 k, entonces me quedo en 64 k y se lo asigno al proceso 1.
Ahora llega el Proceso 2 que pide 110 k, como cabe en el bloque de 128 k se lo asigna.
Luego llega P3 de 160 k, le tengo que asignar 256k y como hay uno libre se lo asigno.
Llega P4 de 95k, tengo que buscar un hueco de 128k, no hay, sólo quedan de 64 k y de 512 k,
entonces divido el de 512 en dos de 256, uno lo dejo libre y el otro lo divido en dos de 128 y
se lo asigno a uno.
Termina P3 y libero memoria.
Termina P2 y libero memoria.
Llega el P5 y pide 80k le tengo que dar un bloque de 128, tengo uno libre y se lo asigno.
Termina P1 y como su hueco compañero está libre lo fusiono con el de al lado en uno de 128.
El resto de los procesos van acabando y se van fusionando con el resto de los compañeros,
hasta que al final se vuelve al 1Mb.
Este algoritmo presenta un grado de multiprogramació variable, lo que pasa es que asigna en
bloques de ciertos tamaños.
Tiene fragmentación interna y fragmentación externa.
PAGINACIÓN
El problema que se plantea en los anteriores sistemas es que intenta mantener el proceso en
una zona continua de memoria, con la paginación se rompe ese esquema de asignación
continua y se empiezan a buscar asignaciones no continuas, es decir, ya el proceso no tiene
por qué estar en una misma zona, sino que podemos romper el proceso y lo vamos alojando
en los distintos huecos de memoria, así reducimos la fragmentación interna.
marco 0 pagina 3
página 0 marco 1
marco 5 página 2
Posteriormente para saber nosotros en qué marco está cada página necesitamos una estructura
que es la que se conoce como la tabla de marcos.
TABLA DE MARCOS
Es única en el sistema, y lo que contiene o indica es qué marco está libre y que marco está
ocupado, lleva el control de la memoria libre y la memoria ocupada.
Esta tabla (fotocopia) tiene una entrada por marco en el sistema.
1 entrada por marco Nº de entradas= Tamaño M. física / Tamaño Marco
La entrada del marco dice si está libre u ocupado.
Si está ocupado lo que contiene es: el proceso y la página del proceso que está ocupando ese
puesto. El nº de página y el nº del proceso.
TABLA DE PÁGINAS
Hay una por proceso. Al contrario que la de marcos que hay una en el sistema.
Posee una entrada por página que pueda tener el proceso.
Cada entrada lo que contiene es el nº de marco donde se encuentra ubicada.
La tabla de páginas es un elemento muy importante a la hora de traducir direcciones. Cuando
nuestro programa genera una dir lógica (transparencia)
Por un lado tenemos la visión del usuario y por otra la del sistema que está toda dispersa.
El usuario genera dir lógicas dentro de la zona continua, esta zona necesita traducirse a una
dir. física, para esa traducción necesitamos de ciertas estructuras con el apoyo del hardware
para hacer traducción del nº de páginas a nº de marcos, para eso necesitamos la tabla de
páginas.
Si nos fijamos, cada vez que haya que traducir una dir de lógica a física hacemos 2 accesos a
memoria: primero accedemos a la tabla de páginas y luego a la dir. física de verdad.
Evidentemente es una traducción bastante lenta.
Para reducir ese tiempo de acceso, ese doble acceso que hay en la traducción se recurre a
diversos métodos:
Implementar toda la tabla de páginas mediante el uso de registros. Si recordamos al pico del
tema había una jerarquía de memoria, entonces una opción para reducir el tiempo de acceso lo
subimos al nivel más alto y es más rápido. El problema es que no hay muchos registros, por lo
que no es una opción válida.
Seguir bajando de nivel de la jerarquía, el siguiente nivel es la caché, una especial para la
tabla de páginas, es lo que se conoce como el buffer de traducción adelantada (TLB). Este
buffer es una memoria caché sólo para entradas de la tabla de páginas.
El hardware que se necesita para implementar toda la tabla de páginas se usa en esta
estructura. (transparencia)
La dir lógica. Cada vez que generemos una dir lógica tenemos que ir a la tabla de páginas,
para obtener el marco y con ello la dir física, con la TLB se evita ir a la tabla de páginas, es
una especie de M.c. que tiene ciertas entradas de la TP, si se encuentra ahí la entrada de la TP
se puede generar la dir física y ya se reduce un acceso, si no hay acierto, habrá que recurrir a
la TP, es una forma de optimizar el acceso a la TP.
Respecto a la figura se ve que aparte de la TLB se usa otro registro hardware RBTP (registro
base a la TP) ese registro lo que contiene es un puntero a donde comienza la TP del proceso
que está en ejecución. Cada vez que hay un cambio de proceso hay que cambiar ese registro.
En la figura se puede fijar que cuando se accede a la TP se dibuja una única flecha mientras
que la TLB tiene una especie de tridente, esto es porque la TLB tiene sólo un cjto de entradas,
y no tengo un índice sobre las entradas, por lo que tengo que buscar una a una hasta que
encuentre la que quiero.
Obtiene un rendimiento de 70 u 80 %, si falla hay 3 accesos.
Hay que llevar un buen control de la caché para evitar lo fallos.
Con la TLB, en el sistema cada vez que se genera una dir lógica, hay que controlar si la
entrada está en la TLB, si se encuentra genera la dir física, si no se encuentra hay que acceder
a la TP y actualizar la TLB, la TLB debe tener siempre las últimas entradas a las que se ha
hecho referencia.
La TLB no aparece.
Si se ve la figura con la otra se omite la TLB, pero se supone que está.
En la traducción de dir en un sistema paginado la dir lógica está compuesta por 2
componentes, una nº de página y un desplazamiento.
Ese nº de página se usa como índice en la tabla de páginas, cojo el nº de páginas, me voy con
el puntero y lo uso como índice, a través de la TP obtengo el nº de marco donde se encuentra
ubicada, una vez que tengo el marco, la dir física es la composición del nº de marco y el
desplazamiento.
Lo más importante de la traducción de direcciones es el tamaño de la página.
El tamaño de la página viene dado por el hardware y se realiza además en potencia de 2. Los
valores que suele traer es de 512 a 4096.
Es posible que el diseñador pueda jugar con un rango de valores y pueda elegir uno u otro. El
tamaño viene influenciado por el hardware.
6 bits 10 bits
CPU 000001 0111011110 00001 0111011110 Marco 2
0
6bits 10 bits
Registro PTBR marco desplaza.
Puntero a la tabla
de páginas
000110
000101
+ 000010
101010
Tabla de páginas
En este esquema, cada vez que un proceso da una referencia, una dirección lógica, es en el
tiempo de ejecución cuando se hace la traducción de dirección lógica a física, esto permite
que los procesos sean reubicables. Era una de las características que debían tener los
administradores.
La compartición:
En un sistema cuando tenemos varios procesos ejecutando, si todos los procesos ejecutan un
mismo código se puede dar que los procesos compartan las mismas páginas, esa compartición
se puede llevar a cabo en un sistema paginado siempre que sean páginas con código no
reentrante, es decir: páginas que no se modifican. Esas páginas que no se modifican son las
páginas que se pueden compartir.
Para poder compartir páginas, la Tabla de Marcos prefiere tener cada entrada un campo que
sea un contador de procesos que comparten la partición.
Así por ejemplo tenemos la tabla de páginas del proceso actual.
Suponer que tenemos dos procesos de 4 páginas, y comparten las 3 primeras páginas de los
marcos 3, 4 y 7. En este caso la tabla de páginas tiene un contador más, que indica el nº de
procesos que está usando esa página, si hubiera otro proceso y quisiera compartir la página el
contador tendría que incrementarse. Si un proceso libera una página debe decrementar el
contador, cuando el contador llegue a cero significa que el marco está libre.
La protección de Memoria:
Hay dos aspectos importantes:
LA FRAGMENTACIÓN
La fragmentación externa era memoria libre pero que no se podía asignar a un proceso.
No tiene fragmentación externa porque cualquier marco se puede asignar a cualquier proceso.
La fragmentación interna era memoria asignada a un proceso que no se usa, sí que tiene
fragmentación interna, en la última página.
En estos sistemas, lo primero que hay que hacer a la hora de ejecutar un proceso es dividirlo
en páginas, si el tamaño del proceso no es múltiplo del tamaño de la página, esta no se
ocupará entera.
Como media tiene de fragmentación interna el tamaño de la página entre dos.
TAMAÑO DE LA PÁGINA
Se puede establecer una fórmula que nos de un valor óptimo del tamaño de la página.
E=Nº de bytes que ocupa una entrada en la T. de páginas
P=Tamaño de la página.
Teniendo esos valores, nosotros sabemos que por la fragmentación interna nuestro
desperdicio es la mitad del tamaño de la página, aparte de la fragmentación interna, nosotros
necesitamos tener una tabla de páginas, el tamaño de ocupa una tabla de páginas es: E*S s=nº
de entradas. Es el número de entradas por el número de bytes de cada entrada. Si la ecuación
se iguala a 0 y se deriva para calcular el óptimo nos da que el valor óptimo de P=la raíz
cuadrada de 2 por el tamaño medio de un proceso por el nº de bytes de una entrada en la tabla
de páginas.
LA SEGMENTACIÓN
Con la paginación conseguíamos que la visión del sistema y del usuario era distinta.
El usuario veía al proceso como un espacio contiguo.
El sistema veía al proceso disperso.
Se intenta asemejar a la visión del usuario.
Se intenta dividir en segmentos los distintos componentes del sistema, agrupar las dos
visiones.
Con los segmentos tendremos una dirección lógica y tendremos que hacer una traducción a
dirección física, igual que en el sistema paginado.
Para realizar esa traducción, al igual que en el sistema paginado usaremos la tabla de
segmentos.
El esquema es muy similar, pero ahora las páginas son segmentos pero de un tamaño distinto.
En la tabla de segmentos hay una entrada por cada segmento que posea el proceso, esa entrada
lo que contiene la dirección de inicio donde está ubicado ese segmento, se llama base.
La amplitud o el tamaño del segmento, cada segmento puede tener un tamaño distinto.
Los bits de protección, igual que en el sistema paginado.
Una tabla de segmento es un elemento muy importante en la traducción de direcciones.
Con esta estructura sabemos la memoria que está ocupando un proceso, aparte de esta
estructura se requiere de otra para llevar el control de que memoria está libre. En este caso se
pueden emplear la lista enlazada o los mapas de bits, que son estructuras vistas en el sistema
de particiones variables.
M.Física
4 12 direcc.
CPU 0001 001011110000 < + Segmento 1
física
Longitud de la
Tabla de Segmentos 001011101110 0000010000000000
+ 011110011110 0010000000100000
El esquema es muy similar al esquema paginado, la dirección lógica está compuesta por dos
componentes, por un nº de segmento y un desplazamiento, el nº de bits que determina el
desplazamiento viene dado por el tamaño máximo de un segmento.
A la hora de determinar el tamaño de cada segmento hay algo de libertad, pero el hardware
indica cual es el tamaño máximo del segmento, que nos determina los bits que hay para el
desplazamiento. Ese nº de segmento se usa como índice en la tabla de segmento.
En la tabla de segmento nos va a decir donde comienza el segmento y cuanto ocupa.
Hay más componentes: el registro
STBR (Registro que apunta a la tabla de segmento) es un registro hardware que cada vez
que cambiemos de proceso tenemos que cambiar el valor del registro. Apunta a la dirección
de comienzo de la tabla de segmento del proceso que está en ejecución.
Cada vez que accedemos a memoria, en realidad hay 2 accesos a memoria, en cada
referencia tenemos que ir primero a la tabla de segmentos y luego al dato, igual que en
el paginado.
Para reducir ese defecto del doble acceso se puede emplear una TLB para evitar tener
que acceder a la tabla de segmentos
Los procesos son reubicables: cada vez que se genera una dirección en el momento de
ejecución es cuando se traduce de dirección lógica a dirección física.
Compartición: La tabla de segmentos debe tener un contador que indica cuantos
procesos están usando ese segmento.
Fragmentación: externa. Nosotros vamos ubicando los segmentos y puede haber
huecos que vayan sobrando muy pequeños, no se puede dar la interna, porque creamos
segmentos de una longitud variable.
Política de ubicación de segmentos: donde ubicar cada uno de los segmentos, es
similar a las particiones variables. En los paginados daba igual porque todos eran
iguales.
Compilación por separado de los segmentos.
SEGMENTACIÓN PAGINADA
Memoria Principal
dirección lógica
+ base + marco
Puntero a
la tabla de
segmentos
registro (STBR)
Has ahora hemos visto o solo segmentado o sólo segmentado, sin embargo hubo dos
arquitecturas, como eran del sistema que sacaron una arquitectura combinada que era la
segmentada paginada