26 (especificación del proyecto final)
DESCRIPTION
llTRANSCRIPT
Especificación del proyecto
Emulación del dispositivo de almacenamiento secundario
Esquema del sistema de archivos a realizar
Árbol de nodos-i a implementar
Estructura de un bloque libre
Estructura de un bloque de datos ocupado
Estructura de un nodo-i simple
Estructura de un nodo-i doble
Observaciones de capacidad
Acceso a directorios
Confiabilidad del sistema de archivos
Superbloque
Interfaz de usuario
Especificación del proyecto final (Edgardo A. Franco)2
Construir un sistema de archivos tipo Unix e implementarlo
dentro de un archivo estándar.
Deberá de existir una interfaz tipo consola de Unix, que
permita el logeo del usuario al iniciar la sesión y el trabajo
en el sistema de archivos en modo texto.
El disco virtual será un archivo con el nombre
«file_system.dat» de 10MB.
El manejo de los directorios y archivos se basará en un
árbol de nodos-i, y el manejo de los bloques libres se
administrará con una cola de bloques libres.
Especificación del proyecto final (Edgardo A. Franco)3
El programa principal proporcionara diferentes comandos: init para inicializar (formatear) el disco virtual
infodisc para conocer el estado del disco
fragdisc para visualizar el estado de fragmentación del disco
mkdir para crear un directorio en el directorio actual
rmdir para (recursivamente) destruir un directorio del directorio actual
cd para entrar en un directorio
cd .. para regresar un directorio
ls para listar el contenido de un directorio (archivos y directorios)
info para conocer las propiedades de la carpeta actual
txtfile para crear un archivo de texto en el directorio actual. Su contenido será adquirido a partir del teclado.
rm para eliminar un archivo
mv para renombrar un archivo o moverlo a otro directorioEspecificación del proyecto final (Edgardo A. Franco)
4
Un sector de un disco duro, es la sección de
la superficie del mismo que corresponde al
área encerrada entre dos líneas radiales de
una pista.
Pueden almacenar una cantidad fija de bytes,
generalmente suele ser de 0.5 Kb hasta 64
Kb, pasando por todas las potencias de 2.
Esto se puede configurar al formatear una
unidad de almacenamiento, en la opción de
tamaño de unidad de asignación.
Especificación del proyecto final (Edgardo A. Franco)5
Pista (A)
Sector (B)
Sector de una pista (C)
Cluster (D)
Se simulara un disco duro común como dispositivo de
almacenamiento secundario del sistema de archivos. Para
ello se trabajará con un archivo que contendrá hasta 20,480
bloques de 512 bytes. (512 Bytes*20,480=10 MBytes).
Especificación del proyecto final (Edgardo A. Franco)6
File_system.dat
(10 MBytes)
Bloque 0 (512 bytes)
Bloque 1 (512 bytes)
Bloque 2 (512 bytes)
…
…
Bloque 20,480 (512 bytes)
Cada sector almacena una
cantidad fija de información.
El formateado típico de
este medio provee espacio
para 512 bytes (para discos
magnéticos) ó 2048 bytes
(para discos ópticos) de
información accesible para
el usuario por sector.
Esquema del archivo disco de 10 MB, con 20,479 nodos-i y/o
bloques de datos de 512 bytes cada uno.
Especificación del proyecto final (Edgardo A. Franco)7
Info
rmació
n d
el
sis
tem
a d
e a
rchiv
os
Superbloque512 Bytes
Nodo-i (
S o
D)
/ B
loque d
e d
ato
s
Bloque 1
(512 Bytes)
… Bloques de 512 Bytes
Nodo-i (
S o
D)
/ B
loque d
e d
ato
s
Bloque 20,479
(512 Bytes)
File_system.dat (10 MB)
Tipos de bloques de datos
Especificación del proyecto final (Edgardo A. Franco)8
Bloque libre
1. Apuntador a siguiente
bloque libre
Bloque de datos
ocupado
1. Apuntadores a nodos
superiores (Principal y
padre)
2. Datos
Tipos de nodos i
Especificación del proyecto final (Edgardo A. Franco)9
Nodo i simple
1. Apuntadores a nodos
superiores (Principal y
padre)
2. Cabecera de
Carpetas/Archivos
3. Control Nodos-i/Bloques
Usados
4. Apuntadores a Nodos-i
Simples/Bloques de Datos
5. Apuntadores a Nodos-i
Dobles
Nodo i doble
1. Apuntadores a nodos
superiores (Principal y
padre)
2. Control Nodos-i /Bloques
Usados
3. Apuntadores a Nodos-i
Simples/Bloques de Datos
Especificación del proyecto final (Edgardo A. Franco)10
Especificación del proyecto final (Edgardo A. Franco)11
Número de bloque «04 Bytes»
Apuntador al siguiente bloque libre «04 Bytes»
Espacio libre «504 Bytes»
TOTAL «512 Bytes»
typedef struct bloque_libre
{
unsigned int n_bloque; //Número de bloque «04 Bytes»
unsigned int apt_sig_libre; //Apuntador al siguiente bloque libre «04 Bytes»
char libre[504]; //bytes libres «504 Bytes»
}bloque_libre;
printf("\nBloque libre \t= %d bytes",sizeof(bloque_libre)); //El tamaño de la estructura
es de «512 Bytes»
Especificación del proyecto final (Edgardo A. Franco)12
Número de bloque «04 Bytes»
Apuntador al nodo-i principal (Propietario directo del archivo/carpeta) «04 Bytes»
Apuntador al nodo-i padre (Padre del nodo-i) «04 Bytes»
Datos «500 Bytes»
TOTAL «512 Bytes»
typedef struct bloque_datos
{
unsigned int n_bloque; //Número de bloque «04 Bytes»
unsigned int nodoi_principal; //Apuntador al nodo-i principal (Propietario directo del
archivo/carpeta) «04 Bytes»
unsigned int nodoi_padre; //Apuntador al nodo-i padre (Padre del nodo-i) «04 Bytes»
char datos[500]; //bytes de datos «500 Bytes»
}bloque_datos;
printf("\nBloque datos \t= %d bytes",sizeof(bloque_datos)); //El tamaño de la estructura es de
«512 Bytes»
Especificación del proyecto final (Edgardo A. Franco)13
Número de bloque «04 Bytes»
Apuntador al nodo-i principal (Propietario directo del archivo/carpeta) «04 Bytes»
Apuntador al nodo-i padre (Padre del nodo-i) «04 Bytes»
Nombre (String[40]) «41 Bytes»
Extensión (String[10]) «11 Bytes»
Tipo (Archivo ‘A’ / Carpeta ‘C’) «01 Byte»
Propietario (String[40]) «41 Bytes»
Fecha de Creación (String[24]) «25 Bytes»
Fecha de Modificación (String[24]) «25 Bytes»
Permisos (r – w - x) «03 Bytes»
Número de bloques en disco (x 512 = Tamaño en disco) «04 Bytes»
# Apuntadores simples ocupado «04 Bytes»
#Apuntadores dobles ocupados «04 Bytes»
35 Apuntadores a nodos-i simples «140 Bytes»
50 Apuntadores a nodos-i dobles «200 Bytes»
TOTAL «507 Bytes»*
Especificación del proyecto final (Edgardo A. Franco)14
typedef struct nodo_i_simple
{
unsigned int n_bloque; //Número de bloque «04 Bytes»
unsigned int nodoi_principal; //Apuntador al nodo-i principal (Propietario directo del archivo/carpeta) «04
Bytes»
unsigned int nodoi_padre; //Apuntador al nodo-i padre (Padre del nodo-i) «04 Bytes»
char nombre[41]; //Nombre (String[40]) «41 Bytes»
char extension[11]; //Extensión (String[10]) «11 Bytes»
char tipo; //Tipo (Archivo 'A' / Carpeta 'C') «01 Byte»
char propietario[41]; //Propietario (String[40]) «41 Bytes»
char fecha_creacion[25];//Fecha de Creación (String[24]) «25 Bytes»
char fecha_modifica[25];//Fecha de Modificación (String[24]) «25 Bytes»
char permisos[3]; //Permisos (r – w - x) «03 Bytes»
unsigned int num_bloques; //Número de bloques en disco (x 512 = Tamaño en disco) «04 Bytes»
unsigned int num_apt_simples; //# Apuntadores simples ocupado «04 Bytes»
unsigned int num_apt_dobles; //#Apuntadores dobles ocupados «04 Bytes»
unsigned int apt_simple[35]; //35 Apuntadores a nodos-i simples «140 Bytes»
unsigned int apt_doble[50]; //50 Apuntadores a nodos-i dobles «200 Bytes»
}nodo_i_simple;
printf("\nnodo-i simple \t= %d bytes",sizeof(nodo_i_simple)); //El tamaño de la estructura es de «512 Bytes»
Especificación del proyecto final (Edgardo A. Franco)15
Número de bloque «04 Bytes»
Apuntador al nodo-i principal (Propietario directo del archivo/carpeta) «04 Bytes»
Apuntador al nodo-i padre (Padre del nodo-i) «04 Bytes»
# Apuntadores simples ocupado «04 Bytes»
124 Apuntadores a nodos-i simples «496 Bytes»
TOTAL «512 Bytes»
typedef struct nodo_i_doble
{
unsigned int n_bloque; //Número de bloque «04 Bytes»
unsigned int nodoi_principal; //Apuntador al nodo-i principal (Propietario directo del archivo/carpeta) «04
Bytes»
unsigned int nodoi_padre; //Apuntador al nodo-i padre (Padre del nodo-i) «04 Bytes»
unsigned int num_apt_simples; //# Apuntadores simples ocupado «04 Bytes»
unsigned int apt_simple[124]; //124 Apuntadores a nodos-i simples «496 Bytes»
}nodo_i_doble;
printf("\nnodo-i doble \t= %d bytes",sizeof(nodo_i_doble)); //El tamaño de la estructura es de «512 Bytes»
Después de 35 bloques (datos/nodos-i simples), los
apuntadores dobles indirectos se utilizan para apuntar a hasta
50 bloques de disco, cada uno de estos es capaz de apuntar a
124 bloques de (datos/nodos-i simples).
Lo que nos lleva a concluir que para archivos menores a (500
bytes * 35 = 17.08 KB) basta con emplear los 35 apuntadores
simples, si el archivo es mayor es posible direccionar 6,200
bloques más de 500 bytes (6,200*504 bytes=2.95 Mbytes).
Por lo que el tamaño limite de un archivo será de 2.97 MB y el
máximo de subcarpetas y/o archivos dentro de una carpeta
podrá ser de 6,235.
Especificación del proyecto final (Edgardo A. Franco)16
Para el acceso a los directorios se emplearán los dos
métodos de acceso, el nombre de ruta absoluto y el
nombre de ruta relativa. Para este último se requiere
saber el directorio de trabajo actual.
Nombre absoluto: incluyendo todos los directorios,
/usr/edgardo/agenda.txt
Nombre relativo: referente al directorio de trabajo,
notas/hola.txt
Especificación del proyecto final (Edgardo A. Franco)17
Es posible verificar la integridad del sistema de archivos comparando
siempre los datos del supe bloque, la cola de bloques vacíos y los campos
de control de los nodo, además será posible visualizar la fragmentación del
disco.
Especificación del proyecto final (Edgardo A. Franco)18
Especificación del proyecto final (Edgardo A. Franco)19
Numero total de bloques «04 Bytes»
Número de bloques ocupados «04 Bytes»
Apuntador al primer bloque libre «04 Bytes»
Nombre del disco virtual (String[40]) «41 Bytes»
Tipo (Carpeta raíz ‘R’) «01 Byte»
Propietario (String[40]) «41 Bytes»
Fecha de Creación (String[24]) «25 Bytes»
Fecha de Modificación (String[24]) «25 Bytes»
Permisos (r – w - x) «03 Bytes»
Número de bloques en disco (x 512 = Tamaño en disco) «04 Bytes»
# Apuntadores simples ocupado «04 Bytes»
#Apuntadores dobles ocupados «04 Bytes»
35 Apuntadores a nodos-i simples «140 Bytes»
50 Apuntadores a nodos-i dobles «200 Bytes»
TOTAL «512 Bytes»*
Especificación del proyecto final (Edgardo A. Franco)20
typedef struct superbloque
{
unsigned int num_total_bloques; //Número total de bloques «04 Bytes»
unsigned int num_bloques_ocupados; //Número de bloques ocupados «04 Bytes»
unsigned int apt_primer_bloque_libre; //Apuntador al primer bloque libre «04 Bytes»
char nombre[41]; //Nombre (String[40]) «41 Bytes»
char tipo; //Tipo (Raíz ‘R') «01 Byte»
char propietario[41]; //Propietario (String[40]) «41 Bytes»
char fecha_creacion[25]; //Fecha de Creación (String[24]) «25 Bytes»
char fecha_modifica[25]; //Fecha de Modificación (String[24]) «25 Bytes»
char permisos[3]; //Permisos (r – w - x) «03 Bytes»
unsigned int num_bloques; //Número de bloques en disco «04 Bytes»
unsigned int num_apt_simples; //# Apuntadores simples ocupado «04 Bytes»
unsigned int num_apt_dobles; //#Apuntadores dobles ocupados «04 Bytes»
unsigned int apt_simple[35]; //35 Apuntadores a nodos-i simples «140 Bytes»
unsigned int apt_doble[50]; //50 Apuntadores a nodos-i dobles «200 Bytes»
}superbloque;
printf("\nsuperbloque \t= %d bytes",sizeof(superbloque)); //El tamaño de la estructura es de «512 Bytes»
El programa deberá proporcionar una interfaz tipo consola de Unix, desde la
cuál es posible introducir los comandos implementados y navegar en el
sistema de archivos.
Especificación del proyecto final (Edgardo A. Franco)21
Lunes 07 de junio de 2010 (No habrá prorrogas) Valor 70% Unidad 4
Para participar en expo-escom, deberá mostrar su funcionamiento antes del martes 25 de mayo (2 puntos extra sobre calificación final en caso de ser seleccionado).
Códigos y/o reportes copias de otros equipos automáticamente se dividirá en 3 la calificación.
Entrega del reporte a más tardar a las 23:59:59 hrs. del día 08 de junio de 2010 a través del sitio web.
Reporte y código fuente documentado en un archivo comprimido RAR, TAR JAR o GZIP.
No olvidar: Reporte claro apoyado de diagramas y explicaciones concisas, evitar ambigüedad.▪ Teoría sobre sistema de archivos de Unix y modificación respecto al implementado.
▪ Problema, solución, implementación de la solución, funcionamiento, errores y posibles mejoras.
Código documentado: Titulo, descripción, fecha, versión, autor.▪ (Funciones y Algoritmos: ¿Qué hace?, ¿Cómo lo hace?, ¿Qué recibe?, ¿Qué devuelve?, ¿Causa de
errores?).
Especificación del proyecto final (Edgardo A. Franco)22