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.
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
Un 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.
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.
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.
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.
ResponderEliminarLO 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
ResponderEliminarlo 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
ResponderEliminarCuando 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.
ResponderEliminarMi 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.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarAmi 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.
ResponderEliminarLas asignación consiste en determinar cual espacio vacío en la memoria principal es el mas indicado para ser asignado a un proceso.
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.
ResponderEliminarLas asignación consiste en determinar cual espacio vacío en la memoria principal es el mas indicado para ser asignado a un proceso.
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.
ResponderEliminarLa 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.
ResponderEliminarA 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.
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.
ResponderEliminarGracias 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.
ResponderEliminaresta 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
ResponderEliminarLa 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.
ResponderEliminarUn directorio es un contenedor virtual en el que se almacenan una agrupación de archivos informáticos y otros subdirectorios
ResponderEliminarPara que quede mas claro, a las personas que leen este blog, recalcaremos la definicion de la paginacion:
ResponderEliminarEn 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.
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.
ResponderEliminarEditar
ResponderEliminarLa 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
Este comentario ha sido eliminado por el autor.
ResponderEliminarLo 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