Ejercicios de ficheros (Con soluciones)

Anuncio
Problemas de Sistemas de Archivo
SO2
Abril 2.000
PROBLEMAS RESUELTOS
Cuestión 1
Dado un disco de cabeza móvil con 200 cilindros, numerados de 0 a 199 se considera que:
Actualmente sirve una solicitud en el cilindro 143.
Previamente se solicitó el acceso al cilindro 125.
La cola de solicitudes se mantiene en orden FIFO: 86, 147, 91, 177, 94, 150, 102, 175, 130.
Se pide:
Determinar el movimiento total de la cabeza necesario para satisfacer estas solicitudes con los siguientes algoritmos
de planificación de disco:
– FCFS.
– SSTF.
– SCAN.
– LOOK.
– C-SCAN.
Cuestión 2
Dado un disco de cabeza móvil con 200 cilindros, numerados de 0 a 199 y con un tiempo promedio de acceso (rotación
+ transferencia) de 20 unidades de tiempo se trata de determinar el tiempo total de servicio que se requiere para atender
las siguientes peticiones:
(0,30), (40,10), (45,40), (60, 60), (100,50), (120, 5), (140, 100), (160, 120)
donde la primera componente de cada petición se refiere al instante de tiempo en el que se efectúa dicha petición y la
segunda componente indica el cilindro al que se pretende acceder. Se considera que el tiempo de posicionamiento entre
cilindros contiguos es igual a 1 unidad de tiempo.
Aplicar para el cálculo del tiempo total de servicio los siguientes algoritmos:
FCFS.
SSTF.
SCAN.
LOOK.
1
C-SCAN.
Nota: El cabezal del disco se encuentra inicialmente posicionado en el cilindro 0 y el servicio de las peticiones se
realiza en el sentido de números de cilindro crecientes.
Cuestión 3
Dada una estructura de disco de doble cara con 80 cilindros y 18 sectores por pista y un tamaño de sector de 512 bytes,
se pide:
Determinar la capacidad del disco.
Dada la correspondencia entre sectores fı́sicos y lógicos, se trata de determinar la dirección fı́sica (cilindro, cabeza,
sector) del número de sector lógico 1234.
De forma análoga se desea determinar cual es el número de sector lógico asociado a la dirección fı́sica (47, 1, 15).
Cilindro
0
........
0
0
........
0
1
........
........
79
Cabeza
0
........
0
1
........
1
0
........
........
1
Sector
0
........
17
0
........
17
0
........
........
17
Sector lógico
0
.............
17
18
.............
35
36
.............
.............
2879
Cuestión 4
Dado un disco de 20 Mb de capacidad total con los siguientes parámetros:
Clusters (bloques) de tamaño 1K. Sectores de 512 bytes.
Números de bloque de 16 bits.
Se pide:
Calcular el número de bloques necesarios para la gestión de bloques libres mediante:
– Lista enlazada.
– Mapa de bits.
Determinar la estructura del disco si lo utilizamos enteramente para MS-DOS:
– Calcular el número de sectores reservados a la FAT y su copia.
– Calcular el número de sectores reservados para el directorio raı́z (considerar un máximo de 512 entradas).
– Determinar el número de clusters de datos disponibles.
Calcular el mejor y peor caso en el número de accesos a bloques de disco para leer el 33
MS-DOS situado en el directorio raı́z en el siguiente caso:
– Suponiendo que la caché de la FAT en memoria es 1K.
2
cluster de un fichero
Realizar el mismo cálculo si el fichero se encuentra en el directorio \PRUEBA que contiene 33 entradas en total.
NOTA: En los dos últimos apartados de esta cuestión 4 se asumirá que las lecturas en la FAT y en el directorio raı́z
obtienen un bloque entero, en lugar de un solo sector.
Cuestión 5
Determinar el tamaño máximo teórico (sin tener en cuenta el tamaño real que tendrá el dispositivo sobre el que deba
residir el fichero) de un fichero UNIX, especificando los bloques direccionados con cada tipo de puntero. Los parámetros
corresponden a los siguientes valores:
Punteros a zonas de datos de 32 bits.
Tamaño de bloque 1K (1 zona = 1 bloque).
Estructura de nodo-i:
– 10 punteros directos.
– 1 puntero indirecto.
– 1 puntero indirecto doble.
– 1 puntero indirecto triple.
Realizar el mismo cálculo para un fichero en MINIX con los siguientes parámetros:
Punteros a zonas de datos de 16 bits.
Tamaño de bloque 1K (1 zona = 1 bloque).
Estructura de nodo-i:
– 7 punteros directos.
– 1 puntero indirecto.
– 1 puntero indirecto doble.
Cuestión 6
Determinar la estructura de un disco de 20 Mb en MINIX con los siguientes parámetros:
Punteros a zonas de datos de 16 bits.
Tamaño de bloque 1K (1 zona = 1 bloque).
Tamaño de nodo-i de 32 bytes.
Número máximo de nodos-i: 512.
Se pide:
Especifique claramente todas las estructuras de datos que forman el sistema de archivos y los bloques que ocupan.
En caso de resultar dañada la estructura del mapa de bits de zonas, piense la forma de reconstruirla con la información de la que se dispone en el resto de estructuras del sistema de archivos (se supone que éstas se conservan
inalteradas).
3
Cuestión 7
Suponga que se ha desarrollado una versión de MINIX en la cual el tamaño del bloque se ha cambiado a 128 bytes (1
bloque = 1 zona).
Suponga también que se dispone de un disco duro (/dev/hd5) formateado con bloques de 128 bytes, con capacidad
para almacenar 10240 bloques con un número máximo de ficheros posibles igual a 127.
En este disco existen tres directorios:
Directorio /
Directorio /bin
Directorio /lib
Con 10 entradas (todas las entradas incluidas)
Con 16 entradas (ı́dem)
Con 20 entradas (ı́dem)
La longitud de todos los ficheros es de 768 bytes, salvo dos ficheros, /bin/mediano y /bin/grande cuyas
longitudes respectivas son 1024 bytes y 10240 bytes.
SE PIDE:
1. Cómo está estructurado el disco.
2. Número de bloques para el mapa de nodos-i.
3. Número de bloques para el mapa de zonas.
4. Número de bloques de nodos-i.
5. Número total de zonas de datos.
6. Número de nodos-i utilizados.
7. Número de zonas utilizadas para:
(a) Contener datos convencionales de ficheros regulares.
(b) Contener entradas de directorios.
(c) Contener referencias a otros bloques.
Justifique adecuadamente sus respuestas.
Cuestión 8
En el sistema operativo MINIX se introducen los siguientes cambios en el diseño del sistema de ficheros:
El tamaño de bloque se reduce a 32 bytes.
El tamaño de una entrada de directorio se reduce a 8 bytes (2 bytes para el número de nodo-i y 6 para el nombre del
fichero).
El tamaño del nodo-i se reduce a 16 bytes. Los primeros 8 bytes se emplean para almacenar información general
(atributos de fichero), representada en la figura por XX, y los 8 bytes restantes para almacenar los punteros a las
zonas pertenecientes al fichero: dos punteros directos, un indirecto simple y un indirecto doble, tal y como muestra
la figura:
XX
número de zona 0
número de zona 1
indirecto
indirecto doble
4
A continuación se indican los contenidos de los bloques de un dispositivo de bloques que contiene un sistema de
ficheros MINIX. El tamaño de este dispositivo de bloques es de 32K y el número máximo de ficheros que puede contener
es 99. Únicamente se han representado los contenidos relevantes para la resolución del problema, indicándose con un –
los campos vacı́os. La leyenda superior B- i indica que el número de bloque es el i, y el resto indica el contenido del
bloque.
B- 7
00
0
0
0
0
XX
57
–
–
–
B- 8
XX
58
–
–
–
XX
59
60
61
–
B- 57
1
1
2
3
.
..
bin
users
B- 62
12
13
14
15
dso06
dso07
dso08
dso09
B- 15
XX
64
–
–
–
XX
88
–
–
–
B- 58
2
1
4
5
B- 63
16
17
18
19
B- 17
XX
65
66
67
68
XX
90
–
–
–
B- 61
62
63
–
–
–
–
–
–
–
–
–
–
–
–
–
–
B- 67
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
B- 68
85
86
87
–
–
–
–
–
–
–
–
–
–
–
–
–
.
..
cc
mined
B- 59
3
1
6
7
.
..
dso00
dso01
B- 60
8
9
10
11
dso02
dso03
dso04
dso05
dso10
dso11
dso12
dso13
B- 64
16
3
20
–
.
..
msh.c
–
B- 88
17
3
21
–
.
..
msh.c
–
SE PIDE:
1. Obtener el árbol de directorios contenido en el dispositivo de bloques.
2. Indicar, ordenadamente, los números de bloque a los que se ha de acceder al ejecutar la llamada
open("/users/dso11/msh.c", O RDONLY)
y el motivo por el que se accede a dichos bloques.
3. Indicar el tamaño en bloques del fichero /users/dso10/msh.c.
NOTA: En esta cuestión se asume que el nodo-i n 0 ocupa espacio en el área de nodos-i. En la práctica este nodo-i
no utiliza espacio en ningún sistema UNIX, ya que el valor cero se utiliza para indicar que una entrada de directorio ha
sido borrada. Sin embargo, en este problema los cálculos serán más sencillos si asumimos que también ocupará espacio.
Cuestión 9
Se desea diseñar un sistema de archivo UNIX para unos discos de 320 Kb cuyos bloques van a ser de 1 Kb (1 zona =
1 bloque).
5
SE PIDE:
1. ¿ Cuál podrá ser el tamaño mı́nimo de un puntero a zona ?
2. ¿ Cuántos punteros podrán ubicarse en una misma zona ?
3. Si se necesita 32 bytes por cada nodo-i y de ellos 16 pueden destinarse a punteros a zona, ¿ qué esquema de los
siguientes es preferible y por qué ?
(a) Que todos los punteros sean directos.
(b) Todos los punteros directos, excepto un puntero indirecto simple.
(c) Todos los punteros directos, excepto dos punteros indirectos simples.
(d) Todos los punteros directos, excepto un puntero indirecto simple y otro indirecto doble.
Cuestión 10
Se tiene un dispositivo de almacenamiento de 32 Kb, con bloques de 512 bytes (1 zona = 1 bloque). Este dispositivo
va a ser inicializado para poder utilizar un sistema de archivo similar al de MINIX con entradas de directorio de 16 bytes,
un máximo de 31 archivos y nodos-i de 16 bytes de los cuales 60 bits pueden dedicarse a punteros directos a zona. Se
supone que el tamaño de los punteros a zona es el mı́nimo posible.
SE PIDE:
1. Decidir cómo quedará estructurado el disco. Es decir, cuántos bloques se dedican a cada una de las estructuras que
mantiene el sistema de archivo.
2. ¿ Cuál será el tamaño máximo de un archivo ?
3. Asumiendo que no se permite crear enlaces fı́sicos, ¿ cuántas entradas podrá tener como máximo un directorio ?
¿ Cuántos bloques podrá llegar a ocupar ?
4. ¿ Cuántos bloques pueden llegar a quedar libres si se crea el máximo número de archivos posible, pero todos ellos
con tamaño mı́nimo ?
5. Determinar cómo quedarán los mapas de bits de nodos-i y de zonas después de realizar las acciones que se citan
a continuación (y en ese orden). Se supone que un 1 en el mapa de bits indica que el elemento representado está
libre. Además, se supone que siempre se utiliza el nodo-i o zona libre con número más bajo.
Comentar también qué bloques tiene asignados cada archivo.
Las acciones son las siguientes:
Inicializar el disco.
Crear un directorio /dir1.
Crear un directorio /dir2.
Crear y escribir un archivo /dir1/a de 2.000 bytes.
Borrar el directorio /dir2.
Crear y escribir un archivo /dir1/b de 4.900 bytes.
Crear y escribir un archivo /dir1/c de 3.500 bytes.
Borrar el archivo /dir1/a.
Añadir datos al archivo /dir1/c. Se añade 1 Kb al final del archivo.
6. Determinar el contenido de los archivos de tipo directorio que hayan quedado tras realizar las acciones citadas en
el punto anterior.
6
Cuestión 11
Dado un disco de cabezal móvil con 100 cilindros, numerados del 0 al 99 donde:
Actualmente se está sirviendo una petición sobre el cilindro 50.
La petición anterior fue realizada sobre el cilindro 30.
Quedan las siguiente peticiones por atender: 81, 23, 95, 70 y 48.
SE PIDE:
1. Determinar cuántos cilindros se recorrerán para servir estas peticiones utilizando: SSTF y LOOK.
2. Decidir si alguna de las dos estrategias anteriores es la óptima. En caso negativo, describir una estrategia óptima
para el caso en que se conozcan las peticiones a atender. Decidir si esta estrategia sigue siendo válida si llegan más
peticiones mientras se están sirviendo las ya encoladas.
Cuestión 12
Se tiene un sistema de archivo UNIX sobre un dispositivo con los directorios que a continuación se describen y donde
sólo se han usado los nodos-i que aparecen en tales entradas de directorio.
Además, se supone que cuando se necesita crear un nuevo archivo, este utiliza el nodo-i libre con el número más
pequeño posible.
1
1
2
4
5
6
.
..
users
unix
dev
bin
2
1
10
12
.
..
felipe
alfonso
5
1
11
13
11
.
..
tty0
tty1
console
6
1
20
21
22
23
.
..
ls
cat
less
sh
10
2
23
25
.
..
mysh
ed
12
2
.
..
SE PIDE:
1. Dibujar la estructura de directorios.
2. Determinar cómo quedarán, dando su contenido, los archivos tipo directorio tras realizar sobre el sistema los siguientes mandatos:
$
$
$
$
$
$
$
$
cp
ln
mv
rm
rm
ln
cp
mv
/users/felipe/mysh /users/alfonso/sh
/users/alfonso/sh /users/alfonso/bash
/users/felipe/ed /bin
/dev/tty0
/bin/sh
-s /unix /users/alfonso/sistema
/users/felipe/* /users
/bin/cat /unix
Nota: Se supone que el usuario que efectúa estas operaciones posee los derechos de acceso necesarios para que
ninguna de ellas provoque un error.
7
SOLUCIONES
Cuestión 1
1. Algoritmo FCFS: Las peticiones se sirven en orden de llegada.
Cil. actual
143
86
147
91
177
94
150
102
175
Cil. a servir
86
147
91
177
94
150
102
175
130
Desplaz.
143 - 86 =
147 - 86 =
147 - 91 =
177 - 91 =
177 - 94 =
150 - 94 =
150 - 102 =
175 - 102 =
175 - 130 =
TOTAL:
(cil.)
57
61
56
86
83
56
48
73
45
565
2. Algoritmo SSTF: Se sirve primero aquella petición que implique un menor desplazamiento. El asterisco (*) simboliza la posición actual de la cabeza de lectura/escritura. El cilindro a servir aparece subrayado.
Cil. actual
143
147
150
130
102
94
91
86
175
Cilindros pendientes
86, 91, 94, 102, 130, *, 147, 150, 175, 177
86, 91, 94, 102, 130, *, 150, 175, 177
86, 91, 94, 102, 130, *, 175, 177
86, 91, 94, 102, *, 175, 177
86, 91, 94, *, 175, 177
86, 91, *, 175, 177
86, *, 175, 177
*, 175, 177
*, 177
Desplaz.
147 - 143 =
150 - 147 =
150 - 130 =
130 - 102 =
102 - 94 =
94 - 91 =
91 - 86 =
175 - 86 =
177 - 175 =
TOTAL:
(cil.)
4
3
20
28
8
3
5
89
2
162
3. Algoritmo SCAN: Ya que el último cilindro servido fue el 125 y nos encontramos en el 143, supondremos que la
dirección de servicio es ascendente. Se realizan dos pasadas, la primera ascendente en la que servimos todas los
cilindros entre la posición actual y el final del disco (cilindro 199). Tras esto partimos del cilindro 199 en dirección
descendente y servimos todos los cilindros pendientes.
Direc. servicio
Ascendente
Descendente
Cilindros servidos
147, 150, 175 y 177
130, 102, 94, 91 y 86
Desplaz.
199 - 143 =
199 - 86 =
TOTAL:
(cil.)
56
113
169
4. Algoritmo LOOK: Igual que el anterior, pero al servir en orden ascendente no llegamos al final del disco sino que
invertimos el sentido de servicio al llegar al cilindro 177.
Direc. servicio
Ascendente
Descendente
Cilindros servidos
147, 150, 175 y 177
130, 102, 94, 91 y 86
8
Desplaz.
177 - 143 =
177 - 86 =
TOTAL:
(cil.)
34
91
125
5. Algoritmo SCAN circular (C-SCAN): Suponemos sentido de servicio ascendente. Al llegar al último cilindro del
disco (el 199), volvemos al cilindro 0 sin servir ninguna petición y desde allı́ iniciamos de nuevo el servicio en
orden ascendente.
Direc. servicio
Ascendente
Descendente
Ascendente
Cilindros servidos
147, 150, 175 y 177
Ninguno
86, 91, 94, 102 y 130
Desplaz.
199 - 143 =
199 - 0 =
130 - 0 =
TOTAL:
(cil.)
56
199
130
385
Cuestión 2
Emplearemos las siguientes abreviaturas:
CA: Cilindro actual.
CS: Cilindro a servir.
Desp: Desplazamiento en cilindros desde el actual al que debe ser servido.
TS: Tiempo de servicio del cilindro a servir. Incluye posicionamiento, rotación y transferencia. Su valor será igual,
en este problema, a:
!#"$&%
('
)*+-,/.
1. Algoritmo FCFS:
Inst.
0
50
90
140
180
210
275
390
430
CA
0
30
10
40
60
50
5
100
120
Cola petic.
30
10, 40
40, 60
60, 50, 5, 100
50, 5, 100, 120
5, 100, 120
100, 120
120
Vacı́a
CS
30
10
40
60
50
5
100
120
-
Desp
30
20
30
20
10
45
95
20
-
TS
50
40
50
40
30
65
115
40
-
Inst.
0
50
80
120
150
210
235
350
390
CA
0
30
40
60
50
10
5
100
120
Cola petic.
*, 30
10, *, 40
10, *, 60
5, 10, 50, *
5, 10, *, 100
5, *, 100, 120
*, 100, 120
*, 120
Vacı́a
CS
30
40
60
50
10
5
100
120
-
Desp
30
10
20
10
40
5
95
20
-
TS
50
30
40
30
60
25
115
40
-
2. Algoritmo SSTF:
3. Algoritmo SCAN: Suponemos que una vez se ha programado una operación SEEK sobre el controlador de disco no
hay manera de abortarla. Además, cuando no queden peticiones en el sentido actual, se programa un SEEK hasta
el final del disco en ese sentido.
9
Inst.
0
50
80
120
259
358
398
468
528
553
CA
0
30
40
60
199
120
100
50
10
5
Cola petic.
0 , 30
10, 0 , 40
10, 0 , 60
5, 10, 50, 0
5, 10, 50, 100, 120,
5, 10, 50, 100, 1
5, 10, 50, 1
5, 10, 1
5, 1
Vacı́a
CS
30
40
60
199
120
100
50
10
5
1
Desp
30
10
20
139
79
20
50
40
5
-
TS
50
30
40
139
99
40
70
60
25
-
4. Algoritmo LOOK:
Inst.
0
50
80
120
150
210
235
350
390
CA
0
30
40
60
50
10
5
100
120
Cola petic.
0 , 30
10, 0 , 40
10, 0 , 60
5, 10, 50, 1
5, 10, 1 , 100
5, 1 , 100, 120
0 , 100, 120
0 , 120
Vacı́a
CS
30
40
60
50
10
5
100
120
-
Desp
30
10
20
10
40
5
95
20
-
TS
50
30
40
30
60
25
115
40
-
5. Algoritmo C-SCAN: Suponemos que una vez se ha programado una operación SEEK sobre el controlador de disco
no hay manera de abortarla. Además, cuando no queden peticiones en el sentido actual, se programa un SEEK hasta
el final del disco en ese sentido.
Inst.
0
50
80
120
259
458
483
508
568
638
678
CA
0
30
40
60
199
0
5
10
50
100
120
Cola petic.
0 , 30
10, 0 , 40
10, 0 , 60
5, 10, 50, 0
5, 10, 50, 100, 120, 1
0 , 5, 10, 50, 100, 120
0 , 10, 50, 100, 120
0 , 50, 100, 120
0 , 100, 120
0 , 120
Vacı́a
CS
30
40
60
199
0
5
10
50
100
120
-
Desp
30
10
20
139
199
5
5
40
50
20
-
TS
50
30
40
139
199
25
25
60
70
40
-
Cuestión 3
1. Capacidad del disco. Tendremos que averiguar cuantos sectores tiene el disco y después multiplicar la cifra
obtenida por el tamaño del sector. Ası́:
Núm. sectores
2.880
=
=
Núm. caras
2
*
*
Núm. cilindros
80
*
*
Sectores / pista
18
La capacidad del disco en Kb será: 2.880 * 0.5 = 1.440 Kb ya que el tamaño de sector es de medio Kb.
10
2. Dirección fı́sica del bloque lógico 1234. Suponemos un solo sector por bloque.
Las direcciones fı́sicas tienen la siguiente estructura:
(núm. cilindro, núm. cara, núm. sector)
Además, la numeración se sigue del siguiente modo: hasta que no se han numerado todos los sectores de una cara
no se pasa a la siguiente cara del mismo cilindro y hasta que no se hayan numerado todas las caras de un cilindro
no se pasa al siguiente.
Por tanto, para obtener la dirección fı́sica efectuaremos lo siguiente:
(a) Dividiremos la dirección lógica por el número de sectores por pista. O sea:
1234 div 18 = 68
1234 mod 18 = 10
Esto quiere decir que con la dirección lógica 1234 se han podido “llenar” 68 caras y se está referenciando el
undécimo sector (ya que empezamos a numerarlos a partir de cero) de la sexagésima novena cara.
(b) Dividiremos el número de caras “completas” obtenido en el punto anterior por el número de caras por cilindro
que admite el disco. Ası́:
68 div 2 = 34
68 mod 2 = 0
Esto se interpreta como que hemos podido “completar” 34 cilindros y estamos en la primera cara del trigésimo
quinto.
Por tanto, la dirección fı́sica pedida es: ( 34, 0, 10 )
Es decir, cilindro 34, cara 0, sector 10.
3. Dirección lógica para la dirección fı́sica ( 47, 1, 15 ).
Suponiendo direcciones fı́sicas de la forma ( i, j, k ), basta con aplicar la fórmula:
243
5
-66768!:9;=<;>?@BACD7E>GF*>H87E9JIK9 2ML FNOP9Q
El resultado obtenido es:
243
R'6S
'=T
@
'
D,UPVHW/Q
X'6S
'6T
Y
SZR'*S
'
W
'
.
('
W/,
S
Con lo que el número de bloque lógico es el 1725.
Cuestión 4
1. Bloques necesarios si se utiliza lista enlazada. La lista enlazada propiamente dicha utiliza un puntero al final
de cada bloque para enlazarlo con el siguiente bloque libre. O sea, se utilizan los propios bloques libres para
mantenerlos en la lista. Por tanto, no es necesario ningún bloque adicional para mantener el control sobre qué
bloques tenemos libres.
En algunos casos, para compactar la lista, se utilizan unos pocos bloques libres para guardar (de manera similar a un
ı́ndice enlazado) todos los números de los bloques disponibles. Esto no aporta ninguna variación al caso comentado
en el párrafo anterior, pues estos bloques se van liberando a medida que se van asignando bloques disponibles. Al
final, si se asignan todos los bloques a ficheros, no queda ningún bloque dedicado a mantener la lista enlazada.
11
2. Bloques necesarios si se utiliza mapa de bits.
El tamaño de bloque es de 1.024 bytes, con lo que en cada bloque tendremos 8.192 bits para mantener el mapa.
Nuestro disco tiene 20 Mb. Eso representa 20 * 1.024 bloques, o sea, 20.480 bloques.
Por tanto, utilizando mapa de bits necesitamos:
243 '
,/.U
.G,V
T
'
. ,V
G
,$.
T
,\[
S
3 IKN_*`a
0^]
3. Estructura del disco.
(a) Tamaño de la FAT (en sectores):
Como utilizamos números de cluster de 16 bits, en un sector de 512 bytes se podrán mantener 256 números
de cluster. Por tanto, tendremos 256 entradas de la FAT en cada sector.
El número de clusters en nuestro disco ha sido calculado previamente y es igual a 20480. (En la práctica es
ligeramente inferior, puesto que la información mantenida en la cabecera no se organiza en clusters, sino en
sectores, y no puede utilizarse para mantener ficheros. Sin embargo, esto no afecta demasiado a la hora de
efectuar los cálculos: el número correcto de clusters es 20383 como veremos dentro de un momento, pero al
dividirlo entre 256 y redondearlo hacia arriba dará el mismo resultado.)
Por tanto:
>GbdcMegf
`b[ 7EIi`g=<;=F/
2 <F*> L >H*8$667E<;N*F
h
,$./V
,
T
S$j
.
T
.
(b) Directorio raı́z (en sectores):
Una entrada de directorio MS-DOS ocupa 32 bytes. Por tanto, en un sector tendremos:
2 <F> L >H8/6*7#<;N*F
>Gbk;; >Gb ;" ml#
SH'
,
X'=j
] ,
Si el directorio raı́z mantiene un máximo de 512 entradas, deberemos asignarle:
2 `b[n=*7#<;N*F
SH'
'=j
,
] ,
(c) Clusters de datos:
Del total de 20480 bloques que posee el disco, tenemos reservados los siguientes:
Por el sector de arranque primario o MBR (Master Boot Record): 1 sector (medio bloque).
Por el sector de arranque de la partición DOS: 1 sector (medio bloque).
Por la FAT y su copia: 80 + 80 = 160 sectores (80 bloques).
Por el directorio raı́z: 32 sectores (16 bloques).
O sea, en total 97 bloques. Por tanto, para clusters de datos tendremos 20480 - 97 = 20383 clusters.
4. Mejor y peor caso para leer el cluster 33 de un archivo del directorio raı́z.
Mejor caso
Tarea
Lectura y búsqueda del archivo en el primer bloque del
directorio raı́z. Encontramos la entrada de directorio de
ese archivo en este primer bloque del raı́z. Obtenemos, por
tanto, el número del primer cluster del archivo.
Recorrido de la FAT para buscar el trigésimo tercer cluster
del archivo. Todos los números de cluster explorados se
encuentran en la caché para la FAT.
Acceso al cluster pedido.
12
Accesos
1
Acumul.
1
0
1
1
2
Peor caso
Tarea
Lectura y búsqueda del archivo en los sectores del directorio raı́z
(Existen 16 bloques en el raı́z). Encontramos la entrada de directorio del archivo en el último bloque del directorio.
Recorrido de la FAT para buscar el trigésimo tercer cluster del
archivo. Todos los números de cluster explorados se encuentran
en distintos bloques de la FAT y, además, el primero de ellos no
estaba en la caché.
Acceso al cluster pedido.
Accesos
16
Acumul.
16
32
48
1
37
Accesos
1
Acumul.
1
1
2
0
2
1
3
5. Ídem pero suponiendo que el archivo se encuentra en \PRUEBA.
Mejor caso
Tarea
Lectura y búsqueda del directorio \PRUEBA en el primer bloque
del directorio raı́z. Econtramos su entrada de directorio en este
primer bloque. Leemos su entrada de directorio y obtenemos su
primer número de cluster.
Buscamos la entrada del archivo en el primer cluster del directorio \PRUEBA y lo encontramos.
Recorrido de la FAT para buscar el trigésimo tercer cluster del
archivo. Todos los números de cluster explorados se encuentran
en la caché para la FAT.
Acceso al cluster pedido.
Peor caso. Recuérdese que en un cluster de 1Kb podemos guardar hasta 32 entradas de directorio. Esto implica
que el directorio \PRUEBA necesita dos clusters.
Tarea
Lectura y búsqueda del directorio \PRUEBA en los bloques del
directorio raı́z. Encontramos el directorio en el último bloque
del directorio raı́z. Con ello obtenemos el número de su primer
cluster.
Buscamos el archivo entre las primeras 32 entradas del directorio
\PRUEBA y no lo encontramos.
Buscamos en la FAT el número del siguiente cluster del directorio. No está en la caché.
Leemos la última entrada del directorio (en el segundo de sus
clusters) y encontramos allı́ el archivo buscado.
Recorrido de la FAT para buscar el trigésimo tercer bloque del
archivo. Todos los números de cluster explorados se encuentran
en distintos bloques de la FAT y, además, el primero de ellos no
estaba en la caché.
Acceso al cluster pedido.
13
Accesos
16
Acumul.
16
1
17
1
18
1
19
32
51
1
52
Cuestión 5
Para determinar el tamaño máximo de un archivo en un sistema UNIX debemos tener en cuenta dos cifras:
El número máximo de bloques que puede llegarse a mantener. Esto se determina a partir del tamaño de los punteros
a zona, ya que no podremos tener una partición de disco mayor que este lı́mite y un archivo no puede extenderse
por más de una partición.
Cuántos punteros a zona pueden llegarse a guardar a partir de un nodo-i, teniendo en cuenta los niveles de indirección que pueden mantenerse.
El tamaño máximo del archivo será el menor de estos dos valores.
Veamos los dos casos presentados:
UNIX.
Según el lı́mite debido al tamaño de puntero, tenemos que el tamaño máximo serı́a:
tam. partición = 2 op bloques = 4 Gbloques
Mq
4 Tbytes
Según el número de punteros tendremos:
En una misma zona podrá llegar a haber 1024 / 4 = 256 punteros a zona, ya que una zona tiene 1024 bytes y cada
puntero ocupa 4.
Por tanto, el número de punteros a zona será:
Tipo de puntero
Directos en nodo-i.
Indirecto simple.
Indirecto doble.
Indirecto triple.
TOTAL:
Punteros directos
10
256
256 p = 65.536
256 o = 16.777.216
16.843.018
Por tanto, esta cifra obtenida es menor que la anterior y el tamaño máximo del archivo será de:
16.843.018 bloques = 16.842.018 Kb
Mq
16’064 Gbytes
MINIX.
Debido al tamaño de puntero, el tamaño máximo es en este caso:
tam. partición = 2 r&s bloques = 64 Kbloques
4q
64 Mbytes
Según el número de punteros tendremos:
En una zona podrá haber 1024 / 2 = 512 punteros a zona, ya que una zona tiene 1024 bytes y cada puntero ocupa 2.
Tipo de puntero
Directos en nodo-i.
Indirecto simple.
Indirecto doble.
TOTAL:
Esto hace un total de 262.663 bloques
4q
Punteros directos
7
512
512 p = 262.144
262.663
256’5 Mbytes.
En este caso, el lı́mite lo proporciona el tamaño de la partición. Con esto el tamaño máximo queda en 64 Mbytes.
14
Cuestión 6
1. Estructura del disco.
Un disco MINIX tiene las siguientes partes:
(a) Bloque de arranque:
(b) Superbloque:
1.
1.
1
(c) Mapa de bits para nodos-i: .
Necesitamos un bit por archivo. Como el disco únicamente va a permitir 512 archivos, basta con 512 bits. En
la práctica, el autor de MINIX añadió una entrada más en el mapa de bits, correspondiente al nodo-i 0. Por
tanto, en el mapa existirı́an realmente 513 bits, aunque en disco sólo se necesitarı́a espacio para guardar 512
nodos-i.
En este sistema un bloque tiene 1024 bytes (8192 bits), con lo que el mapa cabe en un solo bloque.
3
(d) Mapa de bits para zonas: .
Un disco de 20 Mb tiene 20480 bloques de 1 Kb. En cada bloque caben 8 * 1024 bits. Por tanto, se tendrá:
'
,/.U
.t,V
T
'
. ,V
G
243 ,/.
T
,\[
S
0u]
16
(e) Bloques para nodos-i:
.
Como cada nodo-i ocupa 32 bytes, en un bloque cabrán 1024 / 32 = 32 nodos-i.
Si vamos a tener 512 nodos-i, necesitaremos:
243
wv
SH'
,
('=j
] ,yx
20458
(f) Bloques para datos:
.
Únicamente hay que descontar los bloques vistos en los puntos anteriores de la capacidad total del disco.
243 ,/.$V
T
.{z|@
'
'
'
]
'6j
Q
,/./V
T
.{z},t,
,$./V
S$T
2. Reconstrucción del mapa de bits de zonas.
Suponiendo que el resto del disco no ha resultado dañado, se podrı́a realizar lo siguiente:
(a) Reinicializar todo el mapa de bits de zonas de manera que todos las zonas de disco aparezcan como libres.
(b) Siguiendo el mapa de bits para nodos-i, recorrer todos los nodos-i utilizados. Para cada uno de ellos habrá que
consultar sus punteros directos a zona y marcar tales zonas como ocupadas en el mapa de bits que se dañó.
Lo mismo para los punteros indirecto simple e indirecto doble, bajando hasta el nivel de zona de punteros
directos. De esta manera todas las zonas utilizadas por todos los archivos son marcadas en el mapa de bits
como “en uso”.
Una vez terminados estos dos pasos, el mapa de bits para zonas estará recuperado.
Cuestión 7
Dado que ha cambiado el tamaño del bloque, es necesario en primer lugar calcular la cantidad de elementos que puede
contener un bloque en función de su tipo:
tipo de bloque
tamaño del elemento número de elementos
mapas de bits
1 bit
1024
nodos-i
32 bytes
4
entradas de directorios 16 bytes
8
referencias a zonas
2 bytes
64
datos
1 byte
128
15
1. Cómo está estructurado el disco
Bloque de arranque- Superbloque- Mapa de nodos-i- Mapa de zonas- Nodos-i- Datos
2. Número de bloques del mapa de nodos-i.
1
El número máximo de nodos-i necesarios es igual a 127. Por lo tanto, basta un solo bloque para contener el mapa
de nodos-i, puesto que tiene capacidad para 1024 bits.
3. Número de bloques del mapa de zonas.
10
El número total de zonas (bloques) es igual a 10.240. Como cada bloque tiene capacidad para 1024 bits, son
necesarios 10 bloques para albergar todo el mapa de zonas.
4. Número de bloques de nodos-i.
32
El número máximo de nodos-i necesarios es igual a 127. Puesto que un bloque tiene capacidad para 4 nodos-i, son
necesarios 32 para contener todos los nodos-i.
5. Número total de bloques de datos.
10.195
Se han consumido en los apartados anteriores 1, 10 y 32 bloques. Junto con los bloques de arranque y superbloque,
dan un total de 45 bloques consumidos. Siendo el total de bloques igual a 10.240, quedan 10.195 bloques de
datos, los cuales se pueden utilizar para albergar datos convencionales, entradas de directorios o referencias a otros
bloques.
6. Número de nodos-i utilizados.
41
Un nodo-i por cada directorio o fichero regular.
Directorio raı́z (/)
Directorio /bin
Directorio /lib
Ficheros regulares de / 10 - 2 (. y ..) -2 (/bin y /lib)
Ficheros regulares de /bin 16 - 2 (. y ..)
Ficheros regulares de /lib 20 - 2 (. y ..)
TOTAL
1
1
1
6
14
18
41
7. Número de bloques utilizados para:
(a) Contener datos convencionales de ficheros regulares. 304
El número de ficheros regulares es igual a 38. (41 menos 3 directorios). La ocupación en disco de los datos
de estos ficheros es la siguiente:
36 ficheros regulares de 768 bytes (6 bloques) 216
1 fichero regular de 1024 bytes (8 bloques)
8
1 fichero regular de 10240 bytes (80 bloques) 80
TOTAL
304
(b) Contener entradas de directorios.
Directorio raı́z (/) 10 entradas
Directorio /bin 16 entradas
Directorio /lib 20 entradas
TOTAL
7
2
2
3
7
(c) Contener referencias a otros bloques. 4
Los ficheros regulares de 768 bytes no utilizan los punteros indirectos del nodo-i, puesto que ocupan 6 zonas
y en el nodo-i en MINIX existen 7 referencias directas.
El fichero /bin/mediano necesita 8 zonas de datos.
Las primeras 7 zonas son referenciados directamente en el nodo-i.
El bloque número 7 necesita la referencia simple indirecta del nodo-i. Esta referencia necesita una zona de
datos, cuyos primeros dos bytes apuntan a la zona número 7 del fichero, y el resto del bloque no se utiliza.
El fichero /bin/grande necesita 80 zonas de datos.
16
Las primeras 7 zonas son referenciadas directamente en el nodo-i.
Las 64 zonas siguientes necesitan la referencia simple indirecta del nodo-i. Esta referencia necesita una zona
de datos, que se utiliza completamente.
Las últimas 9 zonas necesitan la referencia doble indirecta del nodo-i. Esta referencia necesita una zona de
datos, cuyos primeros dos bytes apuntan a otra zona de datos, que contiene las últimas 9 referencias del
fichero.
Cuestión 8
El primer paso para resolver el problema consistirá en determinar qué bloques son utilizados para mantener los nodos-i
y otras estructuras al principio del disco.
Veamos:
Supondremos que el bloque de arranque sigue siendo único:
Necesitamos también un bloque para el superbloque:
1.
1.
Mapa de bits para nodos-i: 1.
Como únicamente necesitamos 100 nodos-i y un bloque tiene 32 * 8 = 256 bits, basta con un bloque para mantener
esta información.
Mapa de bits para zonas de datos:
4.
Si el dispositivo tiene 32 Kb y el tamaño de bloque es de 32 bytes, tendrá 1024 bloques. Si cada bloque puede
mantener 256 bits, el mapa necesita 1024 / 256 = 4 bloques.
Bloques para nodos-i:
50.
Si hay 100 nodos-i y en cada bloque caben 2, necesitaremos 100 / 2 = 50 bloques.
Bloques para datos:
967.
Los bloques ya citados contabilizan un total de 57. Si el dispositivo tiene 1024, la diferencia 1024 - 57 = 967 será
la cantidad de bloques para datos (zonas) que tendrá el dispositivo.
Con esto sabemos que:
Los bloques del 0 al 6 se utilizan para mantener el bloque de arranque, el superbloque y los mapas de bits.
El bloque 7 será el primero que mantenga nodos-i. En concreto mantendrá los nodos-i 0 y 1. En general, el bloque
i entre 7 y 56, mantiene los nodos-i: (2*i - 14) y (2*i - 13).
El bloque 57 será el primero que mantenga zonas para datos, directorios y zonas de punteros a zona.
1. Árbol de directorios.
Veamos sobre qué archivos mantenemos información. Según lo dicho anteriormente los bloques 7, 8, 15 y 17
mantienen los nodos-i (0, 1), (2, 3), (16, 17) y (20, 21).
Contrastando esta información con los bloques 57 a 60, 62 a 64 y 88, puede decirse que:
El bloque 57 mantiene el directorio raı́z, puesto que utiliza el nodo-i 1 y sus entradas . y .. apuntan a dicho
nodo-i. Tiene únicamente dos subdirectorios: bin (nodo-i 2) y users (nodo-i 3).
Consultando el nodo-i 2, vemos que el directorio /bin está guardado en la zona 58 y que sólo tiene esa
zona. Mantiene dos entradas: cc (nodo-i 4) y mined (nodo-i 5), pero no podemos decir nada más sobre ellas
porque no sabemos nada de sus nodos-i.
17
Consultando el nodo-i 3 vemos que el directorio /users está guardado en las zonas 59, 60, 62 y 63 (en este
orden), ya que el número 61 se utiliza como puntero indirecto a zona.
Por tanto, este directorio tiene 16 entradas que corresponden a ., .., y 14 archivos cuyo nombre va de dso00
a dso13.
El bloque 15 nos proporciona los nodos-i 16 y 17, correspondientes a los directorios /users/dso10 y
/users/dso11 respectivamente. Ambos ocupan una zona únicamente. En ambos casos encontramos un
único archivo msh.c dentro de cada directorio.
El bloque 17 mantiene los nodos-i de estos dos archivos. Deberemos usarlo para tener una idea del tamaño de
ambos archivos.
Por lo dicho hasta ahora, la estructura de directorios debe ser la siguiente (se adjunta el número de nodo-i correspondiente a cada archivo):
1
/
2
3
bin
4
cc
users
5
mined
6
dso00
...
16
dso10
17
dso11
20
msh.c
2. Ejecución de open( "/users/dso11/msh.c", O RDONLY ).
Veamos qué accesos deben realizarse:
Bloque
57
8
59
60
61
62
63
15
88
17
Explicación
Lectura del directorio raı́z. Encontramos entrada users.
Lectura del nodo-i 3. Encontramos números de zona donde leer
el directorio users.
Buscamos en las primeras dos entradas el archivo dso11.
No lo encontramos.
Buscamos en las siguientes cuatro entradas. Tampoco tenemos suerte.
Leemos la zona que mantiene los siguientes punteros directos.
Buscamos en las siguientes cuatro entradas. No lo encontramos.
Buscamos en las siguientes cuatro entradas. Encontramos entrada.
Sabemos que el número de nodo-i es 17 y que estará en el bloque 15.
Encontramos que la zona para el directorio dso11 es el 88.
Buscamos entrada msh.c en el directorio y la encontramos.
El nodo-i a cargar para realizar la apertura es el 21.
Leemos el nodo-i 21 en el bloque 17. Con esto terminamos.
3. Tamaño en zonas de /users/dso10/msh.c.
18
...
21
msh.c
19
dso13
Sabemos que cada zona de disco puede mantener 16 punteros a otras zonas.
Partiendo de la información del nodo-i 20, en el bloque 17, podemos saber:
Las zonas 65 y 66 son las dos primeras del archivo.
El número 67 es un puntero indirecto. En él se mantienen los siguientes 16 números de zona.
El número 68 es un puntero doble indirecto. Su contenido nos da los números de tres zonas más que contienen
ya punteros directos. Por tanto, sabemos que el archivo tendrá 32 zonas más (cuyos números están guardados
en las zonas 85 y 86).
El número 87 es un puntero indirecto. No sabemos nada de su contenido. Sin embargo, como mı́nimo tendrá
un puntero directo válido y como máximo 16.
Acumulando lo dicho anteriormente tendremos:
Que el fichero utiliza las zonas 67, 68, 85, 86 y 87 como zonas con punteros a zona. Por tanto, 5 zonas se
necesitan para esto.
Que el fichero utiliza 2 + 16 + 2*16 = 50 zonas de datos, referenciados por el nodo-i o por las zonas de
punteros 67, 85 y 86, mientras que la zona 87 aportará entre 1 y 16 zonas más. O sea se emplean entre 51 y
66 zonas de datos.
Esto hace que el total oscile entre 56 y 71 zonas.
Cuestión 9
1. Tamaño mı́nimo del puntero a zona.
En el disco tendremos 320 bloques, ya que su capacidad total es de 320 Kb y el tamaño de bloque (y de zona) es de
1Kb.
Para mantener 320 bloques necesitamos al menos 9 bits, ya que 2 ~ = 256 (con 8 bits únicamente se pueden
referenciar 256 bloques diferentes) mientras que 2  = 512 (con 9 bits se podrı́an referenciar 512 bloques).
2. Punteros por zona.
En una zona podremos mantener:
2 >Gb€[ tN 2 >
>Gb€[ :` 2 <;6*
F N
T
'
.t,V
Y
Y
'
.:[ ,
0
Y
'
.‚` 2 <;6FN/
3. Tipo de punteros en el nodo-i.
Si tenemos 16 bytes para punteros, podremos llegar a mantener en un mismo nodo-i:
2 '6j
Y
T
'
,
T
Y
('
V:[n,
0
'
Vƒ` 2 <;6FN/
Las alternativas presentadas se convierten ası́ en las siguientes:
(a) 14 punteros directos.
Permite un tamaño máximo del archivo de 14 Kb, pero los números de bloque están todos accesibles una vez
se carga el nodo-i en memoria.
El único problema es que el tamaño máximo del archivo es excesivamente pequeño.
(b) 13 punteros directos y uno indirecto simple.
Esta opción es la más adecuada, puesto que si el tamaño del archivo no supera los 13 Kb, todos sus punteros se
mantienen en el nodo-i. En caso de que el archivo sea mayor basta con mantener un puntero indirecto simple
ya que esto admitirı́a 910 punteros directos más. Obviamente, como la capacidad del disco es de 320 bloques,
nunca se llegarı́a a requerir más bloques de punteros.
19
(c) 12 punteros directos y 2 indirectos simples.
No es conveniente, puesto que el segundo puntero indirecto nunca se usarı́a y se obligarı́a a usar un bloque
de punteros para los archivos con más de 12 Kb, mientras con la opción anterior esto no era necesario hasta
sobrepasar los 13 Kb.
(d) 12 punteros directos, 1 indirecto simple y 1 indirecto doble.
Ocurre lo mismo que en el caso anterior.
Cuestión 10
1. Estructura del disco.
El disco tendrá:
op#‡„r;…!p&†
r&p
= 64 bloques.
Estos se descomponen del siguiente modo:
1 bloque de arranque.
1 superbloque.
1 bloque para el mapa de nodos-i.
Tendremos 31 nodos-i, por tanto necesitamos 31 bits para “mapearlos”. Además, en MINIX el nodo-i número
cero, a pesar de no existir, ocupaba espacio en el mapa. Por tanto, habrá 32 bits en el mapa. Con un bloque
tenemos suficiente.
1 bloque para mapa de zonas de datos.
Como máximo tendrı́amos 64 bits (algunos no hacen falta puesto que están ocupados por el bloque de arranque, el superbloque, los mapas, etc.). Con un bloque volvemos a tener bastante.
1 bloque para nodos-i.
Tendremos 31 nodos-i y cada uno de ellos necesita 16 bytes. Por tanto, se necesitan 496 bytes para almacenarlos, con lo que se usará un bloque.
59 bloques para datos.
Del total de 64 bloques del disco, 5 ya están ocupados. Por tanto, quedan 59 para datos.
2. Tamaño máximo de archivo.
Necesitamos conocer cuántos bloques podremos referenciar mediante los 60 bits que mantiene un nodo-i para
punteros directos.
El tamaño de un puntero a bloque será:
64 bloques
0
2 s bloques 0
punteros de 6 bits
Tenemos 60 bits disponibles. Ası́ tendremos: 60 / 6 = 10 punteros directos.
Como cada bloque es de 512 bytes, el archivo podrá llegar a 5 Kb.
3. Máximo número de entradas en un directorio.
En principio este valor no está limitado. Únicamente depende del número de archivos que se puedan crear.
En nuestro caso, sólo podremos crear 31 archivos. Si todos los archivos se encontraran en el directorio raı́z
tendrı́amos:
Las entradas . y .. que se referirı́an al propio archivo del directorio raı́z.
30 entradas más que acogerı́an al resto de archivos.
Esto supone un total de 32
es lo mismo, 1 bloque.
entradas. Como cada entrada necesita 16 bytes, esto supondrı́a 512 bytes; o lo que
20
4. Máximo número de zonas libres si se crean todos los archivos posibles.
Podremos llegar a crear 31 archivos. De ellos, al menos uno será un directorio (el directorio raı́z). Los treinta
restantes pueden ser archivos regulares.
En UNIX se permite crear un archivo de longitud cero. Es más, este tipo de archivos no requieren ninguna zona de
datos. Por tanto, si los 30 archivos regulares tienen tamaño mı́nimo no están ocupando zonas de datos.
Por todo lo anterior, estos archivos solamente ocuparán la zona necesaria para el directorio raı́z. Como tenı́amos 59
zonas para datos, quedarán libres 58 zonas.
5. Mapas de bits.
En el mapa de bits para nodos-i tenemos la siguiente situación:
El nodo-i 0 se considera en uso. Aparece en el mapa como usado, pero en la práctica no existe tal nodo-i.
El nodo-i 1 mantiene el directorio raı́z.
El nodo-i 2 mantiene el directorio /dir1.
El nodo-i 3 mantiene el archivo /dir1/b.
El nodo-i 5 mantiene el archivo /dir1/c.
Respecto al mapa de bloques de datos (zonas), sabemos lo siguiente (recuérdese que la primera zona del mapa
corresponde al primer bloque de datos; en nuestro caso el 5):
El directorio raı́z está en la zona 5.
El directorio /dir1 está en la zona 6.
El archivo /dir1/b está en las zonas 7, 12, 13, 14, 15, 16, 17, 18, 19 y 20.
El archivo /dir1/c está en las zonas 21, 22, 23, 24, 25, 26, 27, 8 y 9.
Los mapas de bits serán:
Mapa de nodos-i
0
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
0
0
0
1
1
1
1
1
0
0
0
1
1
1
1
1
Mapa de zonas
0 0 0 1
0 0 0 0
0 0 0 0
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 – – –
6. Contenido de los archivos directorio del punto anterior.
Será el siguiente:
1
1
2
.
..
dir1
Cuestión 11
1. Cilindros recorridos con SSTF y LOOK.
SSTF
21
2
1
3
5
.
..
b
c
1
0
0
1
1
1
1
–
0
0
1
1
1
1
1
–
Cil. actual
50
48
70
81
95
Cilindros pendientes
23. 48, *, 70, 81, 95
23, *, 70, 81, 95
23, *, 81, 95
23, *, 95
23, *
Desplaz.
50 - 48 =
70 - 48 =
81 - 70 =
95 - 81 =
95 - 23 =
TOTAL:
(cil.)
2
22
9
14
72
121
LOOK
Direc. servicio
Ascendente
Descendente
Cil. servidos
70, 81 y 95
48 y 23
Desplaz.
95 - 50 =
95 - 23 =
TOTAL:
(cil.)
45
72
117
2. Algoritmo “óptimo”
Ni el LOOK ni el SSTF dan el mejor resultado posible para las peticiones que nos plantea el problema. Si el sentido
inicial de servicio fuera descendente el LOOK proporcionarı́a un resultado óptimo.
Dado un conjunto estático de peticiones, el recorrido óptimo serı́a el siguiente:
Conocido el conjunto de peticiones y el cilindro donde está actualmente la cabeza, servirlas en el sentido hacia
aquel extremo que quede más cerca del cilindro actual. Una vez llegado al cilindro de la última petición en tal
sentido, invertir el sentido de servicio y pasar a servir las peticiones restantes.
En nuestro caso, las peticiones en los extremos (la de menor y mayor cilindro, respectivamente) son sobre los
cilindros 23 y 95. El cilindro actual es el 50. Por tanto, el “extremo” más cercano es el cilindro 23, con lo que
primero serviremos en orden descendente y después en ascendente. Ası́,
Direc. servicio
Descendente
Ascendente
Cil. servidos
48 y 23
70, 81 y 95
Desplaz.
50 - 23 =
95 - 23 =
TOTAL:
(cil.)
27
72
99
No obstante, este algoritmo no funcionarı́a bien a medida que fueran llegando nuevas peticiones ya que deberı́an
recalcularse los “extremos” con cada nueva petición y raramente se atenderı́an peticiones alejadas del cilindro
actual.
Cuestión 12
1. Estructura de directorios
22
/
users
felipe
ed
alfonso
bin
sh
ls
unix
cat
less
dev
tty0
console
tty1
mysh
2. Estado final de los directorios.
1
1
2
21
5
6
.
..
users
unix
dev
bin
2
1
10
12
8
.
..
felipe
alfonso
mysh
5
1
13
11
.
..
tty1
console
23
6
1
20
22
25
.
..
ls
less
ed
10
2
23
.
..
mysh
12
2
3
3
7
.
..
sh
bash
sistema
CUESTIONES Y PROBLEMAS PROPUESTOS
Cuestión 1
Decidir si las siguientes afirmaciones sobre el sistema de archivos UNIX son verdaderas o falsas:
La creación de un enlace fı́sico mediante el mandato ln implica la utilización de un nuevo nodo-i.
La creación de un enlace simbólico mediante el mandato ln -s no requiere el uso de un nuevo nodo-i.
El mandato mv nunca implica el uso de nodos-i libres ni la liberación de nodos-i en uso.
Para que un nodo-i pueda liberarse, deben eliminarse todos los enlaces fı́sicos y simbólicos sobre ese nodo-i.
Dado un archivo /dir1/a, la ejecución del mandato rm /dir1/a siempre implica la liberación de su nodo-i.
Se supone que el usuario tiene suficientes derechos de acceso a dicho archivo.
Cuestión 2
¿ Qué problemas plantearı́a en UNIX la posibilidad de crear enlaces fı́sicos sobre archivos de tipo directorio ?
Cuestión 3
Explicar cómo podrı́an darse múltiples nombres a un mismo archivo en sistemas de archivo Windows 95 / 98 (FAT16 /
FAT32).
Cuestión 4
Decidir si las siguientes afirmaciones sobre algoritmos de planificación de peticiones a disco son verdaderas o falsas:
Si un manejador de disco no suele tener más de una o dos peticiones pendientes, en la práctica se planifica con
estrategia FCFS.
Con una estrategia FCFS el tiempo de espera de una petición en la cola del manejador es el mı́nimo posible.
La estrategia SSTF es injusta porque puede marginar las peticiones sobre los cilindros más internos o externos del
disco.
En un sistema multiprogramado se podrá tener más de una petición pendiente del mismo hilo de ejecución.
En un sistema multiprogramado no se podrá tener dos peticiones pendientes sobre el mismo cilindro.
Cuestión 5
Decidir si las siguientes afirmaciones sobre estructuras de directorios son verdaderas o falsas:
El sistema de archivos de MS-DOS es un ejemplo de estructura de directorios de dos niveles.
El sistema de archivos de UNIX es un ejemplo de estructura de directorios en grafo acı́clico.
Una estructura de directorios en grafo general no permite que diferentes usuarios protejan sus archivos.
24
MS-DOS fuerza a que todos los dispositivos de almacenamiento estén montados sobre el mismo árbol de directorios.
Una estructura en grafo acı́clico permite mantener varios enlaces sobre un mismo fichero regular.
Cuestión 6
Se tiene un sistema DOS donde el tamaño de cluster es igual a 4 Kb (8 sectores) y en el que las primeras 52 entradas
de la FAT tienen los siguientes valores:
0
1
2
3
4
5
6
7
8
9
10
11
12
X
X
EOF
4
5
6
7
8
9
10
11
12
EOF
13
14
15
16
17
18
19
20
21
22
23
24
25
14
15
16
17
18
19
20
21
22
EOF
EOF
EOF
EOF
26
27
28
29
30
31
32
33
34
35
36
37
38
24
EOF
EOF
30
EOF
34
EOF
36
28
38
40
41
32
39
40
41
42
43
44
45
46
47
48
49
50
51
29
37
42
44
50
47
46
33
49
45
EOF
48
FREE
A continuación se listan tres directorios presentes en ese disco. Sus entradas tendrán el siguiente formato (se suprimen
los bytes reservados y los campos de fecha y hora de última actualización):
Nombre
Extensión
Atributos
Primer cluster
Longitud
El campo atributos se representará en binario. En MS-DOS, los ocho bits de este campo tienen el siguiente significado:
Res.
Res.
Archivable
Directorio
Etiqueta
Sistema
Oculto
Los directorios mencionados tienen el siguiente contenido:
.
..
IO
DISCO C
MSDOS
DOS
COMMAND
ARCHIVOS
.
..
CONFIG
LABEL
ATTRIB
DELTREE
.
..
A
B
SYS
SYS
COM
SYS
EXE
EXE
EXE
DAT
00010000
00010000
00000111
00001000
00000111
00010000
00000001
00010000
00010000
00010000
00000000
00000000
00000000
00000000
00010000
00010000
00000000
00000000
SE PIDE
25
27
2
25
26
2
54
3
0
13
23
43
27
23
2
34
31
39
35
0
0
40.755
0
38.158
0
56.539
0
0
0
8.034
9.566
11.284
11.173
0
0
4.034
2.342
Solo lect.
1. Dibujar la estructura de directorios.
2. Utilizando las entradas que se conocen de la FAT, decir qué clusters pertenecen a cada archivo. ¿ Puede detectarse
alguna inconsistencia ?
3. Comentar qué salida darı́a el mandato DIR (sin argumentos) si nos encontramos en el directorio mantenido en el
cluster 2.
4. Si se supone que el directorio que se encuentra en el cluster 2 funciona como directorio raı́z, comentar cómo
quedarı́a la FAT y los directorios tras haber realizado las siguientes acciones:
C:> DEL \DOS\CONFIG.SYS
C:> COPY \ARCHIVOS\A.DAT \A.BAK
suponiendo que la asignación de clusters libres se intenta realizar con aquellos que tengan menor número de cluster.
5. ¿ Qué pasarı́a si la entrada 35 de la FAT apuntara al bloque 35 e intentáramos ejecutar el mandato DELTREE ?
¿ Qué pasa en general si una entrada de la FAT apunta a ella misma ?
6. Suponiendo que el disco estudiado tiene una capacidad de 40 Mb, guarda FAT original y una copia (punteros de
16 bits) y el directorio raı́z puede mantener 512 entradas, dar la estructura del disco y mencionar cuántos clusters o
sectores tendrá cada parte.
7. Comentar cuánto espacio se desperdicia debido a fragmentación interna en cada uno de los archivos que aparecen
en el enunciado (Sin tener en cuenta el apartado 4).
8. Suponiendo bloques (y zonas) de 4 Kb y un disco de igual capacidad, con punteros a zona de 16 bits, entradas
de directorio de 16 bytes, un máximo de 1024 archivos, nodos-i de 32 bytes con 7 punteros directos, un indirecto
simple y uno doble:
Indicar cómo se estructurarı́a este mismo disco bajo MINIX.
Suponiendo que contiene únicamente estos mismos archivos y directorios, dar el contenido de los archivos de
tipo directorio suponiendo que:
– Los archivos se crearon por niveles (primero todos los que aparecen en el directorio raı́z y después los
archivos que cuelgan de sus dos subdirectorios). Dentro de un mismo nivel se siguió orden alfabético.
– Siempre se usó el nodo-i más bajo disponible.
– El disco no contenı́a ningún archivo previamente y no se han borrado ni creado más archivos.
Comparar las cifras de fragmentación interna en este sistema con las del anterior. ¿ En qué archivos difiere ?
26
Descargar