18-02-2013, 10:11
Estoy estudiando para el final de Sistemas Operativos de este martes (19 de febrero), y estoy con unos ejercicios de Filesystem que me dan algunas dudas. Los posteo de a poco acá con mis reflexiones a ver qué les parece.
Final 28/02/2012 - Disponible aquí
Enunciado:
Se dispone de un disco de 7000 pistas y 4 platos de capacidad formateado para que trabaje con un sistema de archivos tipo UNIX cuyas características se describen a continuación:
Se pide:
Solución tentativa:
a) La fórmula que usaría es:
Tamaño del disco = Pistas * SectoresPorPista * TamañoDelSector
El problema es que no tengo el tamaño del sector. Intuyo que será de 2048 bytes = 2 kilobytes, ya que dice que el tamaño del bloque lógico y físico es de 2 Kb. Ahora, una cosa es un bloque y otra, un sector... pero puede que coincidan. Si estoy en lo cierto, entonces el tamaño sería:
Tamaño del disco = 7000 * 200 * 2 Kb = 2800000 Kb = 2734,375 Mb
b) El archivo pesa 37658907 bytes y como cada bloque es de 2 Kb, ocupa en total 18389 bloques (existe cierto grado de fragmentación interna).
Como el tamaño de la dirección del bloque es 48 bits = 6 bytes, entonces en cada bloque de 2048 bytes entran 341 punteros. Este número ya me parece sospechoso. Suponiendo que está bien, entonces:
cada i-nodo tiene 5 punteros directos, y con el indirecto simple se alcanzan 341 bloques. Es decir 5 + 341 = 346 en total. Quedan acceder entonces 18389 - 346 = 18043 bloques del archivo. Estos 18043 bloques necesitan de (18043/341)=53 lecturas. Se llega a hacer esta cantidad de lecturas accediendo entonces al puntero indirecto doble, y luego a 53 punteros indirectos. En total son:
Accesos = 18389 bloques del archivo + 1 bloque indirecto simple (el del i-nodo) + 1 bloque indirecto doble (el del i-nodo) + 53 bloques indirectos simples (del i-nodo doble anterior) = 18444 bloques en total
Como el i-nodo del archivo estaba en memoria y es necesario escribir la información de los punteros, ¿debo contar el bloque del i-nodo también, haciendo que el total de los bloques sea 18445? Todo esto, por supuesto, suponiendo que los 341 punteros por bloque fueron calculados correctamente.
c) Tamaño total del filesystem = (2^48) * 2 Kb = 524228 Tb (sí, terabytes).
Tamaño actual del filesystem = ???
Esta no tengo idea como se hace. En el final, por escribir algo, haría:
Tamaño actual del filesystem = 7000 i-nodos * (976 bytes del header + 5 punteros directos * 6 bytes + 1 punt indirecto simple * 6 bytes + 1 punt indirecto doble * 6 bytes + 1 punt indirecto triple * 6 bytes) = 7000 i-nodos * 1024 bytes = 7168000 bytes = 7000 Kb ---> Imposible, tiene que estar mal. Más que nada porque eso solamente contempla lo que ocupan los i-nodos en disco, pero no tiene en cuenta el tamaño de cada archivo.
d) Esta es muy teórica. Personalmente, elegiría un filesystem de asignación contigua con marcos iguales al tamaño de la página (1 Kb) y bloques de 4 Kb, fundamentando con el concepto de cercanía de referencia (basado en el principio de cercanía).
Final 28/02/2012 - Disponible aquí
Enunciado:
Se dispone de un disco de 7000 pistas y 4 platos de capacidad formateado para que trabaje con un sistema de archivos tipo UNIX cuyas características se describen a continuación:
- Tamaño de bloque (lógico/físico): 2 kilobytes
- Tamaño de la dirección de bloque: 48 bits
- Número de i-nodos: 7000
- Campos del i-nodo: a) atributos del archivo: 976 bytes. b) 5 punteros directos. c) 1 puntero indirecto simple. d) 1 punteros indirecto doble. e) 1 puntero indirecto triple.
Se pide:
- ¿Qué tamaño tiene el disco?
- Suponiendo que el i-nodo está en memoria y que un archivo ocupa en 37658907 bytes memoria (dixit). ¿Cuántos accesos a disco se necesitan para grabar este archivo por primera vez en el disco?
- Calcule el tamaño máximo que podría ocupar el filesystem de esta versión de Unix y el tamaño actual del filesystem.
- Si se trabaja con páginas en memoria de 1K y se desa armar una partición de swap para paginación por demanda, cuál sería el mejor filesystem y qué tamaño de bloque en disco debería tener. Justifique su respuesta.
Solución tentativa:
a) La fórmula que usaría es:
Tamaño del disco = Pistas * SectoresPorPista * TamañoDelSector
El problema es que no tengo el tamaño del sector. Intuyo que será de 2048 bytes = 2 kilobytes, ya que dice que el tamaño del bloque lógico y físico es de 2 Kb. Ahora, una cosa es un bloque y otra, un sector... pero puede que coincidan. Si estoy en lo cierto, entonces el tamaño sería:
Tamaño del disco = 7000 * 200 * 2 Kb = 2800000 Kb = 2734,375 Mb
b) El archivo pesa 37658907 bytes y como cada bloque es de 2 Kb, ocupa en total 18389 bloques (existe cierto grado de fragmentación interna).
Como el tamaño de la dirección del bloque es 48 bits = 6 bytes, entonces en cada bloque de 2048 bytes entran 341 punteros. Este número ya me parece sospechoso. Suponiendo que está bien, entonces:
cada i-nodo tiene 5 punteros directos, y con el indirecto simple se alcanzan 341 bloques. Es decir 5 + 341 = 346 en total. Quedan acceder entonces 18389 - 346 = 18043 bloques del archivo. Estos 18043 bloques necesitan de (18043/341)=53 lecturas. Se llega a hacer esta cantidad de lecturas accediendo entonces al puntero indirecto doble, y luego a 53 punteros indirectos. En total son:
Accesos = 18389 bloques del archivo + 1 bloque indirecto simple (el del i-nodo) + 1 bloque indirecto doble (el del i-nodo) + 53 bloques indirectos simples (del i-nodo doble anterior) = 18444 bloques en total
Como el i-nodo del archivo estaba en memoria y es necesario escribir la información de los punteros, ¿debo contar el bloque del i-nodo también, haciendo que el total de los bloques sea 18445? Todo esto, por supuesto, suponiendo que los 341 punteros por bloque fueron calculados correctamente.
c) Tamaño total del filesystem = (2^48) * 2 Kb = 524228 Tb (sí, terabytes).
Tamaño actual del filesystem = ???
Esta no tengo idea como se hace. En el final, por escribir algo, haría:
Tamaño actual del filesystem = 7000 i-nodos * (976 bytes del header + 5 punteros directos * 6 bytes + 1 punt indirecto simple * 6 bytes + 1 punt indirecto doble * 6 bytes + 1 punt indirecto triple * 6 bytes) = 7000 i-nodos * 1024 bytes = 7168000 bytes = 7000 Kb ---> Imposible, tiene que estar mal. Más que nada porque eso solamente contempla lo que ocupan los i-nodos en disco, pero no tiene en cuenta el tamaño de cada archivo.
d) Esta es muy teórica. Personalmente, elegiría un filesystem de asignación contigua con marcos iguales al tamaño de la página (1 Kb) y bloques de 4 Kb, fundamentando con el concepto de cercanía de referencia (basado en el principio de cercanía).