top of page
CUESTIONES DE IMPLEMENTACIÓN

Probablemente la cuestión más importante al implementar el almacenamiento de archivos sea mantener un registro acerca de qué bloques de disco van con cuál archivo. Se utilizan varios métodos en distintos sistemas operativos.

ARCHIVO

Un archivo o fichero informático es un conjunto de bits que son almacenados en un dispositivo. Un archivo es identificado por un nombre y la descripción de la carpeta o directorio que lo contiene. A los archivos informáticos se les llama así porque son los equivalentes digitales de los archivos escritos en expedientes, tarjetas, libretas, papel o microfichas del entorno de oficina tradicional.

​

​

Las reglas para ponerle nombre a un archivo y a una carpeta son las mismas. Según Microsoft, podemos ponerle un nombre de hasta 255 caracteres (letras, números o signos) a un archivo. Podemos utilizar espacios para separar las palabras pero esto puede causar problemas. Yo, particularmente, procuro no utilizar ni espacios, ni tildes (acentos) ni otros caracteres especiales en los nombres. 

 

Sin embargo, hay algunos signos que no podemos utilizar en el nombre de un archivo. Son estos:

 

Barra invertida

Barra /

Dos puntos :

Asterisco *

Comillas “

Interrogación ?

Menor que <

Mayor que >

Punto .

Barra vertical |

El resto sí pueden usarse.

 

Estos son algunos consejos que es bueno seguir a la hora de poner un nombre. Estos consejos permiten que haya menos problemas cuando usamos un sistema (operativo o de archivos) o un programa diferentes a aquel con el que creamos el archivo o la carpeta.

 

Para empezar, no uses puntos. Los puntos son solo para separar el nombre de la extensión.

No uses tildes. Puede ser que algunos programas o hasta sistemas operativos no te permitan acceder a ellos.

No uses espacios para separar las palabras. Utiliza el guión (-) o, mejor, el subguión o guión bajo (_).

Usa nombres cortos y descriptivos de lo que contiene el archivo. Mejor que “foto” es “foto_deena”.

 

Extensión del nombre del archivo:

 

Al principio, en DOS,  el nombre solo admitía ocho caracteres sin espacios ni tildes y la extensión tres caracteres. Al pasar a windows y/o a otros S.O. tanto nombre como extensión aumentaron su posible tamaño. El usuario puede utilizar la extensión que desee, libremente, pero no es recomendable, lo recomendable es mantener el "apellido" que le otorga cada programa o aplicación a los ficheros que trabajan con ellos. Así mismo no es conveniente poner extensión a los directorios o carpetas.

La extensión del nombre suelen ser tres o cuatro caracteres y es como el apellido del fichero, indica la familia a la que pertenece. A su vez el sistema reconoce ese tipo y si es un ejecutable (.exe, .bat) lo ejecuta y si es un archivo ejecuta el programa que permite trabajar con ese archivo y   abre el fichero.

 

Algunas extensiones son:

 

.exe Programa o fichero ejecutable.

.bat Ejecutable con comandos DOS.

.jpg Fichero de imagen (foto)

.gif Fichero de imagen (foto)

.bmp Fichero de imagen.

.mpg Pelicula.

.avi Pelicula.

.xls Libro excel.

.doc Fichero word, texto con formato.

.txt Fichero de texto sin formato.

.pps Power point.

.ppt Power Point

.htm Página web.

.html Página web.

.zip Fichero comprimido.

.pdf Fichero pdf.

.mp3,.waw Ficheros de sonido.

 

 Tipos y funciones de acceso a archivos

Por sí mismo, un archivo no es más que una serie de bytes de datos relacionados en un disco. Cuando una aplicación tiene acceso a un archivo, debe considerar si los bytes representan caracteres, registros de datos, enteros, cadenas, etc. El usuario indica a la aplicación qué debe considerar mediante la especificación del tipo de acceso del archivo.

El tipo de acceso al archivo que se utiliza depende de la clase de datos que el archivo contiene. Visual Basic proporciona tres tipos de acceso a archivos:

  • Secuencial, para leer y escribir archivos de texto en bloques continuos.

  • Aleatorio, para leer y escribir archivos de texto o binarios estructurados como registros de longitud fija.

  • Binario, para leer y escribir archivos estructurados arbitrariamente.

El acceso secuencial está diseñado para utilizarlo con archivos de texto sin formato. Se considera que cada carácter de un archivo representa un carácter de texto o una secuencia de formato de texto, como un carácter de nueva línea. Los datos se almacenan como caracteres ANSI.

Un archivo abierto para acceso aleatorio se considera que está compuesto de un conjunto de registros de longitud idéntica o de conjuntos de campos que contienen información. Se pueden utilizar tipos definidos por el usuario para crear registros compuestos por numerosos campos, cada uno de los cuales puede tener diferentes tipos de datos. Los datos se almacenan como información binaria.

El acceso binario permite utilizar archivos para almacenar datos de cualquier modo que se ajuste a las necesidades, ya sean numéricos, de cadena o ambos. El acceso binario es similar al aleatorio, excepto que no se hacen suposiciones acerca del tipo de datos o de la longitud de registro. No obstante, es necesario conocer cómo se escribieron exactamente los datos en el archivo para poder recuperarlos correctamente. Por ejemplo, si almacena una serie de nombres y números de teléfono, debe recordar que el primer campo (el nombre) es texto y el segundo (el número de teléfono) es numérico.

NOMENCLATURA DE ARCHIVOS

ESTRUCTURA DE ARCHIVOS

TIPOS DE ARCHIVOS

Atributos de un archivo

Los posibles atributos de un fichero son:

  • Sólo lectura (FILE_ATTRIBUTE_READONLY - 0x00000001): impide que se pueda sobreescribir (modificar) o eliminar un fichero. La definición de Windows para este atributo: especifica si este archivo o carpeta es de sólo lectura, lo que significa que no se puede cambiar o eliminar accidentalmente. Si activa esta casilla de verificación cuando hay seleccionados varios archivos, todos ellos serán de sólo lectura. Si desactiva esta casilla de verificación, ninguno de los archivos seleccionados será de sólo lectura.
     

  • Oculto (FILE_ATTRIBUTE_HIDDEN - 0x00000002): impide que se visualice al listar, por lo tanto no se pude copiar ni suprimir, a no ser que se conozca su nombre o que tengamos activa la opción de mostrar archivos ocultos. La definición de Windows para este atributo: especifica si el archivo o la carpeta está marcado como oculto, lo que significa que no podrá verlo o utilizarlo si no conoce su nombre. Si selecciona varios archivos, una marca de verificación indica que todos los archivos están marcados como ocultos. Un cuadro relleno indica que algunos archivos están marcados como ocultos y otros no.
     

  • Archivo listo para archivar históricamente (FILE_ATTRIBUTE_ARCHIVE - 0x00000020): indica si el archivo o carpeta se debe guardar cuando se realice una copia de seguridad. Por defecto no está activado pero en cuanto se haga alguna modificación de los permisos o del contenido del fichero se activará automáticamente (por el sistema operativo). De esta forma el programa de copia de seguridad podrá copiar sólo los archivos modificados. La definición de Windows para este atributo: especifica si el archivo o carpeta se debe almacenar. Algunos programas utilizan esta opción para determinar de qué archivos y carpetas se harán copias de seguridad. Si selecciona varios archivos o carpetas, una marca de verificación indicará que todos los archivos o carpetas tienen activado el atributo de almacenamiento. Una casilla de verificación rellena indica que algunos archivos o carpetas tienen establecido el atributo de almacenamiento y otros no.
     

  • Permitir al servicio de Index Server indizar este archivo para acelerar la búsqueda (FILE_ATTRIBUTE_NOT_CONTENT_INDEXED - 0x00002000): indica que el archivo o carpeta se indexará para realizar una búsqueda rápida de texto en su contenido, propiedades o atributos. La definición de Windows para este atributo: especifica si el contenido del archivo seleccionado o de la carpeta se indizará para obtener una búsqueda más rápida. Una vez que se indice la carpeta o el archivo, puede buscar texto en la carpeta o archivo, así como propiedades, como la fecha, o atributos del archivo o carpeta. Al indizar una carpeta no se indizan automáticamente los archivos y subcarpetas que contiene a menos que elija indizar el contenido cuando se le indique. Si selecciona varios archivos, una marca de verificación indicará que todos los archivos tienen activado el atributo de indización. Una casilla de verificación rellena indica que algunos archivos tienen activado el atributo y otros no.
     

  • Comprimir contenido para ahorrar espacio en disco (FILE_ATTRIBUTE_COMPRESSED - 0x00000800): indica que el archivo o carpeta se comprimirá automáticamente para ahorrar espacio en disco. La definición de Windows para este atributo: muestra si esta carpeta o este archivo está comprimido. El contenido de las carpetas comprimidas no se comprime automáticamente a menos que elija comprimir el contenido cuando lo solicite el sistema. Si hay varios archivos seleccionados, una marca de verificación indica que todos los archivos están comprimidos. Una casilla de verificación rellena indica que algunos archivos están marcados como comprimidos y otros no. No se pueden cifrar las carpetas ni los archivos que estén comprimidos.
     

  • Cifrar contenido para proteger datos (FILE_ATTRIBUTE_ENCRYPTED - 0x00004000): indica que el archivo o carpeta se cifrará para evitar que su contenido pueda ser visto por otro usuario. La definición de Windows para este atributo: especifica que el contenido de este archivo o carpeta se cifrará. Solamente el usuario que cifra el archivo o la carpeta tiene acceso al contenido. Sin embargo, los archivos y carpetas pueden perder el cifrado dependiendo de cómo se mueven o se copien. Si selecciona varios archivos, una marca de verificación indicará que todos los archivos tienen activado el atributo de cifrado. Una casilla de verificación rellena indica que algunos archivos tienen activado el atributo y otros no. Los archivos y carpetas cifrados no se pueden comprimir.
     

  • Sistema (FILE_ATTRIBUTE_SYSTEM - 0x00000004): indica que el archivo es para uso del sistema operativo, uso interno.
     

  • Directorio (FILE_ATTRIBUTE_DIRECTORY - 0x00000010): indica que es una carpeta.
     

  • Normal (FILE_ATTRIBUTE_NORMAL - 0x00000080): un archivo que no tiene otros atributos establecidos. Este atributo es válido sólo cuando no se establecen otros atributos. Este atributo será ignorado si se establecen otros. Este atributo sólo se utiliza para proporcionar una forma de eliminar el resto de los atributos.
     

  • Fuera de línea (Offline FILE_ATTRIBUTE_OFFLINE - 0x00001000): este atributo indica que los datos del fichero no están disponibles de inmediato. Este atributo indica que el archivo ha sido movido a una de datos es desplazado a la conexión de almacenamiento. Este atributo se utiliza para el almacenamiento remoto.
     

  • Temporal (FILE_ATTRIBUTE_TEMPORARY - 0x00000100): archivo utilizado para almacenamiento temporal. El sistema operativo puede optar por almacenar datos de archivos con este atributo en la memoria en lugar de en almacenamiento masivo.

Operaciones con archivos

Los Sistemas de archivos de que disponen los sistemas operativos disponen de mecanismos para que un usuario pueda manipular los archivos (seleccionar, editar, ejecutar, borrar, ...). Desde el punto de vista de un programador un archivo es un medio para poder leer datos de entrada para su programa o donde poder guardar los resultados de su ejecución. Todo lenguaje de programación debe disponer de algún mecanismo para que el programador pueda manipular archivos desde un programa. Estos mecanismos pueden ser más o menos sofisticados o versátiles dependiendo del lenguaje de programación que estemos considerando, pero deben haber unas funciones básicas para poder acceder a un archivo, estas son:

​

  • Lectura (consulta).- Esta operación consiste el leer la información contenida en fichero sin alterarla.

  • Escritura (modificación).- Consiste en actualizar el contenido del fichero bien añadiéndole nuevos datos o borrando parte de los que contenía.

  • Apertura.- Antes de acceder a un fichero, tanto para consultar como para actualizar su información, es necesario abrirlo. Esta operación se debe realizar previamente a las operaciones de lectura o escritura.

  • Cierre.- Cuando se ha terminado de consultar o modificar un fichero, por lo general, del mismo modo que se tuvo que abrir para realizar alguna operación de lectura/escritura sobre él, éste deberá ser cerrado.

Asignación contigua

El esquema de asignación más simple es almacenar cada archivo como una serie contigua de bloques de disco. Así, en un disco con bloques de 1 KB, a un archivo de 50 KB se le asignarían 50 bloques consecutivos. Con bloques de 2 KB, se le asignarían 25 bloques consecutivos. En la siguiente gráfica (a) podemos ver un ejemplo de asignación de almacenamiento contigua. Aquí se muestran los primeros 40 bloques de disco, empezando con el bloque 0, a la izquierda. Al principio el disco estaba vacío, después se escribió un archivo A de cuatro bloques de longitud al disco, empezando desde el principio (bloque 0). Posteriormente se escribió un archivo de seis bloques llamado B, empezando justo después del archivo A. Observe que cada archivo empieza al inicio de un nuevo bloque, por lo que si el archivo Afuera realmente de 3 ½ bloques, se desperdiciaría algo de espacio al final del último bloque. En la gráfica se muestra un total de siete archivos, cada uno empezando en el bloque que va después del final del archivo anterior. Se utiliza sombreado sólo para facilitar la distinción de cada archivo. No tiene un significado real en términos de almacenamiento. La asignación de espacio en disco contiguo tiene dos ventajas significativas.

​

  • En primer lugar es simple de implementar, ya que llevar un registro de la ubicación de los bloques de un archivo se reduce a recordar dos números: la dirección de disco del primer bloque y el número de bloques en el archivo. Dado el número del primer bloque, se puede encontrar el número de cualquier otro bloque con una simple suma.
     

  • En segundo lugar, el rendimiento de lectura es excelente debido a que el archivo completo se puede leer del disco en una sola operación. Sólo se necesita una búsqueda (para el primer bloque).
     

Después de eso, no son necesarias más búsquedas ni retrasos por rotación, por lo que los datos llegan con el ancho de banda completa del disco. Por ende, la asignación contigua es simple de implementar y tiene un alto rendimiento.

Por desgracia, la asignación contigua también tiene una desventaja ligeramente significante: con el transcurso del tiempo, los discos se fragmentan. Para ver cómo ocurre esto, examine la gráfica (b).

Aquí se han eliminado dos archivos, D y F. Cuando se quita un archivo, sus bloques se liberan naturalmente, dejando una serie de bloques libres en el disco. El disco no se compacta al momento para quitar el hueco, ya que eso implicaría tener que copiar todos los bloques que van después del hueco, que podrían ser millones. Como resultado, el disco al final consiste de archivos y huecos, como se ilustra en la gráfica.

​

Al principio esta fragmentación no es un problema, ya que cada nuevo archivo se puede escribir al final del disco, después del anterior. Sin embargo, en un momento dado el disco se llenará y será necesario compactarlo, lo cual es en extremo costoso o habrá que reutilizar el espacio libre de los huecos. Para reutilizar el espacio hay que mantener una lista de huecos, lo cual se puede hacer.

​

Sin embargo, cuando se cree un nuevo archivo será necesario conocer su tamaño final para poder elegir un hueco del tamaño correcto y colocarlo. Imagine las consecuencias de tal diseño. El usuario empieza un editor de texto o procesador de palabras para poder escribir un documento. Lo primero que pide el programa es cuántos bytes tendrá el documento final. Esta pregunta se debe responder o el programa no continuará. Si el número dado finalmente es demasiado pequeño, el programa tiene que terminar prematuramente debido a que el hueco de disco está lleno y no hay lugar para colocar el resto del archivo. Si el usuario trata de evitar este problema al proporcionar un número demasiado grande como tamaño final, por decir 100 MB, tal vez el editor no pueda encontrar un hueco tan grande y anuncie que el archivo no se puede crear. Desde luego que el usuario tiene la libertad de iniciar de nuevo el programa diciendo 50 MB esta vez y así en lo sucesivo hasta que se encuentre un hueco adecuado. Aun así, no es probable que este esquema haga que los usuarios estén felices.

​

Sin embargo, hay una situación en la que es factible la asignación contigua y de hecho, se utiliza ampliamente: en los CD-ROMs. Aquí todos los tamaños de los archivos se conocen de antemano y nunca cambiarán durante el uso subsiguiente del sistema de archivos del CD-ROM.

Asignación de lista enlazada (ligada)

El segundo método para almacenar archivos es mantener cada uno como una lista enlazada de bloques de disco, como se muestra en la gráfica 108. La primera palabra de cada bloque se utiliza como apuntador al siguiente. El resto del bloque es para los datos.

​

A diferencia de la asignación contigua, en este método se puede utilizar cada bloque del disco. No se pierde espacio debido a la fragmentación del disco (excepto por la fragmentación interna en el último bloque). Además, para la entrada del directorio sólo le basta con almacenar la dirección de disco del primer bloque. El resto se puede encontrar a partir de ella.

​

Por otro lado, aunque la lectura secuencial un archivo es directa, el acceso aleatorio es en extremo lento. Para llegar al bloque n, el sistema operativo tiene que empezar desde el principio y leer los n– 1 bloques anteriores, uno a la vez. Es claro que tantas lecturas serán demasiado lentas.

Lista enlazada

Además, la cantidad de almacenamiento de datos en un bloque ya no es una potencia de dos, debido a que el apuntador ocupa unos cuantos bytes. Aunque no es fatal, tener un tamaño peculiar es menos eficiente debido a que muchos programas leen y escriben en bloques, cuyo tamaño es una potencia de dos. Con los primeros bytes de cada bloque ocupados por un apuntador al siguiente bloque, leer el tamaño del bloque completo requiere adquirir y concatenar información de dos bloques de disco

Nodos-i

Nuestro último método para llevar un registro de qué bloques pertenecen a cuál archivo es asociar con cada archivo una estructura de datos conocida como nodo-i (nodo-índice), la cual lista los atributos y las direcciones de disco de los bloques del archivo. En la siguiente gráfica se muestra un ejemplo simple. Dado el nodo-i, entonces es posible encontrar todos los bloques del archivo. La gran ventaja de este esquema, en comparación con los archivos vinculados que utilizan una tabla en memoria, es que el nodo-i necesita estar en memoria sólo cuando está abierto el archivo correspondiente. Si cada nodo-i ocupa n bytes y puede haber un máximo de k archivos abiertos a la vez, la memoria total ocupada por el arreglo que contiene los nodos-i para los archivos abiertos es de sólo kn bytes. Sólo hay que reservar este espacio por adelantado.

PARTICIPACIÓN DEL SISTEMA OPERATIVO EN LA PAGINACIÓN

Hay cuatro ocasiones en las que el sistema operativo tiene que realizar trabajo relacionado con la paginación: al crear un proceso, al ejecutar un proceso, al ocurrir un fallo de página y al terminar un proceso. Ahora examinaremos brevemente cada una de estas ocasiones para ver qué se tiene que hacer.

​

Cuando se crea un proceso en un sistema de paginación, el sistema operativo tiene que determinar qué tan grandes serán el programa y los datos (al principio), y crear una tabla de páginas para ellos. Se debe asignar espacio en memoria para la tabla de páginas y se tiene que inicializar. La tabla de páginas no necesita estar residente cuando el proceso se intercambia hacia fuera, pero tiene que estar en memoria cuando el proceso se está ejecutando. Además, se debe asignar espacio en el área de intercambio en el disco, para que cuando se intercambie una página, tenga un lugar a donde ir. El área de intercambio también se tiene que inicializar con el texto del programa y los datos, para que cuando el nuevo proceso empiece a recibir fallos de página, las páginas se puedan traer.

​

Algunos sistemas paginan el texto del programa directamente del archivo ejecutable, con lo cual se ahorra espacio en disco y tiempo de inicialización. Por último, la información acerca de la tabla de páginas y el área de intercambio en el disco se debe registrar en la tabla de procesos.

​

Cuando un proceso se planifica para ejecución, la MMU se tiene que restablecer para el nuevo proceso y el TLB se vacía para deshacerse de los restos del proceso que se estaba ejecutando antes.

​

La   tabla   de   páginas   del   nuevo   proceso   se   tiene   que   actualizar,   por   lo   general   copiándola   o   mediante un apuntador a éste hacia cierto(s) registro(s) de hardware. De manera opcional, algunas o todas las páginas del proceso se pueden traer a memoria para reducir el número de fallos de página al principio (por ejemplo, es evidente que será necesaria la página a la que apunta la PC).

​

Cuando ocurre un fallo de página, el sistema operativo tiene que leer los registros de hardware para determinar cuál dirección virtual produjo el fallo.

​

Con base en esta información debe       calcular   qué   página   se   necesita   y   localizarla   en   el   disco.   Después   debe      buscar   un   marco   de   página disponible para colocar la nueva página, desalojando alguna página anterior si es necesario. Luego debe leer la página necesaria y colocarla en el marco de páginas. Por último, debe respaldar el contador de programa para hacer que apunte a la instrucción que falló y dejar que la instrucción se ejecute de nuevo.

​

Cuando un proceso termina, el sistema operativo debe liberar su tabla de páginas, sus páginas y el espacio en disco que ocupan las páginas cuando están en disco. Si alguna de las páginas está compartidas con otros procesos, las páginas en memoria y en disco sólo pueden liberarse cuando el último proceso que las utilice haya terminado.

MANEJO DE FALLO DE PÁGINAS

En primer lugar, para que los fallos de página puedan ser tratados correctamente necesitamos un sistema que sea capaz de reiniciar una instrucción, de esta manera pasará lo siguiente:

​

  • Una instrucción necesita una página que no está en memoria.

  • Se genera fallo de página (No se puede satisfacer la instrucción).

  • Se carga a memoria la página requerida.

  • Se reinicia la instrucción
     

Como vemos en este proceso existe una carga a memoria, éste es uno de los factores determinantes para saber si la paginación por demanda es conveniente o no, puesto que, en el peor de los casos, puede existir una carga en memoria por instrucción lo que nos daría tiempos de ejecución mucho peores que con una paginación regular.

Rendimiento de la paginación por demanda

​

Para calcular el tiempo de acceso efectivo (tae) de un sistema de paginación por demanda debemos conocer los siguientes datos:

​

  • p: Probabilidad de que ocurra un fallo de página (0<p<1)

  • am : Tiempo de acceso a memoria. Si no existen fallos de página el tiempo de acceso estará dado solo por el tiempo de acceso a memoria de una paginación normal, que es el doble de un acceso a memoria (un acceso a la tabla de páginas y otro a la dirección de memoria).

  • fp: Tiempo de fallo de página: Si existe un fallo de página se debe leer del disco la página solicitada y luego acceder a ésta, este proceso tiene los siguientes pasos:
     

  1. Se encuentra la referencia inválida.

  2. Se guarda el contexto del proceso.

  3. Se verifica que la dirección de memoria sea válida.

  4. Se lee del disco la página necesitada.

  5. Se corrige la tabla de página y demás tablas.

  6. Restablecer el contexto y reiniciar la instrucción.

Una copia de seguridad, copia de respaldo, copia de reserva o también llamado backup (su nombre en inglés) en tecnologías de la información e informática es una copia de los datos originales fuera de la infraestructura que se realiza con el fin de disponer de un medio para recuperarlos en caso de su pérdida. Las copias de seguridad son útiles ante distintos eventos y usos: recuperar los sistemas informáticos y los datos de una catástrofe informática, natural o ataque; restaurar una pequeña cantidad de archivos que pueden haberse eliminado accidentalmente, corrompido, infectado por un virus informático u otras causas; guardar información histórica de forma más económica que los discos duros y además permitiendo el traslado a ubicaciones distintas de la de los datos originales; etc.

El proceso de copia de seguridad se complementa con otro conocido como restauración de los datos (en inglés restore), que es la acción de leer y grabar en la ubicación original u otra alternativa los datos requeridos.

La pérdida de datos es muy común, el 66% de los usuarios de Internet han sufrido una seria pérdida de datos en algún momento.

​

Ya que los sistemas de respaldo contienen por lo menos una copia de todos los datos que vale la pena salvar, deben de tenerse en cuenta los requerimientos de almacenamiento. La organización del espacio de almacenamiento y la administración del proceso de efectuar la copia de seguridad son tareas complicadas. Para brindar una estructura de almacenamiento es conveniente utilizar un modelo de almacenaje de datos. Actualmente (noviembre de 2010), existen muchos tipos diferentes de dispositivos para almacenar datos que son útiles para hacer copias de seguridad, cada uno con sus ventajas y desventajas a tener en cuenta para elegirlos, como duplicidad, seguridad en los datos y facilidad de traslado.

​

Antes de que los datos sean enviados a su lugar de almacenamiento se lo debe seleccionar, extraer y manipular. Se han desarrollado muchas técnicas diferentes para optimizar el procedimiento de efectuar los backups. Estos procedimientos incluyen entre otros optimizaciones para trabajar con archivos abiertos y fuentes de datos en uso y también incluyen procesos de compresión, cifrado, y procesos de de duplicación, entendiéndose por esto último a una forma específica de compresión donde los datos superfluos son eliminados. Muchas organizaciones e individuos tratan de asegurarse que el proceso de backup se efectúe de la manera esperada y trabajan en la evaluación y la validación de las técnicas utilizadas. También es importante reconocer las limitaciones y los factores humanos que están involucrados en cualquier esquema de backup que se utilice. Las copias de seguridad garantizan dos objetivos: integridad y disponibilidad.

​

Decidir qué se va a incluir en la copia de seguridad es un proceso más complejo de lo que parece.Si copiamos muchos datos redundantes agotamos la capacidad de almacenamiento disponible rápidamente. Si no realizamos una copia de seguridad de los suficientes datos, podría perderse información crítica.

La clave está en guardar copias de seguridad sólo de aquello que se ha modificado.

​

Archivos a copiar

Sólo copiar los ficheros que se hayan modificado.

​

Depósito del sistema de ficheros

Copiar el sistema de ficheros que tienen los ficheros copiados. Esto normalmente implica desmontar el sistema de ficheros y hacer funcionar un programa como un depósito. Esto es también conocido como copia de seguridad particionada en bruto. Este tipo de copia de seguridad tiene la posibilidad de hacer funcionar una copia más rápida que la simple copia de ficheros. El rasgo de algunos software de depósitos es la habilidad para restaurar ficheros específicos de la imagen del depósito.

​

Control de Cambios

Algunos sistemas de ficheros poseen un bit de archivo para cada fichero este nos indica si recientemente ha sido modificado. Algunos software de copia de seguridad miran la fecha del fichero y la comparan con la última copia de seguridad, para así determinar si el archivo se ha modificado.

​

Incremental a nivel de bloque

Un sistema más sofisticado de copia de seguridad de ficheros es el basado en solamente copiar los bloques físicos del fichero que han sufrido algún cambio. Esto requiere un alto nivel de integración entre el sistema de ficheros y el software de la copia de seguridad.

​

Incremental o diferencial binaria

Es tecnología de respaldo que se desarrolla en la década de 2000. El método es similar a la Incremental a nivel de bloque, pero basada en reflejar las variaciones binarias que sufren los ficheros respecto al anterior backup. Mientras la tecnología a nivel de bloque trabaja con unidades de cambio relativamente grandes (bloques de 8Ks, 4Ks, 1K) la tecnología a nivel de byte trabaja con la unidad mínima capaz de ahorrar espacio para reflejar un cambio. Otra diferencia importante es que es independiente del sistema de ficheros. Actualmente es la tecnología que consigue la máxima compresión relativa de la información y ofrece así una ventaja importante en las copias de seguridad a través de la Internet.

​

Versionado del sistema de ficheros

El versionado del sistema de ficheros se mantiene atento a los cambios del fichero y crea estos cambios accesibles al usuario. Esta es una forma de copia de seguridad que está integrada al ambiente informático.

RESPALDO DE INSTRUCCIONES

Se aplica a: Windows Vista, Windows Server 2008, Windows 7, Windows 8.1, Windows Server 2008 R2, Windows Server 2012 R2, Windows Server 2012, Windows 8

​

Este tema de referencia de la directiva de seguridad para profesionales de TI describe las prácticas recomendadas, ubicación, valores, administración de directivas y consideraciones de seguridad para esta configuración de directiva.

​

Referencia

Esta configuración de directiva determina qué cuentas pueden utilizar un proceso para mantener datos en la memoria física, lo que impide que el equipo paginar los datos en un disco de memoria virtual.

Normalmente, una aplicación que se ejecuta en Windows puede negociar para más memoria física, y en respuesta a la solicitud, la aplicación empieza a mover los datos de la RAM (por ejemplo, la caché de datos) a un disco. Cuando se mueve la memoria paginable en un disco, más memoria RAM es gratuito para el sistema operativo que utilice.

Si habilita esta configuración de directiva para una cuenta específica (una cuenta de usuario o una cuenta de proceso de una aplicación), la paginación de los datos. Por lo tanto, la cantidad de memoria que Windows pueda reclamar bajo presión está limitada. Esto podría provocar una degradación del rendimiento.

​

Nota

Al configurar esta configuración de directiva, el rendimiento del sistema operativo Windows variarán dependiendo de si las aplicaciones se ejecutan en sistemas de 32 bits o 64 bits, y si son imágenes virtualizadas. Rendimiento también variarán entre versiones anteriores y posteriores del sistema operativo Windows.

BLOQUEAR PÁGINAS EN MEMORIA

El almacén de respaldo se divide en bloque de tamaño fijo que son del mismo tamaño que los marcos de la memoria.

En un cualquier momento, la memoria se encuentra ocupada con páginas de diferentes procesos, mientras que algunos marcos están disponibles para su uso. El sistema operativo mantiene una lista de estos últimos marcos, y una tabla por cada proceso, donde consta en qué marco se encuentra cada página del proceso. De esta forma, las páginas de un proceso pueden no estar contiguamente ubicadas en memoria, y pueden intercalarse con las páginas de otros procesos.

​

Cada dirección generada por la CPU se divide en dos partes: un número de página (p) y un desplazamiento de página (d). El número de página se emplea como un índice en una tabla de páginas. La tabla de páginas contiene la dirección base de cada página en la memoria física. Esta dirección base se combina con el desplazamiento de página para definir la dirección física de la memoria que se envía a la unidad de memoria.

​

La paginación misma es una forma de relocalización dinámica. El hardware de paginación vincula cada dirección lógica con alguna dirección física. La paginación es similar al uso de una tabla de registros base (de relocalización), uno para cada marco de la memoria.

​

Cuando utilizamos un esquema de paginación no tenemos fragmentación externa: cualquier marco libre puede ser asignado a un proceso que lo necesite. Sin embargo, podemos tener cierta fragmentación interna.

​

Cada sistema operativo tiene sus propios métodos para almacenar tablas de páginas. La mayoría asigna una tabla de páginas por cada proceso. Un apuntador a la tabla de páginas se almacena con los demás valores de registros (como el contador de instrucciones) en el bloque de control del proceso. Cuando se le dice al despachador que inicie un proceso, debe recargar los registros del usuario y definir los valores correctos de la tabla de páginas de hardware a partir de la tabla de páginas del usuario que está almacenada.

​

La protección de memoria en un ambiente con paginación se realiza mediante bits de protección que están asociados con cada marco. Estos bits normalmente se mantienen en la tabla de páginas. Un bit puede definir que una página sea de lectura y escritura, o sólo de lectura. Cada referencia a la memoria pasa por la tabla de páginas para encontrar el número correcto de marco. La mayoría de los sistemas de cómputo modernos soportan un espacio grande de direcciones lógicas ( 232 a 2 64 ). En tales ambientes, la tabla de páginas se vuelve excesivamente grande. Una solución sencilla a este problema consiste en dividir la tabla de páginas en piezas más pequeñas (paginación con niveles múltiples).

​

Otra ventaja de la paginación es la posibilidad de compartir un código común (páginas compartidas). Esta consideración es importante en un ambiente de tiempo compartido. El código reentrante (también denominado código puro) es un código que no puede modificarse a sí mismo. Si el código es reentrante, entonces nunca cambia durante la ejecución. Por lo tanto, dos o más procesos pueden ejecutar el mismo código al mismo tiempo. Cada proceso tiene su propia copia de registros y almacenamiento de datos para contener los datos para la ejecución del proceso. También se pueden compartir otros programas que se utilizan intensamente: compiladores, sistemas de ventanas, sistemas de bases de datos, etc.

​ALMACEN DE RESPALDO

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 tiene información lógica del programa. Luego cada espacio de direcciones de programa consiste de de una colección de segmentos, que generalmente reflejan la división lógica del programa.
 

La segmentación es un esquema que es mas compatible con esta visión de la memoria que poseen los programadores y usuarios en general (visión de conjuntos, mas que elementos linealmente ordenados). Nos referimos entonces a un espacio lógico de direcciones lógicas como una colección de segmentos, cada uno con nombre y longitud. Las direcciones especifican el nombre del segmento y el desplazamiento respecto del inicio de este. Esto le permite al usuario especificar nombre de segmento y desplazamiento, es decir está a la vista del programador. El nombre es un número y entonces para referirnos a un segmento utilizamos una 2-tupla:


(Selector, Desplazamiento)


Siendo el selector el identificador y el desplazamiento la brecha respecto del inicio de este. Para almacenar los diferentes elementos asignados en segmentos debemos transformar esta tulpa en la dirección de byte apropiada. Esto se hace mediante una tabla de segmentos que tiene almacenada una dirección base y un límite para cada segmento, la cual usa como índice el número de segmento que mencionamos anteriormente o el selector. Esto se hace mediante hardware siguiendo el siguiente esquema:

​

Objetivos de la segmentación

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

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.

 

 

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 asignará memoria, sino a partir del momento que sea necesario hacer usos del segmento. Un ejemplo de esto, serían 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 cuál se referencia el arreglo u otra estructura de datos por primera vez.

​

Desventaja 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 plan de 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, pueden 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 compartición 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.

SEGMENTACIÓN

La segmentación es un esquema para implementar espacios de direcciones virtuales que se usaba en los primeros computadores de tiempo compartido. Pese a que hoy en día se encuentra en desuso, es interesante estudiar la segmentación por su simplicidad.

Como se vió en capítulos anteriores, cada proceso tiene su propio espacio de direcciones virtuales, independiente del resto de los procesos. Este espacio de direcciones virtuales se descompone en cuatro áreas llamadas segmentos   

  • Un segmento de código.

  • Un segmento de datos.

  • Un segmento de pila.

  • Un segmento de sistema, invisible para la aplicación, en donde reside el núcleo.

En una organización segmentada, los segmentos residen en un área contigua de la memoria real del computador. La figura  muestra un posible estado de la memoria de un computador con los distintos segmentos de varios procesos.

​

IMPLEMENTACION DE SEGMENTACIÓN PURA

En la figura se observa que el segmento sistema contiene una imagen de toda la memoria real del computador. Esta es una técnica muy usada en la implementación de Unix.

​

Cuando un proceso accesa la memoria siempre suministra una dirección en su espacio de direcciones virtuales. El procesador debe traducir esa dirección a su posición efectiva en la memoria real del computador, es decir a su dirección real.

Tanto la paginación como la segmentación tienen sus ventajas y desventajas. También es posible combinar estos dos esquemas para mejorar ambos. Veamos como ejemplo el esquema del ordenador GE 645 con el sistema operativo Multics. Las direcciones lógicas estaban formadas a partir de un número de segmento de 18 bits y un desplazamiento de 16 bits. Aunque este esquema crea un espacio de direcciones correspondiente a una dirección de 34 bits, la tabla de segmentos tiene un tamaño tolerable, puesto que el número variable de segmentos conduce naturalmente al uso de un Registro de Longitud de Tabla de Segmentos. Necesitamos tan solo el mismo número de entradas en la tabla de segmentos que segmentos; no tenemos por qué tener entradas vacías en la tabla de segmentos.

​

No obstante, con segmentos de 64 K-palabras, el tamaño medio de segmento podría resultar bastante grande y la fragmentación externa constituir un problema. Incluso si la fragmentación externa no es significativa, el tiempo de búsqueda para asignar un segmento, utilizando un primer o mejor ajuste, podría ser grande. De esta manera se podría desperdiciar memoria a causa de la fragmentación externa o bien desperdiciar tiempo debido a la búsqueda larga, o bien ambas cosas.

​

La solución adoptada fue paginar los segmentos. La paginación elimina la fragmentación interna y convierte en trivial el problema de la asignación: cualquier marco vacío puede utilizarse para una página. Obsérvese que la diferencia entre esta solución y la segmentación pura es que la entrada en la tabla de segmentos no contiene la dirección de la base del segmento, sino la dirección de la base de una tabla de páginas para ese segmento. El desplazamiento del segmento se fragmenta entonces en un número de página de 6 bits y un desplazamiento de página de 10 bits. El número de página indexa en la tabla de páginas para dar el número de marco. Finalmente, el número de marco se combina con el desplazamiento de página para formar la dirección física.

SEGMENTACIÓN CON PAGINACION MULTICS

Fig.: Acceso a un sistema de memoria Segmentado Paginado.

​

Ahora debemos tener una tabla de páginas independiente para cada segmento. No obstante, puesto que cada segmento tiene una longitud limitada por su entrada en la tabla de segmentos, la tabla de páginas no tiene por qué tener su tamaño máximo. Sólo precisa tantas entradas como se necesiten realmente. Además, generalmente la última página de cada segmento no estará totalmente llena. De este modo tendremos, por término medio, media página de fragmentación interna por segmento. Consecuentemente, aunque hemos eliminado la fragmentación externa, hemos introducido fragmentación interna e incrementada la sobrecarga de espacio de la tabla.

​

A decir verdad, incluso la visión de paginación segmentada de Multics que acabamos de presentar es simplista. Puesto que el número de segmento es una cantidad de 18 bits, podríamos tener 262144 segmentos, con lo que precisaríamos una tabla de segmentos muy larga. Para simplificar este problema, Multics página la tabla de segmentos. De esta manera, en general, una dirección en Multics utiliza un número de segmento para definir un índice de página en una tabla de páginas para la tabla de segmentos. A partir de esta entrada, localiza la parte de la tabla de segmentos que tiene la entrada para ese segmento. La entrada en la tabla de segmentos apunta a una tabla de páginas para ese segmento, que especifica el marco que contiene la palabra deseada.

SEGMENTACIÓN CON PAGINACION INTEL PENTIUM

En una arquitectura Pentium, la CPU entrega las direcciones lógicas generadas a la unidad de segmentación, la cual produce una dirección lineal. Esta dirección lineal es luego enviada a la unidad de paginación, generando finalmente la dirección física, del tipo 0X0F8C9DAB, por ejemplo.

Encerrado en el cuadrado rojo es el Unidad de Administración de Memoria (MMU por sus siglas en inglés).

 

Un segmento puede tener un máximo de 4 GB

Para cada proceso el número máximo de segmentos es de 16KB

El espacio lógico de un proceso se divide en 2:

​

Primera partición de hasta 8 KB segmentos privados al proceso. La información de ella se almacena en la tabla local de descriptores (LDT por sus siglas en inglés)

​

Segunda partición de hasta 8 KB, segmentos compartidos entre todos los procesos. La información de ella se almacena en la tabla global de descriptores (GDT por sus siglas en inglés)

​

Las entradas tanto de la LDT como de la GDT están descritas por un descriptor de segmentos de 8 bytes, que da información como posición base y límite de segmento. Es una 2-tupla de la forma (selector, desplazamiento):

​

El selector es un numero de 16 bits con sus trece primeros bits designado el número de segmento, 1 bit indicando si esta en GDT o LDT y los 2 bits restantes de protección.

​

El desplazamiento especifica la ubicación de la palabra dentro del segmento, es un número de 32 bits que guarda la ubicación del byte.

​

La siguiente figura ilustra la estructura de de una dirección lógica (2-tupla), con su selector y su desplazamiento (a menudo referido como offset):

Forma de dirección lógica (dirección, desplazamiento) en procesadores Pentium.


Además la arquitectura Pentium posee 6 registros de segmento, permitiendo al procesador direccionar hasta 6 segmentos distintos, en cualquier momento. Además 6 registros de 8 bytes, para guardar los descriptores LDT o GDT, según corresponda.

Esquema de Segmentación en Intel Pentium, transformación de dirección lógica a Lineal


A partir de la dirección lógica, cuya estructura describimos anteriormente, debemos generar nuestro dirección lineal, interpretable por la unidad de paginación. El proceso para generar la dirección lineal es el siguiente:

Debemos considerar que el registro de segmento respectivo apunta a entrada de LDT o GDT, ya que la información de base y límite del segmento se usa para generar la dirección lineal.

Verifica el límite para revisar la validez de la dirección. Dando dos alternativas:

- Si no es válido, se genera un fallo de memoria, y la consiguiente interrupción al sistema operativo.

- Si es válido, entonces se suma el valor del desplazamiento al valor de la base, dando como resultado una dirección de 32 bits.

El proceso se muestra en la figura a la izquierda. Luego el trabajo de convertir las direcciones lineales a direcciones físicas es trabajo de la unidad de paginación.

INVESTIGACION ACERCA DE LA ADMINISTRACION DE MEMORIA

La gestión de memoria o administración de memoria es el acto de gestionar la memoria de un dispositivo informático. El proceso de asignación de memoria a los programas que la solicitan.1​ La gestión de la memoria principal de una computadora es una tarea de suma importancia para el funcionamiento de la misma.

​

Los sistemas de memoria virtual separan las direcciones de memoria utilizadas por un proceso de las direcciones físicas reales, permitiendo la separación de procesos e incrementando la cantidad efectiva de memoria de acceso aleatorio utilizando la paginación. La calidad de la gestión de la memoria es crucial para las prestaciones del sistema.

​

El recolector de basura es la asignación y liberación automática de los recursos de memoria para un programa. La implementación suele ser a nivel del lenguaje de programación en contraposición a la gestión manual de memoria, que asigna y libera los recursos de memoria de una computadora de forma explícita.

​

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 manera posible el espacio disponible.

​

Para poder lograrlo, la operación principal que realiza es trasladar la información que deberá ser ejecutada por la unidad central de procesamiento o procesador, a la memoria principal. Actualmente esta administración se conoce como memoria virtual, porque no es la memoria física del procesador sino una memoria virtual que la representa.

​

Entre algunas ventajas, esta memoria permite que el sistema cuente con una memoria más extensa teniendo la misma memoria real, por lo que esta se puede utilizar de manera más eficiente. Y por supuesto, que los programas que son utilizados no ocupen lugar innecesario.

​

Las técnicas que existen para la carga de programas en la memoria son: partición fija, que es la división de la memoria libre en varias partes (de igual o distinto tamaño) y la partición dinámica, que son las particiones de la memoria en tamaños que pueden ser variables, según la cantidad de memoria que necesita cada proceso.

​

Entre las principales operaciones que desarrolla la administración de memoria se encuentran la reubicación, que consiste en trasladar procesos activos dentro y fuera de la memoria principal para maximizar la utilización del procesador; la protección, mecanismos que protegen los procesos que se ejecutan de interferencias de otros procesos; uso compartido de códigos y datos, con lo que el mecanismo de protección permite que ciertos procesos de un mismo programa que comparten una tarea tengan memoria en común.

2
bottom of page