Professional Documents
Culture Documents
Puesto que hay mucha menos memoria fsica que memoria virtual, el sistema operativo ha de tener especial cuidado de no hacer un mal uso de la memoria fsica. Una forma de conservar memoria fsica es cargar slo las pginas que estn siendo utilizadas por un programa. Esta tcnica de cargar slo pginas virtuales en memoria conforme son accedidas es conocida como Paginacin por Demanda. Linux utiliza la paginacin por demanda para cargar imgenes ejecutables en la memoria virtual de un proceso. Siempre que se ejecuta un proceso, se abre el fichero que la contiene y su contenido se asocia en la memoria virtual del proceso. Esto se hace modificando las estructuras de datos que describen el mapa de memoria del proceso y se conoce como asociacin de memoria. Sin embargo, slo la primera parte de la imagen se copia realmente en memoria fsica. El resto de la imagen se deja en disco. Conforme se va ejecutando, se generan fallos de pgina y Linux utiliza el mapa de memoria del proceso para determinar qu partes de la imagen ha de traer a memoria para ser ejecutadas.
INTERCAMBIO (SWAPPING)
Si un proceso necesita cargar una pgina de memoria virtual a memoria fsica y no hay ninguna pgina de memoria fsica libre, el sistema operativo tiene que crear espacio para la nueva pgina eliminando alguna otra pgina de memoria fsica. Si la pgina que se va a eliminar de memoria fsica provena de una fichero imagen o de un fichero de datos sobre el que no se ha realizado ninguna escritura, entonces la pgina no necesita ser guardada. Tan slo se tiene que desechar y si el proceso que la estaba utilizando la vuelve a necesitar simplemente se carga nuevamente desde el fichero imagen o de datos. Por otra parte, si la pgina haba sido modificada, el sistema operativo debe preservar su contenido para que pueda volver a ser accedido. Este tipo de pgina se conoce como pgina sucia (dirty page) y para poderla eliminar de memoria se ha de guardar en un fichero especial llamado fichero de intercambio (swap file). El tiempo de acceso al fichero de intercambio es muy grande en relacin a la velocidad del procesador y la memoria fsica, por lo que el sistema operativo tiene que conjugar la necesidad de escribir pginas al disco con la necesidad de retenerlas en memoria para ser usadas posteriormente. Linux utiliza la tcnica de paginacin por antigedad (LRU Last Redently Used) para escoger de forma equitativa y justa las pginas a ser intercambiadas o descartadas del sistema. Este esquema implica que cada pgina del sistema ha de tener una antigedad que ha de actualizarse conforme la pgina es accedida. Cuanto ms se accede a una pgina ms joven es; por el contrario cuanto menos se utiliza ms vieja e intil. Las pginas viejas son las mejoras candidatas para ser intercambiadas (Principio de Localidad Temporal). Gracias a los mecanismos de memoria virtual se puede conseguir fcilmente que varios procesos compartan memoria. Todos los accesos a memoria se realizan a travs de las tablas de pginas y cada proceso tiene su propia tabla de pginas.
traduccines en este modo. El ncleo de Linux est preparado para funcionar sobre un espacio de direccionamiento fsico.
CONTROL DE ACCESO
Las entradas de la tabla de pginas tambin contienen informacin relativa al control de acceso. Puesto que el procesador tiene que utilizar la informacin de la tabla de pginas para traducir las direcciones virtuales a direcciones fsicas, puede fcilmente utilizar la informacin de control de acceso para comprobar que el proceso no est accediendo a memoria de forma apropiada. Hay muchas razones por las que se puede querer restringir el acceso a determinadas reas de memoria. Hay memoria, como la que contiene el ejecutable, que es claramente memoria de slo lectura; el sistema operativo no ha de dejar que el proceso escriba sobre su propio cdigo de programa. Por el contrario, pginas de memoria que contengan datos han de poder ser ledas y escritas, pero un intento de ejecutar algo de estas pginas ha de fallar. La mayora de los procesadores tienen al menos dos modos de operacin: modo ncleo y modo usuario. No es deseable que un proceso ejecute cdigo del ncleo, o que acceda a datos del ncleo excepto cuando el procesador est funcionando en modo ncleo.
CACHES
Adems de invertir esfuerzos en disear y frabricar procesadores, memoria y otros dispositivos ms rpidos, mejor forma de obtener un buen rendimiento consiste en mantener en memoria caches de la informacin que se utiliza muy a menudo. Linux emplea unas cuantas caches para la gestin de la memoria, entre las cuales tenemos: Buffer Cach Contiene buffers de datos que son utilizados por los manejadores de dispositivos de bloques. Estos buffers son de tamao fijo (por ejemplo 512 bytes) y contienen bloques de informacin que ha sido bien leda de un dispositivo de bloques o que ha de ser escrita. Un dispositivo de bloques es un dispositivo sobre el que slo se pueden realizar operaciones de lectura o escritura de bloques de tamao fijo. Por ejemplo, los discos duros son dispositivos de bloque. El cache buffer est indexado va el identificador de dispositivo y el nmero de bloque deseado, ndice que es utilizado para una rpida localizacin del bloque. Los dispositivos de bloque son exclusivamente accedidos a travs del buffer Cache. Cach de Pginas Este se utiliza para acelerar el acceso a imgenes y datos en disco. Se utiliza para guardar el contenido lgico de un fichero de pgina en pgina y se accede va el fichero y el desplazamiento dentro del fichero. Conforme las pginas se leen en memoria, se almacenan en la page cach.. Cache de Intercambio Solo las pginas que han sido modificadas (dirty) son guardadas en el fichero de intercambio. Mientras no vuelvan a ser modificadas despus de haber sido guardadas en el fichero de swap, la prxima vez que necesiten ser descartadas (swap out) no ser necesario copiarlas al fichero de intercambio pues ya estn all. Caches Hardware
Es una cach normalmente implementada en el propio procesador; la cache de entradas de tabla de pgina. En este caso, el procesador no necesita siempre leer la tabla de pginas directamente, sino que guarda en esta cache las traducciones de las pginas conforme las va necesitando. El inconveniente de utilizar memorias cache, tanto hardware como de otro tipo, es que para evitar esfuerzos Linux tiene que utilizar ms tiempo y espacio para mantenerlas y, si se corrompe su contenido, el sistema dejar de funcionar.
El directorio de tablas de pginas (punteros a tablas intermedias). La tabla de pginas intermedia (punteros a tablas de pginas). Las tablas de pginas (punteros a pginas).
Cada plataforma sobre la que funciona Linux tiene que proporcionar las macros que permitan al ncleo atravesar las tablas de pgina de cada proceso. De esta forma, el ncleo no necesita conocer el formato de las entradas de la tabla de pginas ni cmo stas se organizan. Esto es tan til que Linux utiliza el mismo cdigo de gestin de tablas de pginas en un procesador Alpha, que tiene tres niveles de tablas de pginas, que en un Intel x86, que slo tiene dos niveles de tablas (para ello, supone que el tamao de la tabla intermedia es 1, y por tanto, coincide con la entrada del directorio).
ASIGNACIN DE PGINAS
Linux utiliza el algoritmo Buddy para asignar y liberar eficientemente bloques de pginas. El cdigo de asignacin intenta asignar un bloque de una o ms pginas fsicas. Las pginas se asignan en bloques de tamao potencia de 2. Esto quiere decir que pueden asignar bloques de 1, 2, 4, etc pginas. El algoritmo de asignacin busca primero entre los bloques de pginas de igual tamao que el pedido. Luego sigue la lista de pginas libres que est encolada. Si no encuentra ningn bloque de pginas del tamao pedido libre, entonces busca en los siguientes (los cuales son del doble del tamao pedido). Puesto que el nmero de pginas de cada bloque es potencia de 2, simplemente dividiendo el bloque por la mitad se obtienen dos bloques con un tamao de bloque inmediatamente inferior.
LIBERACIN DE PGINAS
Asignar bloques de pginas tiende a fragmentar la memoria al dividir los bloques grandes para conseguir bloques ms pequeos. El cdigo de liberacin de pginas recombina pginas en bloques de mayor tamao siempre que es posible. De hecho, el tamao de bloque de pgina es importante pues facilita la recombinacin en bloques grandes. Siempre que se libera un bloque de pginas, se comprueba si est libre el bloque adyacente de igual tamao. Si es as, se combina con el bloque de pginas recin liberado para formar un bloque nuevo de tamao doble. Cada vez que dos bloques de pginas se recombinan en uno mayor, el algoritmo de liberacin intenta volver a recombinarlo en otro an mayor. De esta
forma, los bloques de pginas libres son tan grandes como la utilizacin de la memoria permita.
Reduciendo el tamao de la cache de pginas y el buffer cache, Enviando a disco pginas compartidas, Enviando a disco o descartando pginas.
Si el nmero de pginas libres ha cado demasiado, el demonio de intercambio intentar liberar 6 pginas antes de su prxima ejecucin. En caso contrario, intentar liberar 3 pginas. Los mtodos anteriores se intentan uno tras otro de hasta que se consiguen liberar suficientes pginas. Luego el demonio de intercambio se suspende hasta que el temporizador vuelva a expirar. El demonio recuerda cul fue el ltimo mtodo que emple para liberar pginas, y la prxima vez que se ejecuta lo vuelve a intentar con el mismo mtodo que tuvo xito.
El esquema de comparticin de memoria es un mecanismo de comunicacin entre procesos que permite que dos procesos compartan un espacio de memoria virtual para intercambiarse informacin entre ellos. El demonio de intercambio del ncleo tambin utiliza el algoritmo del reloj para intercambiar las pginas compartidas. Cada vez que se ejecuta, recuerda cul fue la ltima pgina de memoria virtual compartida que intercambi. De esta forma se asegura que todas las reas de memoria compartida tienen la misma probabilidad de ser intercambiadas.
fichero de intercambio que no ha sido modificada. Si la pgina se modifica posteriormente (un proceso escribe sobre ella), su entrada se borra de la cache de intercambio. Cuando Linux necesita enviar una pgina fsica a un fichero de intercambio consulta la cache de intercambio, si hay una entrada vlida para est pgina, entonces no es necesario copiar la pgina al fichero de intercambio. Pues la pgina de memoria no ha sido modificada desde la ltima vez que se ley del fichero de intercambio. Las entradas en la cache de intercambio son entradas de la tabla de pginas de pginas que estn en algn fichero de intercambio. Estn marcadas como invlidas pero contienen informacin que permiten a Linux encontrar el fichero de intercambio y el pgina correcta dentro del fichero de intercambio.
COPY ON WRITE
Copy-on-write es una tcnica para realizar eficientemente (tanto en tiempo como en memoria) la copia de pginas. Linux no duplica las pginas de memoria que son necesarias para un nuevo proceso, sino que hace apuntar las entradas de la tabla de pginas del nuevo proceso a las pginas del proceso padre. Cuando alguna de las pginas es modificada por alguno de los procesos, entonces el ncleo pasa a realizar la duplicacin de dicha pgina. As, Linux se evita la copia de pginas de memoria que no van ha ser utilizadas ahorrando la memoria correspondiente y el tiempo necesario para copiarlas. La forma de llevar a cabo este proceso consiste en establecer los permisos de estas pginas a slo-lectura pero sabiendo que dichas pginas se pueden modificar. Cuando ocurre una violacin de acceso a estas pginas (uno de los procesos intenta escribir) es cuando se realiza la duplicacin propiamente dicha.