educación, informática y demás

Memorias

Una memoria es un dispositivo que permite almacenar y recuperar información. Sabiendo que la tarea principal de un sistema informático es trabajar con información, las memorias son dispositivos muy importantes – Como todos, porque sabemos que para que funcione correctamente un sistema deben funcionar todos sus componentes.

Ya hemos estudiado los distintos tipos de memoria que tenemos en un sistema informático:

  1. Registros
  2. Memoria Caché
  3. Memoria principal
  4. Memoria secundaria
  5. Memoria auxiliar

Un registro es una memoria en la que solo cabe un dato o información. Suelen formar parte de componentes más complejos, como la CPU, un disco duro, tarjetas gráficas, tarjetas de sonido – en general casi cualquier tarjeta de expansión utiliza registros propios o internos. Un registro sería como una variable, es decir un dato que almacena una información que puede cambiar. Por ejemplo, el Program Counter o PC del microprocesador.

El PC almacena la dirección de la siguiente instrucción a ejecutar por la CPU, pero su valor, su contenido va cambiando. Eso es una variable, un dato cuyo valor puede variar. Otro ejemplo, la edad de una persona.

Para direccionar un registro se utiliza su nombre. Por ejemplo, PC o RI – Registro de Instrucción.

Los registros se basan en tecnología de semiconductores para almacenar la información por lo tanto son volátiles. De hecho, su función es guardar informaci´ón no persistente – recuerda, su capacidad es muy limitada: 32b, 64b, 128b…

Los registros tienen una capacidad demasiado limitada. Necesitamos almacenar información de mayor tamaño. Para eso tenemos la Memoria principal (si, ya lo se, nos hemos saltado las memorias Caché. Sin embargo para entender la caché primero vamos a entender la memoria principal).

La memoria principal está dividida en celdas, en cada celda se almacena una información. La cacidad o el tamaño de las celdas es el mismo para todas las celdas de la memoria y se denomina ancho de palabra o palabra. Tamaños típicos suelen ser 32b, 64b, 128b.. Para acceder a una celda concreta necesitamos su dirección. Cada celda tiene su propia dirección, que la memoria recibe a través del bus de direcciones.

La memoria principal es una memoria de semiconductores, como los registros, que necesita corriente eléctrica constanmente para almacenar la información. Por tanto, también, es una memoria volátil.

La memoria caché es similar a la memoria principal en cuanto a tecnología, semiconductores, y división en celdas de memoria. Sin embargo utiliza una tecnología que hace que el acceso a la información sea mucho más rápido que la memoria principal. No obstante, este tipo de memorias tienen menor capacidad que la memoria principal y son más caras.

El uso de memorias caché acelera el acceso a la información. La idea de usar este tipo de memorias es almacenar de forma temporal información en un dispositivo cuyo acceso sea más rápido. De hecho, estamos acostumbrados a escuchar el término caché en otros contextos informáticos. Por ejemplo, la caché de un navegador. La caché de un navegador no es más que un almacenamiento temporal de la información que ha descargado de Internet. Si se tiene qjue volver a acceder a dicha información, el navegador, en lugar de conectarse al sitio remoto y descargarla, la carga del disco duro.

Conocemos las características de cada uno de estos tipos de memoria así como la necesidad de contar con memorias secundarias y auxiliares.

Necesitamos memorias secundarias y auxiliares por:

  1. Son persistentes. No son volátiles y nos permiten almacenar información de manera permanente.
  2. Gran capacidad. Tienen una capacidad de almacenamiento mucho mayor que las memorias internas – registro, caché y memoria principal.
  3. Portabilidad. Permiten transportar los datos de forma sencilla.

Memorias de bloques

Las memorias secundarias y auxiliares son memorias de gran capacidad y no pueden dividirse, como la memoria principal o la caché, en celdas de memoria. De hecho, las primeras memorias auxiliares, los disquetes, por su tecnología no podían, físicamente, dividirse en un tamaño tan pequeño.

Este tipo de memorias están dividos en unos bloques llamados sectores. Como hemos dicho, primero por las limitaciones físicas, no se podían realizar operaciones de lectura o escritura de menos de 512 Bytes, es decir un sector. Hoy en día, tenemos unidades de almacenamiento con técnología SSD que posiblemente podrían permitir un acceso a datos a un nivel más pequeño, sin embargo si sigue trabajando con sectores debido a la gran capacidad de este tipo de unidades – se dificulta mucho tener que direccionar tantísima información si usaramos celdas.

Las operaciones de lectura y escritura sobre una memoria de sectores será de un sector como mínimo. Es decir, no se puede leer o escribir una cantidad inferior de datos de un sector (512 B) ni se puede direccionar.

A medida que fueron creciendo las capacidades de estas memorias, se hizo necesario agrupar estos sectores para asignarlos a ficheros, creando lo que se conoce como cluster o unidades de asginación.

Para información con más nivel de detalle sobre sistemas de ficheros puedes consultar la entrada Sistemas de ficheros en este sitio web.

Ficheros

Un fichero es un almacen de información que contiene un conjunto de información relacionada entre sí, que no tendría sentido por si sola, sin ser un cojunto.

Por ejemplo, pensad en un fichero que contiene un documento PDF. Toda la información que almacena ese fichero es el documento PDF, si cogemos aleatoriamente 128 Bytes del fichero, posiblemente esos 128 Bytes por si solos no tengan sentido, y si lo tuviera por casualidad, no tendría el mismo sentido que con el resto de la información.

Los ficheros se crearon para guardar información de manera permanente en una memoria secundaria o auxiliar. Por tanto, este fichero se guardará en una serie de sectores y aquí es donde aparece la necesidad de gestionar los sectores de un dispositivo de almacenamiento:

  1. Tenemos que conocer qué sectores de la memoria están libres para poderlos asignar a un nuevo fichero o a un fichero que crezca.
  2. Tenemos que conocer qué sectores y en qué orden contienen la información de un fichero.

Por ejemplo, si ejecutamos el programa bloc de notas – notepad – y escribimos nuestro nombre en él, estamos escribiendo en memoria principal. Hasta que no guardemos, estos datos están en la memoria del programa notepad.

Si decidimos guardar la información en un dispositivo de almcenamiento, entonces se creará un nuevo fichero que contendrá la información de este bloc de notas. ¿Quién crea ese fichero y le asigna los sectores necesarios? El sistema operativo utilizando algun mecanismo de asignación de sectores a ficheros y de gestión de ficheros, porque este fichero no existía.

Si nos fijamos, según la información del explorador de Windows, este fichero tiene un tamaño de 1KB, lo cual es muchísimo teniendo en cuenta la información que realmente hemos almacenado. «Javier» en ASCII debería ocupar 6 Bytes, sin embargo nos informan de que el fichero ocupa 1024 Bytes.

Vamos a ver las propiedades del fichero.

Particiones

Una partición es una porción de una memoria secundaria o auxiliar. No es más que una porción delimitada entre un sector de inicio de la partición y un sector de fin de la partición. Un trozo del disco.

Toda memoria secundaria o axuliar en la que queramos almacenar un sistema de ficheros tiene que tener al menos una partición.

Las particiones nos permiten dividir una memoria secundaria o auxiliar (a partir de ahora, hablaremos de disco duro para hacer referencia a estas memorias) en porciones distintas, pudiendo almacenar distintos sistemas de ficheros en cada una de estas particiones.

La ventaja de las particiones es que nos permiten almacenar información independiente una de otra en distintas particiones, que desde el sistema operativo se toman como unidades lógicas distintas, en el caso de Windows, o como directorios distintos en el caso de GNU/Linux.

De esta forma, el sistema operativo puede tratar estas particiones cómo si fueran discos duros diferentes.

Tabla de particiones

En algún sitio se debe almacenar la información mínima necesaria para conocer tanto las particiones que hay presentes en un disco duro, como su tamaño y demás información.

Para eso se utiliza (en el caso de MBR) la tabla de particiones que se almacena en el MBR.

La tabla de particiones es una estructura de datos basada en una tabla en la que, en cada fila, se guarda un registro con información de una partición. Para cada partición, cómo mínimo, se guarda el inicio y final de la partición, el tipo de partición que será y una serie de banderas o bits de estado que nos dan información extra sobre la partición.

La tabla de particiones que se almacena en el MBR del disco duro tan solo tiene cuatro entradas. Es decir, tan solo podríamos crear cuatro particiones en el MBR de un disco duro.

Al principio, esto parecía suficiente, pero con el paso del tiempo se hizo necesario poder crear más particiones en un disco duro. La solución fue crear dos tipos de particiones nuevas: la extendida y las lógicas.

Tipos de particiones

Primaria. Las particiones primarias son las que se almacenan en la tabla de particiones del MBR. Puede haber como máximo 4.

Extendida. Es un tipo de partición primaria, por tanto se almacena en la tabla de particiones. Cómo máximo puede haber una en un MBR. La partición extendida no contiene sistemas de ficheros, es decir no contiene ficheros ni directorios, contiene particiones lógicas.

Lógicas. Son un tipo de partición que se crean dentro de una partición extendida. Es necesario que exista previamente una partición extendida para poder crear una partición lógica. Se crearon con la finalidad de poder crear más de cuatro particiones con sistemas de ficheros en un sistema informático.

MBR

El MBR es una estructura de datos que se almacena en el sector 0 de todo disco duro. Este sector puede tener esta información o no tenerla, porque no está creado, pero se denomina siempre MBR.

El MBR contiene tres datos fundamentales: el programa de arramque, la tabla de particiones y el código mágico o firma de confirmación.

Programa de arranque: Se trata de un programa encargado de ejecutar o lanzar el sistema operativo, si lo hay, instalado en dicho disco duro.

Tabla de particiones: Estructura de datos que nos permite conocer qué particiones hay en el disco duro, su inicio, fin, tipo y tamaño.

Código mágico: Se trata de un valor numérico de 16b que sirve para comprobar si hay un MBR válido o inicializado en el sector 0. Si el MBR está inicializado, entonces el valor del código mágico será 0x55AA. Si no, tendrá otro valor.

El código mágico es un dato importante, porque permite a la BIOS o a cualquier herramienta del sistema operativo, saber si los datos que hay en el sector 0 de un disco contienen un MBR válido o bien contienen datos aleatorios (basura).

Caso práctico – Creando particiones

En este caso práctico vamos a craer una máquina virtual con un disco duro de 60 GB vacío. Vamos a utilizar un LiveCD de System Rescue CD para acceder a una herramienta de particionado de discos duros, en concreto gparted.

Nos aseguramos de insertar en la unidad óptica virtual la ISO de System Rescue CD. Ahora lanzamos la máquina virtual.

Elegimos la primera opción del menú.

Ele

Seleccionamos el mapa de teclado castellano con la opción 13 o es. Si por un casual se nos olvida o no nos da tiempo, podemos cargar el mapa de teclado desde el interprete de comandos más tarde con el comando loadkeys pasando como parémtro el código del mapa de teclado castellano es.

Ya se ha lanzado el sistema operativo LiveCD. Sin embargo, nos muestra una interfaz basada en comandos en modo texto. Si queremos lanzar la interfaz gráfica, ejecutamos el comando startx.

Lo que hemos hecho es lanzar el gestor de ventanas xorg con el comando startx. Este gestor de ventanas se va a encargar de proporcionarnos un entorno gráfico de usuario basado en ventanas. en este caso, es muy simple, pero cumple con su función para ser un livecd de recuperación de sistemas.

En la barra de tareas, se muestra un lanzador de la herramienta gparted.

También podemos ejecutar el programa gparted desde la terminal que está abierta en una ventana.

Al ejecutarlo nos mostrará la ventana de la aplicación con la que podremos gestionar particiones de memorias secundarias y auxiliares.

Si nos fijamos, gparted nos muestra un disco duro de 60GB, el que hemos conectado a esta máquina virtual cuando la creamos. Este disco aparece como unallocated y de hecho nos muestra un mensaje de advertencia (Warning). Este mensaje nos está indicando que no existe un MBR inicializado en el disco .

Podemos acceder a información del disco con el botón derecho y seleccionar la opción información del menú contextual.

Si leemos la información nos indica que el disco no tiene etiqueta recinocible. Esto es así, porque este disco no tiene un MBR válido. Gparted sabe que no tiene MBR válido, porque ha leido el sector 0 del disco y ha comprobado que el código mágino no se corresponde con el valor que debería tener (no es 0x55AA).

Así que lo primero que deberíamos hacer es crear un MBR válido para este disco.

Vamos a crear una nueva tabla de particiones en el dispositivo, para ello accedemos al menú Device y selecionamos Create Partition Table..

A continuación, gparted mostrará un cuadro de dialogo donde seleccionaremos el tipo de tabla de particiones a crear. En nuestro caso: msdos.

Una vez creada la tabla de particiones MSDOS ya no aparece el icono de advertencia. Sigue apareciendo como unallocated o no asignado, porque no hemos asignado ningún espacio del disco duro a ninguna partición.

Vamos a crear una nueva partición. Para ello podemos hacer clic con el botón secundario en el espacio unallocated (no asignado), ya sea en la parte superior o en la tabla del panel de información de particiones.

Esto mostrará un cuadro de dialogo en el que podemos determinar la información de la nueva partición a crear.

Vamos a crear una partición primaria de 10000 MiB. Si nos fijamos, en el tipo de partición no podemos seleccionar partición lógica. Esto es lógico, valga la redundancia, puesto que no tenemos todavía ninguna partición extendida dentro de la cual poder crear particiones lógicas.

Ahora aparece la informaciön de la nueva partición en el panel de particiones del dispositivo.

A continuación vamos a crear una partición primaria de 2048 MiB con sistema de ficheros ext4.

A continuación vamos a crear una partición primaria de 2048 MiB con sistema de ficheros FAT32.

A continuación vamos a crear una partición primaria de 2048 MiB con sistema de ficheros NTFS.

A continuación vamos a crear una partición primaria de 2048 MiB con sistema de ficheros ext3.

Esto nos va a dar un error. Ya tenemos cuatro particiones primarias, hemos alcanzado el límite de particiones primarias.

El fallo ha sido no haber planificado previamente esta situación. Ahora tenemos que eliminar la última partición primaria creada para poder crear una partición extendida y, dentro de la extendida, poder crear las dos particiones que nos quedan pero en este caso como particiones lógicas.

La nueva partición extendida, si queremos aprovechar todo el espacio de disco, debería ser del tamaño del disco no asignado.

Ahora creamos la partición extendida, que es un tipo de partición primaria.

Si nos fijamos, no podemos seleccionar el tipo de sistema de ficheros porque una partición extendida no guarda ficheros, guarda particiones lógicas.

También es importante asignarle todo el tamaño disponible si queremos crear partición lógicas que aprovechen todo el tamaño disponible del disco.

A continuación cremos las dos particiones que nos quedan, pero como particiones lógicas. Una partición primaria de 2048 MiB con sistema de ficheros ntfsy otro con sistema de ficheros ext3.