SISTEMAS OPERATIVOS II
Tercer curso Ingeniería Infomática.
Curso 2008-2009

Práctica 4: Procesos en UNIX: memoria compartida. Sistemas de ficheros.

El shell creará un sistema de ficheros sencillo (ver información el final del enunciado) en memoria compartida. Los comandos copy, move delete, stat, listfs y makefs acceden a dicho sistema de ficheros. El shell además debe mantener una lista (puede usarse una de las listas implementadas en prácticas anteriores) de las direcciones zonas de memoria compartida que tiene mapeadas en memoria. Para cada zona de emoria debe guardar además el tamaño. En los casos en que los comandos antes mencionados reciban un fichero como parámetro, la sintaxis sera:

nombre_de_fichero@identificacion_zona_memoria_compartida

La identificación de la zona de memoria compartida puede ser

a
por clave. En este caso HAY QUE MAPEARLA con shmget y shmat (si ya está mapeada se vuelve a mapear) Ejemplo:

b
por dirección. La dirección representa una dirección de memoria donde está mapeada un zona de memoria compartida Ejemplo:

c
Si no se especifica identificación de la zona de memoria compartida se entiende que es un fichero de disco.

Ejemplo:

Para distiguir si la identificación es una direccion de memoria o una clave se mirará primero si existe una zona de memoria compartida mapeada en dicha dirección (comprobando la lista) en caso contrario se asumirá que representa una clave y se procederá a mapearla con shmget y shmat. Siempre que se mapee una zona de memoria compartida con shmat, se añadirá la dirección obtenida a la lista de direcciones de memoria compartida. Tengase en cuenta que es posible (e incluso muy probable) que la misma zona de memoria esté mapeada varias veces en el espacio de direcciones del proceso

Se añadirán al intérprete de comandos de las prácticas anteriores las siguientes funciones

EJEMPLOS

NOTAS SOBRE EL SISTEMA DE FICHEROS EN MEMORIA COMPARTIDA

El sistema de ficheros ha de usar asignación contigua y está definido por las estructuras que se muestran a continuación (deben usarse en el código) El miembro desplazamiento de los datos de un fichero se mide respecto al comienzo de la zona de datos del sistema de ficheros (es 0 para el fichero cuyos datos están al principio del area de datos). El miembro tamano del sistema de ficheros es el tamanño TOTAL (el de la zona de memoria compartida donde está dicho sistema) e incluye las estructuras de dicho sistema de ficheros. El miembro elibre es el espacio disponible para datos de los ficheros, es decir tamano menos lo que ocupen las estructuras del sistema de ficheros y ls datos de los ficheros en él contenidos en un instante dado. nfich es el número de ficheros en el sistema de ficheros: 0 representa que está vacio. Los miembros reservado son de uso libre, pero el resto de los items deben tener información coherente de manera que la información que se almacene los miembros em reservados no sea imprescidible para el manejo del sistema de ficheros.

#define SFM_MARCA 0x0a2308ea   /*marca del sistema de ficheros*/
#define SFM_MAXFICH  128    /*numero maximo de ficheros*/
#define SFM_MAXNOMBRE 256   /*tamano maximo del nombre en este sistea ficheros*/
#define SFM_RESERVADOS 8    

struct SB { /*info del sistema de ficheros*/
  unsigned marca; /*la marca, debe se SFM_MARCA*/
  unsigned tamano; /*tamano total sistema de ficheros*/
  unsigned elibre; /*espacio libre en sistema de ficheros*/
  unsigned nfich;  /*numero de ficheros en el sistema de ficheros*/
  unsigned reservado[SFM_RESERVADOS]; /*por si se quieren usar mas cosas*/
  };
  
struct NODOFICH{  /*informacion de un fichero */
  char nombre[SFM_MAXNOMBRE]; /*el nombre*/
  mode_t modo;                /*los permisos*/
  uid_t uid;                  /*propietario original*/
  off_t tamano;               /*tamano en bytes*/
  time_t fecha;               /*fecha en que se ha copiado al SF*/
  off_t desplazamiento;       /*desplazamiento a sus datos desde el principio*/
  unsigned enuso;             /*0 esta estructura NO contiene info de un fichero*/
  unsigned reservado [SFM_RESERVADOS];
  };
  
struct SF {    /*el sistema de ficheros*/
    struct SB sb;              
    struct NODOFICH n[SFM_MAXFICH]; /*los nodos de los ficheros*/
    unsigned reservado[SFM_RESERVADOS];
    char datos[1];        /*el area de datos */
    };

FORMA DE ENTREGA

Como en las prácticas anteriores

FECHA DE ENTREGA VIERNES 12 JUNIO 2009