Giter VIP home page Giter VIP logo

proyecto_ii_ssoo's Introduction

Proyecto II Sistemas Operativos

Participantes

  • Alfredo Manjón Canela
  • Jorge Caro Poza

Introducción

Desarrollo realizado en la rama development.

Este proyecto consiste en la elaboración de un simulador de un sistema de ficheros tipo Linux ext muy simplificado. En lugar de trabajar sobre una partición del disco, utilizaremos un fichero binario llamado particion.bin que contiene el sistema completo. Los bloques de este sistema concreto tienen un tamaño de 512 bytes, la partición ocupa 100 bloques, y su esquema es el que se describe a continuación. No hay bloque de arranque, como en un sistema ext2, en el que el bloque 0 se reserva para tal fin.

Desarrollo

Para el desarrollo se ha utilizado C sobre Linux (Ubuntu) para la creación de un proceso llamado simul_ext que lee el contenido del fichero binario particion.bin en un array de bytes en memoria y entra en un bucle infinito de procesamiento de comandos. El bloque 0 de particion.bin lo ocupa el superbloque y tiene la siguiente forma:

typedef struct {
 short int ETQ;
 short int Datos[8];
} T_LINEA_CACHE;/* Estructura del superbloque */
typedef struct {
 unsigned int s_inodes_count; /* inodos de la partición */
 unsigned int s_blocks_count; /* bloques de la partición */
 unsigned int s_free_blocks_count; /* bloques libres */
 unsigned int s_free_inodes_count; /* inodos libres */
 unsigned int s_first_data_block; /* primer bloque de datos */
 unsigned int s_block_size; /* tamaño del bloque en bytes */
 unsigned char s_relleno[SIZE_BLOQUE-6*sizeof(unsigned int)]; /* relleno a
0's*/
} EXT_SIMPLE_SUPERBLOCK;

Para simplificar el problema, en lugar de bitmaps, vamos a usar bytemaps o arrays de bytes para bloques e inodos. En el bytemap inodos, si el byte M vale 1, significa que ese inodo está ocupado, si vale 0 está libre. Lo mismo para el bytemap de bloques.

/* Bytemaps, caben en un bloque */
typedef struct {
 unsigned char bmap_bloques[MAX_BLOQUES_PARTICION];
 unsigned char bmap_inodos[MAX_INODOS]; /* inodos 0 y 1 reservados, inodo 2
directorio */
} EXT_BYTE_MAPS;

El bytemap de bloques tiene 100 elementos. Los 4 primeros están ocupados por el superbloque, los bytemaps, la lista de inodos y el directorio. Los 96 restantes son los bloque de datos. El bytemap de inodos tiene 28 elementos. Los inodos 0 y 1 están reservados aunque no se usan, y el 3 corresponde al directorio. En el bloque 3 está la lista de inodos. El inodo simplificado tiene la siguiente estructura:

/* inodo */
typedef struct {
 unsigned int size_fichero;
 unsigned short int i_nbloque[MAX_NUMS_BLOQUE_INODO];
} EXT_SIMPLE_INODE;

El inodo guarda el tamaño en bytes de información útil del fichero, si no está ocupado el valor de ese campo es 0. Además hay una lista de hasta 7 números de bloques de datos en los que se encuentra dicha carga útil. Si un fichero ocupa los bloques 5, 11 y 7, los elementos 0, 1 y 2 del array i_nbloque toman esos valores y el resto valen FFFFH. Para recuperar el contenido hay que concatenar los bloques 5, 11 y 7 en ese orden. La lista de inodos tiene 24 elementos. En el bloque 3 está el directorio. Este sistema puede guardar hasta 20 ficheros. Para cada fichero hay una entrada en la que figuran el nombre del fichero y el número de inodo. La entrada 0 del directorio, contiene el nombre ‘.’ y el número de inodo 2. El resto están vacías, y para ellas el valor de inodo es FFFFH.

typedef struct {
 char dir_nfich[LEN_NFICH];
 unsigned short int dir_inodo;
} EXT_ENTRADA_DIR;

Comandos soportados:

Comando Descripción
info Muestra la información del superbloque
bytemaps Muestra el contenido del bytemap de inodos y los 25 primeros elementos del bytemap
dir Lista todos los ficheros
rename Cambia el nombre de un fichero en la entrada correspondiente
imprimir Muestra el contenido del fichero especificado
remove Elimina el fichero especificado
copy Copia el fichero especificado en el primer parámetro y lo guarda en el fichero especificado en el segundo parámetro

proyecto_ii_ssoo's People

Contributors

jorgcp99 avatar

Stargazers

Alfredo Manjón Canela avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.