lunes, 23 de abril de 2012

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: subrutina, arreglo, etc. 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:
  1. Modularidad de programas: cada rutina del programa puede ser un bloque sujeto a cambios y recopilaciones, sin afectar por ello al resto del programa.
  2. Estructuras de datos de largo variable: ejm. Stack, donde cada estructura tiene su propio tamaño y este puede variar.
  3. Protección: se puede proteger los módulos del segmento contra accesos no autorizados.
  4. Comparición: dos o más procesos pueden ser un mismo segmento, bajo reglas de protección; aunque no sean propietarios de los mismos.
  5. 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.
Ventajas de la segmentación
El esquema de segmentación ofrece las siguientes ventajas:
  • El programador puede conocer las unidades lógicas de su programa, dándoles un tratamiento particular.
  • Es posible compilar módulos separados como segmentos el enlace entre los segmentos puede suponer hasta tanto se haga una referencia entre segmentos.
  • Debido a que es posible separar los módulos se hace más fácil la modificación de los mismos. Cambios dentro de un modulo no afecta al resto de los módulos.
  • Es fácil el compartir segmentos.
  • Es posible que los segmentos crezcan dinámicamente según las necesidades del programa en ejecución.
  • Existe la posibilidad de definir segmentos que aun no existan. Así, no se asignara memoria, sino a partir del momento que sea necesario hacer usos del segmento. Un ejemplo de esto, serian los arreglos cuya dimensión no se conoce hasta tanto no se comienza a ejecutar el programa. En algunos casos, incluso podría retardar la asignación de memoria hasta el momento en el cual se referencia el arreglo u otra estructura de dato por primera vez.
Desventajas de la segmentación
  • Hay un incremento en los costos de hardware y de software para llevar a cabo la implantación, así como un mayor consumo de recursos: memoria, tiempo de CPU, etc.
  • Debido a que los segmentos tienen un tamaño variable se pueden presentar problemas de fragmentación externas, lo que puede ameritar un plande reubicación de segmentos en memoria principal.
  • Se complica el manejo de memoria virtual, ya que los discos almacenan la información en bloques de tamaños fijos, mientras los segmentos son de tamaño variable. Esto hace necesaria la existencia de mecanismos más costosos que los existentes para paginación.
  • Al permitir que los segmentos varíen de tamaño, puede ser necesarios planes de reubicación a nivel de los discos, si los segmentos son devueltos a dicho dispositivo; lo que conlleva a nuevos costos.
  • No se puede garantizar, que al salir un segmento de la memoria, este pueda ser traído fácilmente de nuevo, ya que será necesario encontrar nuevamente un área de memoria libre ajustada a su tamaño.
  • La comparticion de segmentos permite ahorrar memoria, pero requiere de mecanismos adicionales da hardware y software.
Estas desventajas tratan de ser minimizadas, bajo la técnica conocida como Segmentación paginada.

Paginación

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, denominadas marcos de página. Los programas se dividen en unidades lógicas, denominadas páginas, que tienen el mismo tamaño que los marcos de páginas. De esta forma, se puede cargar una página de información en cualquier marco de página.
Las páginas sirven como unidad de almacenamiento de información y de transferencia entre memoria principal y memoria auxiliar o secundaria. Cada marco se identifica por la dirección de marco, que esta en la posición física de la primera palabra en el marco de página.
Las páginas de un programa necesitan estar contiguamente en memoria, aunque el programador lo observe de esta forma. Los mecanismos depaginación permiten la correspondencia correcta entre las direcciones virtuales (dadas por los programas) y las direcciones reales de la memoria que se reverencien.
Cada pagina consiste en z palabras contiguas; un espacio de direcciones N de un programa consiste de n paginas (0,1,2,3…n-1) (n*z direcciones virtuales) y el espacio de memoria consiste de m marcos de paginas (0,z,2z,…,(m-1)z)(m*z posiciones). Una dirección virtual a es equivalente a una dirección dada como una dupla (p, d), en la cual p es el número de la página y d el número de la palabra dentro de la página, de acuerdo con la relación:
a=p*z+d (0<=d<z)
p=(a/z) (parte entera de la division)
d=a mod z (resto de divisor a/z)
En las maquinas que usan aritmética binaria, el calculo de (p, d) es trivial, si z es potencia de 2. Por ejemplo, si el campo de direcciones de la instrucción es de m bits (m>6), los cuatro bits mas significativos indican el numero de la pagina y los m-4 bits restantes, el desplazamiento.
Para tener el control de las páginas, debe mantenerse una tabla en memoria que se denomina tabla de Mapas de Pagina (PMT) para cada uno de los procesos.
Hasta ahora, los métodos que hemos visto de la administración de la memoria principal, nos han dejado con un problema: fragmentación, (huecos en la memoria que no pueden usarse debido a lo pequeño de su espacio) lo que nos provoca un desperdicio de memoria principal.
Una posible solución para la fragmentación externa es permitir que espacio de direcciones lógicas lleve a cabo un proceso en direcciones no contiguas, así permitiendo al proceso ubicarse en cualquier espacio de memoria física que esté disponible, aunque esté dividida. Una forma de implementar esta solución es a través del uso de un esquema de paginación. La paginación evita el considerable problema de ajustar los pedazos de memoria de tamañosvariables que han sufrido los esquemas de manejo de memoria anteriores. Dado a sus ventajas sobre los métodos previos, la paginación, en sus diversas formas, es usada en muchos sistemas operativos.
Al utilizar la memoria virtual, las direcciones no pasan en forma directa al bus de memoria, sino que van a una unidad administradora de la memoria (MMU –Memory Management Unit). Estas direcciones generadas por los programas se llaman direcciones virtuales y conforman el hueco de direcciones virtuales. Este hueco se divide en unidades llamadas páginas. Las unidades correspondientes en la memoria física se llaman marcos para página o frames. Las páginas y los frames tienen siempre el mismo tamaño.
Tablas de páginas

Cada página tiene un número que se utiliza como índice en la tabla de páginas, lo que da por resultado el número del marco correspondiente a esa página virtual. Si el bit presente / ausente es 0, se provoca un señalamiento (trap) hacia el sistema operativo. Si el bit es 1, el número de marco que aparece en la tabla de páginas se copia en los bits de mayor orden del registro de salida, junto con el ajuste (offset) de 12 bits, el cual se copia sin modificaciones de la dirección virtual de entrada. Juntos forman una dirección física de 15 bits. El registro de salida se coloca entonces en el bus de la memoria como la dirección en la memoria física.
En teoría, la asociación de las direcciones virtuales con las físicas se efectúa según lo descrito. El número de página virtual se divide en un número de página virtual (los bits superiores)y un ajuste (los bits inferiores). El número de página virtual se utiliza como un índice en la tabla de páginas para encontrar la entrada de esa página virtual. El número de marco (si existe) se determina a partir de la tabla de páginas. El número de marco se asocia al extremo superior del ajuste y reemplaza al número de página virtual para formar una dirección física que se puede enviar a la memoria.
La finalidad de la tabla de páginas es asociar las páginas virtuales con los marcos. En términos matemáticos, la tabla de páginas es una función, cuyo argumento es el número de página virtual y como resultado el número del marco físico. Mediante el resultado de esta función, se puede reemplazar el campo de la página virtual de una dirección virtual por un campo de marco, lo que produce una dirección en la memoria física. Sin embargo hay que enfrentar dos aspectos fundamentales:
  1. La tabla de páginas puede ser demasiado grande.
  2. La asociación debe ser rápida.
El primer punto proviene del hecho de que las computadoras modernas utilizan direcciones virtuales de al menos 32 bits. Por ejemplo, si el tamaño de página es de 4K, un hueco de direcciones de 32 bits tiene un millón de páginas; en el caso de un hueco de direcciones de 64 bits, se tendría más información de la que uno quisiera contemplar.
El segundo punto es consecuencia del hecho de que la asociación virtual – física debe hacerse en cada referencia a la memoria. Una instrucción común tiene una palabra de instrucción y también un operando de memoria. Entonces es necesario hacer una, dos o más referencias a la tabla de páginas por cada instrucción.
Características de la paginación:
  • El espacio de direcciones lógico de un proceso puede ser no contiguo.
  • Se divide la memoria física en bloques de tamaño fijo llamados marcos (frames).
  • Se divide la memoria en bloques de tamaño llamados paginas.
  • Se mantiene información en los marcos libres.
  • Para correr un programa de n paginas de tamaño, se necesitan encontrara n marcos y cargar el programa.
  • Se establece una tabla de paginas para trasladar las direcciones lógicas a físicas.
  • Se produce fragmentación interna.
Ventajas de la paginación
  1. Es posible comenzar a ejecutar un programa, cargando solo una parte del mismo en memoria, y el resto se cargara bajo la solicitud.
  2. No es necesario que las paginas estén contiguas en memoria, por lo que no se necesitan procesos de compactación cuando existen marcos de paginas libres dispersos en la memoria.
  3. Es fácil controlar todas las páginas, ya que tienen el mismo tamaño.
  4. El mecanismo de traducción de direcciones (DAT) permite separar los conceptos de espacio de direcciones y espacios de memoria. Todo el mecanismo es transparente al usuario.
  5. Se libera al programador de la restricción de programar para un tamaño físico de memoria, con lo que s e aumenta su productividad. Se puede programar en función de una memoria mucho más grande a la existente.
  6. Al no necesitarse cargar un programa completo en memoria para su ejecución, se puede aumentar el numero de programas multiprogramándose.
  7. Se elimina el problema de fragmentación externa.
Desventajas de la paginación
  1. El costo de hardware y software se incrementa, por la nueva información que debe manejarse y el mecanismo de traducción de direcciones necesario. Se consume mucho mas recursos de memoria, tiempo en el CPU para su implantación.
  2. Se deben reservar áreas de memoria para las PMT de los procesos. Al no ser fija el tamaño de estas, se crea un problema semejante al de los programas (como asignar un tamaño óptimo sin desperdicio de memoria, u "ovearhead" del procesador).
  3. Aparece el problema de fragmentación interna. Así, si se requieren 5K para un programa, pero las paginas son de 4K, deberán asignárseles 2 paginas (8k), con lo que quedan 3K sin utilizar. La suma de los espacios libres dejados de esta forma puede ser mayor que el de varias paginas, pero no podrá ser utilizados. Debe asignarse un tamaño promedio a las páginas, evitando que si son muy pequeñas, se necesiten TABLAS BMT y PMT muy grandes, y si son muy grandes, se incremente el grado de fragmentación interna.
Traducción de Direcciones
La dirección generada por la CPU se divide en:
  • Numero de pagina (p): utilizado como indice en la tabla de pagins que contiene la dirección base de cada pagina en la memoria fisica.
  • Offset de la pagina (d): combinado con la dirección base dfine la direccion fisica que será enviada a la unidad de memoria.

domingo, 22 de abril de 2012

Ventajas y desventajas del uso de la memoria virtual


  • Ventajas:
    • Permite optimizar uso de memoria: 
      •  mantiene más procesos en memoria principal 
      •  mantiene en disco partes del proceso poco usadas (rutinas de atención a errores poco frecuentes, funciones de uso esporádico, datos no usados, etc.) 
    •  Permite que un proceso sea más grande que toda la memoria principal 
    •  Permite multiprogramación muy efectiva 
    •  Se encarga el SO => evita al usuario la preocupación por programar con superposición
  • Desventajas:
    •  Fallos de direccionamiento: 
    •  Se genera interrupción, indica fallo de acceso a memoria 
      • Proceso pasa a bloqueado, SO a ejecución 
      • SO emite solicitud de E/S al disco 
      • SO expide otro proceso para que se ejecute 
      • Tras traer fragmento a memoria, interrupción de E/S, control al SO, que pasa el proceso a listo.  
    • Posible hiperpaginación (thrasing): 
      • SO más tiempo intercambiando fragmentos que ejecutando (ejemplo: si saca de memoria un fragmento que se iba a usar ya)

Memoria Virtual


Si el equipo no tiene suficiente memoria de acceso aleatorio (RAM) para ejecutar un programa o una operación, el sistema operativo usa lamemoria virtual para compensar la falta.
La memoria virtual combina la RAM del equipo con espacio temporal en el disco duro. Cuando queda poca RAM, la memoria virtual mueve datos de la RAM a un espacio llamado archivo de paginación. Al mover datos al archivo de paginación y desde él, se libera RAM para completar la tarea.
Cuanto mayor sea la RAM del equipo, más rápido tenderán a ejecutarse los programas. Si el equipo se ralentiza porque falta RAM, puede considerar la posibilidad de aumentar la memoria virtual para compensar. Sin embargo, el equipo puede leer los datos de la RAM mucho más rápido que de un disco duro, por lo que la mejor solución es agregar RAM.

Caracteristicas de la memoria real o principal


Las magnitudes importantes que caracterizan la Memoria Real son:

· Capacidad o tamaño de la misma. Es decir, el numero de miles de posiciones que contiene. Normalmente se expresan en K.palabras, aunque en los ordenadores personales al ser las palabras de 8 bits se expresan en K-bytes. En la actualidad, el tamaño de la palabra es múltiplo del byte, ya que de esta forma el acceso a la misma puede hacerse desde uno al ancho máximo del bus de datos, ahorrando en muchos casos tiempo. Así tendremos palabras de 8, 16, 32, 64 bits y 
capacidades de siempre medidas en potencia de dos: 8, 16, 64, 128 K...etc(siendo 1K igual a 1025).

· Tiempo de Acceso. Es el tiempo que invierte el ordenador desde que se emite la orden de lectura-escritura, hasta que finaliza la misma. Este tiempo es muy pequeño, y de el depende la potencia del ordenado. Son típicos tiempos del orden de microsegundos e incluso del orden de 2 a 10 nanosegundos.

· El tamaño de la celda define su anchura de palabra, y viene fijado por el ancho del registro de información de memoria. Si la palabra interna es superior a la de la memoria, necesitara hacer más de un acceso para conseguir toda la información.

Memoria Real

Bueno, les hablare de lo que es la memoria real o como muchos le llegan a llamar, memoria principal. Esta memoria es en donde se llegan a ejecutarse los programas y procesos de la computadora y es el espacio real que existe en memoria para que se ejecuten los procesos.

 Solo la memoria cache es mas rapida que la principal, pero su costo es a su vez mayor.
Cuando no existe memoria virtual no hay diferenciacion entre el espacio de direcciones y la memoria real; el espacio de direcciones que puede ser usado en los programas tiene identico tamano al espacio de memoria real posible. Si se utiliza memoria virtual, el espacio de direcciones disponibles para los programas es aquel determinado por el tamano de la memoria virtual implementada y no el espacio de direcciones provisto por la memoria real disponible (el espacio de la memoria virtual sera mayor que el de la memoria real).
La organización y administración de la “memoria principal”“memoria primaria” “memoria real” de un sistema ha sido y es uno de los factores mas importantes en el diseño de los S. O. (Ver la figura 3.2.1)
        Los términos “memoria” “almacenamiento” se consideran equivalentes.
        Los programas y datos deben estar en el almacenamiento principal para:
  • Poderlos ejecutar.
  • Referenciarlos directamente

Administación de Memoria

La administración de memoria se refiere a los distintos métodos y operaciones que se encargan de obtener la máxima utilidad de la memoria, organizando los procesos y programas que se ejecutan de manera tal que se aproveche de la mejor forma posible el espacio disponible. Existen cuatro tipos de esquema s de asignación de memoria, estos esquemas de la administración de la memoria rara vez se utilizan en los sistemas operativos actuales:

  • Configuración de un solo usuario
  • Particiones fijas
  • Particiones dinámicas
  • Particiones dinámicas relocalizables



Esquema contiguo usuario único.
El primer esquema de asignación de la memoria funcionaba de la siguiente manera:
Cada programa que se iba a procesar se cargaba completo en memoria y se le asignaba tanto espacio contiguo necesitara.

Si el programa era demasiado grande y no cabía en el espacio de memoria disponible, no se podía ejecutar. A pesar de que las primeras computadoras eran demasiado grandes tenían muy poca memoria.
Esto demuestra un factor limitante para todas las computadoras, tiene una cantidad finita de memoria y si un programa no cabe, hay que incrementar el tamaño de la memoria principal o modificar el programa.

Particiones fijas.
El primer intento para posibilitar la multiprogramación fue la creación de las particiones fijas o estáticas, en la memoria principal, una partición para cada tarea. El tamaño de la partición se especificaba al encender el sistema, cada partición podía reconfigurarse al volver encender el sistema o reiniciar el sistema.
Este esquema introdujo un factor esencial, la protección del espacio de memoria para la tarea. Una vez asignada una partición a una tarea, no se permitía que ninguna otra tarea entrara en sus fronteras.
Este esquema de partición es mas flexible que la de usuario único, por que permite que varios programas estén en memoria al mismo tiempo.

Particiones dinámicas.
Con las particiones dinámicas, la memoria principal disponible aun se conserva en bloques contiguos, pero a las tareas nada mas se les da memoria que solicitan cuando se cargan para su procesamiento. Aunque es una mejoría significativa en relación con las particiones fijas, no se elimina el problema de las mismas.
Un esquema de particiones dinámicas utiliza toda la memoria al cargar las primeras tareas, pero conforme entran nuevas tareas en el sistema que no son del mismo tamaño de las que acaban de salir de la memoria se acomodan en los espacios disponibles de acuerdo con su prioridad.

Particiones dinámicas relocalizables.
Con este esquema de asignación de memoria, el administrador de memoria relocaliza los programas para reunir los bloques vacios y compactarlos, para hacer un bloque de memoria lo bastante grande para aceptar algunas o todas las tareas en espera de entrar.
La compactibilidad no es una tarea sencilla. Primero, todos los programas en memoria se deben relocalizar, de manera que queden contiguos; luego hay que ajustar cada dirección y cada referencia a una dirección en todo programa para tomar en consideración la nueva localización del programa en memoria.