Diseño de estructuras de datos y algoritmos para el sistema de archivos en memoria

Explique las estructuras de datos y los algoritmos que usaría para diseñar un sistema de archivos en memoria. Ilustre con un ejemplo en la lógica del código cuando sea posible.

Preguntado en: Amazon

Un sistema de archivos, en su versión más simple, consta de archivos y directorios. Cada Directorio contiene un conjunto de Archivos y Directorios. Dado que los archivos y los directorios comparten tantas características, los hemos implementado de manera que heredan de la misma clase, Entry.

Lógica principal implementada en Java

// Entry is superclass for both File and Directory
public abstract class Entry
{
    protected Directory parent;
    protected long created;
    protected long lastUpdated;
    protected long lastAccessed;
    protected String name;
  
    public Entry(String n, Directory p)
    {
        name = n;
        parent = p;
        created= System.currentTimeMillis();
        lastUpdated = System.currentTimeMillis();
        lastAccessed = System.currentTimeMillis();
    }
  
    public boolean delete()
    {
        if (parent == null)
            return false;
        return parent.deleteEntry(this);
    }
  
    public abstract int size();
  
    /* Getters and setters. */
    public long getcreationTime()
    {
        return created;
    }
    public long getLastUpdatedTime()
    {
        return lastUpdated;
    }
    public long getLastAccessedTime()
    {
        return lastAccessed;
    }
    public void changeName(String n)
    {
        name = n;
    }
    public String getName()
    {
        return name;
    }
}
  
// A class to represent a File (Inherits
// from Entry)
public class File extends Entry
{
    private String content;
    private int size;
  
    public File(String n, Directory p, int sz)
    {
        super(n, p);
        size = sz;
    }
    public int size()
    {
        return size;
    }
    public String getContents()
    {
        return content;
    }
    public void setContents(String c)
    {
        content = c;
    }
}
  
// A class to represent a Directory (Inherits
// from Entry)
public class Directory extends Entry
{
    protected Arraylist<Entry> contents;
  
    public Directory(String n, Directory p)
    {
        super(n, p);
        contents = new Arraylist<Entry>();
    }
    public int size()
    {
        int size = 0;
        for (Entry e : contents)
            size += e.size();
          
        return size;
    }
    public int numberOfFiles()
    {
        int count = 0;
        for (Entry e : contents)
        {
            if (e instanceof Directory)
            {
                count++; // Directory counts as a file
                Directory d = (Directory) e;
                count += d. numberOfFiles ();
            }
            else if (e instanceof File)            
                count++;            
        }
        return count;
    }
  
    public boolean deleteEntry(Entry entry)
    {
        return contents.remove(entry);
    }
  
    public void addEntry(Entry entry)
    {
        contents.add(entry);
    }
  
    protected ArrayList<Entry> getContents()
    {
        return contents;
    }
}

Alternativamente, podríamos haber implementado Directorio de manera que contenga listas separadas para archivos y subdirectorios. Esto hace que el método nurnberOfFiles() sea un poco más limpio, ya que no necesita usar el operador instanceof, pero nos prohíbe ordenar archivos y directorios de forma limpia por fechas o nombres.

Para la asignación de bloques de datos, podemos utilizar el vector de máscara de bits y la búsqueda lineal (ver «Diseño práctico del sistema de archivos») o árboles B+ (ver Referencia o Wikipedia).

Referencias:
https://www.careercup.com/question?id=13618661
https://stackoverflow.com/questions/14126575/data-structures-used-to-build-file-systems

Este artículo es una contribución del Sr. Somesh Awasthi . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *