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