Multiprogramación Paginacion, Segmentacion y Memoria Virtual.
Multiprogramación Paginacion, Segmentacion y Memoria Virtual.
Multiprogramación Paginacion, Segmentacion y Memoria Virtual.
INTRODUCCIÓN
Tiempo de acceso Tiempo de finalización de una petición menos el tiempo de inicio de la petición
Tiempo de ciclo de la memoria Desde que finaliza una petición hasta que se inicia la siguiente
petición. Este se ve detenidamente por el Hardware.
DIRECCIONAMIENTO
Cuando se coge la primera línea del programa para compilar y se pone la primera línea con 0 negativo. Y así
el programa será + fácil para ejecutarse.
GESTION DE LA MEMORIA
Monoprogramación.
Con la llegada de la monoprogramación y de los sistemas operativos se hace necesario gestionar la memoria
de manera que los programas que se querían cargar a la memora no pisen (borren,...) la memoria reservada
al sistema operativo. Cuando se terminaba un proceso comienza el siguiente.
Solamente nos tendríamos que preocupar cuando surgieron y esto se hacía mediante un registro frontera, que
limitaba la memoria utilizable, para que no coja la memoria del SO.
SO
P
ERROR
Asignación de Memoria de forma Estática: no permiten que los procesos sean reutilizables, ya que
en el momento que das la orden de ejecutar se carga el programa en memoria para su ejecución
transforma todas las memorias relativas en absolutas.
Multiprogramación.
¿Cómo protegemos la memoria?
- Con asignación de direccionamiento (@x) de memoria estática: Antes mirábamos nada más límites
inferiores y superiores de los registros fronteras. Pero con la Multiprogramación con más de un proceso
ejecutándose a la vez necesitamos guardar los registros fronteras de cada proceso en su PCB, para poder
organizar de manera eficiente su ejecución.
Lim. Inferior
SO
P1
P2
La dirección es absoluta.
- Con asignación de direccionamiento (@x) de memoria dinámica: El proceso tiene su rango de memoria
definido (registro límite), la CPU habrá de asignar una dirección relativa menor a este rango y después sumar
a esta dirección el registro base (donde comienza el proceso) para obtener la dirección absoluta.
ERROR: Dando una dirección que da el procesador serán las direcciones relativas se compara con el registro
límite tiene que tener un límite (el tamaño del programa). Si es menor se le suma el Registro Base.
Esta es más fácil de mantener, porque solamente guardas en trozos de memoria que lo da el programa.
Formas de gestionar la memoria por ubicar varios procesos den la memoria Principal.
Consiste en coger la MP y dividirla en trozos de tamaño fijos que quedan definidas en el momento que se
carga el sistema operativo hasta que lo cambies hay que reiniciar el sistema para que sepa que lo has
cambiado. No hace falta que sean del mismo tamaño. En cada partición se ubicará un proceso.
Se piensa en hacer colas de procesos relativas al tamaño de los procesos de la cola (p. ej. cola de procesos
de 128K).
P1 100K
28K
128K
P2 70K 128K
58K
128K
256K
Para eso hace falta que se creen colas para los procesos, para que entren en la partición:
128K
Pero este sistema hace que se malgaste memoria principal, pero de dos formas:
Fragmentación Interna: Malgasta memoria principal. El espacio que se pierde en la partición da que
el programa no llega a aprovechar el espacio de la partición.
Fragmentación Externa: Se produce cuando hay suficiente espacio libre pero no podemos asignar
memoria a un proceso en espera porque las particiones vacías son muy pequeñas y las adecuadas
no están vacías (en las particiones que los puedes juntar y tendrías espacios suficientes para ubicar
otros procesos, pero que sin juntar estos espacios, no puedes insertar).
P1 100K
28K
128K
P2 70K 128K
58K
128K
P4 200K
256K
56K
La memoria se crea las particiones que necesita el proceso. Se crean según el tamaño de los procesos que
se ubicarán. Para evitar la fragmentación exterior, en este caso se hará servir la compactación para recorrer
los datos, pero esto tiene un elevado coste de T.
P1 100K
P2 70K
P3 200K
P4 100K
64K
Se está ejecutando el P1. Cuando se ejecuta un proceso está en memoria pero cuando termina de ejecutarse
de la memoria.
P2 70K
P3 200K
P4 100K
64K
100K
Características:
compactación
RL registre limite + RB registro base + direcciones relativas @ rel + asignación dinámica procesos
relativas
Los procesos han de ser reublicables porque hay esta compactación, hay que trabajar con asignación
dinámica y no estática.
Paginación
Es 1 técnica q palia el inconveniente q había hasta ahora. Este inconveniente se encuentra en memoria un
espacio grande para poder ubicar todo el proceso de forma contigua.
Permite ubicar un proceso en memoria teniendo espacio disponible, para estar separado.
Para poder llevar a cabo necesitamos una Tabla de Páginas. Aquí viene indexada, en donde está ubicada la
primera posición (donde se guarda el inicio del flame).
En la tabla, un array, se encuentran les direcciones de memoria de los frames correspondientes a cada una
de les páginas de los procesos: (1,2,3,...) ---> (frame3,frame1,frame5,...). Por ejemplo: la página 1 del proceso
está contenido al frame 3 de memoria. El único problema de la paginación es que se puede producir
fragmentación interna cuando por ejemplo tenemos un proceso de 7 kb, y los frames son de 2kb, de manera
que la última página dejará 1kb libre dentro del último frame. Cada PCB guardará donde se encuentra la tabla
(dirección en donde comienza).
Cada PCB de cada proceso guardará los registros fronteras el de línea y el da la página a más de estar
registrados las tablas de paginación de los procesos.
Pero hay una fragmentación interna porque hay procesos q no son iguales a los “marcs” y hay espacio q se
desaprovecha. Podemos dividir mucho + los frames para aprovechar espacio perdido en memoria pero lo que
haría es aumentar la Tabla de Páginas.
ERROR
El procesador, al compilar, emite una dirección de memoria que esta dirección es relativa, por cada línea de
programa. El proceso no se entera de nada. Por ejemplo de 0 a (8*1024-1) si el programa es de 8kb entonces
queremos acceder a una variable donde el procesador genera una dirección relativa. Tiene que estar dentro
del ámbito del proceso si intenta estar fuera genera un error sino seguimos teniendo una dirección relativa que
se sabe que ya está bien (*@rel) e intercepta la dirección relativa. Dentro del rango de direcciones relativas
que sería de 0 a (8*1024-1), tendremos que saber si esta dirección relativa es correcta, si este es el caso,
hemos de saber el índice que apuntara a la tabla de direcciones del frame. Hay que poder transformar la
dirección relativa y la subdivide en dos ámbitos la página en la que se quiere acceder(p) y el
desplazamiento(d)
@rel
Con la división entera entre el rango de memoria relativa y el tamaño del número de páginas el mod. (resto)
de la misma operación accede a la tabla de páginas(T.P) a la página que había obtenido y accede a esa
posición y accede a la @ del frame (f) suma el desplazamiento(d) y se obtiene la dirección absoluta para
acceder a la Memoria Principal(M.P).
Una vez que sepamos la dirección del frame, hemos de saber en qué parte de este se encuentra los datos,
entonces sumamos el desplazamiento a la dirección del frame y así obtenemos la dirección absoluta.
Pero es muy lenta porque hay que recorrer varias tablas porque hay múltiples visitas a la memoria,(para evitar
que pase por la tabla de PCB que se accede una vez por ejecucion y no cada vez por peticion) se puede
evitar cuando se carga el proceso en memoria se accede a un registro base en donde esté la dirección de la
tabla de páginas del proceso en ejecución, de esta manera hacemos servir la memoria cache para guardar las
entradas a páginas de cada proceso de manera que estos accesos serán mucho más rápidos y el sistema
también es mucho más rápido porque se ahorra muchos accesos. Se le suma de la p(Tamaño Página) y se
consigue la dirección del Frame.
En sistemas pequeños nos conviene tener tablas de páginas en RAM, se guardan en registros (registros
associativos).
Per 1 parte se coge la Memoria Principal la Memorial Real en trozos de la misma medida, llamados marcs o
frames o “armazones”
Se coge el proceso o Memoria Lógica y se divide en trozos de la misma medida que los frames o marcs a
todos ellos, se llama páginas.
Si tenemos un registro en el procesador que nos guardar la tabla de procesos se dedicará un registro
(Registro Base) donde se guarda
En el momento que se cargue el proceso se guardará la tabla de direcciones del microprocesador y guardar la
información en la PCB anterior para acceder directamente la tabla de registro de páginas. (nos guarda la
dirección de la tabla de páginas del proceso activo)
En vez de q la tabla de páginas, solamente conservaremos las direcciones de las páginas que se
utilizan con más frecuencias de las tablas de páginas (en memoria caché) y así se carga mucho más
rápido.
PA P0 @f
PB P2 @f
Proceso Pag @F
P1 P3 @F0
P2 P2 @F1
Cuando se llene la tabla sustituirá los que son menos visitados por otros. También se puede hacer en vez con
los más visitados por los últimos accedidos.
En sistemas pequeños y los procesos pequeños en vez de tener la tablas de páginas en memoria
principal se guardan en registros y estos registros se llaman registros asociativos.
Paginación Compartida
La paginación es un sistema q nos permite compartir información entre diferentes procesos con la utilización
de unos bits adicionales que se añaden a las entradas de las tablas de página. Se necesitarán, bits de
protección que indiquen el tipos de acceso, que se puede realizar sobre una página y bits de validez que
indicarán si el contenido de la página ha estado modificado o no.
Segmentación
La paginación parte sin mirar nada, corta por tamaño no mira si corta un bucle, puede producir fragmentación
interna en la última página del proceso. Para evitarlo aparece la segmentación que divide el proceso de una
forma lógica y racional.(no por donde toca, por medidas).
Un programa está formado por varios ficheros o segmentos, por partes lógicas:
Programa Principal, funciones, Tratamientos de error, de ficheros, tiene áreas para destinada para guardar la
pila de invocación de procedimientos, las variables locales, las variables globales.
Tabla de segmentos
Indice(nº segmentos) @base Limite
0 PP 0 1000 2000
1 F1 1 4000 1000
2 F2 2 5000 2000
3 Fen 3 9000 1000
4 VG 4 12000 3000
5 VL 5 15000 3000
6 PI 6 18000 2000
@Basedonde empieza.
(Memoria Real)
1000 PP
3000
4000 F1
5000
5000 F2
7000
9000 Fen
10000
12000 VG
15000
15000 VL
18000
18000 PI
20000
ERROR ERROR
RBTS Registro del Procesador que guarda en donde comienza la tabla del Segmento del proceso en
ejecución
RLTS Registro del Procesador que guarda cuantos segmentos tiene el proceso en ejecución.
Con todo esto puede acceder a la tabla de segmentos en donde quiere acceder a la tabla de segmentos del
proceso con el limite puede marcar el mínimo si d es mayor que el limite hay un error si es menor se le suma
la base y da la dirección real para acceder a la Memoria Principal.
Al igual al sistema anterior se pueden compartir segmentos haciendo usos de los bits de protección y los bits
de validez en la tabla de segmentos aprovechar
También se puede mejorar el rendimiento de la segmentación validar haciendo uso de la Memoria cache para
almacenar las entradas de los segmentos más utilizados.
También como en sistema anterior en sistemas pequeños se puede utilizar los Registros Asociativos.
Sistemas combinados
· Segmentación - Paginada:
Ej:
(GE 685 MULTICS)
ERROR
ERROR Flames
(RBTS)Registro Base Tabla de Segmentación guarda en donde comienza la tabla del Segmento del proceso
en ejecución.
· Paginación - Segmentada:
Ej:
(IBM 370)
Memoria Virtual
Esquema:
· Hasta ahora: todo el proceso ha de estar en MP Todos los sistemas anteriores tenían que estar en memoria
de forma completa (los procesos habían de estar en memoria
En la Memoria Virtual nada más se ubicará en la Memoria Principal las “partes” que se necesiten.
Partes:
Paginación
Segmentación
Sistemas combinados
Paginación Segmentada
Segmentación Paginada
· Ventajas:
El rendimiento de la Multiprogramación.
PA 100K t
PA 100K
PB 100K
PC 100K
ML 300K = 300 MR
(ocupa el (lo q necesito para
proceso) ejecutarlo)
PA 100K 50K
PB 100K 50K
PC 100K 50K
150K 300K
PD 100K 50K 150K
PE 100K 50K
PF 100K 50K
Algoritmos de reemplazamiento
Como se sabe que parte se ha de cargar: mediante la ejecución se generará una dirección y nos dará una
petición de una dirección de memoria.
· Carga por petición: A medida que se hace se mira si existe esa parte en memoria
· Carga por Anticipación: Adivina lo que necesita. Nunca se lleva a término, porque el sistema operativo no
puede adivinar lo que tiene que ejecutar, puede cargar un proceso que al final no se ejecutará.
Colocación
Si el sistema está trabajando en paginación y me pidan una página y no está colocada en memoria, en donde
se colocará, ¿En qué frame de memoria? En el primero que esté libre (Todos los frames son de igual medida).
Sustitución Cuando no se tiene espacio en la Memoria para cargar un programa y para ello se ha de sustituir.
LRU Least Recently Used El menos recientemente usado, para este se utilizan diferentes técnicas:
Contadores de Hardware: utilizaremos un registro del procesador se irá contando cada vez que se hace una
petición de página. Dentro de las tablas de página se ha de añadir un campo en el que sea un contador.
P3 @F5 4
P5 @F9 3
Matrices de bits: Se necesita una matriz cuadrada de n bits en donde n es el número de frames que tiene la
memoria.
Se coge la petición de la página se pone a 1 las filas y la misma columna a 0. Y así con todas.
0 0 1 2 3 4
0 0
1 0
2 1 1 0 1 1
3 0
4 0
Se haría por el sistema binario el que tenga el valor binario más bajo es la candidata a borrarse de la
memoria.
P1
P3
P2
P1
LFN(Least Frequently Used) El menos frecuentemente usado. Cada cierto tiempo pone el contador a 0 y se
irán borrando cuando a la siguiente vez que el contador se ponga a 0 tenga algún proceso a 0 quiere decir
que se utiliza menos.