6. Rendimiento
Tiempo de Acceso
El tiempo transcurrido entre presentar la dirección y
obtener el dato
Tiempo del ciclo de memoria
El tiempo puede ser requerido por la memoria para
“recuperar” antes del siguiente acceso
El tiempo del ciclo es acceso + recuperación
Tasa de transferencia
Velocidad a la cual los datos pueden ser movidos
7. Administración de Memoria
Al igual que con el CPU, los procesos también
compiten por el uso de la memoria principal (RAM);
ello conlleva que la memoria se comparta de forma
eficiente
Existen muchas estrategias de administración de
memoria, cada una con sus pros y contras, pero lo
que más determina cuál esquema utilizar es el
diseño del hardware existente
La memoria es un inmenso arreglo de bytes o
palabras, que contiene tanto instrucciones como
datos, y cada una tiene su propia dirección
8. Espacio de Direcciones
Lógico y Físico
Las direcciones que se utilizan dentro de un
programa y que son relativas al inicio del mismo se
conocen como Direcciones Lógicas ó Virtuales,
mientras que a cada una de las posiciones de la
memoria RAM se les denomina Direcciones Físicas
La sección encargada de convertir las direcciones
lógicas en físicas se llama Unidad de Manejo de
Memoria (MMU), que es un disp. de hardware
Los procesos nunca ven las direcciones físicas y la
memoria nunca ve las direcciones lógicas
9. Intercambio
Cuando un proceso requiere ser transferido
temporalmente al disco durante su ejecución por
cuestiones de espacio o alguna otra razón, se debe
realizar un Intercambio (Swap)
El intercambio debe ser lo más rápido posible para
que no afecte demasiado el desempeño, ya sea
utilizando discos veloces o apartando secciones del
disco de acceso rápido
Si el enlazado fue al momento de la carga, los
procesos deben recolocarse en la misma posición
donde estaban originalmente para que no fallen
10. Asignación Contigua
Normalmente se divide la memoria en dos grandes
particiones, colocando al sistema operativo en una y
a los procesos del usuario en la otra
Puesto que el vector de interrupciones debe estar en
memoria baja, normalmente el sistema operativo
también se coloca ahí
Existen varios factores a tomar en cuenta:
Asignación con una sola partición
Asignación con múltiples particiones
Fragmentación externa e interna
11. ASIGNACIÓN DE MEMORIA
CLÁSICA
Los programas reciben del SO un espacio de memoria para su ejecución
Monoprogramación
Multiprogramación
Memoria Memoria Programa A
principal principal
Programa A Programa B
Programa C
Sistema Sistema
operativo operativo
12. Asignación con una Sola
Partición
En este esquema se asume que hay una sola
partición para los procesos del usuario
Para cada procesos, se utiliza un Registro de
Reubicación y un Registro Límite
El registro de reubicación contiene la dirección física
en donde se colocó el proceso y el registro límite
contiene el tamaño del intervalo asignado
Las direcciones lógicas de un proceso no deberán
ser mayor al límite; si lo llegan a ser, se levanta una
trampa del sistema operativo
Las direcciones físicas se obtienen: DF=DL+RR
14. Asignación con Múltiples
Particiones
En este método se manejan varias particiones, una
para cada proceso existente
En la forma más sencilla, cada partición es de
tamaño fijo y la cantidad de procesos posible
dependerá del número de particiones disponible
Otra forma más general es utilizar particiones
variable; para esto, el s.o. lleva un control de las
regiones libres y ocupadas de la memoria
Las regiones libres o disponibles se les llama
también como huecos; de entrada, toda la memoria
es un solo hueco
15. Asignación con Múltiples
Particiones
Conforme van llegando los procesos, se busca un
hueco adecuado y se coloca ahí el proceso,
actualizando las tablas correspondientes
Hay tres métodos normales para asignar huecos a
nuevos procesos:
Primer ajuste: se asigna el primer hueco que se encuentre y
que tenga el tamaño mínimo necesario
Mejor ajuste: se asigna aquél hueco que tenga al menos el
tamaño mínimo necesario, y que además sea el más
pequeño de los encontrados
Peor ajuste: se asigna el hueco más grande de todos,
siempre y cuando tenga el tamaño suficiente
16. Asignación con Múltiples
Particiones – Ejemplo
SO SO SO SO
proceso 5 proceso 5 proceso 5 proceso 5
proceso 9 proceso 9
proceso 8 proceso 10
proceso 2 proceso 2 proceso 2 proceso 2
17. Fragmentación Externa e
Interna
La fragmentación externa se da cuando se van
asignando porciones de memoria a los procesos y
entre ellas quedan pequeñas secciones sin ocupar
En ocasiones, un proceso no se puede almacenar
por falta de un segmento contiguo suficiente, pero si
se sumaran todos los fragmentos dispersos sí se
podría
La fragmentación interna se presenta cuando se
asignan particiones de tamaños mayores a los de los
procesos y queda espacio sin ocupar
18. Fragmentación Externa e
Interna
Una forma de evitar la fragmentación externa es la
Compactación; en esta técnica, se relocalizan los
procesos de tal manera que queden contiguos y
resulte en un solo hueco grande al final
La compactación sólo es posible si se utiliza
enlazado dinamico (al momento de ejecución)
Es importante evaluar el impacto de la compactación
y analizar los algoritmos que se vayan a utilizar para
ello; la compactación suele ser muy ineficiente y
díficil de lograr adecuadamente
20. Antecedentes
Los programas normalmente no ocupan al
mismo tiempo toda la memoria que solicitan;
esto porque el código está dividido en partes o
por estructuras de datos parcialmente utilizadas
Si se aprovecha esta característica, se pueden
poner más procesos en memoria al mismo
tiempo lo que ofrece varias ventajas:
Se elimina el límite de la memoria física
Se pueden ejecutar más programas a la vez
Se requiere menos E/S que si se intercambian en total
Estas ventajas son propias de la Memoria Virtual
22. Mecanismos de Asignación de
Memoria Virtual
Existen tres estrategias de administración de
la memoria virtual:
OBTENCIÓN
COLOCACIÓN
REMPLAZO
Las estrategias de colocación del
almacenamiento sirven para determinar en
que lugar del almacenamiento primario se
deben colocar los programas y datos
entrantes.
MEJOR AJUSTE
PRIMER AJUSTE
PEOR AJUSTE
23. Paginación
Otra posible solución al problema de la
fragmentación externa es permitir que el espacio de
direcciones de los procesos no sea contiguo
La Paginación (Paging) es una implementación de
dicha solución
La paginación evita el difícil problema de asignar
porciones variables a los procesos o de utilizar
intercambio constante y su consecuente
fragmentación en disco
Debido a estas ventajas y a su relativa facilidad de
implementación, es de las técnicas más usadas
24. Método Básico de Paginación
La memoria física se divide en bloques de tamaño
fijo llamados Marcos (Frames) y la memoria lógica se
divide en bloques del mismo tamaño llamados
Páginas (Pages)
Cuando se va a ejecutar un proceso, se carga de
disco a los marcos de memoria disponible; el disco
también se divide en bloques del mismo tamaño que
los marcos
Cada dirección lógica se convierte en una
combinación de no. de página y desplazamiento en
la página; la MMU la convierte en dir. física
26. Método Básico de Paginación
El número de página se utiliza como un índice dentro
de una Tabla de Páginas, la cual contiene la
dirección base de cada uno de los marcos de la
memoria física
El tamaño de la página lo define el hardware
Si se utiliza un esquema de paginación, no existe
fragmentación externa, cualquier marco disponible se
puede utilizar; lo que sí puede llegar a haber es algo
de fragmentación interna
Los marcos disponibles se administran por el sistema
operativo mediante una Tabla de Marcos
27. Soporte en Hardware para la
Tabla de Páginas
Por lo general, se requiere una tabla de páginas para
cada proceso, por lo que se requiere que se
almacene un apuntador a ésta en el PCB
Se podrían utilizar registros dedicados para
almacenar la tabla, sin embargo, esto sólo funciona
si son pocas entradas
Otra posibilidad es la utilización de un registro
especial de alta velocidad que guarda la posición en
memoria donde se encuentra la tabla de cada
proceso, y su valor cambia de un proceso a otro
28. Páginas Compartidas
Una ventaja adicional de la paginación es la
capacidad de poder compartir páginas comunes
entre varios procesos
Esto se logra simplemente haciendo que las tablas
de páginas de los procesos referencien a los mismos
marcos
Esto se puede utilizar para compartir código común
(por ejemplo, varios usuarios utilizando un mismo
programa) o para implementar un esquema de
memoria compartida
29. Segmentación
La segmentación es un esquema de memoria en el
que se hacen divisiones lógicas de un programa (por
funciones, módulos o segmentos de datos), y en el
que cada segmento puede tener una longitud
variable
Los segmentos se numeran de forma creciente y las
instrucciones o datos se referencian en base al inicio
del segmento
Las direcciones lógicas de los procesos se forman
entonces de unir el número de segmento con el
desplazamiento dentro del segmento
30. Segmentación
1
4
1
2
3 2
4
3
espacio del usuario espacio de memoria física
31. Soporte en Hardware para
Segmentación
La segmentación se implementa mediante una Tabla
de Segmentos
Esta tabla contiene en cada entrada una base de
segmento y un límite de segmento
La base es la posición en memoria física en la que
se encuentra el segmento y el límite es el tamaño de
segmento
Cuando se busca una dirección lógica, en base al
número de segmento se ubica la entrada y se
obtiene la base; si el desplazamiento es mayor al
límite se rechaza, si no se suma a la base
33. Segmentación – Ejemplo
Asignación de memoria virtual
Un solo segmento
Varios segmentos
Memoria Programa A Memoria Segmento 0
virtual virtual
Segmento 1 Programa A
Segmento 2
Sistema Sistema
operativo operativo
34. Protección y Compartimento
de los Segmentos
Al igual que con la paginación, se pueden agregar
bits a las entradas de la tabla de segmentos para
controlar la validez o el tipo de acceso permitido a
cada uno
Además, el hecho de que los segmentos tienen un
significado lógico permite realizar verificaciones
adicionales
También se pueden compartir los segmentos,
simplemente haciendo referencia en la tabla a la
misma dirección física; si lo compartido es código, se
debe cuidar que sea código reentrante
35. Fragmentación de los
Segmentos
De la misma forma que con el esquema de
particiones variables, hay que encontrar huecos de
memoria libres y de tamaño adecuado para poderlos
asignar a nuevos segmentos
Para ello se utiliza ya sea el método de primer ajuste
o el de mejor ajuste
También se puede presentar fragmentación externa
entre segmentos
En general, si el tamaño promedio de los segmentos
es pequeño, la fragmentación también
36. Segmentación con Paginación
Una solución más compleja pero que resuelve el
problema de la fragmentación externa en la
segmentación, es la segmentación con paginación
Hay varias formas de implementarlo, aunque en
general se realiza una paginación dentro de los
segmentos
Al asignar los segmentos como páginas completas,
se elimina la fragmentación externa a cambio de un
poco de fragmentación interna
Se requiere un fuerte apoyo del hardware
Formato v= (s, p, d)
37. Paginación por Demanda
Éste es el método tradicional con el que se
implementa la memoria virtual
En él, se suben a memoria sólo aquellas páginas que
se determinan que se van a utilizar y conforme se
van requiriendo
Se requiere algún tipo de soporte de hardware para
saber si una página está en memoria o en disco;
normalmente se usa el bit de validez
Si se intenta accesar a una página que no está en
memoria, se genera una trampa y el s.o. toma el
control
39. Desempeño de la Paginación
por Demanda
El desempeño de la paginación por demanda se
puede medir por medio del Tiempo de Acceso
Efectivo
Se calcula utilizando el tiempo de acceso a la
memoria (tam) y el tiempo de procesar un fallo de
página (tfp)
Si p es la probabilidad de que se dé un fallo de
página, al fórmula es:
Tae=(1-p)(tam)+(p)(tfp)
El tam normalmente está dado en nanosegundos,
pero el tfp está dado en milisegundos (variable)
40. Reemplazo de Páginas
Si la cantidad de procesos en memoria es grande,
eventualmente se da el caso de que ya no hay
marcos libres para asignarse a páginas nuevas
Lo que hay que hacer entonces es quitar una de las
páginas en memoria y subir otra; a esto se le llama
Reemplazo de Páginas
Cuando se necesita un marco libre se checa si hay y
si no, se busca un marco víctima para liberarlo
Para acelerar este proceso se puede utilizar un Bit
de Modificación, que indica cambio en el marco; si no
se ha cambiado, no se requiere grabarlo
42. Algoritmos de Reemplazo de
Páginas
Existen varios algoritmos que tienen la tarea de
indicar cuál página se selecciona como víctima
La meta de estos algoritmos es conseguir una
Frecuencia de Fallos de Página baja
Para evaluar los algoritmos se utiliza una secuencia
de referencias a páginas en memoria, y a la que se
le llama Serie de Referencias
Otro factor que se considera es el número de marcos
libres; entre más marcos haya libres, menos fallos de
página se darán
Cadena de referencia a utilizar para pruebas:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
43. Algoritmo FIFO
En este algoritmo se saca la página que tenga más
tiempo en la memoria
Se puede grabar el instante en el que se subió, pero
lo más fácil es manejar una cola (FIFO) para indicar
cuál es la más vieja
Este algoritmo es fácil de entender y de implementar,
pero su desempeño es pobre
Este algoritmo presenta un fenómeno llamado
Anomalía de Belady, y se presenta cuando aún
teniendo más marcos libres se dan más fallos
45. Algoritmo Óptimo
Un algoritmo óptimo es aquél que tenga la frecuencia
de fallos más baja posible
El criterio que se utiliza en este algoritmo es el
siguiente: “reemplazar aquella página que vaya a
durar más tiempo sin usarse”
Siguiendo esta regla se garantiza la frecuencia más
baja
Sin embargo, es difícil de implementar pues se
necesitaría saber de antemano qué páginas se van a
solicitar, y eso no es posible
Por eso se usa sólo para hacer comparaciones
47. Algoritmo LRU
El algoritmo LRU es un punto medio de los
anteriores, y busca aquella página que se haya
usado con mayor anterioridad (Least Recently Used,
LRU), es decir, la que tenga más tiempo sin usarse
Es una muy buena aproximación al óptimo y por ello
es muy utilizada, aunque la dificultad estriba en cómo
implementarla
Se pueden utilizar dos esquemas (contadores o
pilas), sin embargo requieren apoyo de hardware el
cual normalmente no existe
49. Algoritmos de Aproximación a
LRU
Puesto que casi nunca hay hardware para
implementar correctamente el LRU, hay que usar
algún tipo de aproximación aprovechando el
hardware que sí esté disponible
Algunos de ellos utilizan un Bit de Referencia, (que
indica si se utilizó el marco) y/o el Bit de Modificación
(que ya se vió)
Los algoritmos de aproximación son:
Algoritmo con Bits de Referencia Adicionales
Algoritmo de Segunda Oportunidad
Algoritmo de Segunda Oportunidad Mejorado
50. Algoritmo con Bits de
Referencia Adicionales
En este algoritmo se almacena un byte por cada
página con un registro de los valores que ha tenido el
bit de referencia durante un tiempo
Lo que se hace es que utiliza un timer que cada
cierto tiempo le da el control al s.o. y éste almacena
el valor del bit de referencia de todas las páginas en
un byte, usando un Shift Derecho
Con este esquema, la página que tenga el número
binario más chica es la LRU y ésa se escoge
Si hay más de una con el mismo valor, se pueden
bajar todas o se escoge la más vieja (FIFO)
51. Algoritmo de Segunda
Oportunidad
Este algoritmo es una modificación del Algoritmo
FIFO, pero una vez que ya se seleccionó la víctima
se checa si se ha usado y en dado caso se le da una
segunda oportunidad y se escoge otra
Cuando se selecciona una páginas se verifica si su
bit de referencia está en 1 y si es así se escoge la
siguiente en la cola; a la que se le dio la segunda
oportunidad se le pone el bit en 0 y se reasigna su
tiempo de llegada a la hora actual
Usualmente se implementa con una cola circular
53. Algoritmo de Segunda
Oportunidad Mejorado
En este algoritmo se maneja no sólo el bit de
referencia sino también el bit de modificación,
concatenándolos en ese orden con lo que se crean
cuatro clases (en orden de mejor a peor):
Valor 00: no se ha usado ni se ha modificado
Valor 01: no se ha usado pero se modificó
Valor 10: se usó pero no se ha modificado
Valor 11: se usó y se modificó
Se hace lo mismo que en el otro pero se recorre la
cola hasta que se encuentra la página con el valor
más pequeño; es posible que se den varias vueltas
54. Algoritmo de Colocación de
Páginas en Búfers
Además de utilizar un algoritmo para seleccionar la
víctima se pueden agregar otros procedimientos que
mejoran el desempeño del reemplazo de páginas
Este algortimo mantiene un conjunto de Marcos de
Reserva que se utilizan al momento de asignar un
marco
Cuando ya se escogió un marco víctima se toma un
marco de la reserva y se le asigna a la página nueva
mientras que el víctima se libera; de esta forma el
otro proceso entra más rápido
55. Asignación de Marcos
El asignar un marco libre a un proceso no siempre es
una tarea trivial
Normalmente la estrategia utilizada es asignar
cualquier marco libre a los procesos del usuario
Sin embargo, hay que considerar varios aspectos:
El número mínimo de marcos por proceso
Si se usa asignación equitativa o proporcional
Si se maneja asiganción global o local
Estos aspectos son muy importantes cuando se
mantienen muchos procesos en memoria
56. Número Mínimo de Marcos
Entre más pocos marcos tenga asignados un
proceso más tiempo tardará en fallos de página
Pero además de este efecto, hay que considerar cuál
es la cantidad mínima que debe tener un proceso
para que no vaya a causar algún error durante su
ejecución por falta de marcos libres
Este número lo determina el hardware y el conjunto y
tipo de instrucciones de bajo nivel, y tiene que ver
con la cantidad máxima de páginas que se pueden
llegar a ocupar al mismo tiempo por una sola
instrucción