domingo, 12 de noviembre de 2017

Gestión de memoria


GESTION DE MEMORIA



EL ESPACIO EN MEMORIA DE UN PROCESO
 Cuando un sistema operativo inicia un proceso, no se limita a volcar el archivo ejecutable a memoria, sino que tiene que proporcionar la estructura para que éste vaya guardando la información de estado relativa a su ejecución.
Sección (o segmento) de texto Es el nombre que recibe la imagen en memoria de las instrucciones a ser ejecutadas. Usualmente, la sección de texto ocupa las direcciones más bajas del espacio en memoria.
Sección de datos Espacio fijo preasignado para las variables globales y datosinicializados (como las cadenas de caracteres por ejemplo).
Espacio de libres Espacio de memoria que se emplea para la asignación dinámica de memoria durante la ejecución del proceso. Este espacio se ubica por encima de la sección de datos, y crece hacia arriba. Este espacio es conocido en inglés como el Heap.
Pila de llamadas Consiste en un espacio de memoria que se usa para almacenar la secuencia de funciones que han sido llamadas dentro del proceso, con sus parámetros, direcciones de retorno, variables locales, etc. La pila ocupa la parte más alta del espacio en memoria, y crece hacia abajo. En inglés, la pila de llamadas es denominada Stack.
Regiones de la memoria para un proceso.




Asignación de memoria contigua

 En los sistemas de ejecución en lotes, así como en las primeras computadoras personales, sólo un programa se ejecutaba a la vez. Por lo que, más allá de la carga del programa y la satisfacción de alguna eventual llamada al sistema solicitando recursos, el sistema operativo no tenía que ocuparse de la asignación de memoria.
Al nacer los primeros sistemas operativos multitarea, se hizo necesario resolver cómo asignar el espacio en memoria a diferentes procesos.

ASIGNACIÓN DE MEMORIA CONTIGUA

Partición de la memoria
 La primera respuesta, claro está, es la más sencilla: asignar a cada programa a ser ejecutado un bloque contiguo de memoria de un tamaño fijo. En tanto los programas permitieran la resolución de direcciones en tiempo de carga o de ejecución, podrían emplear este esquema.
Desde la perspectiva del sistema operativo, cada uno de los espacios asignados a un proceso es una partición. Cuando el sistema operativo inicia, toda la memoria disponible es vista como un sólo bloque, y conforme se van ejecutando procesos, este bloque va siendo subdividido para satisfacer sus requisitos.

Fragmentación
 Es un fenómeno que se manifiesta a medida que los procesos terminan su ejecución, y el sistema operativo libera la memoria asignada a cada uno de ellos. Si los procesos se encontraban en regiones de memoria, apartadas entre sí, comienzan a aparecer regiones de memoria disponible, interrumpidas por regiones de memoria usada por los procesos que aún se encuentran activos.
Si la computadora no tiene hardware específico que permita que los procesos resuelvan sus direcciones en tiempo de ejecución, el sistema operativo no puede reasignar los bloques existentes, y aunque pudiera hacerlo, mover un proceso entero en memoria puede resultar una operación costosa en tiempo de procesamiento.
Al crear un nuevo proceso, el sistema operativo tiene tres estrategias según las cuales podría asignarle uno de los bloques disponibles:
Primer ajuste El sistema toma el primer bloque con el tamaño suficiente para alojar el nuevo proceso. Este es el mecanismo más simple de implementar y el de más rápida ejecución. No obstante, esta estrategia puede causar el desperdicio de memoria, si el bloque no es exactamente del tamaño requerido.



Mejor ajuste El sistema busca entre todos los bloques disponibles cuál es el que mejor se ajusta al tamaño requerido por el nuevo proceso. Esto implica la revisión completa de la lista de bloques, pero permite que los bloques remanentes, una vez que se ubicó al nuevo proceso, sean tan pequeños como sea posible (esto es, que haya de hecho un mejor ajuste).



Peor ajuste El sistema busca cuál es el bloque más grande disponible, y se lo asigna al nuevo proceso. Empleando una estructura de datos como un montículo, esta operación puede ser incluso más rápida que la de primer ajuste. Con este mecanismo se busca que los bloques que queden después de otorgarlos a un proceso sean tan grandes como sea posible, de cierto modo balanceando su tamaño.



La fragmentación externa se produce cuando hay muchos bloques libres entre bloques asignados a procesos; la fragmentación interna se refiere a la cantidad de memoria dentro de un bloque que nunca se usará.

Compactación
Un problema importante que va surgiendo como resultado de esta fragmentación es que el espacio total libre de memoria puede ser mucho mayor que lo que requiere un nuevo proceso, pero al estar fragmentada en muchos bloques, éste no encontrará una partición contigua donde ser cargado.
Cuando el sistema operativo comience a detectar un alto índice de fragmentación, puede lanzar una operación de compresión o compactación. Esta operación consiste en mover los contenidos en memoria de los bloques asignados para que ocupen espacios contiguos, permitiendo unificar varios bloques libres contiguos en uno solo.
La compactación tiene un costo alto —involucra mover prácticamente la totalidad de la memoria (probablemente más de una vez por bloque).



Intercambio (swap) con el almacenamiento secundario. Siguiendo de cierto modo la lógica requerida por la compactación se encuentran los sistemas que utilizan intercambio (swap) entre la memoria primaria y secundaria. En éstos, el sistema operativo puede comprometer más espacio de memoria del que tiene físicamente disponible. Cuando la memoria se acaba, el sistema suspende un proceso (usualmente un proceso “bloqueado”) y almacena una copia de su imagen en memoria en almacenamiento secundario para luego poder restaurarlo.
Hay algunas restricciones que observar previo a suspender un proceso. Por ejemplo, se debe considerar si el proceso tiene pendiente alguna operación de entrada/salida, en la cual el resultado se deberá copiar en su espacio de memoria. Si el proceso resultara suspendido (retirándolo de la memoria principal), el sistema operativo no tendría dónde continuar almacenando estos datos conforme llegaran. Una estrategia ante esta situación podría ser que todas las operaciones se realicen únicamente a buffers (regiones de memoria de almacenamiento temporal) en el espacio del sistema operativo, y éste las transfiera el contenido del buffer al espacio de memoria del proceso suspendido una vez que la operación finalice.




HIPERPAGINACION
Se denomina hiperpaginación (en inglés, thrashing) a la situación en la que se utiliza una creciente cantidad de recursos para hacer una cantidad de trabajo cada vez menor. A menudo, se refiere a cuando se cargan y descargan sucesiva y constantemente partes de la imagen de un proceso desde y hacia la memoria principal la RAM y la memoria virtual o espacio de intercambio. En un estado normal, esto permite que un proceso bloqueado y no listo para correr deje lugar en memoria principal a otro proceso listo.
Gran cantidad de computadoras personales de baja gama no poseen suficiente memoria RAM para los patrones de uso actuales. Las formas de evitar la hiperpaginación fueron un área importante de investigación en los años 70 y se desarrollaron varios algoritmos complejos pero efectivos.
Desde un punto de vista más práctico, se puede evitar la hiperpaginación:
          Aumentando la cantidad de memoria RAM (generalmente la mejor solución a largo plazo).
       Disminuyendo la cantidad de aplicaciones corriendo en la computadora.
          Ajustando el tamaño de la partición de intercambio.

DESBORDAMIENTO DE BUFER
Buffer excesive.jpgUn desbordamiento de búfer guarda una relación muy estrecha con la arquitectura del procesador en la que se ejecuta una aplicación vulnerable y los datos ingresados en una aplicación se almacenan en la memoria de acceso aleatorio en una zona que se conoce como búfer. Un programa con un diseño correcto debería estipular un tamaño máximo para los datos de entrada y garantizar que no superen ese valor. Las instrucciones y los datos de un programa en ejecución se almacenan temporalmente en forma adyacente en la memoria RAM, en una zona llamada pila. Los datos ubicados después del búfer contienen una dirección de retorno (que se denomina puntero de instrucción) que le permite al programa continuar su tiempo de ejecución. Si el tamaño de los datos es mayor que el del búfer, la dirección de retorno se sobrescribe y el programa leerá una dirección de memoria no válida generando una violación de segmento en la aplicación.
Ejemplo: En este ejemplo, un programa tiene definidos dos elementos de datos continuos en memoria: un buffer de 8 bytes tipo string, A, y otro de dos bytes tipo entero, B. Al comienzo, A contiene bytes nulos y B contiene el número 3 (cada carácter se representa mediante un byte).

A continuación, el programa intenta almacenar la cadena de caracteres "excessive" en el buffer A, seguido de bytes nulos para marcar el fin de string. Al no validarse la longitud de la cadena, se sobrescribe el valor de B. A pesar de que el programador no quería cambiar el contenido del búffer B, el valor de éste ha sido reemplazado por un número equivalente a parte de la cadena de caracteres. Para este ejemplo, en un sistema big-endian que use ASCII, el carácter 'o' seguido del byte nulo equivale al número 28416. Si B fuese la única variable aparte de A definida en el programa, la escritura de datos que sobrepasen los límites de B generarían un error como segmentation fault, concluyendo así el programa.

La Segmentación es un esquema de manejo de memoria mediante el cual la estructura del programa refleja su división lógica, llevándose a cabo una agrupación lógica de la información en bloques de tamaño variable denominados segmentos. Cada uno de ellos tienen información lógica del programa. Luego cada espacio de direcciones de programa consiste de una colección de segmentos, que generalmente reflejan la división lógica del programa.
La segmentación permite alcanzar los siguientes objetivos:
Modularidad de programas: Cada rutina del programa puede ser un bloque sujeto a cambios y recopilaciones, sin afectar al resto del programa.
Estructura de datos de largo variable: Donde cada estructura tiene su propio tamaño y este puede variar. Ej: Stack.
Protección: Se pueden proteger los módulos del segmento contra accesos no autorizados.
Compartición: Dos o más procesos pueden ser un mismo segmento, bajo reglas de protección; aunque no sean propietarios de los mismos.
Enlace dinámico entre segmentos: Puede evitarse realizar todo el proceso de enlace antes de comenzar a ejecutar un programa. Los enlaces se establecerán solo cuando sea necesario.
La Paginación y segmentación son técnicas diferentes, cada una de las cuales busca brindar las ventajas enunciadas anteriormente. Para la segmentación se necesita que estén cargadas en memoria áreas de tamaños variables. Si se requiere cargar un segmento en memoria que antes estuvo en ella y fue removido a memoria secundaria, se necesita encontrar una región de la memoria lo suficientemente grande para contenerlo, lo cual no es siempre factible. En cambio recargar una página implica sólo encontrar un marco de página disponible.
A nivel de paginación, si quiere referenciar en forma cíclica n paginas, estas deberán ser cargadas una a una, generándose varias interrupciones por fallas de páginas. Bajo segmentación, esta página podría conformar un sólo segmento, ocurriendo una sola interrupción por falla de segmento. No obstante, si bajo segmentación se desea acceder un área muy pequeña dentro de un segmento muy grande, este deberá cargarse completamente en memoria, desperdiciándose memoria. Bajo paginación sólo se cargará la página que contiene los ítems referenciados
Puede hacerse una combinación de segmentación y paginación para obtener las ventajas de ambas. En lugar de tratar un segmento como una unidad contigua, éste puede dividirse en páginas. Cada segmento puede ser descrito por su propia tabla de páginas.
Ventajas de la segmentación paginada
El esquema de segmentación paginada tiene todas las ventajas de la segmentación y la paginación:
Debido a que los espacios de memorias son segmentados, se garantiza la facilidad de implantar la compartición y enlace.
Como los espacios de memoria son paginados, se simplifican las estrategias de almacenamiento.
Se elimina el problema de la fragmentación externa y la necesidad de compactación.
Desventajas de la segmentación paginada
Los tres componentes de la dirección y el proceso de formación de direcciones hace que se incremente el costo de su implantación. El costo es mayor que en el caso de de segmentación pura o paginación pura.
Se hace necesario mantener un número mayor de tablas en memoria, lo que implica un mayor costo de almacenamiento.
 

Sigue existiendo el problema de fragmentación interna de todas -o casi todas- las páginas finales de cada uno de los segmentos. Bajo paginación pura se desperdicia sólo la última página asignada, mientras que bajo segmentación paginada el desperdicio puede ocurrir en todos los segmentos asignados.

Habilitar y deshabilitar la memoria virtual
Windows ofrece mayormente una buena experiencia, especialmente en cuanto a rendimiento. Si tienes un equipo con altas prestaciones, es decir, un procesador poderoso, mucha memoria RAM.  Es probable que te vaya muy bien y que Windows se sienta rápido casi siempre.
Ahora, si tienes un equipo más modesto, con el paso del tiempo y mientras más aplicaciones ejecutes, más lento empezarás a sentir todo. Un buen truco para ayudar a mejorar el rendimiento mejorar el rendimiento en estas máquinas, es el de aumentar la memoria virtual del sistema, Cuando Windows  usa toda la memoria RAM disponible, pasa a aprovecharse de la memoria virtual para proveer una expansión temporal de recursos. Esa memoria virtual viene de tu disco duro.
Windows administra automáticamente el tamaño de ese archivo para todas las unidades de tu equipo. Pero esto no quiere decir que no puedas modificarlo y aumentarlo a placer para intentar darle un empujón en rendimiento a tu ordenador.
Cómo habilitar la memoria virtual
Presiona el botón de inicio y escribe "Sistema", o abre el Panel de Control, ve a Sistema y seguridad, y luego a "Sistema".



 Una vez que abra el panel de control, navega por el panel lateral de la izquierda y busca el ítem "Configuración avanzada el sistema" y haz click sobre él.

Aparecerá una nueva ventana de Propiedades del sistema. Ahí elige la pestaña Opciones avanzadas y en el apartado Rendimiento haz click en el botón que aparece a la derecha y dice Configuración.


Esto te mostrará un nuevo panel con las Opciones de rendimiento. Aquí selecciona la pestaña Opciones avanzadas y en el apartado Memoria virtual haz click en el botón Cambiar....


 
En la siguiente ventana desmarca la casilla "Administrar automáticamente el tamaño del archivo de paginación para todas las unidades". Esto te permitirá poder cambiar el tamaño en MB por el que desees.


La ventana te muestra las unidades disponibles y el espacio en megabytes disponible para asignar al archivo de paginación. Aquí puedes escribir el número que desees, prueba aumentando inicialmente unos 1000 o 2000 MB, que equivalen básicamente a 1 o 3 gigas extra de RAM virtual hasta llegar a un máximo de tres veces su capacidad.

Ese archivo de paginación es un área en tu disco que Windows usa como si fuese memoria RAM. Cuando decidas el nuevo tamaño que tendrá, simplemente presiona aceptar y mira que tal se siente el sistema ahora.




Cómo deshabilitar la memoria virtual
 
 




                                   DESMARCA la casilla de arriba 
                    Administrar automáticamente el tamaño... 
                    si no está ya desmarcada.






            Marca la opción de abajo Sin archivo de paginación.

       Haz clic en el botón Establecer.

      Confirma el aviso que explica los riesgos.
Pulsa Aceptar en esa ventana y en las otras a las que regresas. O acepta reiniciar el equipo si un mensaje te lo pide.
           Dejar que Windows se ocupe 
           Con esos pasos ya podra habilitar y deshabilitar la memoria virtual sin correr riesgos porque marcando  
           la casilla que esta en la parte superior de la pestaña de memoria virtual se pondra todo por defecto    
           a la configuracion de windows y seguira la paginacion con la memoria virtual al minimo permitido
           y recomendado por windows.

21 comentarios:

  1. Muchos hackers aprovechan la paginación de procesos para "copiarse" información de autenticidad para luego modificarla directamente en la RAM, se evitan muchas restricciones que tuviese un disco duro o un antivirus poco eficiente.

    ResponderEliminar
  2. LO ideal para mantener la seguridad de la información es contar con un firewall, que claro de hecho es un equipo caro para la inversión de un hogar. Un firewall es un dispositivo de seguridad de la red que monitorea el tráfico de red -entrante y saliente- y decide si permite o bloquea tráfico específico en función de un conjunto definido de reglas de seguridad

    ResponderEliminar
  3. lo ideal para tener corriendo tu ordenador es tener una buena tarjeta de video y la memoria RAM necesaria para que no sufra de apagones o se vaya a colgar el sistema operativo porque cuanto mas se va actializando los softwares piden mas memoria ram para poder correr

    ResponderEliminar
  4. Cuando hablamos de gestión de memoria, hablamos también de memoria virtual, que utilizaremos en caso de que nuestra memoria ram este llena y esta lenta, solo utilizarla en casos realmente necesarios.

    ResponderEliminar
  5. Mi conclusión seria que la gestión de memoria cumple un papel muy importante para la realización de procesos y aplicaciones que realiza el sistema operativo.

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  8. Ami parecer la memoria principal son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos.
    Las asignación consiste en determinar cual espacio vacío en la memoria principal es el mas indicado para ser asignado a un proceso.

    ResponderEliminar
  9. Ami parecer la memoria principal son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos.
    Las asignación consiste en determinar cual espacio vacío en la memoria principal es el mas indicado para ser asignado a un proceso.

    ResponderEliminar
  10. La gestión de memoria es una área importante porque gracias a esta podemos tener un rendimiento mas acorde en las necesidades del usuario, en la velocidad del trabajo.

    ResponderEliminar
  11. La paginacion permite dividir la memoria virtual y la física en muchas pequeñas partes iguales, esto hace que los procesos en ejecución se almacenen optimamente dentro de cada memoria.
    A pesar que los sistemas operativos nos permiten ampliar este espacio de paginacion no es recomendable por que se produciría un uso poco eficiente de la memoria.

    ResponderEliminar
  12. La gestión de memoria es la encargada de almacenar, manejar y ejecutar todos los proyectos, trabajos, y otros que realicemos en el computado, técnicamente sin memoria el computador no nos serviría de mucho para realizar cualquier actividad en él.En muy necesario conocer a detalle el funcionamiento de la memoria.

    ResponderEliminar
  13. Gracias a la memoria virtual es posible utilizar espacio de disco, memoria secundaria, como si fuese memoria principal. También se puede utilizar la memoria principal para acelerar las operaciones de entrada/salida.

    ResponderEliminar
  14. esta parte "Modularidad de programas: Cada rutina del programa puede ser un bloque sujeto a cambios y recopilaciones, sin afectar al resto del programa" ¿cuan versátil y eficaz es el sistema operativo para poder realizar estas acciones? .... bueno esta gestión que nos ofrece el sistema operativo como tal es bastante compleja no solo en cuestión de ejecución sino también en el proceso mecánico que este realiza para poder lograrlo manejar algo abstracto para poder mostrar un resultado "físico" gran acción durante todos los procesos del uso de la memoria e información

    ResponderEliminar
  15. La memoria es uno de los principales recursos de la computadora, la cual debe de administrarse con mucho cuidado. Aunque actualmente la mayoría de los sistemas de cómputo cuentan con una alta capacidad de memoria, de igual manera las aplicaciones actuales tienen también altos requerimientos de memoria, lo que sigue generando escasez de memoria en los sistemas multitarea y/o multiusuario.

    ResponderEliminar
  16. Un directorio es un contenedor virtual en el que se almacenan una agrupación de archivos informáticos y otros subdirectorios

    ResponderEliminar
  17. Para que quede mas claro, a las personas que leen este blog, recalcaremos la definicion de la paginacion:

    En sistemas operativos de computadoras, los sistemas de paginación de memoria dividen los programas en pequeñas partes o páginas. Del mismo modo, la memoria es dividida en trozos del mismo tamaño que las páginas llamados marcos de página. De esta forma, la cantidad de memoria desperdiciada por un proceso es el final de su última página, lo que minimiza la fragmentación interna y evita la externa.

    ResponderEliminar
  18. ROBERTO AJATA no veo en que podia ayudar un firewall en la gestion de memoria...el trafico de datos?...concuerdo en que para que nuestra maquina funcione bien, depediendo en que lo usamos, veamos el requerimiento de RAM para poder aumentarlo si es necesario.

    ResponderEliminar
  19. Editar
    La memoria suele dividirse en un almacenamiento primario de alta velocidad y uno secundario de menor velocidad. La gestión de memoria del sistema operativo se ocupa de trasladar la información entre estos dos niveles de memoria

    ResponderEliminar
  20. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  21. Lo mas recomendable para que la memoria ram no colapse es darle un buen uso a la memoria virtual y no sobrepasar el limite establesido por el sistema operativo

    ResponderEliminar