26 (especificación del proyecto final)

22

Upload: omaar-mustaine-rattlehead

Post on 15-Feb-2016

219 views

Category:

Documents


0 download

DESCRIPTION

ll

TRANSCRIPT

Page 1: 26 (Especificación Del Proyecto Final)
Page 2: 26 (Especificación Del Proyecto Final)

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

Page 3: 26 (Especificación Del Proyecto Final)

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

Page 4: 26 (Especificación Del Proyecto Final)

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

Page 5: 26 (Especificación Del Proyecto Final)

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)

Page 6: 26 (Especificación Del Proyecto Final)

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.

Page 7: 26 (Especificación Del Proyecto Final)

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)

Page 8: 26 (Especificación Del Proyecto Final)

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

Page 9: 26 (Especificación Del Proyecto Final)

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

Page 10: 26 (Especificación Del Proyecto Final)

Especificación del proyecto final (Edgardo A. Franco)10

Page 11: 26 (Especificación Del Proyecto Final)

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»

Page 12: 26 (Especificación Del Proyecto Final)

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»

Page 13: 26 (Especificación Del Proyecto Final)

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»*

Page 14: 26 (Especificación Del Proyecto Final)

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»

Page 15: 26 (Especificación Del Proyecto Final)

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»

Page 16: 26 (Especificación Del Proyecto Final)

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

Page 17: 26 (Especificación Del Proyecto Final)

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

Page 18: 26 (Especificación Del Proyecto Final)

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

Page 19: 26 (Especificación Del Proyecto Final)

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»*

Page 20: 26 (Especificación Del Proyecto Final)

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»

Page 21: 26 (Especificación Del Proyecto Final)

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

Page 22: 26 (Especificación Del Proyecto Final)

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