Gestión de Archivos y Discos: Técnicas y Ejemplos

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 78,71 KB

Gestión de Archivos y Discos

Problema sobre asignación:

Directa:

Se escriben los datos en los sectores seleccionados, cada fichero puede ocupar hasta un número de bloques. Simplicidad, fácil de compactar y facilidad en la desfragmentación. Limita el tamaño de los ficheros.

Contigua:

Cada fichero ocupa un conjunto de bloques consecutivos en el disco. Está definido por el primer bloque y su tamaño de bloques. Rapidez de acceso; los ficheros tienen limitación.

Enlazada:

Cada fichero es una lista enlazada de bloques. La entrada de directorio da el número del primer bloque que tiene un puntero que enlaza al siguiente. Buena gestión del espacio en HDD. Acceso directo es ruinoso.

Indexada:

Bloque indexado que indica un sector, que contendrá varios sectores donde estarán los datos. Acceso aleatorio, se implementa eficientemente. Buena gestión del espacio en disco duro. Con pocos bloques, el bloque de índice supone un desperdicio de espacio. Tamaño limitado por el número de punteros que caben en un bloque.

Particiones HDD:

Conceptos Clave:

  • Manejador de disco: Es una capa de software cuyo objetivo es ocultar toda la complejidad y todas las particularidades propias de un disco y de la controladora del disco y ofrecer al sistema de archivos una interfaz uniforme de dispositivo de bloques: leer_bloque o escribir_bloque.
  • Fichero: Unidad lógica de almacenamiento de información en memoria secundaria.
  • Técnicas de aceleración: Bloques y Caché de disco: Cargar en memoria una vez la tabla de ficheros maestra para no tener que leerla de disco cada vez que se abre o lee un fichero.
  • Sector: Unidad mínima de asignación de un dispositivo masivo (512 bytes HDD). Bloque es el conjunto consecutivo de sectores (potencias de 2). Fragmentación interna: son los espacios que se desperdician.

Visiones del HDD

Ejemplos de Código

Copia de datos entre ficheros

int fd_original;
int fd_destino ;

fd_original = open("origen",r);
fd_destino = open("destino",w);

int nLeidos, numALeer, nEscritos;
char mensajeLeido[10];

numALeer = 10 ;
nLeidos = read(fd_original,mensajeLeido,numALeer);

if (nLeidos > 0 )
nEscritos = write(fd_destino,mensajeLeido, nLeidos);

close(fd_original);
close(fd_destino);

Buscar un dato en un fichero

int fd;
char caracterBuscado = 'a';
char caracterLeido;
int numLeidos = 1;
fd = open(" /home/ficheroAnalizado.txt",r);

while( numLeidos >0){
 numLeidos = read(fd, &caracterLeido,1);
 if( caracterLeido == caracterBuscado ) {
printf("Has encontrado el carácter a en el fichero");
 }
}
close(fd)

Comparar dos ficheros

fd1 = open("/home/pepe/factura.txt");
fd2 = open("/home/pepe/otrafactura.txt")

while ((eof (fd1) == false) && (eof(fd2)==false)) {
 nbytes1 = read(fd1,&unbyte,1);
 nbytes2 = read(fd2,&otrobyte,1);

if ((nbytes1 != 1 ) || (nbytes2 != 1) || (unbyte != otrobyte)){
printf("Los Ficheros son distintos");
break; //OJO con usar Break
 }
}
if ((eof(fd1) && eof(fd2) && (unbyte == otrobyte) )
printf("Los ficheros son iguales");

Comprobar que un fichero tiene un tamaño mayor de 20 bytes

int fd;
fd = open("/home/datos/fichero.txt",r);
int datosALeer =21;
int datosLeidos ;

datosLeidos = read(fd,buffer,datosALeer);
if(datosLeidos < datosALeer){
printf("El fichero no tiene 21 bytes al menos");
}else{
printf("El fichero tiene al menos 21 bytes");
}

Entradas relacionadas: