1. Presentación
Sustentantes:
Nombre: Matricula:
Diomaris Beltre………………..100011217
Julissa Céspedes……………..AA-4369
Juan Vidal………………………CC-5863
Jhojan Abreu…………………...DC-5556
Sergio Florentino………………DC-3651
Introducción
La parte del sistema operativo que se encarga de facilitar los procesos ya sea en
ejecución o en compilación se llama memoria y su labor consiste en mantener un registro
de los programas para facilitar su acceso. Estos registros son almacenados gracias al
proceso de gestión de memoria el cual se encarga de asignar espacio en memoria a los
procesos cuando éstos la necesiten y liberándola cuando terminen, así como administrar
el intercambio entre la memoria principal y el disco en los casos en los que la memoria
principal no le pueda dar capacidad a todos los procesos que tienen necesidad de ella.
Definición de Memoria
Son dispositivos que retienen datos informáticos durante algún intervalo de tiempo.
Memoria ROM
Read Only Memory.
Almacena en forma permanente los microprogramas que realizan las funciones primarias
de la PC.
Memoria Principal o RAM
La memoria principal o primaria (MP), también llamada memoria central, es una unidad
dividida en celdas que se identifican mediante una dirección. Está formada por bloques
de circuitos integrados o chips capaces de almacenar, retener o "memorizar" información
digital, es decir, valores binarios; a dichos bloques tiene acceso el microprocesador de la
computadora.
La MP se comunica con el microprocesador de la CPU mediante el bus de direcciones. El
ancho de este bus determina la capacidad que posea el microprocesador para el
direccionamiento de direcciones en memoria.
En un sistema monoprogramado, la memoria principal se divide en dos partes: una parte
para el sistema operativo (monitor residente, núcleo) y otra parte para el programa que se
ejecuta en ese instante. En un sistema multiprogramado, la parte de “usuario” de la
2. memoria debe subdividirse aun más para hacer sitio a varios procesos. La tarea de
subdivisiones la lleva a cabo el sistema operativo y se conoce como gestión de memoria.
Gestión de memoria
Sea cual sea la política de gestión de memoria empleada en un determinado sistema, se
pueden destacar las siguientes características como objetivos deseables del sistema de
gestión de memoria:
Espacios lógicos independientes. En un sistema operativo multiprogramado de
propósito general no se puede conocer a priori la posición de memoria que ocupará un
programa cuando se cargue en memoria para proceder a su ejecución, puesto que
dependerá del estado de ocupación de la memoria, pudiendo variar, por tanto, en
sucesivas ejecuciones del mismo.
Protección. En un sistema con monoprogramación es necesario proteger al sistema
operativo de los accesos que realiza el programa en ejecución para evitar que, voluntaria
o involuntariamente, pueda interferir en el correcto funcionamiento del mismo. Todos los
usuarios que han trabajado en un sistema que no cumple este requisito de protección,
como por ejemplo MS-DOS, han experimentado cómo un error de programación en una
aplicación puede causar que todo el sistema se colapse durante la ejecución de la misma
al producirse una alteración imprevista del código o las estructuras de datos del sistema
operativo.
En un sistema con multiprogramación el problema se acentúa ya que no sólo hay que
proteger al sistema operativo sino también a los procesos entre sí. El mecanismo de
protección en este tipo de sistemas necesita del apoyo del hardware puesto que es
necesario validar cada una de las direcciones que genera un programa en tiempo de
ejecución. Este mecanismo está típicamente integrado en el mecanismo de traducción: la
función de traducción debe asegurar que los espacios lógicos de los procesos sean
disjuntos entre sí y con el del propio sistema operativo.
Compartimento de memoria. Para cumplir el requisito de protección, el sistema
operativo debe crear espacios lógicos independientes y disjuntos para los procesos. Sin
embargo, en ciertas situaciones, bajo la supervisión y control del sistema operativo,
puede ser provechoso que los procesos puedan compartir memoria. Esto es, la posibilidad
de que direcciones lógicas de dos o más procesos, posiblemente distintas entre sí, se
correspondan con la misma dirección física.
Soporte de las regiones del proceso. Dado que el sistema operativo conoce qué las
regiones incluye el mapa de memoria de cada proceso, el gestor de memoria con el apoyo
del hardware debería dar soporte a las características específicas de cada región.
Maximizar el rendimiento. El gestor de memoria debe, por tanto, realizar un reparto de
la memoria entre los procesos intentando que quepa el mayor número de ellos en
memoria y minimizando el desperdicio inherente al reparto. Para ello, debe establecerse
una política de asignación adecuada.
Mapas de memoria muy grandes para los procesos. En los tiempos en los que la
memoria era muy cara y, en consecuencia, los equipos poseían una memoria bastante
reducida, se producían habitualmente situaciones en las que las aplicaciones se veían
limitadas por el tamaño de la memoria. Para solventar este problema, los programadores
usaban la técnica de los overlays (el programador divide lógicamente un programa muy
grande en secciones que puedan almacenarse el las particiones de RAM). Esta técnica
consiste en dividir el programa en una serie de fases que se ejecutan sucesivamente, pero
3. estando en cada momento residente en memoria sólo una fase. Cada fase se programa de
manera que, después de realizar su labor, carga en memoria la siguiente fase y le cede el
control. Es evidente que esta técnica no soluciona el problema de forma general dejando
en manos del programador todo el trabajo.
Gestión de memoria
• Espacios lógicos independientes.
• Protección.
• Compartimento de memoria.
• Soporte de las regiones del proceso.
• Maximizar el rendimiento.
• Mapas de memoria muy grandes para los procesos
Instrucciones de un Proceso Cargado en Memoria
1. Referencias a datos empleados.
2. Referencias a otras instrucciones empleadas
Tipos de Direcciones
1. Dirección lógica o virtual.
2. Dirección física o absoluta.
Reubicación
El termino reubicación de programa se refiere a la capacidad de cargar y ejecutar un
programa determinado en una posición arbitraria de memoria en contraposición a un
conjunto fijo de posiciones especificadas durante la compilación de dicho programa. Las
instrucciones de un proceso cargado en memoria contendrían referencias a posiciones de
memoria de dos tipos:
1. Referencias a datos empleados en instrucciones de carga, almacenamiento y algunas
instrucciones aritmético-lógicas.
2. Referencias a otras instrucciones empleadas fundamentalmente en bifurcaciones de
control de flujo o en instrucciones de llamadas.
Ambos tipos de direcciones no serian fijas durante todo el periodo de permanencia del
proceso en el sistema, sino que pueden variar si el proceso es suspendido y cargado
posteriormente en memoria o, simplemente, si es desplazado dentro de esta.
Distinguiremos, pues, entre dos tipos de direcciones:
1. Una dirección lógica o virtual es un identificador utilizado para referenciar
información dentro del espacio de direcciones de un programa y, por tanto, es
4. independiente de la asignación actual de datos a memoria debiéndose realizar una
traduccion a dirección fısica antes de poder realizar un acceso a memoria.
2. Una dirección fısica o absoluta designa una posición real de memoria fısica donde
se almacena información en tiempo de ejecución.
Dependiendo de como y cuando tenga lugar la traduccion del espacio de direcciones
virtuales al espacio de direcciones fısicas en un esquema de reubicacion determinado,
pueden considerarse dos tipos básicos de estrategias: Reubicación estática y reubicacion
dinámica.
Reubicación estática Implica generalmente que la reubicacion es realizada antes o
durante la carga del proceso en memoria. Las constantes (valores literales), los
desplazamientos relativos al PC, no dependen de esta condición y no necesitan ser
ajustados durante la reubicación.
Reubicación dinámica Implica que la correspondencia entre el espacio de direcciones
virtuales y el espacio de direcciones fısicas se efectúa en tiempo de ejecución.
Usualmente con asistencia del hardware. Cuando el proceso en cuestión esta siendo
ejecutado, todas sus referencias a memoria son reubicadas durante la ejecución antes
de acceder realmente a la memoria fısica. Este proceso se suele implementar por
medio de registros base especializados.
A continuación veremos el mecanismo hardware que posibilita tanto la reubicación
dinámica como la protección. Esta ultima consiste en impedir el acceso de un proceso a
un espacio de direcciones que no le corresponde.
El registro base contiene la dirección de carga del proceso y el registro lımite contiene la
última dirección correspondiente al espacio de memoria asignado al proceso.
5. Asignación de memoria con particiones fijas
En la mayorıa de los esquemas de gestión de memoria se puede suponer que el SO ocupa
una parte de la memoria principal y que el resto de la memoria esta disponible para ser
utilizada por los procesos de usuario. El esquema mas sencillo de gestión de la memoria
es dividirla en regiones con lımites fijos. Una posibilidad es emplear particiones fijas de
igual tamaño, en este caso cualquier proceso con tamaño menor o igual al tamaño de la
partición puede cargarse en cualquier partición libre, si todas las particiones están
ocupadas el SO puede sacar un proceso de alguna de ellas y cargar otro. La utilización de
particiones fijas plantea dos dificultades:
1. Un programa puede ser demasiado grande para caber en una partición, en ese
caso el programador debe diseñar el programa mediante superposiciones para que
solo una parte del programa estañe en memoria principal en cada instante.
Cuando se necesita un modulo que no esa presente el programa de usuario debe
cargar dicho modulo en la partición del programa superponiéndolo a los
programas y datos que se encuentren en el.
2. El uso de la memoria principal es extremadamente ineficiente, ya que cualquier
programa sin importar lo pequeño que sea ocuparía una partición completa. Este
fenómeno donde se desperdician espacio interno de una partición porque el
bloque de proceso que es más pequeño que ella se denomina fragmentación
interna.
Con particiones del mismo tamaño la ubicación de un proceso en memoria resulta trivial.
Puesto que todas las particiones son de igual tamaño no importa que partición se utilice y
se elegiría siempre la primera libre que se encuentre. Los problemas que presenta el uso
de particiones fijas de igual tamaño pueden reducirse aunque no solventarse por medio
del uso de particiones de distintos tamaños. El uso de estas particiones proporciona un
cierto grado de flexibilidad a las particiones fijas, además ambos tipos de esquema de
partición fija son relativamente simples y exigen un software de SO y una sobrecarga de
proceso mínimos.
Con particiones de distinto tamaño hay dos maneras posibles de asignar los procesos a las
particiones:
1. La forma más simple es asignar cada proceso a la partición más pequeña en la que
quepa, en este caso hace falta una cola de planificación para cada partición. Esta
cola albergaría a los procesos cuyo destino es dicha partición. La ventaja de este
enfoque es que los procesos se asignan de una forma en la que se desperdicia el
menor espacio de memoria posible, sin embargo aunque esta técnica parec
optima desde el punto de vista de una partición individual no lo es desde el punto
de vista del sistema global ya que puede darse la situación de que existan
particiones sin utilizar que podrıan ser aprovechadas por procesos que esperan en
las colas de planificación de las particiones a las que han sido asignados.
6. 2. Consiste en seleccionar la partición más pequeña disponible que pueda albergar al
proceso.
La utilización de particiones fijas ya sean de igual o distintos tamaños plantea los
siguientes problemas:
• El número de particiones especificadas en el momento de la generación del
sistema limita el número de procesos activos en dicho sistema.
• Puesto que los tamaños de partición se programan en el momento de la
generación del sistema los trabajos pequeños no hacen un uso eficiente del
espacio de las particiones en un entorno en el que los requisitos básicos de
almacenamiento de todos los procesos se conocen de antemano puede ser una
técnica razonable, pero en la mayorıa de los casos es ineficiente.
Asignación de memoria con particiones dinámicas
En este esquema las particiones van a ser variables en número y longitud. Cuando se trae
un proceso a memoria se le asigna exactamente tanta memoria como necesita y no mas.
Como muestra este ejemplo, a medida que pasa el tiempo, la memoria empieza a estar
fragmentada y el rendimiento decae. A este fenómeno se le denomina fragmentación
externa y se refiere al hecho de que la memoria externa a todas las particiones se
fragmenta cada vez más. Una técnica para superar esta fragmentación es la
compactación o desfragmentación que consiste en desplazar los procesos para que estén
contiguos de forma que toda la memoria libre esté junta en un bloque. La compactación
requiere además la capacidad de reubicación dinámica, es decir, se debe poder mover un
proceso de una región a otra de memoria principal sin invalidar sus referencias a
memoria.
A la hora de ubicar procesos en memoria atañe al diseñador del SO decidir como se va a
llevar a cabo esta ubicación. Los tres algoritmos que se pueden considerar son:
7. 1. El Mejor Ajuste (Best Fit): Lo que se hace es elegir el bloque con tamaño más
parecido al solicitado.
2. El Primer Ajuste (First Fit): Se recorre la memoria desde el principio y se escoge
el primer bloque disponible que sea suficientemente grande.
3. El Siguiente Ajuste (Next Fit): Es similar a El Primer Ajuste pero se recorre la
memoria desde el lugar de la última ubicación.
La Fragmentación
La fragmentación es la memoria que queda desperdiciada al usar los métodos de gestión
de memoria.
La fragmentación es generada cuando durante el reemplazo de procesos quedan huecos
entre dos o más procesos de manera no contigua y cada hueco no es capaz de soportar
ningún proceso de la lista de espera. Tal vez en conjunto si sea espacio suficiente, pero se
requeriría de un proceso de desfragmentación de memoria o compactación para lograrlo.
Esta fragmentación se denomina fragmentación externa.
Existe otro tipo de fragmentación conocida como fragmentación interna, la cual es
generada cuando se reserva más memoria de la que el proceso va realmente a usar. Sin
embargo a diferencia de la externa, estos huecos no se pueden compactar para ser
utilizados. Se debe de esperar a la finalización del proceso para que se libere el bloque
completo de la memoria.
Fragmentación Interna
La fragmentación interna es la pérdida de espacio en disco debido al hecho de que el
tamaño de un determinado archivo sea inferior al tamaño del clúster, ya que teóricamente
el archivo estaría obligado a ser referenciado como un clúster completo. Los clúster(s)
son contiguos de forma que desde el último bit del archivo situado en el clúster "a" hasta
el primer bit del archivo situado en el clúster contiguo (es decir "b") queda un espacio
sobrante siempre teniendo la condición de que el archivo del clúster "a" fuera más
pequeño que el clúster en sí.
Por eso se sugiere no disponer de un gran tamaño de partición en los discos nuevos donde
la capacidad es muy importante. Por ejemplo si nuestro clúster es de 18KB (18.432 bytes)
por más que un archivo ocupe menos, en nuestro disco ocupara 18KB. Esto sugiere una
pérdida de ese espacio que dice utilizar pero no utiliza.
Por eso, en nuestro ejemplo, un archivo de 3KB ocupara en nuestro disco lo mismo que
uno de 10KB, o sea 18 KB. Esa pérdida de espacio se denomina fragmentación interna, y
no se corrige con el desfragmentador, sino disminuyendo el tamaño de la partición.
Fragmentación Externa
8. Este tipo de fragmentación aparece como consecuencia de las distintas políticas de ajuste
de bloques que tiene un sistema de ficheros, o al utilizar asignaciones dinámicas de
bloques en el caso de la memoria. En el sistema de ficheros, la sucesiva creación y
eliminación de ficheros de distintos tamaños puede conducir al aislamiento de los bloques
libres de un disco y, dependiendo de la política de ajuste, su no elección para futuros
ficheros.
En la memoria del sistema la fragmentación se produce cuando los procesos asignados
han ocupado posiciones no contiguas de memoria dejando demasiados bloques libres de
pequeño tamaño, en los que no "caben" nuevos procesos.
En sistemas de ficheros la desfragmentación trata de resolver este problema, alineando
los bloques de datos contiguos y juntando los bloques libres, produciendo así fragmentos
mayores que sí serán elegidos para futuros ficheros. En la memoria principal se soluciona
compactando los procesos para que estos ocupen posiciones contiguas y dejar los bloques
libres juntos, o también se soluciona con la paginación de memoria.
Desfragmentación
La desfragmentación es el proceso mediante el cual se acomodan los archivos de un disco
de tal manera que cada uno quede en un área contigua y sin espacios sin usar entre ellos.
Al irse escribiendo y borrando archivos continuamente en el disco duro, éstos tienden a
no quedar en áreas contiguas, así, un archivo puede quedar "partido" en muchos pedazos
a lo largo del disco, se dice entonces que el archivo está "fragmentado". Al tener los
archivos esparcidos por el disco, se vuelve ineficiente el acceso a ellos.
Las técnicas utilizadas por el desfragmentador son los siguientes:
9. 1. Mover todos los índices o información del directorio a un solo lugar. Trasladar
este lugar al el centro de los datos, es decir, a un tercio espacio del total, por lo
que el promedio de traslado del cabezal en busca de datos se reduce a la mitad en
comparación con tener la información de directorio en la parte delantera.
2. Mover los archivos poco usados lejos del área de directorio.
3. Admitir que el usuario indique qué archivos ignorar, y en cuáles hacer hincapié.
4. Hacer archivos contiguos para que puedan leerse sin búsquedas innecesarias.
Memoria Virtual
La memoria virtual es una técnica que permite ejecutar procesos que no caben totalmente
en memoria RAM (memoria física). Esto propicia la creación de programas que sean más
grandes que la memoria física. Además, la memoria virtual ayuda a crear un esquema de
abstracción de la memoria que la separa de la zona lógica que el usuario ve, esto facilita
enormemente la tarea a los programadores puesto que no se han de preocupar por
limitaciones de memoria.
Los procedimientos de implementación de la memoria virtual se basan en que cuando se
ejecuta un programa, éste está parcialmente en memoria, es decir, sólo hay cargada
aquella zona de código y datos que se necesitan en ese instante de tiempo, y no el
programa completo. La memoria virtual es la separación entre la memoria lógica
disponible para el usuario y la memoria RAM, se implementa generalmente con el
método de paginación por demanda aunque también se puede implementar en un sistema
con segmentación.
En el momento en que en el sistema empieza a escasear la memoria, se crea un fichero
SWAP (intercambio) en el disco que sirve como ampliación auxiliar de memoria. En el
caso de Windows, cuando tenemos muchas aplicaciones en funcionamiento y la memoria
RAM se agota, el sistema se apoya en el fichero SWAP para realizar movimientos desde
el disco duro a la RAM y viceversa. De ese modo crean espacios en memoria física para
ir ejecutando las órdenes. Esto, evidentemente, hace que el sistema vaya más lento.
Todo ello permite simular la existencia de 4GB de RAM en el equipo, a pesar de que
nadie dispone de 4GB en su ordenador (a excepción de algunos sistemas en empresas y
universidades), y dar capacidad de ejecución a múltiples aplicaciones por grandes que
sean.
Está soportada por el mecanismo de traducción de memoria, junto con un
almacenamiento rápido en disco duro (swap).
El espacio de direcciones virtual, está mapeado de tal forma que una pequeña parte de él,
está en memoria real y el resto almacenado en el disco.
10. Paginación
El concepto de paginación aparece junto con el de memoria virtual, ¿que es eso? Este
método fue creado por Fotheringham y la idea básica es la siguiente.
Cuando ejecutamos un programa este puede caber o no en la memoria física, si se da la
situación de que el proceso es mayor que la memoria, el SO se encarga de mantener en
memoria las partes del programa que estamos usando y el resto en el disco duro.
Conclusiones
Administrar la memoria es una de las tareas más complejas que lleva a cabo el sistema
operativo.
La memoria es un recurso importante que debe ser cuidadosamente gestionado.
La paginación es un esquema similar al de las particiones fija, con la ventaja de que un
proceso puede ser cargado en más de una partición y en espacios de memoria no
contiguos, lo que reduce la fragmentación interna.
Tanto en las particiones estáticas, como en la paginación, es necesario determinar el
tamaño que tendrán los bloques de memoria.
Sugerencias
• Desfragmentar el disco periódicamente.
• Es fundamental cerrar todas las aplicaciones abiertas antes de iniciar la
desfragmentación.
• Se recomienda iniciar el sistema en modo a prueba de errores a la hora de realizar
la desfragmentación.
Referencias
Libro:
Tanenbaum, Andrew S.(2003).Sistemas Operativos Modernos.
Segunda Edici ó n.
Web:
SlideShare
Base de Datos:
Universidad de Granma