Los métodos de asignación definen cómo se almacenan los archivos en los bloques de disco. Hay tres métodos principales de asignación de archivos o espacio en disco.
- Asignación Contigua
- Asignación vinculada
- Asignación indexada
La idea principal detrás de estos métodos es proporcionar:
- Utilización eficiente del espacio en disco.
- Acceso rápido a los bloques de archivos.
Los tres métodos tienen sus propias ventajas y desventajas, como se explica a continuación:
1. Asignación contigua
En este esquema, cada archivo ocupa un conjunto contiguo de bloques en el disco. Por ejemplo, si un archivo requiere n bloques y se le da un bloque b como ubicación inicial, entonces los bloques asignados al archivo serán: b, b+1, b+2,……b+n-1. Esto significa que dada la dirección del bloque inicial y la longitud del archivo (en términos de bloques requeridos), podemos determinar los bloques ocupados por el archivo.
La entrada de directorio para un archivo con asignación contigua contiene
- Dirección del bloque de salida
- Longitud de la porción asignada.
El archivo ‘correo’ de la siguiente figura parte del bloque 19 con una longitud de 6 bloques. Por tanto, ocupa 19, 20, 21, 22, 23, 24 manzanas.
- Tanto los accesos secuenciales como los directos son compatibles con esto. Para acceso directo, la dirección del bloque k-ésimo del archivo que comienza en el bloque b se puede obtener fácilmente como (b+k).
- Esto es extremadamente rápido ya que el número de búsquedas es mínimo debido a la asignación contigua de bloques de archivos.
Desventajas:
- Este método sufre de fragmentación tanto interna como externa. Esto lo hace ineficiente en términos de utilización de la memoria.
- Aumentar el tamaño del archivo es difícil porque depende de la disponibilidad de memoria contigua en una instancia particular.
2. Asignación de listas vinculadas
En este esquema, cada archivo es una lista enlazada de bloques de disco que no necesitan ser contiguos. Los bloques de disco se pueden dispersar en cualquier parte del disco.
La entrada del directorio contiene un puntero al bloque de archivo inicial y final. Cada bloque contiene un puntero al siguiente bloque ocupado por el archivo.
El archivo ‘jeep’ en la siguiente imagen muestra cómo se distribuyen aleatoriamente los bloques. El último bloque (25) contiene -1 que indica un puntero nulo y no apunta a ningún otro bloque.
ventajas:
- Esto es muy flexible en términos de tamaño de archivo. El tamaño del archivo se puede aumentar fácilmente ya que el sistema no tiene que buscar una porción de memoria contigua.
- Este método no sufre de fragmentación externa. Esto lo hace relativamente mejor en términos de utilización de la memoria.
Desventajas:
- Debido a que los bloques de archivos se distribuyen aleatoriamente en el disco, se necesita una gran cantidad de búsquedas para acceder a cada bloque individualmente. Esto hace que la asignación vinculada sea más lenta.
- No admite acceso aleatorio o directo. No podemos acceder directamente a los bloques de un archivo. Se puede acceder a un bloque k de un archivo atravesando k bloques secuencialmente (acceso secuencial) desde el bloque inicial del archivo a través de punteros de bloque.
- Los punteros requeridos en la asignación vinculada incurren en una sobrecarga adicional.
3. Asignación indexada
En este esquema, un bloque especial conocido como bloque de índice contiene los punteros a todos los bloques ocupados por un archivo. Cada archivo tiene su propio bloque de índice. La i-ésima entrada en el bloque de índice contiene la dirección de disco del i-ésimo bloque de archivos. La entrada del directorio contiene la dirección del bloque de índice como se muestra en la imagen:
- Esto admite el acceso directo a los bloques ocupados por el archivo y, por lo tanto, proporciona un acceso rápido a los bloques del archivo.
- Supera el problema de la fragmentación externa.
Desventajas:
- La sobrecarga de puntero para la asignación indexada es mayor que la asignación vinculada.
- Para archivos muy pequeños, digamos archivos que expanden solo 2 o 3 bloques, la asignación indexada mantendría un bloque completo (bloque de índice) para los punteros, lo que es ineficiente en términos de utilización de la memoria. Sin embargo, en la asignación vinculada perdemos el espacio de solo 1 puntero por bloque.
Para archivos que son muy grandes, es posible que el bloque de índice único no pueda contener todos los punteros.
Los siguientes mecanismos se pueden utilizar para resolver esto:
- Esquema vinculado: este esquema vincula dos o más bloques de índice para sostener los punteros. Cada bloque de índice contendría un puntero o la dirección del siguiente bloque de índice.
- Índice multinivel: en esta política, se utiliza un bloque de índice de primer nivel para apuntar a los bloques de índice de segundo nivel que, a su vez, apuntan a los bloques de disco ocupados por el archivo. Esto se puede extender a 3 o más niveles dependiendo del tamaño máximo del archivo.
- Esquema combinado: en este esquema, un bloque especial llamado Inode (Node de información) contiene toda la información sobre el archivo, como el nombre, el tamaño, la autoridad, etc., y el espacio restante de Inode se usa para almacenar las direcciones del bloque de disco que contienen el archivo real como se muestra en la imagen de abajo. Los primeros de estos punteros en Inode apuntan a los bloques directos, es decir, los punteros contienen las direcciones de los bloques de disco que contienen datos del archivo. Los siguientes punteros apuntan a bloques indirectos. Los bloques indirectos pueden ser indirectos simples, indirectos dobles o indirectos triples. Bloque indirecto únicoes el bloque de disco que no contiene los datos del archivo sino la dirección de disco de los bloques que contienen los datos del archivo. De manera similar, los bloques indirectos dobles no contienen los datos del archivo sino la dirección de disco de los bloques que contienen la dirección de los bloques que contienen los datos del archivo.
Este artículo es una contribución de Saloni Baweja . 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