Apuntes - Instituto Tecnólogico de La Laguna

Anuncio
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
1
Instituto Tecnológico de la Laguna
Departamento de sistemas y Computación
Actualización de apuntes
Sistemas Operativos II
MA Ing. Lamia Hamdán Medina
Agosto del 2004
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
2
Sistemas Operativos II
Objetivo General
“Conocer las técnicas y políticas de la administración de memoria, sistemas de
archivos y disco de un sistema operativo; así como sus mecanismos de
protección.”
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
3
UNIDAD I
AMINISTRACIÓN DE LA MEMORIA
Objetivo
“El alumno conocerá las diferentes técnicas que ha llevado la administración de memoria
desde sus inicios, como base de los sistemas operativos actuales”
Temario
1.1
1.2
1.3
1.4
1.5
1.5.1
1.6
Protección del hardware
Protección de la memoria
Relocalización
Multiples particiones contiguas fijas
Multiples particiones contiguas variables
Compactación
¿cómo administran los virus la memoria?
Bibliografía
1. Sistemas Operativos Modernos
Autor: Andrew Tanenbaum
Editorial: Prentice may
Pag 201-211
2. Apuntes de la materia Sistemas Operativos II
Administración de memoria
Introducción
La parte del sistema operativo que se encarga de la memoria se llama administrador
de la memoria. Su labor es la de llevar el control de qué partes de la memoria están en
uso y cuáles no lo están, asignar memoria a procesos cuando la necesiten y retirárselas
cuando terminen, y administrar el intercambio entre la memoria central y el disco cuando
la memoria central no baste para contener todos los procesos.
Ing. Lamia Hamdán Medina
1.1
Sistemas Operativos II.
4
Protección del hardware
Cuando sucede un error, el hardware es el primero en detectar el error en el sistema
operativo. Cuando detecta el error, manda una señal (trampa) mediante interrupciones,
con esto, el sistema operativo crea un archivo de vaciado o bien de respaldo, esto sucede
muy comúnmente con Microsoft Word®, cuando éste programa no responde, se crea un
archivo en donde se recuperan los datos que había en el documento antes de que Word
dejará de funcionar.
1.2
Protección de la memoria
El esquema de administración de la memoria más simple posible consiste en tener
un solo proceso en la memoria a la vez y en permitir que ese proceso use toda la
memoria. El usuario carga toda la memoria en un programa de disco o cinta y se adueña
de toda la máquina. Aunque este método fue común hasta el año de 1960, ya no se
utiliza. Ahora la memoria física de una computadora es comúnmente dividida en dos
áreas, memoria del monitor residente y memoria del usuario. El monitor residente es un
programa que automáticamente transfiere el control de un programa, al siguiente proceso,
un ejemplo de esto es el Sistema Operativo.
El problema principal de este esquema es el proporcionar una protección eficiente
que evite que programas del usuario modifiquen (accidentalmente o intencionalmente)
código o datos del monitor residente, ya que esto dejaría fuera de acción al sistema
operativo. Existen varias soluciones a este problema, pero el mas común es el de utilizar
un registro de límite de dirección comúnmente llamado "registro barrera" (fence register),
en el cual se coloca la dirección de la primera posición de memoria que un programa del
usuario puede utilizar. Esto se ilustra en la siguiente figura.
En este esquema, cada dirección generada por una instrucción o dato de un
programa, es comparada con el contenido del registro barrera. Si la dirección generada es
mayor o igual que la barrera, entonces la dirección es válida ya que comprende alguna
localidad de la memoria del usuario. En caso contrario, se trata de una referencia ilegal,
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
5
por lo que se genera una interrupción al S.O. para que maneje este tipo de error
(generalmente imprime un letrero y aborta el programa).
La dirección del registro de barrera puede ser cambiada según las necesidades de
memoria, por ejemplo si crece el monitor residente al actualizarlo. Otro problema a
considerar es la carga en memoria de los programas del usuario. Aunque la dirección de la
memoria de la computadora empieza en 00000, la primera dirección del programa del
usuario no puede ser 00000, sino la primera dirección más allá de la barrera.
Una de las formas de corregir esto es al tiempo de compilación, ya que si se
conoce la dirección de la barrera, se pueden generar direcciones absolutas que comiencen
y se extiendan a partir de la barrera. Sin embargo, si la dirección de la barrera cambia, es
necesario recompilar el programa para poder ser corrido nuevamente.
1.3
Relocalizacion
Cuando un programa se enlaza (es decir, el programa central, procedimientos
escritos por el usuario y procedimientos de biblioteca se combinan en un solo espacio de
dirección), el enlazador debe saber en qué dirección comenzará el programa en la
memoria.
Una mejor alternativa al método de direcciones absolutas, consiste en generar
direcciones relativas o relocalizables, las cuales no toman en cuenta el valor de la barrera
al momento de compilación, sino que la corrección es diferida hasta el tiempo de carga o
de ejecución del programa.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
6
En el primer método, al momento de cargar el programa en memoria, el valor de la
barrera es sumado a todas las direcciones en que debería cargarse cada instrucción o dato
del programa, así como también a las direcciones a las que hace referencia cada
instrucción (variables del programa), de tal forma que siempre se tengan direcciones a
partir de la barrera. Este método funciona siempre y cuando la barrera no cambie durante
la ejecución del programa, sino solamente antes de correr el programa (por ejemplo, entre
programa y programa). Debido a esta condición de barrera estática, se dice que se tiene
"Relocalización Estática". En muchos casos, los sistemas operativos cuentan con partes
transitorias que se pueden eliminar y volver a cargar.
Por ejemplo, en los casos en que algún manejador de dispositivo no se utilice
frecuentemente, puede ser quitado para utilizar ese espacio de memoria para programas
del usuario, y volver a cargarlo cuando sea requerido por algún programa en ejecución.
Este esquema, hace que sea necesario cambiar la dirección de la barrera incluso durante
la ejecución de un programa.
Una solución a este problema es cargar el programa en memoria igual que en el
método anterior, sumándole el valor de la barrera a todas las direcciones generadas por el
compilador, excepto a las direcciones a que hacen referencia las instrucciones del
programa (variables); éstas son dejadas tal cual. La corrección es hecha hasta el
momento en que al ser ejecuta cada instrucción en el CPU, se genere un intento de
accesar a la memoria. En ese momento, a la dirección generada le es sumado el valor de
la barrera y luego es enviada a la memoria. Por lo tanto, el usuario siempre trabaja con
direcciones lógicas (las generadas por el compilador), y el hardware de relocalización se
encarga de generar direcciones físicas. Por ejemplo si la barrera se encuentra en 1700,
cualquier intento de accesar a la localidad 0000, será automáticamente relocalizada a
1700. Un acceso a la localidad 515, será relocalizada a la 2215. A este sistema se le llama
“Relocalización dinámica” ya que la barrera puede ser cambiada en cualquier momento. El
esquema del hardware utilizado es el siguiente.
En este sistema, el registro barrera es ahora llamado registro base.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
7
Por lo tanto, si es necesario cambiar la barrera, solo es necesario cambiar el contenido
del registro base, y trasladar el programa del usuario a las nuevas localidades de
memoria relativas a la nueva barrera, y continuar con la ejecución del programa.
Los sistemas anteriormente vistos, funcionan bien para sistemas operativos
uniprogramados; sin embargo, si cargamos más de un programa en el área del usuario, ya
no proporcionan la protección debida, ya que si bien el S. O. queda protegido, los
programas de los usuarios no. Considere el siguiente esquema.
Si ejecutamos el programa del usuario1, es posible que éste pueda modificar el código o
los datos de los programa 2 y 3. Si movemos la barrera hasta el inicio del programa 2, el
programa 1 queda protegido al igual que el monitor; sin embargo, el programa 3 queda
aún desprotegido.
Una solución a este problema, es utilizar dos registros para delimitar plenamente la
memoria del programa en ejecución. Esto se ilustra en las siguientes figuras.
Los límites se implementan con registros igual que anteriormente. De esta manera, si
el programa en ejecución es el 2, el monitor y el programa 1 quedan protegidos por el
límite inferior, mientras que el programa 3 queda protegido por el límite superior. Una vez
finalizada la ejecución del programa 1, los registros son movidos al programa 2, y así
sucesivamente.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
8
Este esquema de cambio de barreras obviamente requiere un sistema de relocalización
dinámica. El hardware utilizado para tal efecto es el siguiente.
El registro de límite checa por el límite superior que puede generar un programa antes
de ser relocalizado dinámicamente por el registro base mientras que el límite inferior
queda definido por la dirección 0000 que generan los compiladores.
Así por, ejemplo en la figura de arriba tenemos como límites 0000 + 1600 = 1600 como
límite inferior, y 3000 + 1600 = 4600 como límite superior. Todas las direcciones
generadas por el programa del usuario 2 deben de estar en ese rango o se generará un
error.
El uso del esquema anterior u otros similares permiten tener más de un usuario
residente en memoria simultáneamente, ya que es posible dividir la memoria en múltiples
regiones llamadas particiones.
Dos posibles métodos se derivan de este esquema:
•
•
1.4
Múltiples particiones contiguas fijas
Múltiples particiones contiguas variables.
Multiples particiones contiguas fijas
En esta opción, se seleccionan regiones fijas de memoria para crear procesos, por
ejemplo una región de 10 K bytes para procesos muy pequeños, regiones de 20 K para
procesos de tamaño promedio, y 50 K para procesos grandes.
Es útil tener más de un proceso en la memoria al mismo tiempo. Entonces la pregunta
es: ¿Cómo debe organizarse la memoria para lograr este objetivo?. La manera más simple
consiste en dividir la memoria en n particiones (posiblemente desiguales). Por ejemplo,
esta partición puede ser efectuada en forma manual por el operador cuando el sistema dé
inicio.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
9
Cuando un proceso llega del exterior, es puesto en la cola de procesos o spool manejada
por el asignador de procesos, cuando le toca su turno (generalmente en forma PEPS), la
cantidad de memoria que requiere es tomada en cuenta y es comparada contra las
regiones de memoria vacías; si el proceso puede ser cargado en alguna de ellas lo hace,
pero si no, entonces busca el siguiente que pueda ser cargado en las regiones disponibles.
Para saber que regiones de memoria están disponibles, se implementa una lista llamada
"cola de regiones de memoria disponibles", en la cual se anota la cantidad de memoria del
hueco libre y la dirección donde inicia. Como en este esquema las particiones son fijas,
cualquier espacio que no utilice un trabajo en una partición se pierde.
La desventaja de ordenar los trabajos que llegan en listas de espera separadas se vuelve
evidente cuando la lista de espera de una partición grande está vacía pero las de una
partición pequeña esta repleta, como sucede en el caso de las particiones 1 y 3 de la
figura a. Una organización alternativa consiste en conservar una sola lista de espera
(como en la figura b). Siempre que una partición quede libre, el trabajo más próximo al
frente de la lista de espera que queda en ella podría cargare en la partición vacía y
ejecutarse. Como es indeseable desperdiciar una partición grande con un trabajo
pequeño, una estrategia diferente consiste en buscar en toda la lista de espera de entrada
siempre que una partición quede libre y tomar el trabajo más grande que quepa en ella.
El asignador de procesos también busca optimizar el desperdicio de memoria; es decir,
no cargar programas muy pequeños en regiones muy grandes ya que éstas son fijas. A
este desperdicio se le llama fragmentación interna.
Esto se ilustra en la figura.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
10
Como puede observarse, el primer proceso puede ser cargado en la región de 30K con
una fragmentación de 5K, el de 12K en la de 15K con fragmentación de 3, el de 15K
tendrá que esperar a que se desocupe la región de 15K (o decidir cargarla en la de 40K
con gran fragmentación), la de 40K puede ser cargada en la de 50K con un desperdicio de
10K, y las de 50K y 7K tendrán que esperar a que alguna región adecuada se desocupe.
También es posible formar varias colas de procesos, una para cada región de memoria
(en este caso 3). Esto se ilustra en la siguiente figura.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
11
En este caso los procesos como van llegando son colocados en la cola que mejor se
acomoden según sus requerimientos de memoria.
Entonces se tienen 3 asignadores de procesos independientes. Cada uno verifica en la
cola de regiones de memoria disponibles sí su hueco está libre, y procede a cargar
procesos en caso afirmativo.
El problema principal de este sistema es cómo seleccionar los tamaños de las regiones y
cuántas de ellas se tendrán, tal que se tenga la menor fragmentación interna posible.
Por lo tanto, el máximo grado de multiprogramación es limitado por el número de
regiones que se escojan.
También si se escogen demasiadas regiones, éstas tenderán que ser pequeñas, por lo
que se puede sufrir de un problema peor que es la fragmentación externa. Esta se tiene
cuando existen regiones de memoria disponibles pero son muy pequeñas para cargar un
proceso, por lo que se tendrá que esperar por otro hueco más grande.
1.5
Multiples particiones contiguas variables
Con un sistema de lote, la organización de la memoria en particiones fijas es simple y
efectiva. En tanto puedan guardarse suficientes trabajos en la memoria para mantener
ocupada a la CPU todo el tiempo, no hay razón para utilizar nada más complicado. Con el
tiempo compartido, la situación es diferente: normalmente hay más usuarios que memoria
para contener todos sus procesos, tal que es necesario guardar los procesos extra en un
disco. El paso de procesos de la memoria central a un disco y de regreso se llama
intercambio.
En un principio, un sistema de intercambio pudiera basarse en particiones fijas, Siempre
que un proceso se bloqueará, éste podría pasarse al disco y colocarse otro proceso en su
partición del disco. En la práctica, las particiones fijas no son atractivas cuando la memoria
es escasa porque una parte muy grande de ella es desperdiciada por programas que son
menores que sus particiones.
El problema con particiones fijas es determinar los mejores tamaños de regiones para
minimizar la fragmentación interna y externa.
Sin embargo, con un conjunto de procesos dinámicos, es poco probable llegar a una
condición óptima. La solución a este problema es permitir que las regiones varíen de
tamaño dinámicamente. Esta solución es llamada múltiples particiones contiguas variables.
Esta forma de manejo de memoria consiste en tener una cola de regiones de memoria
que están disponibles.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
12
La diferencia principal entre las particiones fijas y las particiones variables, es que el
número, localidad y amaño de las particiones varían en forma dinámica en el segundo a
medida que los procesos vienen y se van, mientras que son fijos en el primero. La
flexibilidad de no atarse a un número fijo de particiones que puede ser demasiado grande
o demasiado pequeño mejora la utilización de la memoria, más también complica la
asignación y desasignación de la memoria, así como su control.
Al inicio se tiene un solo bloque de memoria para programas del usuario que resulta de
cargar el Sistema Operativo en la memoria disponible. Esto se ilustra en la figura con una
memoria de 256K.
Cuando los procesos llegan, se checa en la cola de regiones de memoria disponibles si se
puede cargar el proceso. Si la región es muy grande, solo se asigna la necesaria y el resto
es puesto en la cola de regiones de memoria disponibles.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
13
Por ejemplo asuma que los siguientes procesos requieren servicio:
Cola de Procesos
No. de Proceso
1
2
3
4
5
Memoria
requerida
60 K
100 K
30 K
70 K
50 K
Tiempo ráfaga
10
5
20
8
15
Si el algoritmo usado es del tipo primero en llegar primero en salir, podemos cargar a
memoria los 3 primeros procesos:
La cola de regiones de memoria disponible queda con un hueco de 26K; sin embargo, en
ese hueco no es posible cargar ya ninguno de los procesos pendientes, por lo que se dice
que tenemos una fragmentación externa de 26 K. Al terminar el proceso 2, regresa a la
cola de regiones de memoria disponibles un área de 100K en la cual podemos cargar el
proceso 4 de 70K, regresando a la cola el área restante de 30K.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
14
La cola de regiones de memoria disponibles queda: 26, 30 con sus respectivas
direcciones de inicio. Como el proceso 5 no se puede cargar, nos deja una fragmentación
externa de 56K. El siguiente en terminar es el proceso 1, permitiéndonos cargar el
proceso 5 en el área de 60K dejado por el proceso 1, y poniendo en la cola de regiones de
memoria disponibles el área no usada (10K).
La cola de regiones de memoria nos queda: 26, 30, 10 con sus respectivas direcciones.
Como ya no hay procesos que cargar, no podemos afirmar que se tenga una
fragmentación externa de 66K. Esto dependerá de que se pueda cargar o no el siguiente
proceso que llegue. En caso negativo, entonces se tiene efectivamente una fragmentación
externa de 66K.
El esquema anterior, requiere de una estrategia para asignar los huecos de memoria
disponibles. En general se tienen 3 algoritmos: "primero en ajustar" (first-fit), el "mejor en
ajustar" (best-fit), y el "peor en ajustar" (worst-fit).
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
15
"PRIMERO EN AJUSTAR" (First Fit). Carga el programa en el primer hueco
suficientemente grande que encuentra en la lista de regiones de memoria disponibles. Es
el algoritmo más rápido.
"MEJOR EN AJUSTAR" (Best Fit). Busca por el hueco de memoria que menos
fragmentación produzca. Si la lista de regiones de memoria disponibles es mantenida en
orden ascendente, es fácil y rápido encontrar la más adecuada. De otra manera debemos
buscar toda la lista.
"PEOR EN AJUSTAR" (Worst Fit). Carga el programa en el hueco más grande que
encuentra y deja en la lista de regiones disponibles el tamaño del resto de la memoria no
usada. Esta estrategia a veces rinde mejores resultados que la de mejor en caber, ya que
produce huecos grandes de fragmentación que pueden ser mejor utilizados que
fragmentaciones muy pequeñas.
Es adecuado mantener la lista ordenada de mayor a menor para reducir el tiempo de
búsqueda.
El hardware usado para este sistema es exactamente el mismo; es decir, dos registros
que delimitan perfectamente el área del programa a ejecutar.
Por ejemplo:
Utilizando una cola circular, los algoritmos de Round Robin y El primero en caber,
resolver el siguiente problema de múltiples particiones contiguas variables si se tiene una
memoria total de 256 K. El sistema operativo usa 40 K en memoria. Y un cuantum de 2
unidades de tiempo.
La siguiente tabla muestra los procesos, su tiempo de llegada, la memoria que requieren,
y el tiempo que necesitan para ejecutarse.
Tiempo de Llegada
0
1
4
5
6
Número de
Proceso
1
2
3
4
5
Número de Memoria
Requerida
60 K
100 K
30 K
70 K
50 K
Tiempo Ráfaga
10
5
15
8
15
Por ejemplo:
Utilizando una cola circular, los algoritmos de Round Robin y El primero en caber,
resolver el siguiente problema de múltiples particiones contiguas variables si se tiene una
memoria total de 6 MB. El sistema operativo usa 500 K en memoria. Y un cuantum de 2
unidades de tiempo. La siguiente tabla muestra los procesos, su tiempo de llegada, la
memoria que requieren, y el tiempo que necesitan para ejecutarse.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
Tiempo de
Llegada
Número de
Proceso
0
1
3
5
6
1
2
3
4
5
1.5.1
Número de
Memoria
Requerida
1500 K
2500 K
2000 K
1200 K
800 K
16
Tiempo
Ráfaga
8
6
5
4
3
Compactacion
En el ejemplo anterior, se puede apreciar que existe una fragmentación de 66K
compuesta por 3 huecos de 10, 30 y 26K, los cuales son más difíciles de usar que si
fueran un solo bloque de 66K. Sin embargo, es posible compactar la memoria haciendo
que todos los huecos disponibles se junten ya sea en la parte de abajo o del medio de la
memoria.
Esto se ilustra en la siguiente figura:
Para efectuar la compactación, es necesario cambiar de localidad los procesos, por lo
que este sistema solo es posible si el hardware cuenta con relocalización dinámica; ya que
de otra forma, los procesos no podrían trabajar en sus nuevas direcciones.
Como ya se menciono, es posible combinar todas las cavidades (espacios disponibles) en
una grande pasando todos los procesos lo más abajo que sea posible. Esta técnica se
conoce como comprensión de la memoria. Esto no suele efectuarse porque requiere
mucho tiempo de la CPU.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
17
UNIDAD 2
ALMACENAMIENTO VIRTUAL
Objetivo
El alumno conocerá los antecedentes de la técnica de Memoria virtual y comprenderá su
importancia en los Sistemas Computacionales actuales.
Temario
2.1
2.2
2.3
2.4
2.5
Nacimiento del concepto de almacenamiento virtual
Concepto de memoria virtual
Overlay
Paginación
2.4.1 Hardware de paginación
2.4.2 Tabla de páginas
2.4.3 Demandador de páginas
2.4.4 Algoritmos de reemplazo
Segmentación
2.5.1 Hardware de segmentación
2.5.2 Tabla de segmentos
2.5.3 Compartimiento de código
2.5.3.1
Código reentrante
2.5.3.2
Compartimiento en página
2.5.3.3
Compartimiento en segmentos
Bibliografía:
Sistemas Operativos Modernos
Autor: Andrew Tanenbaum
Editorial: Prentice Hall
Sistemas Operativos
Autor: William Stallings
Editorial: Prentice Hall
Almacenamiento virtual
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
18
Introducción
En el siguiente capítulo se analizará que la administración de memoria establece una
interrelación estrecha y compleja con el hardware del procesador y el software del sistema
operativo. Por consiguiente, se verán aspectos de hardware de la memoria virtual,
considerando paginación, segmentación y la combinación de ambas. Con esto se consigue
abarcar temas del diseño de un servicio de memoria virtual para el sistema operativo.
2.1
Nacimiento del concepto de almacenamiento virtual
En el capítulo de manejo de memoria, se consideró que para que un proceso pueda ser
ejecutado, éste debe estar cargado completamente en la memoria principal de la
máquina. Esta restricción, parece necesaria y razonable, pero limita el tamaño de los
programas a ejecutar al tamaño de la memoria física.
En realidad, examinando programas típicos reales, se llega a la conclusión de que en
muchos casos no es necesario cargar el programa completo en memoria. Por ejemplo.
•
Algunos programas tienen rutinas para manejar condiciones de error. Dado que
estos problemas casi nunca ocurren, el código de esta rutina es rara vez ejecutado.
Los arreglos, listas y tablas, son generalmente declarados con tamaños mucho
mayores al que llegan a necesitar, por lo que se desperdicia memoria.
Ciertas opciones de algunos programas rara vez son ejecutados.
•
•
Aún en el caso en el que el programa entero sea ejecutado, es posible que no sea
necesario cargarlo completo a un mismo tiempo. La habilidad de ejecutar un programa
que está parcialmente en memoria puede traer muchos beneficios. Por ejemplo.
•
Un programa no estaría limitado por la cantidad de memoria RAM disponible. Los
usuarios podrían escribir programas con un número de instrucciones muy grande.
Dado que cada usuario podría tomar menos memoria RAM, más usuarios podrían
correr al mismo tiempo, elevando el grado de multiprogramación y por lo tanto
mejorando la utilización del CPU.
Se requerirían menos operaciones de E/S para cargar cada usuario en memoria
puesto que los programas serían más cortos.
•
•
En general, correr un programa que no está enteramente en memoria, beneficiaría tanto
al sistema como al usuario. Existen dos técnicas que permiten realizar esto: Overlays y
Memoria Virtual.
2.2
Concepto de memoria virtual
Es la separación de la memoria lógica del usuario de la memoria física. MV es una técnica
que permite la ejecución de programas que no pueden estar completamente en memoria.
VENTAJAS
•
Los programas pueden ser mayores que la memoria física.
Ing. Lamia Hamdán Medina
•
•
Sistemas Operativos II.
19
Abstracción de Memoria Principal es un arreglo de almacenamiento uniforme y
extremadamente grande, que separa la memoria lógica, según ve el usuario de la
memoria física.
Libera a los programadores de la preocupación acerca de las limitaciones de
almacenamiento de memoria.
DESVENTAJAS
•
•
2.3
No es fácil de implementar.
Puede reducir considerablemente el rendimiento.
Sobreposicion. (overlay)
Es una técnica que permite a un programa ser más grande que la cantidad de memoria
otorgada a él, sobreponiendo en una misma área de memoria dos o más subprogramas
que no se usan al mismo tiempo, ni se llaman entre sí. Cuando se escribe un programa
con overlays, el lenguaje que se use debe tener esa capacidad, tal es el caso de algunos
pascales como el turbo pascal 3.0. Ejemplo:
Considere dos subprogramas escritos en pascal: Procedure uno y procedure dos, los
cuales son llamados por un programa principal cuyo nombre es prueba. El programa
completo nos queda:
PROGRAM PRUEBA;
VAR (*Variables del programa prueba*)
-
PROCEDURE UNO;
BEGIN
END;
PROCEDURE DOS;
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
20
BEGIN
END;
BEGIN (*Programa prueba*)
END. (*Programa prueba*)
El archivo compilado queda formado como se ilustra en la siguiente figura.
ARCHIVO prueba.com
Si por ejemplo, el código del programa principal (prueba) ocupa 100 K y los
procedimientos uno y dos ocupan 30 y 50 K respectivamente, y la memoria asignada al
usuario es de solo 150 K, es obvio que el programa no podrá ser corrido.
Sin embargo, si los procedimientos uno y dos no se llaman entre ellos, se puede cargar
solo uno de ellos a la vez junto con el programa principal. Esto se haría de la siguiente
manera:
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
21
PROGRAM PRUEBA;
VAR
(*Variables del programa prueba*)
OVERLAY PROCEDURE UNO;
BEGIN
END;
OVERLAY PROCEDURE DOS;
BEGIN
END;
BEGIN (*Programa prueba*)
END. (*Programa prueba*)
Lo anterior crea el mismo archivo prueba pero sin el código de los dos subprogramas y
un archivo más llamado prueba.000 (archivo de overlay) con el contenido de ambos
subprogramas.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
22
El programa es cargado a memoria colocando el código del archivo prueba, y dejando un
hueco reservado para cargar el código de un subprograma u otro contenido en el archivo
de overlay. Esto se ilustra en la siguiente figura.
El área de overlay es del tamaño del más grande de los overlays. Por lo tanto, al correr
el programa, sólo el código de uno de los subprogramas es cargado a la vez en la misma
área de memoria, permitiendo correr el programa como si estuviera cargado en memoria
totalmente. Tiene la desventaja que el programa corre un poco más lento por tener que ir
a disco (principalmente si es disquete).
A continuación se presenta un programa ejemplo de overlay.
PROGRAM MEMOVIRT;
OVERLAY procedure UNO;
begin
GotoXY(8, 2);
write('CORRIENDO PROCEDIMIENTO UNO');
readln;
end;
OVERLAY procedure DOS;
begin
GotoXY(8, 6);
write('CORRIENDO PROCEDIMIENTO DOS');
readln;
end;
BEGIN
ClrScr;
GotoXY(1, 0);
write('CORRIENDO PROGRAMA PRINCIPAL');
readln;
UNO;
GotoXY(1, 4);
write('CORRIENDO PROGRAMA PRINCIPAL');
readln;
DOS;
write('FIN DEL PROGRAMA PRINCIPAL');
readln;
END.
Ing. Lamia Hamdán Medina
2.4
Sistemas Operativos II.
23
Paginación
El sistema de particiones variables sufre del problema de fragmentación externa ya que
un proceso debe ser cargado en memoria contigua. Este problema puede ser resuelto por
compactación o por paginación.
La Paginación permite que un programa sea cargado en memoria no contigua; es decir,
en varios fragmentos fijos no contiguos.
2.4.1
Hardware de paginación
El hardware utilizado en paginación se ilustra en la siguiente figura.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
24
La memoria física es dividida en bloques de tamaño físico llamados "frames" o cuadros.
La memoria lógica (direcciones generadas por el compilador), es también dividida en
bloques del mismo tamaño llamados páginas. Cuando un programa va a ser ejecutado,
sus páginas son cargadas en los cuadros disponibles, y la tabla de páginas es definida
para traducir de páginas del usuario a cuadros de memoria.
Cada dirección lógica
generada por un programa en el CPU, es dividida en dos partes: un número de página (p)
y un desplazamiento de página (d).
El número de página es usado como índice de la tabla de páginas donde se encuentra la
dirección del cuadro que le corresponde en la memoria física.
Esa dirección es combinada con el desplazamiento de página para definir la dirección
exacta que se anda buscando. La combinación es como sigue:
Dirección física = (no. de cuadro x no. de palabras por página + desplazamiento de
página)
Por ejemplo, considere una memoria usando un tamaño de página de 4 palabras y una
memoria física de 28 palabras (7 cuadros). En la siguiente figura se muestra cómo la
memoria desde el punto de vista del usuario es mapeada en memoria física.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
25
Por ejemplo, la dirección lógica 4 está en página 1 y un desplazamiento de 0. De acuerdo
a la tabla de páginas ésta es mapeada en el cuadro 2, y la dirección exacta de la dirección
lógica 4 es: (2 * 4 + 0)= 8.
La dirección lógica 13 corresponde a (1 * 4 + 1)= 5
La dirección lógica 3 corresponde a (6 * 4 + 3)=27
La dirección lógica 0 corresponde a (6 * 4 + 0)=24
Es importante notar que paginación es por sí misma una forma de relocalización dinámica.
Un aspecto importante de paginación es la clara separación entre la memoria desde el
punto de vista del usuario y la memoria física actual. El usuario ve la memoria como un
espacio contiguo, conteniendo solo su programa. En realidad, el programa del usuario esta
disperso a través de toda la memoria física, la cual también contiene otros programas. La
traducción entre ambas memorias es realizada por la tabla de páginas que es manejada
por el sistema operativo.
La Paginación viene a ser un esquema de múltiples particiones fijas no contiguas.
2.4.2
Tabla de páginas
El mecanismo básico de lectura de una palabra de memoria supone la traducción por
medio de la tabla de páginas de una dirección virtual o lógica, formada por un número de
página y un desplazamiento, a una dirección física que está formada por un número de
marco y un desplazamiento. Puesto que la tabla de páginas es de longitud variable, en
función del tamaño del proceso, no es posible suponer que quepa en los registros. En su
lugar, debe estar en memoria principal para ser accesible. La siguiente figura, sugiere una
implementación en hardware de este esquema. Cuando se está ejecutando un proceso en
particular, la dirección de comienzo de la tabla de páginas para este proceso se mantiene
en un registro. El número de página de la dirección virtual se emplea como índice en esta
tabla para buscar el número de marco correspondiente. Este se combina con la parte de
desplazamiento de la dirección virtual para generar la dirección real deseada.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
26
Asignación de memoria en paginación.
En el sistema de paginación, cuando un proceso nuevo llega al dispositivo de spool, es
seleccionado por el asignador de procesos para ser cargado a memoria.
Primero
comprueba su requerimiento de memoria en páginas. En seguida busca en la lista de
cuadros de memoria disponibles para ver si es posible cargar el proceso. Cada página
requiere un cuadro, por lo que si el proceso consta de n páginas, deberá haber n cuadros
de la memoria física para pode r cargarlo. Esto se ilustra en la figura anterior.
El sistema de paginación está exento de fragmentación externa, ya que todos los
cuadros pueden ser otorgados a cualquier proceso que lo necesite. Sin embargo, es
posible tener fragmentación interna ya que los cuadros son de tamaño fijo y sí un
programa no logra llenar la página completa, se tendrá un desperdicio. El peor caso es
cuando un programa requiere de n páginas más una palabra, ya que casi toda la página
quedará vacía.
Paginas compartidas.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
27
Una de las ventajas de paginación, es poder compartir código común. Esta característica
es particularmente importante en sistemas operativos del tiempo compartido.
Considere un sistema el cual soporta 40 usuarios, cada uno de los cuales ejecuta un
intérprete BASIC. Si el intérprete consiste de 60K de código y 40K de espacio para el
programa y datos del usuario, se requerirían 40 x 100= 4000 K para soportar a los 40
usuarios.
Si el código es reentrante (no modificable a sí mismo), éste puede ser compartido por
todos los usuarios, por lo que sólo se requeriría una copia del intérprete (60K) para todos,
más 40K de código de datos para cada uno de los procesos. Esto nos da un requerimiento
de 60K + 40(40 k) = 1660 K, un ahorro considerable frente a los 4000 K. En la siguiente
figura se ilustra un ejemplo similar con un intérprete BASIC de 3 páginas compartido por 3
procesos.
COMPARTIMIENTO DE CÓDIGO EN AMBIENTE DE PAGINACIÓN
2.4.3
Demandador de páginas
Memoria virtual en paginación
Es una técnica que permite ejecutar programas que no están enteramente cargados en
memoria, dando al usuario la impresión de que tiene una memoria mucho mayor a la
memoria física de la máquina, por lo que puede escribir programas muy extensos. La
memoria virtual en paginación está constituida por dos subsistemas: El demandador de
páginas y el algoritmo de reemplazo de página.
En el demandador de páginas, en lugar de cargar en memoria todas las páginas que
componen el programa, como se hacía en el esquema de paginación visto anteriormente,
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
28
las páginas se van cargando según lo vaya requiriendo la ejecución de éste; es decir, que
una página nunca será cargada a memoria a menos que sea necesaria.
Sin embargo, cuando el CPU trata de usar una página que no ha sido traída a memoria,
traduce una dirección de usuario en una dirección física utilizando la tabla de páginas,
pero como esta dirección no tiene un cuadro asociado, entonces la dirección es inválida y
se genera un error abortando el programa.
Para evitar este problema, el hardware de paginación es modificado agregando un bit de
validación. De esta manera, si una página no ha sido traída a memoria, el bit es puesto a
1 ó inválido. Esto se ilustra en la figura.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
29
De esta manera, cuando se accesa la tabla de páginas, es posible saber si la página está
en memoria ó no. Si la página no está cargada en memoria, en lugar de producir una
interrupción al sistema operativo del tipo de dirección de memoria ilegal, la cual abortaría
el programa, ahora se genera una interrupción de otro tipo indicando que la página no
está en memoria. El manejador de esta interrupción procederá a cargar la página faltante
y proseguirá la ejecución del programa. Esto se ilustra en la siguiente figura.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
30
El procedimiento se resume en los siguientes puntos.
1.- Primero checamos la tabla interna mantenida en el bloque de control de proceso, para
determinar si la referencia es un acceso a memoria válido o inválido. Si fue inválido,
abortar el programa.
2.- Si fue una referencia válida pero aún no hemos traído la página, debemos traerla
ahora.
3.- Encontrar un cuadro libre (buscando en la lista de cuadros disponibles), y determinar
en qué lugar en disco se encuentra la página faltante.
4.- Hacer una operación de lectura para traer la página deseada
asignado.
al cuadro nuevo
5.- Cuando la lectura se haya completado, modificar la tabla interna y la tabla de páginas
para reflejar que la página está ahora en memoria.
6.- Restablecer la instrucción que fue interrumpida por la página faltante. El proceso
puede ahora accesar a la página como si siempre hubiera estado en memoria.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
31
Hay que hacer notar que al generarse la interrupción, es necesario guardar el estado del
proceso interrumpido (registros, código de condiciones, contador del programa) en su
PCB correspondiente, de tal manera que el proceso pueda ser restablecido después de
haber traído la página faltante.
En el caso extremo, nosotros podemos empezar la ejecución de un programa con cero
páginas en memoria. El proceso inmediatamente generará una petición de página con la
primera instrucción. Después de que esta página sea traída, el programa continuará
ejecutándose y generando peticiones de páginas (como sea necesario) hasta que cada
página que sea necesaria esté en memoria. En este punto, el programa puede ejecutarse
sin interrupciones de falta de páginas, o bien la frecuencia de falta de páginas puede
mantenerse en un nivel razonablemente bajo. Se estima que este nivel debe ser del orden
de un acceso de memoria en 100000. De no ser así, la ejecución de los programas se
alenta dramáticamente debido al tiempo total transcurrido desde que se genera la
interrupción, se checa si es una página faltante, determina la posición de la página en
disco, se lee y escribe en un cuadro libre, actualiza la tabla y se restablece la instrucción
interrumpida. Este tiempo en promedio es del orden de 10 milisegundos.
Se ha dicho que uno de los principales beneficios de no cargar completamente los
programas, es que nos queda más memoria disponible y por lo tanto más usuarios pueden
ser cargados al mismo tiempo, aumentando el grado de multiprogramación. Por ejemplo
si tenemos 40 cuadros de memoria física y un programa que tiene 10 páginas pero solo
usa realmente 5, podríamos cargar hasta 8 programas similares en lugar de 4 si no
tuviéramos memoria virtual.
Sin embargo, sí repentinamente los ocho programas
requirieran usar las 10 páginas completas se tendría una demanda de 80 cuadros cuando
solamente se tienen 40.
Aunque esta situación es poco probable, ésta llega a ser muy
factible cuando aumentamos el grado de multiprogramación, al punto en que la memoria
promedio de uso, se aproxima a la memoria física disponible.
Cuando esta situación se presenta, el sistema operativo tiene varias opciones:
1.- Abortar el programa en cuestión. Sin embargo dado que la idea de usar memoria
virtual es beneficiar tanto al usuario como al sistema, es obvio que ésta no es la mejor
opción.
2.- Reducir el grado de multiprogramación, pasando a disco a uno de los usuarios
(swapping) y liberando así todos sus cuadros de memoria que ocupaba. Esta es una
buena solución más no la mejor.
3.- La mejor opción, es utilizar un algoritmo llamado reemplazo de página (page
replacement).
Ing. Lamia Hamdán Medina
2.4.4
Sistemas Operativos II.
32
Algoritmos de reemplazo de página
La política de reemplazo de página trata de seleccionar una página a reemplazar en
memoria principal cuando se debe de cargar una nueva página. Esto resulta dificil de
explicar ya que se involucran varios conceptos interrelacionados, tales como:
•
•
•
El número de marcos de página a asignar a cada proceso activo
Si el conjunto de páginas candidatas para el reeemplazo debe limitarse a las del
proceso que provocó el fallo de página o abarcará a todos los marcos de página
situados en memoria principal.
De entre el conjunto de páginas candidatas, la página que debe elegirse en
particular para el reemplazo.
Existe una regla que debe tenerse en cuenta es que cuanto más elaborada y sofisticada
es la política de reemplazo, mayor es la sobrecarga de hardware y software necesaria para
implementarla.
Cabe mencionar que existe una restricción en la política de reemplazo:
Algunos marcos de memoria principal pueden estar bloqueados. Cuando un marco está
bloqueado, la página cargada actualmente en este marco no puede ser reemplazada. La
mayoría del núcleo del sistema operativo, así como las estructuras clave de control, se
albergan en marcos bloqueados. Además, los buffers de E/S y otras áreas críticas en
tiempo pueden bloquearse en marcos de memoria. El bloqueo se onsigue asociando un bit
de bloqueo a cada marco. Este bit puede guardarse en una tabla de marcos o estar
incluído en la tabla de páginas actual.
El funcionamiento en forma muy básica de un algoritmo de reemplazo de página es el
siguiente:
Si no hay un cuadro libre, encontrar uno que no se esté usando y desocuparlo
escribiendo su contenido a disco, y reflejando el cambio en la tabla de páginas para
indicar que esa página no está más en memoria.
El cuadro libre puede ahora ser utilizado para cargar la página faltante. Esto se ilustra en
la siguiente figura.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
33
Al introducir el algoritmo de reemplazo de página, la rutina del sistema operativo que
sirve la interrupción de una página faltante queda como sigue:
1.- Encontrar la localización en disco de la página deseada.
2.- Encontrar un cuadro libre
Si hay un cuadro, entonces: usarlo
Sino: Usar un algoritmo de reemplazo de página para encontrar un cuadro
Víctima.
Escribir la página víctima al disco.
Actualizar la tabla de páginas para reflejar el cambio.
[Fin del condicional]
3.- Leer la página faltante y escribirla en el cuadro libre.
Cambiar la tabla de páginas.
4.- Restablecer la ejecución del programa.
Note que dos intercambios (swappings) son requeridos si no hay cuadros libres. Esta
situación dobla el tiempo de servicio de una página faltante. Si esto es muy frecuente, el
funcionamiento del sistema puede no ser muy eficiente, por tanto el grado de
multiprogramación debe ser escogido adecuadamente.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
34
La combinación del demandador de páginas con el reemplazador de páginas, es la
manera en que comúnmente se implementa la memoria virtual, la cual constituye una
separación de la memoria lógica de la memoria física. La memoria virtual puede ser
mucho más grande que la memoria física.
Existen varios algoritmos básicos que se emplean para la selección de una página a
reemplazar, entre lo que se encuentran:
•
•
•
•
2.5
Óptima
Usada hace más tiempo (LRU, Least Recently Used)
Primera en entrar, primera en salir (FIFO, First-In First-Out)
De reloj
Segmentación
Segmentación es otro método de administración de memoria, el cual permite cargar un
programa en memoria no contigua.
Este método es más natural ya que generalmente un programa está constituido por un
programa principal y varios subprogramas separados, por lo que cada una de estas
entidades puede ser guardada en un segmento de memoria individual de tamaño exacto
según lo requiera cada uno.
Lo anterior indica que los segmentos deben de ser de longitud variable, en contraste con
paginación en donde las páginas son de longitud fija.
2.5.1
Hardware de segmentación
El uso de la tabla de segmentos es ilustrado en la siguiente figurar.
Cada segmento tiene un nombre o número y una longitud. El usuario por esto especifica
cada dirección por dos cantidades: un nombre de segmento y un desplazamiento.
Dado que ahora una dirección dentro de un programa del usuario (dirección lógica),
debe especificarse como una dirección de 2 dimensiones, y dado que la memoria física es
aún un arreglo de una sola dimensión, es necesario implementar un dispositivo que mapee
o convierta una dirección de dos dimensiones en otra de una sola dimensión. Esto se hace
por medio de la tabla de segmentos.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
35
Memoria virtual en segmentación:
La memoria virtual también puede ser implementada en sistemas de segmentación; sin
embargo requiere de algoritmos de reemplazo más complejos.
Resulta más fácil implementar memoria virtual segmentada a través de sistemas de
segmentación paginada; es decir, los segmentos divididos en páginas. De esta forma, el
usuario ve un sistema segmentado, pero el sistema operativo ve un sistema paginado, por
lo que puede utilizar el algoritmo de reemplazo de página.
2.5.2
Tabla de segmentos
Una dirección lógica consiste de dos partes: un número de segmento "s" y un
desplazamiento "d" dentro del segmento. El número de segmento es usado como índice
en la tabla de segmentos.
El renglón apuntado por ese índice, tiene la dirección donde empieza el segmento
(llamada base del segmento), y un límite que indica el número de palabras de que consta
ese segmento. El desplazamiento "d" de la dirección lógica, debe estar entre 0 y el límite
del segmento: sí no, entonces se tiene un error de dirección, por lo que se manda una
interrupción al sistema operativo.
Si el desplazamiento es legal, entonces es sumado a la base del segmento, para producir
la dirección de la palabra deseada en la memoria física. Considere el ejemplo mostrado en
la siguiente figura:
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
36
Tenemos cinco segmentos numerados del 0 al 4. Los segmentos son almacenados en la
memoria física tal como se muestra en la figura. La tabla de segmentos tiene un renglón
separado para cada segmento que nos da la dirección de inicio de cada segmento (base),
y la longitud de ese segmento (límite). Por ejemplo, el segmento 2 comienza en la
dirección 4300 y tiene 400 palabras de longitud.
Por lo tanto, una referencia a la palabra 53 del segmento 2 es mapeada en la localidad
4300 + 53 = 4353.
Una referencia a la palabra 1222 del segmento cero resultaría en un error y por lo tanto
interrupción al sistema operativo, ya que el desplazamiento 1222 excede el límite del
segmento cero que es de 1000.
2.5.3
2.5.3.1
2.5.3.2
Compartimiento de código
Código reentrante
Un código reentrante es aquel que no se modifica a sí mismo.
Compartimiento en página
Fragmentación en paginación.
El asignador de procesos debe encontrar y cargar en memoria todos los segmentos de un
programa del usuario. Esta situación es similar a paginación excepto que los segmentos
son de longitud variable, (las páginas son todas del mismo tamaño), por lo que la
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
37
fragmentación interna puede ser despreciable. Sin embargo, se puede tener
fragmentación externa cuando todos los segmentos disponibles son demasiado pequeños
para cargar cierto programa.
Segmentación viene a ser un esquema de múltiples particiones no contiguas variables.
2.5.3.3
Compartimiento en segmentos
Segmentos compartidos
Una ventaja de segmentación es que pueden compartirse segmentos de código común a
varios procesos: por ejemplo compartir entre dos usuarios una subrutina escrita en
FORTRAN, o un editor de textos. Esto se ilustra en la siguiente figura:
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
38
UNIDAD 3. SISTEMA DE ARCHIVOS
Objetivo : Conocer los elementos básicos de la Administración de Archivos como parte
del Sistema Operativo.
TEMARIO
3.1
ORGANIZACIÓN LÓGICA Y FÍSICA
3.2
MECANISMOS DE ACCESO
3.3
OPERACIONES DE ARCHIVO
3.4
DIRECTORIOS
3.5
SEGURIDAD
3.5.1 PRINCIPIOS DE DISEÑO PARA LA SEGURIDAD
3.5.2 AUTENTIFICACIÓN DE USUARIOS
3.6
MECANISMOS DE PROTECCIÓN
3.6.1 DOMINIOS DE PROTECCIÓN
3.6.2 LISTAS DE CONTROL DE ACCESO
3.6.3 MODELOS DE PROTECIÓN
BIBLIOGRAFÍA:
1. Apuntes de Sistemas Operativos II
Sistemas de Archivos
Administración de archivos
En la mayoría de las aplicaciones, el archivo es el elemento central.
Los archivos tienen una vida fuera de cualquier aplicación individual que los utilice para
Entrada y Salida.
Los usuarios desean:
• Acceder a los archivos
• Guardar y mantener la integridad de su contenido.
Sistemas de administración de archivos (S. A. A)
Proporciona a los usuarios y aplicaciones servicios relativos al empleo de los archivos.
Normalmente la única forma en que un usuario o aplicación puede acceder a los archivos
es mediante S. A. A.
Objetivos de la administración de archivos
1. Cumplir con los necesidades de archivos de datos y requisitos del usuario.
2. Garantizar a medida de lo posible, que los datos de los archivos sean válidos.
3. Optimizar el rendimiento.
4. Ofrecer soporte de Entrada – Salida para la variedad de tipos de dispositivo de
almacenamiento.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
39
5. Minimizar o eliminar la posibilidad de pérdida o destrucción de datos.
6. Ofrecer un conjunto estándar de rutina de interfaz de Entrada – Salida.
7. Proporcionar soporte de Entrada – Salida para múltiples usuarios.
El S. A consta de 2 partes distintas:
1. Colección de Archivos, cada uno para el almacenamiento de Datos.
2. Estructura de Directorios, organiza y proporciona información acerca de los
archivos en el sistema.
Ing. Lamia Hamdán Medina
3.1
Sistemas Operativos II.
40
Organización lógica y física
Para facilidad de uso de un sistema de cómputo, los sistemas operativos proporcionan un
medio abstracto que permite manejar los dispositivos de almacenamiento del sistema, sin
necesidad de conocer las propiedades físicas de éstos. Esto se hace mediante la definición
de una unidad de almacenamiento lógico en lugar de una unidad de almacenamiento
físico.
Esta unidad de almacenamiento lógico es el archivo.
Un archivo es una colección de información relacionada definida por su creador.
Regularmente los archivos representan programas y/o datos.
En general un archivo es una secuencia de registros lógicos.
Los registros lógicos están constituidos por bytes o grupos de bytes que pueden
significar para el usuario diferentes tipos de datos (por ejemplo valores numéricos o
cadenas de caracteres).
Los registros lógicos pueden ser definidos de varios tamaños de anchura: sin embargo, si
ésta no es la misma que la del registro físico (disco), crea el problema de desperdicio de
espacio si es menor, o de no poder escribirlo si es mayor.
Este problema es solucionado en el S.O. mediante el uso del factor de bloqueo.
En este método, los registros lógicos son agrupados o empacados según su tamaño para
luego ser almacenados en el registro físico.
Por ejemplo: Si la anchura del registro físico es de 256 bytes, y el registro lógico fue
definido de 128 bytes, entonces tendremos un agrupamiento de dos registros lógicos por
cada registro físico.
Se dice que se tiene un factor de bloqueo de dos.
Si el registro lógico se define de 80 bytes y el registro físico es de 256 bytes, el
S.O. adopta un factor de bloqueo de 3.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
41
Sin embargo en este tamaño de registro lógico se desperdicia algo de espacio.
También se puede dar el caso de que el registro lógico exceda en tamaño al registro
físico. En este caso, un registro lógico es colocado en más de un registro físico. Por
ejemplo si un registro lógico es de 500 bytes y el físico de 256, nos queda:
En la mayoría de los S.O., el usuario puede escoger el factor de bloqueo que considere
más adecuado. El registro físico no puede ser modificado dado que es una característica
física de la unidad de disco.
El S.O. también provee la facilidad de tener registros de longitud variable, aunque esto
es más común en cintas que en discos. Las cintas, dadas sus características físicas que
solo permiten acceso secuencial, son utilizadas solo para respaldos de información.
3.2
Mecanismos de acceso
Secuencial
Los registros lógicos se escriben uno detrás de otro por medio de un apuntador que se
mueve automáticamente. El usuario no tiene control sobre el apuntador. Es difícil insertar
una componente en medio de otras; así como eliminar una componente dada. Su uso de
espacio es eficiente.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
42
Directo
Se puede especificar en qué registro posicionar el apuntador y escribir o leer en él. Si
no se tiene cuidado se puede desperdiciar mucho espacio.
Archivos con llaves de busqueda
Aunque el acceso directo es el más rápido, si no se sabe en que registro está la
información que buscamos no es posible llegar a ella. Para poder hacer una buena
organización y acceso rápido a la información se utilizan los archivos con llaves de
búsqueda. A continuación se revisan varias técnicas.
Archivos con índices. Constan de un archivo de datos y uno o más archivos de índices.
Indexado puro (no secuencial). Desarrollado con índices densos (un apuntador
por cada registro del archivo de datos). El archivo de datos se mantiene en orden
cronológico (como se dio de alta), mientras que el de índices se mantiene
ordenado por la llave de búsqueda. Se pueden tener varias llaves de búsqueda
alternas. Ocupa más espacio y es más lento que el indexado secuencial. Es fácil
agregar nuevos registros, pero se requiere reordenar el archivo de índices cada vez
que se haga ésto.
Indexado secuencial. Desarrollado generalmente con índices escasos (aunque
también pueden desarrollarse con índices densos). El archivo de datos se ordena
físicamente de acuerdo a la llave de búsqueda y después se generan los archivos
de índices. En el nivel de índices más alto se hace una búsqueda binaria que nos
posiciona en otro nivel, y así sucesivamente hasta llevarnos al archivo de datos;
una vez ahí, se busca secuencialmente ya que el archivo está ordenado
físicamente. No se pueden tener llaves de búsqueda alternas. Si se necesita
insertar nuevos registros se generan áreas de desborde (listas encadenadas).
Ocupa menor espacio en disco y tiene un tiempo de acceso más rápido que los
indexados puros. Se recomienda para mantener grandes volúmenes de información
que no cambia con mucha frecuencia y que requiere tiempos de acceso rápidos.
Árboles. Se basan en la versatilidad que proporciona el tener índices que se
expanden o encogen dinámicamente. El archivo de datos se mantiene en forma
cronológica. Sus algoritmos para buscar, insertar y eliminar registros son más
complejos que los de ambos tipos de indexados, pero tienen la ventaja sobre éstos
que sus archivos casi no necesitan ser reorganizados. Existen varios tipos de archivos
con árboles, como los Search Trees , los Balanceados B y B+, los Binarios
Balanceados (AVL), y Binarios No-balanceados. Los más usados son los B y B+.
Árboles B+. Cualquier camino desde la raíz a una hoja tiene la misma longitud.
Permiten tener llaves de búsqueda repetidas (por ejemplo, varios nombres
homónimos). Impone un gasto extra durante la inserción o eliminación de nodos,
además de requerir espacio extra. Su estructura es más sencilla que los B. Usa
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
43
varios niveles de índices: los internos y los de hoja. El apuntador al archivo de
datos se almacena siempre en los nodos hoja.
Árboles B. Similares a los B+ pero elimina el almacenamiento de valores de llave
de búsqueda repetidos, por lo que requiere menos nodos para almacenar los
índices. Su estructura es más compleja debido a que sus ramas son más largas y
por lo tanto la eliminación de un nodo resulta más complicada que en un B+. Su
acceso es ligeramente más rápido que los B+. Usa varios niveles de índices: los
internos y los de hoja. El apuntador al archivo de datos se puede almacenar en
cualquier nivel. Puede requerir más niveles que los B+.
Hashing. Utiliza funciones que convierten las llaves de búsqueda a números enteros
entre 0 y el número máximo de entradas en el archivo de datos. No existen archivos
de índices; por esta razón, este método es el más rápido. Sin embargo, tiene el
problema de que dos o más llaves pueden generar el mismo número de registro
ocasionando colisiones. También tiene el problema de que si el archivo alcanza el
número máximo de entradas ya no pueden insertarse nuevos registros. Existen varios
métodos para manejar colisiones.
Memoria abierta. Si al tratar de insertar un nuevo registro, su llave genera una
colisión, el registro se coloca en la posición más cercana al lugar que le
correspondía. Por lo tanto, cuando una llave nos lleva a un registro en el archivo
de datos y éste no es el que buscamos, se hace una búsqueda secuencial hasta
encontrar el registro deseado.
Encadenamiento de colisiones. Se genera una lista encadenada por cada
registro que genera colisiones. Cuando se llega a un registro y éste no es el que
buscamos, entonces realizamos una búsqueda secuencial en la lista encadenada
hasta encontrar el registro deseado.
Doble hashing. Cuando una llave genera una colisión, se pasa por una segunda
función de hashing (diferente a la primera), dando oportunidad de que la
posibilidad de generar una colisión disminuya. Si aún así colisiona, se usa
cualquiera de los otros dos métodos.
3.3
Operaciones de archivos
Es deseable que un S.O. permita crear archivos, escribir en ellos, leerlos y eliminarlos
cuando no se necesiten más. También es deseable poder editar y modificar un archivo,
copiarlo a otro dispositivo por ejemplo a la impresora, y renombrarlo.
1.
Crear un archivo
Se debe encontrar espacio para éste en el S. A
Se debe hacer una entrada en el directorio para el nuevo archivo. La entrada en el
directorio registra el nombre del archivo y su ubicación en el S. A.
2.
Escribir un archivo
Para escribir un archivo, hacemos una llamada al sistema especificando tanto el
nombre del archivo como la información que se va escribir en él. Dado el nombre
del archivo el sistema busca en el directorio para encontrarle una ubicación. El
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
44
sistema debe mantener un apuntador de escritura a la ubicación en el archivo
donde va a tener lugar la siguiente escritura. El apuntador de escritura debe
actualizarse siempre que ocurra una escritura.
3.
Leer un archivo
Para leer un archivo empleamos una llamada al sistema que especifica el nombre
del archivo y el lugar (en la memoria) donde deberá colocarse el siguiente bloque
del mismo. Nuevamente, se busca en el directorio la entrada asociada, y el sistema
mantiene un apuntador de lectura a la ubicación en el archivo en donde va a tener
lugar la siguiente lectura. Una vez que se ha realizado la operación el apuntador de
lectura se actualiza.
Debido a que en general un archivo se está leyendo o escribiendo, la mayoría de
los sistemas mantienen sólo un apuntador de la posición actual en el archivo.
Tanto en la operación de lectura como la de escritura emplean este mismo
apuntador, reduciendo la complejidad del sistema y ahorrando espacio.
4.
Reposicionarse dentro de un archivo
Se busca en el directorio la entrada apropiada y se asigna un valor dado a la
posición actual del archivo. El reposicionamiento dentro de un archivo no necesita
incluir una operación real de entrada – salida. Esta operación sobre el archivo se
conoce como Búsqueda en el archivo.
5.
Borrar un archivo
Para borrar un archivo buscamos en el directorio el archivo designado. Una vez
que se ha encontrado la entrada asociada, liberamos todo el espacio del archivo
(para que pueda ser utilizado por otros archivos) y borramos la entrada del
directorio.
6.
Truncar un archivo
Hay ocasiones en que el usuario desea que los atributos de un archivo
permanezcan iguales, pero quiere borrar el contenido del archivo. En lugar de
obligar al usuario a borrar el archivo y después volverlo a crear, está función
permite que todos los atributos permanezcan sin modificación (excepto la longitud
del archivo) pero restableciendo el archivo a una longitud cero.
7.
Tipos de Archivo
Un aspecto importante en el diseño de sistemas de archivos (SA) y de todo el
sistema operativo es si el sistema operativo deberá reconocer y soportar tipos de
archivo. Una técnica común para implementar tipos de archivo consiste en incluir el
tipo como parte del nombre del archivo.
El nombre se divide en 2 partes: nombre y extensión, separados normalmente por
un punto.
El sistema utiliza la extensión para indicar el tipo de archivo y el tipo de
operaciones que pueden realizarse sobre dicho archivo.
3.4
Directorios
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
45
Cada dispositivo de almacenamiento, mantiene una tabla de contenido, en la cual se
especifica el nombre, dirección y tamaño de cada uno de los archivos existentes en esa
unidad. Esta tabla es conocida como directorio.
La información contenida en un directorio es comúnmente la siguiente:
Nombre de archivo.
Tipo de archivo (por ejemplo binario o ASCII).
Localización, dispositivo y dirección donde se encuentra el archivo.
Tamaño en bytes, palabras o bloques.
Máximo tamaño disponible.
Protección de acceso para lectura, escritura, ejecución, etc.
Fecha de creación o última modificación.
Otros.
Estructura de un directorio
Existen muchas formas y métodos de implementar un directorio. Algunas de las más
comunes son las siguientes.
Directorio de un nivel
Es el más simple de todos. En este tipo de directorio se agrupan todos los archivos del
sistema en una sola lista o tabla, por lo que si se tiene más de un usuario, es necesario
que los nombres sean únicos. Es recomendable para sistemas de un solo usuario. Se
puede implementar en forma lineal o con "hashing".
CAT
BO
A
PRUEBA
DATOS
CORREO
Directorios
Archivos
Directorio lineal.
Está constituido por una lista lineal encadenada. Es fácil de implementar pero es lenta en
acceso ya que para saber si un archivo existe en el directorio hay que hacer una búsqueda
secuencial. Sin embargo, si la lista se ordena alfabéticamente, es posible ejecutar
búsquedas binarias que reducen notablemente el tiempo de búsqueda. La desventaja es
que al dar de alta o de baja nuevos archivos, es necesario reordenar la lista.
Directorio con tabla hash.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
46
Este tipo de algoritmo mejora notablemente el tiempo de búsqueda y tanto las
inserciones como las eliminaciones son muy directas.
Este algoritmo convierte los nombres de archivos a números enteros entre cero y el
máximo tamaño asignado a la tabla Hash. Por ejemplo una tabla de 256 registros,
generará números entre 0 y 255. Obviamente si la tabla se llena, no se podrá agregar otro
más ya que habría que modificar el algoritmo. Además un directorio con tabla Hash debe
proveer un sistema de manejo de colisiones ya que dos o más archivos con nombres
similares pueden producir el mismo número de registro.
Directorio de dos niveles
La principal desventaja de un directorio de un solo nivel, es la confusión de nombres de
archivos entre diferentes usuarios. La solución es crear un directorio propio para cada
usuario. Esto se hace por medio de un árbol de dos niveles como se ilustra en la siguiente
figura.
En este tipo de sistema, cuando un usuario se da de alta, el directorio maestro es
buscado hasta encontrar el directorio del usuario correspondiente (generalmente a través
de un número de cuenta). Cuando ese usuario lista el directorio, sólo los archivos
contenidos en su directorio son mostrados. Esto permite tener nombres repetidos en otros
directorios de otros usuarios, sin peligro de borrar o modificar el archivo equivocado, ya
que cada usuario solo tiene acceso a los archivos de su propio directorio.
Esto último puede representar un problema cuando dos o más usuarios requieren
trabajar en equipo y compartir archivos.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
47
Esto se puede solucionar permitiendo que los usuarios tengan la capacidad de compartir
algunos archivos. Por ejemplo, colocar los archivos más comúnmente usados (editores,
compiladores, etc.) en un directorio público al cual se puede tener un acceso limitado.
Directorios de multiples niveles. (estructura de árbol)
Cuando un usuario tiene diferentes aplicaciones en un mismo directorio, por ejemplo,
programas de COBOL, BASIC y PASCAL, es deseable poder tener cada grupo de
programas en directorios separados, pero bajo el control del mismo usuario.
Esto se
logra por medio de la creación de subdirectorios o directorios de múltiples niveles.
Ejemplo:
El S.O. MSDOS, permite al usuario organizar su directorio en forma de árbol, por ejemplo
como el del usuario 1 de la figura anterior. El S.O. Unix usa una estructura de árbol. El
árbol tiene una raíz. Cada archivo tiene un nombre de trayectoria único. Un nombre de
trayectoria, es el camino desde la raíz hasta el archivo pasando a través de los
subdirectorios.
Directorio de grafos aciclicos
Son una generalización de los directorios del tipo de árbol. Un directorio de árbol
generalmente prohibe el compartir archivos o directorios. Un grafo acíclico sí permite
compartir tanto archivos como subdirectorios completos. Esto se ilustra en la siguiente
figura.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
48
Note que no se generan ciclos de retorno a través de los mismos archivos y
subdirectorios; de ahí su nombre acíclico.
Este tipo de directorios es recomendable en situaciones en que un grupo de usuarios
trabajan como equipo. En este caso, todos los archivos a compartir se colocan en un
directorio.
Los directorios individuales de cada miembro del equipo, contendrán el directorio de
archivos a compartir como un subdirectorio del suyo, por lo que cada uno puede listarlos y
utilizarlos.
La búsqueda y eliminación de archivos es complicada debido a que puede existir más de
una trayectoria a un mismo archivo, cosa que no sucede en los directorios de árboles
(múltiples niveles).
Directorio de grafo general
El directorio de grafo general permite una flexibilidad total para compartir archivos al
permitir que haya trayectorias cíclicas a través de todo el directorio. Esto se ilustra en la
siguiente figura.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
49
Dado que es permitido tener trayectorias cíclicas, se puede caer en el problema de pasar
por la misma trayectoria más de una vez al buscar un archivo, o incluso caer en un lazo
infinito. Por lo anterior, se requieren algoritmos muy complicados para mantener este tipo
de directorios.
3.5
Seguridad
a. Amenazas a la Seguridad
Para comprender los diversos tipos de amenazas a la seguridad, hace falta primero definir
los requisitos de seguridad:
1. Confidenciabilidad
2. Integridad
3. Disponibilidad
b. Tipos de Amenaza
•
Interrupción (Amenaza de Disponibilidad)
- Destrucción: DD, SA, HW.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
•
Intercepción (Amenaza a la Confidenciabilidad)
- Conexiones Telefónicas
- Copia Ilícita
•
Modificación (a la Integridad)
- Modificación de Mensajes
- Modificación a valores de un archivo
•
Invención (a la Integridad)
- Inserción de Mensajes Falsos
- Adición de Registros
50
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
51
TABLA DE AMENAZAS DE SEGURIDAD Y ELEMENTOS DE UN SISTEMA DE COMPUTADORAS
ELEMENTO
DISPONIBILIDAD
CONFIDENCIABILIDAD
INTEGRIDAD
HW
Robo o inutilización de
equipo, robando el servicio.
de
un
SW
Eliminación de programas, Realización de copias no Alteración
programa
en
denegando el acceso a los autorizadas del SW
funcionamiento haciendo
usuarios.
hallar
durante
la
ejecución o haciendo que
realice una tarea no
pretendida.
Dato
Eliminación de archivos, Lectura
de
Datos
No Modificación de archivos
denegando el acceso a los Autorizados.
existentes o invención.
usuarios.
Modificados
Líneas
de Destrucción o eliminación Lectura
de
Mensajes. Mensajes
comunicación de Mensajes, las líneas de Observación del tráfico de retardados, reordenados
o duplicados.
comunicación se hacen no Mensajes.
Invención de Mensajes.
accesibles.
3.5.1 Principios de diseño de medidad de seguridad.
1.
2.
3.
4.
5.
3.6
Mínimo Privilegio.
Ahorro de Mecanismos.
Aceptación.
Medición Total.
Diseño Abierto.
Proteccion de archivos
La necesidad de proteger los archivos es un resultado directo de la habilidad de compartir
archivos. En un sistema que no permite compartir archivos, no es necesario un mecanismo
de protección.
Los mecanismos de protección permiten compartir archivos en una forma controlada,
limitando el tipo de acceso que se puede tener a un archivo.
Los tipos de acceso son los siguientes:
Lectura de un archivo.
Escritura o reescritura de un archivo.
Carga en memoria de un archivo y ejecución.
Agregar nueva información al final del archivo.
Eliminación de un archivo y liberación de su espacio para re usarse.
Otras operaciones que pueden ser controladas son: renombrar, copiar, o editar un
archivo, y listar un directorio.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
52
3.6.1 Dominios de protección
Dominio es un conjunto de parejas (objetos, derechos) cada pareja especifica un objeto y
un conjunto de operaciones que se pueden efectuar con él.
Derecho significa autorización para ejecutar una de las operaciones.
DOMINIO 1
A1[R]
A2[RW]
DOMINIO 2
A3[R]
A4[RWX]
A5[RW]
PRINTER1[W]
DOMINIO 3
A6[RWX]
PLOTTER2[W]
3.6.2 Listas con control de acceso
Consiste en asociar con cada objeto una lista (ordenada) que contenga todos los dominios
que puedan acceder al objeto y que indique como hacerlo.
A0:
A1:
A2:
A3:
A4:
(JUAN, *, RWX)
(JUAN, SSTEMA, RWX)
(JUAN, *, RW-) (ELSA, PERSONAL, R- -)(MARTHA, *, R - -)
(*, ESTUDIANTE, R - -)
(LUIS, *, - - -) (*, ESTUDIANTE, R - -)
3.6.3 Modelos de protección de achivos
Los siguientes son algunos de los esquemas de protección más utilizados por la mayoría
de sistemas operativos
1. No permitir listar los archivos de otro usuario. De esta manera, si no se conoce le
nombre de un archivo, será muy difícil lograr el acceso ya que se tendría que
recurrir a tratar de adivinar el nombre, cosa muy poco probable.
2. Sistema de "passwords" o palabras de pase para cada archivo. Este sistema es
eficiente mientras se escojan los passwords al azar y se cambien frecuentemente.
La protección se puede redondear utilizando otro password para el acceso del
usuario al sistema (número de cuenta).
3. Hacer que el acceso al sistema sea dependiente de la identidad del usuario. Existen
varias maneras de implementar esto. Dos de las más comunes son las siguientes:
Asociar una lista de acceso a cada archivo y a cada directorio, en la cual se
especifican los nombres de los usuarios y tipo de acceso que tiene cada uno de
ellos a ese archivo o directorio. De esta manera, cuando un usuario solicita usar
un determinado archivo, el S.O. checa primero la lista de acceso de ese archivo. Si
ese usuario esta listado para ese tipo de acceso (por ejemplo escribir), entonces le
permite el acceso; si no, un mensaje de error es mostrado al usuario. Una
desventaja de este método, es que si la lista de usuarios es grande, es tardado
leer toda la lista para determinar si el acceso es válido o no.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
53
Para condensar la lista de acceso, muchos sistemas reconocen tres clasificaciones
de usuarios: "creador", "grupo" y "cualquier otro" (ANY). Cada archivo tiene un
creador, el usuario que lo generó. Adicionalmente, el creador puede pertenecer a
un grupo de usuarios que están compartiendo el archivo y necesitan un acceso
similar (por ejemplo los miembros de un equipo de programadores que están
desarrollando un sistema, o los miembros de una clase que requieren compartir
un graficador). Finalmente todos los demás usuarios que ni crearon el archivo ni
pertenecen a ese grupo, forman la clasificación "cualquier otro". Con esta
clasificación, combinada con los tipos de acceso se puede generar una plantilla o
matriz de protección. Ejemplo:
ARCHIVO: TAREA1
ARCHIVO: GRAF
PROTECCION: R W X PROTECCION: R W X
GGA
ARCHIVO: FTN
PROTECCION: R W X
CCG
CCA
El S.O. Unix utiliza el método arriba descrito, usa 3 bits para almacenar los valores C, G, A,
y otros 6 bits para almacenar el nombre del creador y usuarios del grupo al que pertenece
el archivo. Así, 9 bits son suficientes para proporcionar protección al archivo.
Los sistemas HP-3000 utilizan un esquema similar, sólo que además de los campos R W X,
existen otros como A (Append) agregar, y S (Save) guardar.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
54
UNIDAD IV: ADMINISTRADOR DE DISCO
Objetivo: El alumno conocerá las alternativas de asignación de archivos en memoria
secundaria y la administración del espacio libre
Temario
4.1. Caracteristicas fisicas de los discos
4.2. Planificacion de disco
4.3. Optimizacion de busqueda.
4.4. Optimizacion rotacional
4.5. Metodos de asignacion de archivos
Bibliografía
7.
Sistemas operativos,conceptos fundamentales
Silberschatz
Editorial : Addison Wesley
INTRODUCCIÓN
Existen dos tareas principales de la Administración de Almacenamiento Secundario:
1.- Debe asignar el espacio de memoria secundaria a los archivos.
2.- Es necesario guardar constancia del espacio disponible para asignar.
El almacenamiento de archivos tiene una característica general: Direccionar y Transmitir
datos por bloques .La diferencia con la memora principal es que esta Direcciona y
transmite Palabras
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
55
6.1 CARACTERISTICAS FISICAS DE LOS DISCOS
Cada unidad de disco, puede tener varios platos de aluminio rígido con ambas superficies
recubiertas de material magnético (similar al de las cintas).
Los discos son impulsados por un solo motor a una velocidad de alrededor de 3600 RPMS.
Existe una cabeza de lectura/escritura muy cercana a cada superficie de cada plato (del
orden de micrones).
Cada disco se divide en pistas concéntricas y éstas a su vez en bloques llamados sectores.
La información es grabada magnéticamente sobre la pista que esté bajo la cabeza de
lectura/escritura.
Existen unidades de discos de cabezas fijas y de cabezas móviles.
Una unidad de cabezas fijas, tiene una cabeza por cada pista (de cada lado de
cada disco). Esto permite a la computadora cambiar de pista a pista
rápidamente; sin embargo, es muy costosa por requerir gran número de
cabezas.
Las unidades de cabezas móviles, tienen una sola cabeza por cada superficie de
los discos. Se requiere hardware para mover las cabezas pero resulta en una
unidad de más bajo costo aunque más lenta que las de cabezas fijas.
Todas las pistas de una unidad que pueden ser accesadas sin mover las cabezas son
llamadas cilindros. Básicamente un cilindro está constituido por la misma pista de todas las
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
56
superficies de los platos. Por ejemplo, cilindro cero puede ser todas las pistas cero de
todas las superficies. (Normalmente, todas las cabezas se mueven al mismo tiempo y a la
misma posición).
El tiempo de acceso requerido para dar servicio a una lectura/escritura es la suma de los
siguientes tres tiempos:
TIEMPO DE BÚSQUEDA (Seek time). Es el tiempo requerido para que la cabeza se
posicione en la pista o cilindro apropiado. En las unidades de cabezas fijas, este tiempo se
considera cero. Algunos tiempos de discos típicos para PC’s andan alrededor de 40 a 10
mili segundos.
TIEMPO DE LATENCIA o TARDANZA (Latency time). Una vez posicionada la cabeza
en la pista o cilindro correcto, debe esperarse hasta que el bloque deseado rote bajo la
cabeza de lectura/escritura. Es del orden de 5 mili segundos.
TIEMPO DE TRANSFERENCIA (Transfer time). Es el tiempo que se requiere para
transferir la información entre el disco y la memoria. Es del orden de 1 mili segundos.
Ta=Tbusq+Tlaten+Ttransf
DISKETTES
Los discos floppy o diskettes, son diferentes en construcción respecto a los discos rígidos.
En un floppy, la superficie es recubierta con un material magnético duro, tal que la cabeza
de lectura/escritura pueda estar siempre haciendo contacto con la superficie sin destruir la
información. El diskette es mucho más barato pero después de mucho uso, el recubierto
de la superficie y la cabeza se desgastan y deben ser reemplazados. Su tiempo de acceso
es mayor que el de los discos rígidos, ya que no pueden rotar a velocidades muy altas por
la fricción entre la cabeza y el disco.
Su capacidad de almacenamiento va de 100K a 1.2Mbytes o más.
Mientras que los discos rígidos van de 5 Mbytes a varios Gigabytes. Sus tamaños varían de
8, 5 1/4 y 3 1/2 pulgadas.
Pueden ser de uno o ambos lados, y de simple, doble o cuádruple densidad de escritura.
TAMAÑOS TÏPICOS DE DISKETTES
5¼
2S2D Baja Densidad - 360 Kb., 40 pistas, 9 sectores.
5 ¼ 2SHD Alta Densidad - 1.2 Mb., 80 pistas, 15 sectores.
3 ½ 2S2D Baja Densidad - 720 Kb., 80 pistas, 9 sectores.
3 ½ 2SHD Alta Densidad - 1.44 Mb., 80 pistas, 21 sectores.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
57
PASOS PARA FORMATEAR UN DISCO DURO en MSDOS / Windows.
1.- Recabar la información correspondiente a la geometría del disco, por ejemplo, número
de cabezas (platos), cilindros, sectores, capacidad total, etc. Esto puede hacerse en la
carátula del disco o en su manual correspondiente.
2.- Instalarlo físicamente (cable de control y datos, cable de fuentes, tornillos, etc.).
Si el disco no es un maestro sino un esclavo, hay que modificar los “jumpers” del disco (o
en algunos casos de ambos) para indicar que se trata de un esclavo.
3.- Dar de alta el disco en el set-up de la computadora utilizando la información recabada
en el paso 1. Si el disco tiene auto-identificación, ponerlo en auto.
4.- Formatear el disco a bajo nivel. Este paso se omite en discos duros nuevos, y
solamente se da para discos con algún tipo de problema, tal como sector de arranque
dañado, demasiados sectores dañados, etc. que no puedan ser reparados con alguna
utilería de disco. El formato a bajo nivel se hace con utilerías como el diskmanager o
algunas que vienen integradas en el set-up de la máquina. Antes de dar el formato a bajo
nivel se deben especificar algunos parámetros como el interleave (distribución de los
sectores; contiguos, 1:1; terciados, 1:3; etc.), los sectores dañados (Cyl, Hd, BFI), y otros
parámetros opcionales tales como bytes /sectores, etc. Con esta información se procede a
formatear el disco, creando los sectores del disco , numerándolos y verificando su
integridad.
Nota.- Debe tenerse cuidado de que la geometría escogida en el set-up sea exactamente
la marcada en la carátula o manual del disco, pues si se escoge una geometría de
emulación (misma capacidad pero con diferente número de cabezas, cilindros y sectores)
el disco puede dañarse.
5.- Crear las particiones del disco duro y su tabla de particiones. Se utiliza el comando del
sistema operativo Fdisk o la utilería diskmanager. En esta etapa se especifica si el disco
duro se dividirá en varias particiones lógicas (por ejemplo una parte para C:, otra para D:,
otra para E:, etc., o incluso una parte para instalar otro tipo de sistema operativo). Por
omisión se toma todo el espacio disponible del disco duro para una sola partición, a la cual
se le asigna la letra C:. A la partición C: se le denomina “primaria” y debe especificarse
como activa (para arranque). Para crear particiones lógicas D:, E:, etc., primero hay que
crear una partición extendida con el espacio sobrante de la partición primaria, y después
crear cada una de las particiones lógicas, especificando el espacio que se destinará a cada
una de ellas. Las particiones lógicas (D:, E:, etc.), son tomadas por el sistema de archivos
como si fueran discos duros físicos independientes.
6.- Formatear el disco a alto nivel. Esto se hace con el comando del sistema operativo
Format C: /S /V para la partición primaria, o Format Drive: /V en caso de que sea una
partición adicional; donde “drive” corresponde a la letra asignada en el paso anterior (D:,
E:, etc.). Este procedimiento crea la FAT (tabla de asignación de archivos) y la estructura
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
del directorio. Para el caso de la partición primaria (C:)
operativo y lo hace “arrancable”.
58
también copia el sistema
6.2 PLANIFICACION DE DISCO
En los sistemas multiprogramados, los procesos generan peticiones de lectura o escritura
mucho más rápido de lo que pueden ser atendidas por los dispositivos de almacenamiento
de disco. Por esta razón, es necesario generar colas de espera o servicio para cada
dispositivo.
Muchos sistemas atienden estas peticiones en la forma "primero en llegar, primero en ser
servido" o FCFS (first comes, firt served). Este sistema da buenos resultados cuando las
peticiones no alcanzan un volumen muy grande, además de ser una forma justa de
prestar servicio. Sin embargo, cuando el volumen de peticiones se sobrecarga, el método
FCFS puede dar como resultado tiempos de espera muy largos. Esto es debido a que
varias peticiones sucesivas pueden requerir búsquedas de cilindros no contiguos o incluso
opuestos, por ejemplo ir de un cilindro interior a uno exterior, ocasionando búsquedas
muy largas en discos de cabezas móviles.
Cuando se tienen altos volúmenes de peticiones, es conveniente tratar de reducir los
tiempos de acceso tal que pueda prestarse un servicio más eficiente. Para esto, es
necesario reordenar la cola de servicio de acuerdo a parámetros diferentes que a los del
FCFS. A estas técnicas se les llama "planificación de disco.
Un planificador de disco, examina las direcciones de los sectores que tiene cada petición
pendiente en la cola de servicio, y las reordena de tal manera que éstas puedan ser
servidas con un mínimo de movimientos mecánicos.
La planificación de disco, debe intentar maximizar el número de peticiones
servidas por unidad de tiempo, y minimizar el tiempo de respuesta promedio,
eliminando desperdicios de tiempo al efectuar largas búsquedas.
Los dos tipos más comunes de planificación de disco son la optimización de búsqueda y la
optimización rotacional.
Debido a que los tiempos de búsqueda son mayores que los tiempos de latencia, la
mayoría de los algoritmos de planificación se centran en optimizar el tiempo de búsqueda.
La optimización rotacional solo se utiliza bajo condiciones de carga muy pesada, y puede
ser aplicada tanto en discos de cabezas móviles como de cabezas fijas.
6.3 OPTIMIZACION DE BUSQUEDA.
A continuación se describen los principales algoritmos utilizados en la optimización de
búsqueda:
PRIMERO EN LLEGAR, PRIMERO EN SER SERVIDO. (First comes first served).
FCFS. La primera petición que llega es la primera en ser servida. Una petición no puede
ser desplazada por la llegada de otra petición con prioridad más alta.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
59
Este algoritmo da un patrón de búsqueda al azar si las peticiones se encuentran
uniformemente distribuidas en el disco.
FCFS produce tiempos de respuesta aceptables cuando se tiene una carga de peticiones
ligera; es decir, que la cola de servicio no es muy larga. Sin embargo, cuando la cola
aumenta considerablemente, el dispositivo se satura y el brazo del disco tiende a viajar
frenéticamente de un extremo al otro, dando como resultado tiempos de respuesta
largos.
MENOR TIEMPO DE BUSQUEDA PRIMERO. (Shortestseek time first). SSTF.
Este algoritmo sirve la petición que produzca el menor tiempo de búsqueda; es decir,
aquella petición que da por resultado el movimiento del brazo más corto con respecto a
la posición actual del mismo. Por lo tanto, el orden en que llegan no es respetado.
Este tipo de algoritmo presenta un patrón de búsqueda muy concentrado en una sola
región, principalmente las pistas medias; por lo que las pistas internas y externas
reciben una atención pobre.
Tiene la ventaja de que da un buen número de peticiones servidas por unidad de
tiempo, y una media de tiempo de respuesta baja para cargas moderadas, por lo que es
muy recomendable para procesamiento por lotes (batch).
Sin embargo, para sistemas de tiempo compartido no es recomendable debido a que
causa tiempo de respuestas largos para las peticiones que están en las pistas de los
extremos.
BARRIDO (SCAN). En este algoritmo, la cabeza empieza en uno de los extremos del
disco (por ejemplo el exterior), y empieza a moverse hacia el extremo opuesto (el
interior), dando servicio a las peticiones que se encuentran en cada pista que va
encontrando en su camino. Al llegar el extremo opuesto, la cabeza invierte el sentido de
dirección y emprende el viaje de regreso, sirviendo todas las peticiones que se
encuentran en esa trayectoria. Así por ejemplo, si una petición llega a la cola de servicio
en el instante en que la cabeza pasa delante de la pista requerida por esa petición, será
servida casi inmediatamente; mientras que si la petición llega justo detrás de la cabeza,
entonces tendrá que esperar hasta que la cabeza emprenda el viaje de retorno y pase
por la pista solicitada. El viaje de regreso puede ser iniciado no solamente cuando se
alcanza el extremo del disco, sino también cuando ya no haya más peticiones en esa
dirección.
Este algoritmo produce un buen número de peticiones servidas por unidad de tiempo,
así como una buena medida de tiempos de respuesta.
Su característica principal es que evita las discriminaciones que se tienen en el algoritmo
SSTF, por lo que sí es recomendable para sistemas de tiempo compartido. Tiene la
desventaja de que los cilindros de los extremos son visitados con menos frecuencia,
pero esto no es tan notorio como en el algoritmo SSTF.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
60
BARRIDO DE N PASOS. (N STEP SCAN). Es una variante del algoritmo anterior. La
diferencia estriba en que solamente se sirven las peticiones que hayan llegado hasta el
momento en que el brazo inicia el movimiento hacia alguno de los extremos, por lo que
las peticiones que llegan después y que aún podrían ser servidas por encontrarse en la
trayectoria, son diferidas para el viaje de retorno.
Este algoritmo disminuye aún más la discriminación a ciertas peticiones.
BARRIDO CIRCULAR. (CIRCULAR SCAN). C-SCAN. Este algoritmo es otra variante
más del algoritmo SCAN. C-SCAN mueve el brazo de un extremo a otro igual que SCAN,
sirviendo las peticiones que encuentra en su trayectoria. Al llegar al extremo opuesto, el
brazo regresa rápidamente al extremo del que partió, sin servir ninguna petición en su
regreso. Por lo tanto C-SCAN trata el disco como si éste fuera circular; es decir, con la
última pista adyacente a la primera.
C-SCAN elimina completamente la discriminación de los cilindros de los extremos, y
proporciona un tiempo de respuesta más parejo para todas las peticiones.
Una variante de este algoritmo es el C-LOOK, el cual se comporta igual que el C-SCAN
excepto que al irse moviendo hacia el extremo opuesto, si ya no hay más peticiones que
servir en el resto de las pistas, entonces emprende el regreso.
En general, la planificación de disco mejora mucho la eficiencia del sistema; sin embargo,
existen ciertos casos particulares en los que es más adecuado aplicar simplemente un
algoritmo FCFS. Por ejemplo cuando no se tienen distribuciones uniformes como en los
casos de archivos secuenciales muy largos, ya que los registros están todos contiguos y
agrupados en una cierta zona del disco. Esto hace innecesario el algoritmo, ya que sólo
existe una sola petición a través de un gran número de cilindros contiguos.
Otro caso problemático para aplicar la planificación de disco son los archivos secuenciales
indexados tales como KSAM o ISAM, ya que el archivo de datos puede estar almacenado
en cilindros diferentes a los de los índices. Esto hace que se tengan que realizar
búsquedas de un extremo a otro, rompiendo con el algoritmo de planificación. Una
solución para evitar romper con la planificación de disco es diferir el acceso al archivo de
datos hasta que se pase por los cilindros correspondientes.
6.4 OPTIMIZACION ROTACIONAL
Cuando se tienen condiciones de carga muy pesada, la cola de servicio se hace muy larga,
por lo que es necesario considerar la optimización rotacional para que junto con la
optimización de búsqueda puedan manejar adecuadamente las peticiones.
La optimización rotacional se basa en el hecho de que bajo condiciones de carga muy
pesada, la probabilidad de que ocurran referencias al mismo cilindro aumentan, por lo que
se puede utilizar un algoritmo que optimice esas peticiones.
ALGORITMO TIEMPO DE TARDANZA MAS CORTO PRIMERO. Shortest latency
time first). SLTF. En este algoritmo cuando el brazo llega a un cilindro en particular
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
61
(usando cualquier algoritmo de optimización de búsqueda), se examinan todas las
peticiones pendientes para ese cilindro y se sirve primero aquella que tiene el tiempo de
tardanza más pequeño. Esta estrategia se ha usado por muchos años en discos de
cabezas fijas ya que estos tienen un tiempo de búsqueda despreciable. Además es fácil
de implementar.
En resumen, en base a experiencias obtenidas, se puede decir que la mejor política de
planificación de discos se puede manejar en tres etapas: para carga baja, la planificación
SCAN es la mejor; mientras que para cargas medias y pesadas C-SCAN produce los
mejores resultados. Para cargas muy pesadas, el algoritmo C-SCAN con optimización
rotacional produce resultados efectivos.
6.5 METODOS DE ASIGNACION DE ARCHIVOS
Desde el punto de vista del usuario, un archivo es un tipo de dato abstracto. Puede ser
creado, abierto, escrito, cerrado, etc., sin preocuparse por su implementación. Esto es
trabajo del sistema operativo.
El problema principal es cómo asignar espacio a los archivos tal que el espacio del disco
sea eficientemente utilizado y los archivos sean accesados rápidamente.
Existen 3 métodos de asignación de espacio que son los más usados: asignación contigua,
asignación encadenada y asignación indexada. Cada método tiene sus ventajas y
desventajas.
MANEJO DE ESPACIO LIBRE.
Antes de proceder a revisar estos métodos, veremos cómo se maneja el espacio disponible
en un disco. Durante la operación de un sistema de cómputo, los archivos son creados y
eliminados con frecuencia. Dado que el espacio en disco es limitado, es necesario reusarlo
para colocar nuevos archivos.
Para mantener la huella del espacio libre en disco, el sistema de archivos mantiene una
estructura de datos llamada "Lista de espacio libre", en la cual se almacena el número de
los sectores del disco que están disponibles.
Cuando se desea crear un archivo, se recorre esta lista en busca de la cantidad requerida
y se le otorga al nuevo archivo.
El espacio es entonces removido de la lista de espacio libre.
Esta lista es muy importante y existen varias maneras de implementarlas: una de ellas es
por medio de un vector que contiene un bit por cada sector del disco. Si el sector
correspondiente está disponible el bit se pone a cero; si no, se pone a uno. Como ejemplo,
considere un disco donde los sectores 2,3,4,5,8,9,10,11,12,13,17,18,25,26 y 27 están
libres. Entonces el vector que compone la lista de espacio libre nos queda:
110000110000001110011111100011111....
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
62
Otro método es encadenar todos los sectores libres del disco, manteniendo un apuntador
al primer sector libre. Este sector tiene un apuntador al siguiente sector libre, y así
sucesivamente. Ejemplo.
Este sistema no es muy rápido ya que para saber si habrá espacio suficiente, hay que
recorrer la lista y leer cada sector.
Una modificación a este método consiste en encadenar bloques de sectores libres; por
ejemplo si se tienen n sectores libres, en el primer sector se escriben todas las direcciones
del resto de las n-1 sectores libres. En el último sector se escribe la dirección de otro
sector que contiene las direcciones de otro bloque de n sectores libres.
La importancia de este método, es que se puede saber inmediatamente cuántos sectores
libres se tienen en un bloque y si serán suficientes para almacenar un cierto archivo.
Otro método consiste en mantener la dirección del primer sector libre y el número de
sectores contiguos libres que siguen a ese sector. Por lo tanto, en este caso la lista de
espacio libre consiste de una dirección del disco y una cuenta.
ASIGNACION CONTIGUA
El método de asignación contigua, requiere que cada archivo ocupe un conjunto de
direcciones contiguas en el disco. (Las direcciones en el disco generalmente están
ordenadas en una forma lineal). Típicamente, las direcciones se incrementan a través de
todos los sectores en una pista, después a través de todas las pistas de un cilindro, y
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
63
finalmente del cilindro cero al cilindro m (donde m es el número de cilindros en el disco).
En un floppy sería igual, sólo que cada cilindro tiene únicamente dos pistas.
Este tipo de asignación puede soportar tanto acceso secuencial como directo.
La dificultad con la asignación contigua, es encontrar espacio para la creación de un
archivo. Una vez que la lista de espacio libre ha sido definida, podemos definir cómo
encontrar espacio para una asignación contigua. Si el archivo a ser creado es de n
sectores de longitud, debemos buscar en la "lista de espacio libre" n sectores contiguos.
En una lista de espacio libre del tipo vector, necesitamos encontrar n bits en cero en fila.
En una "lista de espacio libre" del tipo de direcciones y cuentas, necesitamos una cuenta
de al menos n sectores.
Para el tipo de asignación contigua, se tienen dos algoritmos:
"PRIMERO EN AJUSTAR" (first fit). Busca el primer hueco de sectores contiguos en el
que pueda caber el archivo.
"MEJOR EN AJUSTAR" (best fit). Busca el hueco de sectores contiguos más pequen~o
en el que pueda caber el archivo.
Actualmente no se sabe cuál es mejor, pero el algoritmo primero en ajustar es el más
rápido.
Ambos algoritmos sufren de fragmentación externa, la cual sucede cuando después de
asignar y desasignar archivos exhaustivamente, el espacio en disco queda reducido a
muchos pedazos pequeños que no son contiguos por lo que llega el momento en que un
archivo no puede ser colocado en ninguno de ellos.
Una solución al problema de
fragmentación externa es aplicar técnicas de compactación (por ejemplo, mensualmente
reempacar el disco).
Otro problema con asignación contigua es que cuando se crea un archivo, puede no
saberse el tamaño de éste, una solución es que el usuario lo estime o el sistema le de un
"default", pero si esta estimación resulta ser muy grande, se desperdiciará espacio.
Por oto lado, si resulta muy baja, no se podrá agregar más registros cuando se llegue al
límite, por lo que habría que abortar la operación para que el usuario genere en archivo
mayor, o bien el S.O. puede buscar un hueco mayor a donde trasladar todo el archivo.
Ejemplo de asignación contigua.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
64
ASIGNACION ENCADENADA
En el método de asignación encadenada, los archivos no tienen la restricción de que
deban ocupar sectores contiguos. En este método, cada archivo es formado por una lista
encadenada de sectores del disco.
El directorio tiene un apuntador al primero y último sector del archivo. A su vez, cada
sector contiene un apuntador al siguiente sector. Por ejemplo, un archivo de 5 sectores de
longitud, puede comenzar en el sector 9, y continuar en el sector 16, después en el sector
1, sector 10 y finalmente sector 25.
El archivo queda disperso por todo el disco. Los
apuntadores no están accesibles al usuario. Esto se ilustra en la siguiente figura.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
65
Si cada sector es de 512 palabras, y el apuntador requiere de dos palabras para
almacenar una dirección del disco, entonces desde el punto de vista del usuario, los
sectores quedan de 510 palabras.
Crear archivos es fácil en este método. Inicialmente se da de alta el nombre del archivo en
el directorio, y se le asigna un sector de inicio. Este sector se inicializa a nil o nulo para
indicar un archivo vacío.
Cuando se hace una operación de escritura, se remueve un sector de la "lista de sectores
libres" y se escribe en él. En seguida ese sector es encadenado al final del archivo y el
apuntador de final es actualizado en el directorio.
Una operación de lectura de este archivo consiste simplemente en leer los sectores
siguiendo los apuntadores en cada sector.
No existe fragmentación externa en este método, ya que cualquier sector en la lista de
sectores libres puede ser usado para encadenarlo a un archivo.
Note también que no es necesario declarar el tamaño del archivo cuando éste es creado.
Su longitud puede continuar creciendo mientras haya sectores disponibles en la lista de
sectores libres. Por lo tanto, nunca se requiere compactar el disco.
Sin embargo, la asignación encadenada también tiene desventajas. La mayor de ellas es
que solo puede ser usada con eficiencia con archivos de acceso secuencial; ya que para
posicionar el apuntador de archivo en cierta posición requeriría viajar secuencialmente a
través de los sectores encadenados del archivo leyendo cada uno de ellos hasta encontrar
el buscado.
Como consecuencia, algunos sistemas soportan acceso directo utilizando asignación
contigua y acceso secuencial con asignación encadenada. Esto obliga a declarar
inicialmente el tipo de acceso.
Un archivo declarado inicialmente como secuencial, no podrá ser utilizado en forma directa
pues habrá sido encadenado; mientras que un archivo declarado inicialmente como
directo, sí podrá ser utilizado en ambos tipos de acceso ya que habrá sido colocado en
asignación contigua.
Una manera de convertir de un tipo de asignación a otro sería copiar un archivo de forma
secuencial a otro definido como de acceso directo.
Otras desventajas son el espacio que ocupan los apuntadores, y la posibilidad de la
pérdida de un apuntador al momento de leer, lo cual resultaría en una lectura a un archivo
equivocado.
Esto último puede resolverse con un doble encadenamiento, pero requeriría un apuntador
más y por lo tanto deja menos espacio útil.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
66
ASIGNACION INDEXADA
La asignación encadenada resuelve los problemas de fragmentación externa y
declaración de tamaño en la asignación contigua. Sin embargo, la asignación encadenada
no soporta acceso directo debido a que sus bloques y más importante sus apuntadores,
están dispersos por todo el disco.
La asignación indexada resuelve este problema, colocando todos los apuntadores juntos
en un solo bloque, el bloque de índices.
Cada archivo tiene su propio bloque de índices, el cual es un arreglo de direcciones de
sectores del disco. El primer apuntador del bloque de índices, apunta al primer sector del
archivo, el segundo apuntador al segundo sector, y así sucesivamente. En general, el iésimo apuntador del bloque de índices apunta al i-ésimo sector del archivo. (Así, cuando
deseamos leer la i-ésima componente, utilizamos el i-ésimo apuntador). Esto se ilustra en
la siguiente figura.
Cuando el archivo es inicialmente creado, todos los apuntadores son puestos a nil ó nulo
(en este caso -1). Cuando una escritura es requerida, un sector es removido de la lista de
sectores libres y la información es escrita en él. A continuación su dirección por ejemplo la
9 es escrita en el bloque de índices; en este caso en la primera posición ya que es el
primer bloque del archivo. El proceso se repite para cada nuevo bloque del archivo.
La asignación indexada soporta acceso directo sin sufrir de fragmentación externa.
Cualquier sector libre en cualquier lugar del disco puede ser usado para satisfacer una
nueva escritura.
Ing. Lamia Hamdán Medina
Sistemas Operativos II.
67
Sin embargo, la asignación indexada sufre de pérdida de espacio ya que requiere de todo
un bloque (un sector) por archivo para almacenar los apuntadores, aún cuando el archivo
sea pequeño.
Normalmente el bloque de índices es de un sector, lo cual es suficiente para archivos de
tamaño medio.
Para archivos de gran tamaño, varios bloques de índices pueden ser encadenados. En este
caso, el último apuntador del primer bloque de índices apunta al segundo bloque de
índices y así sucesivamente.
Nótese que esta representación utiliza asignación
encadenada para los bloques de índices. Otra variante de este método es usar un índice
de bloques en el cual cada apuntador apunta a un índice de bloques que a su vez apunta
a los sectores que componen el archivo.
Este método se puede llevar hasta un nivel de 4, pero generalmente es suficiente dos
niveles. Tiene la desventaja de requerir varias lecturas según el número de niveles.
Descargar