viernes, 6 de mayo de 2011

MEMORIA

UNIVERSIDAD AUTONOMA DE SANTO DOMINGO
 (UASD)


Materia:
Sistema Operativo (INF-324)

Tema:
Memoria


Nombre:                                   Matricula:
Diomaris Beltre                     100011217
Julissa Céspedes                       AA-4369
Juan Vidal                                   CC-5863
Sergio Florentino                      DC-3651
Jhojan Abreu                             DC-5556


Profesor:
José Binet González


Fecha:
28/03/2011






Introducción:

La memoria es uno de los principales recursos de los Sistemas Operativos, la cual se 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.

La parte del sistema operativo que administra la memoria se llama administrador de memoria y su labor consiste en llevar un registro de las partes de memoria que se estén utilizando y aquellas que no, con el fin 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.

Los sistemas de administración de memoria se pueden clasificar en dos tipos: los que desplazan los procesos de la memoria principal al disco y viceversa durante la ejecución y los que no.

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 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 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.

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.

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.

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 independiente de la asignación actual de datos a memoria debiéndose realizar una traducción 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 traducción del espacio de direcciones virtuales al espacio de direcciones fısicas en un esquema de reubicación determinado, pueden considerarse dos tipos básicos de estrategias: Reubicación estática y reubicación dinámica.

Reubicación estática Implica generalmente que la reubicación 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.


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.

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 el diseñador del SO tiene la responsabilidad de decidir como se va a llevar a cabo esta ubicación. Los tres algoritmos que se pueden considerar son:

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

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:

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.






Conclusión:

Podemos decir que la memoria es uno de los componentes más importantes del computador, además sabemos que administrar la memoria es una de las tareas más complejas que lleva a cabo el sistema operativo gracias a esta es mas fácil acceder a cualquier programa a la hora de usarlo.


Referencias:

Libro:
Tanenbaum, Andrew S.(2003).Sistemas Operativos Modernos. Segunda Edición.

Web:

Base de Datos:





Examen

1) La parte del sistema operativo  que administra la memoria se llama:
   a) sistemas de cómputos
   b) unidad de control
   c) administrador de memoria
   d)  a y b son correctas
   e) todas son correctas
   f) ninguna de las anteriores

2)  Es donde son ejecutados los programas y procesos de una computadora:
    a) memoria cache 
    b) memoria real o principal
    c) RAM
    d) a y b son correctas
    e) ROM
    f) ninguna de las anteriores

3) Es la memoria que queda desperdiciada al usar los métodos de gestión de memoria:
    a) memoria virtual
    b) memoria cache
    c) fragmentación
    d) segmentación
    e) memoria RAM
    f) ninguna de las anteriores

3) Es un esquema de manejo de memoria mediante el cual la estructura del programa refleja su división lógica:
    a) fragmentación
    b) paginación
    c) almacenamiento secundario
    d) segmentación
    e) todas son correctas 
    f) todas son incorrectas

4) Es una técnica de manejo de memoria, en la cual el espacio de memoria se divide en secciones físicas de igual tamaño:
     a) fragmentación
     b) paginación
     c) almacenamiento secundario
     d) segmentación
     e) sistema interactivo
     f) ninguna de las anteriores

5) Es una técnica de administración de la memoria real que permite al sistema operativo brindarle al software de usuario y a si  mismo un espacio de direcciones mayor que la memoria real o física:
    a) memoria virtual
    b) paginación
    c) fragmentación
    d) gestión de memoria con intercambio (swapping)
    e) asignación dinámica
    f) multiprogramación

6) Son características de la paginación:
   a) se mantiene información en los marcos libres 
   b) exclusivamente ordena datos estadísticos
   c) se produce fragmentación interna
   d) b y c son correctas
   e) a y c son correctas
   f) ninguna de las anteriores

7) ventajas de la  segmentación paginada:
   a) se hace necesario mantener un numero mayor de tablas en memoria
   b) debido a los espacios de memorias son segmentados, se garantiza la facilidad de implantar la comparación y enlace.
   c) se elimina el problema de la fragmentación externa y la necesidad de compactación
   d) Las tres componentes de la dirección y el proceso de formación de direcciones hace que se incremente el costo de su implantación.
   e) a y d son correctas
   f) b y c son correctas 

8) Esta es una estrategia sencilla que consiste en cargar en la memoria un proceso entero, ejecutarlo durante un rato y volver a guardarlo en disco
    a) memoria virtual
    b) paginación
    c) fragmentación
    d) gestión de memoria con intercambio (swapping)
    e) asignación dinámica
    f) asignación

9) Una  de las estrategias más comunes para asignar algún hueco de la tabla que consiste en asignar el primer hueco con capacidad suficiente es:
  a) primer ajuste
  b) segundo ajuste
  c) peor ajuste
  d) mejor ajuste
  e) segmentación
  f) ninguna de las anteriores 


10) Esta organización facilita la programación de una aplicación al dividirla en dos o más procesos. Además ofrece la capacidad de tener más de un proceso a la vez en memoria así puede ofrecer servicios a varios usuarios a la vez.
  a) Multiprogramación con particiones fijas
  b) Compactación de memoria
  c) Multiprogramación y uso de memoria
  d) Multiprogramación con particiones variables
  e) Monoprogramación sin intercambio o paginación
  f) Administración de la memoria con listas ligadas

No hay comentarios:

Publicar un comentario