Introducción
La memoria virtual es una ilusión de que un sistema de cómputo posee más memoria de la que realmente tiene, lo que permite que un proceso sea independiente del tamaño de la memoria real y que un número de pro- cesos comparta un sistema de cómputo sin restringirse mutuamente. La memoria vir- tual se implementa a través de la parte de la jerarquía de la memoria que consta de una memoria y un disco; el código y los datos de un proceso se almacenan en un disco y partes de aquellos se cargan en la memoria cuando son necesarios durante la ejecución del proceso. Utiliza el modelo de asignación no contigua y contiene componentes tanto del hardware como del software.
El desempeño de la memoria virtual depen- de del ritmo al que debe cargarse las par- tes de un proceso en la memoria desde un disco. El principio de localidad de referen- cia mantiene la promesa de que este ritmo debe ser bajo si a un proceso se le asigna una cantidad idónea de memoria. El aspec- to práctico de la memoria virtual depende entonces del control de la cantidad de me- moria. El aspecto práctico de la memoria virtual depende entonces del control de la cantidad de memoria asignada a un proce- so y de la decisión sobre qué partes de un
proceso debe preservarse en la memoria virtual.
Los usuarios siempre quieren más de un sistema de cómputo: más recursos y más servicios. La necesidad de más recursos se satisface obteniendo un uso más eficaz de los recursos o creando la ilusión de que en el sistema hay más recursos. Una memoria virtual es lo que indica su nombre: una ilu- sión de que en el sistema de cómputo hay una memoria más grande que la real, es de- cir, que la RAM.
El kernel implementa la ilusión utilizando la combinación de medios de hardware y software. La componente del software de la memoria virtual se denomina manejador de la memoria virtual.
La base de la memoria virtual es el modelo de asignación de memoria no contigua, se supone que cada proceso consta de dos par- tes denominadas componentes del proceso. Estas pueden cargarse para su ejecución en áreas de memoria adyacentes. La unidad de administración de la memoria (MMU) tradu- ce la dirección de cada operando o instruc- ción utilizado mediante un proceso en la di- rección del byte de memoria donde reside en realidad el operando o la instrucción. El uso del modelo de asignación de memoria no contigua redice el problema de fragmen- tación de la memoria porque un área libre
Fundación Universitaria del Área Andina 64
Fundación Universitaria del Área Andina 6
de memoria puede volver a usarse incluso si no es suficientemente grande para admitir todo un proceso. De esta forma es posible alojar más procesos en la memoria, lo cual redunda en beneficio tanto de los usuarios como del sistema operativo.
La ilusión de una gran memoria es creada al permitir la ejecución de un proceso cuyo tamaño excede al de la memoria. Este se
logra manteniendo un proceso en un dis- co y cargando en la memoria en cualquier instante solo sus porciones requeridas. El kernel utiliza esta idea para reducir la asig- nación de memoria a procesos en general, es decir, incluso los procesos que pueden caber en la memoria no cargan totalmente en elle. Esta estrategia incrementa aún más el número de procesos que pueden alojarse en la memoria.
Figura 1. Visión general de la memoria virtual Fuente: Propia.
La figura 1 visualiza el esquema de la memo- ria virtual. Un proceso contiene seis compo- nentes, tres de estas se encuentran en ese momento en la memoria. La información sobre las áreas de la memoria donde exis- ten las componentes se mantiene en una estructura de datos del manejador de la me- moria virtual. La MMU utiliza esta informa- ción durante la traducción de la dirección. Cuando una instrucción en el proceso se refiere a una componente del proceso que no está en la memoria, está cargada desde el disco, ocasionalmente, el manejador de
la memoria virtual elimina algunas compo- nentes del proceso de la memoria para te- ner espacio y poder organizar otras.
Implementaciones de la memoria virtual
Asignación de memoria no contigua
En el modelo de asignación no contigua, varias áreas de memoria no adyacentes son asignadas a un proceso. Ninguna de éstas es suficientemente grande para admitirlo todo, lo que una parte del proceso es carga- do en cada una de estas áreas.
Fundación Universitaria del Área Andina 65
Fundación Universitaria del Área Andina 7
Una de las ventajas de esta asignación de memoria no contigua es que un área de memoria que no es suficientemente grande para llevar a cabo un proceso completo aún puede ser utilizada, de modo que resulta menos fragmentación externa. Esta carac-
terística reduce la fragmentación externa y mejora la utilización de la memoria; en consecuencia, puede ser innecesario llevar a cabo fusión de áreas de memoria libres o compactación.
Figura 2. Asignación de memoria no contigua Fuente: Propia.
En la figura 2 se visualiza que en la memoria hay cuatro áreas de memoria no asignadas de 50KB, 30KB, 80KB y 40KB (a). Se iniciará un proceso P de tamaño de 140 KB. El proce- so se separa en tres componentes denomi- nadas P1, P2 y P3 que se cargan en tres de las áreas libres (c).
La asignación no contigua utiliza dos méto- dos: paginamiento y segmentación.
Paginamiento
En el paginamiento cada proceso consta de componentes de tamaño fijo denominadas páginas. El tamaño de una página se especi- fica en la arquitectura del sistema del cóm- puto.
En un sistema en el que se utilice pagina- miento, un proceso es considerado como una entidad contigua que contiene instruc- ciones y datos. En la vista lógica, un proce- so consta de un arreglo lineal de páginas. Cada una contiene s bytes, donde s es una potencia de 2. El valor de s se especifica en la arquitectura del sistema del cómputo. Los procesos utilizan direcciones lógicas numé- ricas. El hardware de la máquina descompo- ne una dirección lógica en un par (pi, bi), donde pi es el número de páginas y bi es un desplazamiento. La vista física consta de dos áreas de memoria no adyacentes asig- nadas a páginas del proceso.
Fundación Universitaria del Área Andina 66
Fundación Universitaria del Área Andina 8
Figura 3. Procesos de paginamiento Fuente: Propia.
En la figura 3 se visualiza un arreglo utiliza- do para ejecutar los procesos P y R en un sis- tema que usa paginamiento. El tamaño de P es de 5.500 bytes. El de la página es de 1 KB (1024 bytes), de modo que P tiene 6 pá- ginas. Estas páginas están numeradas del 0 al 5 y los bytes en una página están nu- merados de 0 a 1.023. La última página solo tiene 371 bytes (5500/1024). Si un elemento de datos simple tiene la dirección de 5.248, entonces el hardware de la máquina ve esta dirección como el par (5, 128). El proceso R tiene 3 páginas numeradas del 0 al 2.
El Kernel parte la memoria en áreas deno- minadas marcos de página. Cada uno es del mismo tamaño que la página; es decir, 1 KB. En la figura 6 la maquina tiene una memoria de 10KB
Por lo que los marcos de página están nu- merados del 0 al 9. En cualquier momento, algunos marcos de página se asignan a pá- ginas del programa y otros quedan libres. El kernel mantiene una lista denominada lista
de marcos libres para notar las identifica- ciones de los marcos de página libres. Por el momento, solo el marco de página 4 es libre.
A la vez que carga el proceso P para su eje- cución, el kernel consulta la tabla de marcos y asigna un marco de página libre a cada marco de página de los procesos. A fin de facilitar la traducción de la dirección, se ela- bora una tabla de página (PT) para el pro- ceso. Cada elemento de la tabla de página indica el número de página. Durante la eje- cución del proceso, la MMU consulta la tabla de página para realizar la traducción de la dirección.
En la figura 3, la tabla de marco indica que seis marcos de página están ocupados por el proceso P, por un proceso R y uno está li- bre. La tabla de página P indica los números de marco asignados a las páginas de P. la di- rección lógica debe traducirse a la dirección física 8 320 utilizando el elemento para la página 5 en la tabla de página.
Fundación Universitaria del Área Andina 67
Fundación Universitaria del Área Andina 9
Traducción de la dirección, se utiliza la si- guiente notación:
s: tamaño de página.
lt: longitud de una dirección lógica (número de bits que contiene).
lh: longitud de una dirección física.
nb: número de bits necesarios para acceder al último byte de una página.
np: número de bits usados para alojar el nú- mero de página en una dirección lógica. nf: número de bits para alojar el número de páginas en una dirección física.
El tamaño de una página, s, es potencia de 2; por ejemplo s= 2nb. Por lo tanto, los bits menos significativos nb en una dirección ló- gica proporcionan bi. Los bits restantes en una dirección lógica forman a pi. Los valores de pi y bi pueden obtenerse simplemente agrupando los bits de una dirección lógica como sigue:
Figura 4 Fuente: Propia.
Donde np=lt-nb. El uso de una potencia de 2 como tamaño de página simplifica de manera semejante la elaboración de la di- rección de la memoria efectiva. Considere que a la página pi se ha asignado el marco de página qi. Debido a que el tamaño de las páginas y el de los marcos de página es el
mismo, también se requieren nb bits para direccionar los bytes en un marco de pági- na. Sea nf=lp-nb. La dirección física del byte “0” del marco de página qi es
Figura 5 Fuente: Propia.
Por tanto, la dirección física del byte bi en el marco de página qi está dada por
Figura 6 Fuente: Propia.
La MMU puede obtener está dirección sim- plemente al concatenar qi y bi a fin de obte- ner un número de bit lh. La traducción de la dirección.
Ejemplo: estamos trabajando con un sistema operativo que emplea una gestión de me- moria paginada, cada página tiene un tama- ño de 4096 posiciones (o bytes). La memo- ria física disponible para los procesos es de 16MB. Primero llega un proceso que necesita 63132 posiciones de memoria y después lle- ga otro proceso que consume 36864 posi- ciones cuando se carga una memoria ¿Qué fragmentación interna genera cada proceso.
Fundación Universitaria del Área Andina 68
Fundación Universitaria del Área Andina 10
Solución: Tenemos:
Proceso 1: 63132 posiciones. Proceso 2: 36864 posiciones. Memoria: 16MB.
Tamaño de páginas: 4096 bytes. Para el caso del proceso 1. 63132 / 4096 = 15.4 Posiciones.
Lo que indica que tenemos fragmentación interna, dado que el resultado tiene decima- les, veamos de cuanto es la fragmentación. 15 * 4096 = 61440.
63132 – 61440 = 1692 Bytes. Para el caso del proceso 2. 36864 / 4096 = 9 Posiciones.
Lo anterior indica que no tenemos fragmen- tación.
Segmentación
Un segmento es una entidad lógica en un programa; por ejemplo, una función, una estructura de datos o un objeto. Por tanto, resulta importante administrar un segmen- to como si fuese una unidad: cargarlo en la memoria para su ejecución o compartirlo con otros programas. En la vista lógica, un proceso consta de un conjunto de segmen- tos. La vista física consta de áreas no adya- centes de memoria asignadas a segmentos. Un proceso Q consta de cuatro unidades ló- gicas con los nombres simbólicos main, da- tabase, search, y retrieve, mientras codifica el programa, el programador declara estas uni- dades lógicas como segmentos en Q. el com- pilador genera direcciones lógicas mientras traduce el programa. Cada dirección lógica utilizada en Q tiene la forma (si, bi) donde si y bi son las identificaciones de un segmento y un byte dentro de un segmento. Por ejem- plo, la instrucción correspondiente a una de- claración call get-sample, donde get-sample es un procedimiento en el segmento retrie- ve, puede utilizar la dirección de operando (retrieve, get-sample), o usar una represen- tación numérica para si y bi.
Figura 7. Procesos de segmentación Fuente: Propia.
Fundación Universitaria del Área Andina 69
Fundación Universitaria del Área Andina 11
En la figura 7, se visualiza la forma en que el kernel maneja al proceso Q. la mitad iz- quierda de la figura muestra la vista lógica del proceso Q, a fin de facilitar la traducción de la dirección, el kernel elabora una tabla de segmento para Q. cada elemento en esta tabla muestra el tamaño de segmento de Q y direcciones del área de la memoria que se le han asignado. La MMU utiliza la tabla de segmento para llevar a cabo la tra- ducción de la dirección. Los segmentos no tienen tamaños estándares, de modo que no es aplicable la simplificación de la con- catenación de bits usada en el paginamieto. En consecuencia, el cálculo de la dirección de la memoria efectiva implica la adición de bi a la dirección inicial de si, por lo que la traducción de la dirección es más lenta que el paginamiento. En la figura 7, si get- sample tiene la compensación de 232 en el segmento retrieve, entonces la traducción de la dirección (retrieve, get-sample) debe producir la dirección 91376 + 232 = 91608.
La asignación de memoria para cada seg- mento se lleva a cabo como el modelo de asignación de memoria no contigua. El ker- nel mantiene una lista libre de áreas de la memoria. Mientras carga un proceso, busca en esta lista para realizar la asignación del primer ajuste o del mejor ajuste a cada seg- mento del proceso. Una vez que termina un proceso, las áreas de la memoria asignadas a sus segmentos se agregan a la lista libre. Hay fragmentación externa porque el tama- ño de segmentos varía.
La tarea de escribir cada dirección lógica en la forma (si, bi) se realiza mediante un com- pilador, mientras compila un referencia a un símbolo xyz, debe decidir a qué segmento pertenece xyz.
Ejemplo: dada la siguiente tabla de segmen- tos, identifique cuales son las direcciones fí- sicas en las direcciones lógicas,
Segmentos (s) Límite (l) Base (b)
0 219 600 1 2300 14 2 90 100 3 1327 580 4 1952 96 Segmento Desplazamiento (d) 0 430 1 10 2 500 3 400 4 112 Tabla 1
Fuente: Propia. Fuente: Propia.Tabla 2 Solución:
Para el primer caso,
S = 0 , b = 219 , l = 600 , d = 430
Lo primero que se debe hacer es identificar si el desplazamiento es menor que la longi- tud (d<l).
430 < 600 (cumple).
Luego tomamos la base y la sumamos con el desplazamiento (b+d), de esto obtenemos la dirección física.
219 + 430 = 649 (dirección física). Para el segundo caso,
Fundación Universitaria del Área Andina 70
Fundación Universitaria del Área Andina 12
S = 1 , b = 2300 , l = 14 , d = 10 d<l = 10<14 (cumple). 2300 + 10 = 2310 (dirección física). Tercer caso, S = 2 , b = 90 , l = 100 , d = 500 d<l = 500<100 (no cumple). Cuarto caso, S = 3 , b = 1327 , l = 580 , d = 400 d<l = 400<580 (cumple) 1327 + 400 = 1727 Quinto caso, S = 4 , b = 1952 , l = 96 , d =1120 d<l = 1120<96 (no cumple).
Por último, realizamos el gráfico de los seg- mentos:
Figura 8 Fuente: Propia.
Segmentación con paginamiento
En este método, cada segmento en un programa se pagina por separado. En con- secuencia, a cada segmento se asigna un número entero de páginas. Este método simplifica y acelera la asignación de memo- ria, y también evita la fragmentación exter- na. Para cada segmento se elabora una tabla de página, y en el elemento del segmento en la tabla de segmentos se mantiene un apuntador hacia la tabla de página. Luego, la traducción de la dirección para una direc- ción lógica (si, bi) se realiza en dos etapas. En la primera, el elemento de si se localiza en la tabla de página, luego, el número de byte bi se separa en un par (psi ,bpi), donde psi es el número de páginas en el segmento si, y bpi es el número de byte en la página pi. Después el cálculo de la dirección efectiva se termina como en paginamiento; es decir, se obtiene el número de marco de psi y bpi se concatena con este para obtener la direc- ción efectiva.
Figura 9. Proceso Q en segmentación y paginamiento
Fuente: Propia.
En la figura 5 se visualiza el proceso Q de la figura 4 en un sistema que utiliza segmenta- ción con paginamiento. Cada segmento se página de forma independiente, por lo que
Fundación Universitaria del Área Andina 71
Fundación Universitaria del Área Andina 13
en la última página de cada segmento hay fragmentación interna. Entonces, cada ele- mento de la tabla de segmentos contiene un apuntador hacia la tabla de página del segmento. El campo de tamaño en un ele- mento del segmento se utiliza para facilitar una comprobación de límites para protec- ción de la memoria.
Políticas de gestión de la memoria vir- tual
Con el fin de gestionar correctamente un sistema con memoria virtual, se debe tener clara las reglas para gestionar el intercambio de páginas o segmentos entre la memoria principal y la secundaria, de allí que se ten- gan algunas políticas que se debe cumplir:
Políticas de lectura, el sistema operativo debe determinar en qué momento carga las páginas en la memoria principal, teniendo en cuenta las siguientes opciones:
■
Paginación por demanda: carga una pá- gina en la memoria principal solo cuando sea necesario, al iniciar la ejecución de un proceso o por algún fallo de página.■
Paginación previa: se trasladan a memo- ria páginas extras a las solicitadas.Política de reemplazo, cuando la memoria se encuentre llena y se necesita cargar otra página, el sistema operativo debe decidir que página mandar a memoria secundaria. El reemplazo puede ser global (cualquier página), local (solo las páginas que provocó el fallo).
Las políticas que se tiene en cuenta para elegir la página son:
Menos usada recientemente (Least Recently Used, LRU): se selecciona la página utilizada hace con anterioridad, la cual tenga menos probabilidad de ser usada nuevamente. Usado más Recientemente (Most Recently Used, MRU): se selecciona la página que fue utilizada recientemente.
Primera en entrar, primera en salir (FIFO, First In, First Out): se selecciona la página que lleva más tiempo en memoria.
Técnica de reloj: cada página tendrá un bit de control y está selecciona la página que se encuentre en la cabeza.
1
UNIDAD
4Unidad 4
Autor: Katherine Roa
Fundación Universitaria del Área Andina 73
Fundación Universitaria del Área Andina 3
Introducción
Nos acercamos al final del módulo y para este capítulo abor-daremos las diferentes temáticas que encierra la Gestión de Ficheros, iniciando por conocer los conceptos de fichero y directorio, donde también son conocidos como archivos y carpetas respectivamente, luego abordaremos las diferentes semánticas de consistencia y finalizaremos con la implemen- tación del sistema de fichero.
Fundación Universitaria del Área Andina 74
U4
Fundación Universitaria del Área Andina 4
Metodología
Para un mayor entendimiento de este capítulo, se recomienda al estudiante realizar una lec- tura de la guía y generar un reporte crítico del mismo a modo personal, con el fin de afianzar los conocimientos adquiridos en esta cartilla.
Se sugiere adicionalmente, desarrollar las diferentes lecturas y actividades planteadas en la semana, con el fin de comprender mejor la temática trabajada.
Fundación Universitaria del Área Andina 75
U4
Fundación Universitaria del Área Andina 5