Gracias Gracias:  0
Me Gusta Me Gusta:  0
No me Gusta No me Gusta:  0
Mostrando resultados del 1 al 3 de 3

Tema: Micro Manual de Linux I: gestión de memoria en Linux

  1. #1
    Fecha de Ingreso
    07-febrero-2007
    Ubicación
    Ourense
    Mensajes
    8.660
    Post Thanks / Like
    Poder de Credibilidad
    22

    Micro Manual de Linux I: gestión de memoria en Linux

    ... en donde se departen unos cuantos conceptos e ideas acerca de como va eso de la memoria de los elefantes...

    NOTA: este es el Micro Manual I por dos motivos: que tengo pensado añadir alguno más, y que alguno tenía que ser el 1º...

    1. JERARQUÍA DE MEMORIA
    ----------------------------

    Para que un proceso (una aplicación o parte de una o lo que sea) pueda ejecutarse, debe de estar cargado en memoria. No hay comunicación directa de datos entre el procesador y los discos...

    Más concretamente, el procesador "busca" por orden de proximidad. Primero "consulta" en los registros internos del propio procesador; luego en la caché de primer nivel; luego en la de segundo nivel (la de la placa, algunos dicen caché L2); luego la memoria. Si toma algo de disco, lo lleva a la memoria, luego lo lleva a la L2 y luego a la L1 y, si es oportuno, a los registros...


    2. MEMORIA VIRTUAL: SWAP (intercambio)
    ----------------------------------------
    ----
    La "Memoria Virtual" es un mecanismo para "ampliar" la capacidad de la memoria. Técnicamente, funciona como intermediaria entre los discos y la Memoria Principal. La desventaja de la Memoria Virtual es obvia: el tiempo de acceso a disco duro es muy elevado.

    Aquí añadir que Linux, como Windows NT y derivados, puede utilizar partición swap o archivo swap. Las diferencias son las que podríamos pensar. El uso de un sistema de ficheros adecuado en una partición propia es más eficiente en velocidad, el uso de un archivo es más eficiente en términos de espacio (pudiendo incluso variar dinámicamente, según hiciese falta). Aquí se incluye que a partir de 1GB de Memoria RAM el uso normal de un sistema implica que la swap apenas se utilice, ocupando su partición un espacio que podría usarse para otra cosa. Por otra parte, en un disco de 200 o 300 GB, 1 o 2 no tienen porqué importar mucho.

    Teóricamente (nunca lo hice), podrían utilizarse varias particiones de swap, a la vez o en paralelo, o como réplicas (mirror). No alcanzo a ver posibles beneficios de hacer eso, pero bueno...

    Y como todos los parámetros de configuración (sistema de ficheros, sistema de memoria, etc) la swap se configura en la instalación (cuando se configura el núcleo). Por supuesto, lo que hace una instalación genérica es algo así: "si hay una partición swap, usarla; sinó, no". En tiempo de inicio, el núcleo monta la partición de swap según la entrada del fichero /etc/fstab. Si se elimina tal entrada, el sistema funcionará sin swap. Si se crea esa entrada, el sistema la utilizará. Esto es bueno para redefinir tamaños, re-mapear tablas de partición, etc.

    ¿Alguien se fijó en que siempre hablamos de "partición swap", nunca de fichero? Nunca utilicé un "archivo de intercambio", nunca tuve suficiente curiosidad

    3. ESPACIOS DE DIRECCIONES
    -----------------------------

    El uso de la memoria suele explicarse como una tabla, al más puro "hundir la flota". Cada celda individual contiene un bit, y se referencia por la columna y la fila que ocupa. Es cuestión de cada sistema particular si primero va la columna y luego la fila... En todo caso, una de las consecuencias es la disponibilidad final de celdas... Me explico.

    Supongamos que tenemos una tarjeta de memoria de 1MB. Esta podría ser una "tabla" de 1000 filas x 1000 columnas = 1000.000 celdas. Cada celda individual se referencia (direcciona, se da su dirección) especificando la fila y la columna: por ejemplo, la celda (posición) 780 (fila) 400 (columna) sería la celda 780400 (Por supuesto, todo en binario, aunque los S.O. suelen traducirlo a hexadecimal, generalmente anteponiendo 0x como símbolo de hexadecimal)...

    Por otra parte, podría (suele) haber más de una tarjeta de memoria. ¿Cómo se referencian? ¿se antepone el número de tarjeta, o qué?

    Los procesadores tienen un "mapa de memoria", que es una especie de representación (por decirlo de forma grosera) de toda la memoria que puede usar el sistema, en una única tabla... Así, el mapa de memoria en un sistema de 32 bits podría ser una tabla de 2 elevado a 32 celdas (4.29497e+09 celdas). Lo que se hace es "traducir" esa dirección a algo que exista en el sistema: los primeros bits sirven de "selector de tarjeta", y los demás definen las posiciones dentro de la tarjeta. La memoria que no se use, simplemente no se asigna. El "Espacio de direcciones" es el rango de celdas que corresponden a cada tarjeta...

    Pero en sistemas multiusuario como Linux el Espacio de Direcciones se emplea de otra forma. Para verlo, cambiemos la metáfora...

    Imagínese el mapa de memoria. Es necesario ahora verlo como una pila de platos, por ejemplo. Cada plato se correspondería a una fila del mapa de direcciones. Lo que hace el sistema es asignar un conjunto de platos para una cosa, otro para otra, y así... Por ejemplo: los platos de arriba para el sistema base (núcleo y utilidades de sistema, módulos, etc.), unos cuantos para un usuario, otros para otro... El sistema enmascara eso y lo que ofrece al usuario es una especie de memoria virtual, con sólo los platos que le corresponden, pero dando la impresión de que se usa toda la memoria. Esta política podríamos llamarla de "compartimentación", y permite que los fallos de memoria de un usuario no afecten a los demás. Grosso modo, esta política puede abstraerse a nivel de aplicación (donde cada aplicación ve sólo la parte de memoria que el sistema le asigna)

    4. POLÍTICAS DE GESTIÓN DE MEMORIA
    --------------------------------------

    Que también pueden llamarse de "reemplazo", porque eso es exactamente, el decidir qué se carga en memoria, el cuándo... y si hay que quitar algo para hacer sitio...

    En el final del epígrafe tratamos de introducir el concepto de "Espacio de Direcciones" y hablamos de Espacios de Usuario y de Espacios de Aplicación (que es el nombre que tienen). Esto suena a bastante complicado, y de hecho lo es.

    Los algoritmos (programas, por decirlo así) de gestión de memoria en Linux son quizás una de sus características fundamentales, y es el rasgo que más diferencia a este sistema de otros que no son multiusuario.

    Así, Linux utiliza ideas como "cargar todo lo que pueda hacer falta", para evitar transacciones con la memoria virtual. El tiempo que se ahorra se destina, fundamentalmente, en decidir qué es lo que se carga. Cada elemento se carga en el espacio de direcciones correspondiente, sea el espacio del sistema, el espacio de usuario o el de aplicación. Otra tarea gravosa para estos algoritmos es la conversión de direcciones (del mapa del sistema a todos los espacios que se usan), verificación de las mismas... Para los elementos que compartan varios usuarios, existe un espacio de direcciones compartidas; también se utilizan bufferes y cachés para acelerar el acceso a la información.... Podríamos ver esto como "que se guarde en un buffer una cosa que tal vez a lo mejor se use"...

    5. COMANDEMONIUM
    -------------------

    A parte de las utilidades gráficas, ahí van unos comandos (de algunos o todos se trata en otra parte de este foro)

    Código:
    free
    devuelve el estado de la memoria

    Código:
    ps
    lista los procesos en ejecución. Sin opciones, lista los procesos del usuario. Si se ejecuta en un terminal (p.ej: konsole) devolverá el proceso del intérprete de comandos (generalmente, bash) y el del propio ps.
    Ver
    Código:
    man ps
    para las opciones...

    Código:
    vmstat
    muestra el estado de la memoria virtual (partición swap). Si el argumento es un número, éste especifica el intervalo en segundos para que se repita el listado: vmstat 5 muestra la información cada cinco segundos...

    bg , & , ctrl+z son formas de enviar un proceso a "segundo plano"
    fg es una forma de que un proceso en "segundo plano" pase al primero

    ah! las ideas de primer y segundo plano son propias de los sistemas multitarea. Permiten ejecutar dos (realmente muchas más) tareas al mismo tiempo, siendo la de primer plano la prioritaria. NOTA: generalmente, ctrl+z tendrá el efecto de detener temporalmente el proceso.

    6. EN LINUX (casi) TODO ES TEXTO

    ----------------------------------
    Esta afirmación no es baladí. /proc es un sistema de ficheros especial, una "virtualización" del contenido de la memoria, de tal forma que puede accederse como textos. Incluso podrían cambiarse características de configuración (al estilo del editor de registro) en tiempo de ejecución (es decir, sin parar ni reiniciar ni nada). Por supuesto, como todo en Linux, debe manejarse con cuidado si no se quieren sobresaltos. Pero vale la pena echar un ojo a lo que allí hay.

    Salud!!

  2. #2
    Fecha de Ingreso
    23-abril-2010
    Ubicación
    El Salvador
    Mensajes
    57
    Post Thanks / Like
    Poder de Credibilidad
    10
    Lo del punto 6 esta bastante interesante ahora que lo pienso...
    Tiene razón sobre lo de tener dos swap: A menos que seas un erudito que pudiera administrar el uso que los programas hacen sobre cada partición, supongo que el sistema no se verá grandemente beneficiado con una doble swap; aunque alguien talvez nos pueda iluminar más sobre este tema
    Me toca aprender a hacer poesía con el código, arte plástico con cada configuración...


  3. #3
    Fecha de Ingreso
    07-febrero-2007
    Ubicación
    Ourense
    Mensajes
    8.660
    Post Thanks / Like
    Poder de Credibilidad
    22
    La mayoría de personas tenemos un disco duro principal (y muchas veces, único). Si tienes varios discos duros que vayan más o menos a la misma velocidad (y rápidos), puedes extender la swap por todos ellos.

    De forma similar, podrías usar volúmenes para extender el sistema de ficheros por los distintos discos. Como alternativa, puedes montar los distintos sistemas de ficheros en distintos discos...

    Con eso lo que puedes conseguir es que la búsqueda-escritura se pueda llegar a realizar casi en paralelo... el coste creo que es casi prohibitivo para la mayoría xD

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Temas Similares

  1. Los 12 mitos sobre linux
    By penguin_1989 in forum El Contubernio
    Respuestas: 79
    Último mensaje: 02-oct-2010, 23:21
  2. Ati 1300 instalacion exitosa
    By Rocknavag in forum FAQs, Manuales y Tutoriales
    Respuestas: 14
    Último mensaje: 20-mar-2008, 20:25
  3. Problemas Wifi USB de Telefonica
    By blaster in forum Internet, Redes y Wireless
    Respuestas: 10
    Último mensaje: 18-nov-2006, 01:02
  4. Problema con red en SuSE 9.0 Pro
    By arandaedgar in forum Internet, Redes y Wireless
    Respuestas: 6
    Último mensaje: 16-oct-2006, 02:52
  5. Suse 10 se cuelga al arrancar el escritorio
    By goordel in forum Hardware
    Respuestas: 6
    Último mensaje: 14-mar-2006, 19:21

Marcadores

Normas de Publicación

  • No puedes crear nuevos temas
  • No puedes responder mensajes
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •