Académique Documents
Professionnel Documents
Culture Documents
discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/273380260
CITATIONS READS
0 3,668
3 authors:
Angelino Feliciano
Universidad Autónoma de Guerrero
19 PUBLICATIONS 0 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Rene Edmundo Cuevas Valencia on 10 March 2015.
ISBN: 978-607-00-3901-0
CONTENIDO. Página
Indice ii
Introducción iv
Indice de Figuras vi
ii
Capítulo VI.- Correspondencia entre la llave y la dirección física. 89
Bibliografía. 155
iii
INTRODUCCION
El sistema de archivos es una de las partes más visibles del sistema operativo.
Los usuarios utilizan los archivos para almacenar sus datos o programas en forma
persistente, esto quiere decir que la información no se pierde una vez que la
computadora es apagada. Para almacenar dicha información se utilizan dispositivos
de memoria secundaria, como discos, cintas, cd-rom, etc.
iv
otro, sin dejar huecos. La grabación de dichos registros se lleva a cabo
exactamente en el mismo orden en que fueron introducidos por el capturista.
v
Indice de Figuras, Programas y Tablas.
FIGURAS.
vi
Figura No. 2.11 Funciones miembro de la clase fstream. 30
Figura No. 2.12 Elementos a considerar para ubicar un archivo. 31
Figura No. 2.13 Ejemplo de archivo de trabajo o temporal. 33
Figura No. 3.1 Registros grabados en forma secuencial (Uno detrás de otro). 38
Figura No. 3.2 Estructura del registro de datos. 40
Figura No. 3.3 Representación gráfica de una clase. 40
Figura No. 3.4 Encadenar varios archivos de clases para crear una aplicación. 43
Figura No. 3.5 Alta un registro a un archivo secuencial. 45
Figura No. 3.6 Eliminación de un registro en un archivo secuencial. 46
Figura No. 3.7 Modificación de algunos datos de un registro. 48
Figura No. 3.8 Estructura genérica del programa práctico. 50
Figura No. 4.1 Área de datos de un archivo secuencial-indexado. 57
Figura No. 4.2 Estructura del registro del área de datos. 58
Figura No. 4.3 El área de datos y el área de índice permiten la
Organización Secuencial-indexado. 58
Figura No. 4.3 El área de datos y el área de índice permiten la organización. 58
Figura No. 4.5 Una área de datos y dos áreas de índice. 60
Figura No. 4.6 Se incluye el archivo .hpp con sus clases para crear
el ejecutable. 62
Figura No. 5.1 Estructura de un archivo directo. 72
Figura No. 5.2 Archivo directo donde debe transformarse la llave. 73
Figura No. 6.1 Direccionamiento Directo. 90
Figura No. 6.2 Estructura de los índices. 91
Figura No. 6.3 Estructura de un cilindro. 94
Figura No. 6.4 Ejemplo de direccionamiento por sector. 94
Figura No. 6.5 Formación de número de control de un alumno del Tecnológico 96
Figura No. 6.6 Área de datos y área de índice de un archivo secuencial-
Indexado. 97
Figura No. 6.7 Asociación cuando existen 2 áreas de índices y un área
de datos. 98
vii
Figura No. 6.8 Esqueleto de un archivo relativo que considera un área para
colisiones. 99
Figura No. 6.9 Dirección relativa seleccionando la fecha de nacimiento. 101
Figura No. 6.10 Ubicación física de un registro con la división por número
primo. 103
Figura No. 6.11 Direcciones físicas utilizando el cambio de base 10 a base 8. 103
Figura No. 6.12 Cálculo de la dirección relativa por medio de multiplicación. 104
Figura No. 6.13 Uso del cuadrado para obtener la dirección física. 105
Figura No. 6.14 Llaves tipo cadenas convertidas a direcciones relativas. 107
Figura No. 7.1 Memoria virtual de una computadora. 110
Figura No. 7.2 Correspondencia entre la dirección física y lógica de la memoria. 110
Figura No. 7.3 Páginas de memoria compartidas por uno o más procesos. 112
Figura No. 7.4. Traducción de página virtual a página real. 113
Figura No. 7.5 Eliminación de la memoria principal de una página que no
está en uso y se reemplaza por otra página que se requiere. 115
Figura No. 7.6 Segmentos que puede tener la memoria. 117
Figura No. 7.7 Archivo VSAM luego de la carga inicial. 121
Figura No. 7.8 Archivo VSAM luego de una inserción en un intervalo no lleno. 121
Figura No. 7.9 Inserción en intervalo lleno con intervalo vacío en el área. 122
Figura No. 7.10 Inserción con fisión de intervalo y de área. 122
Figura No. 8.1 Ejemplo de un registro de una sucursal bancaria. 129
Figura No. 8.2 Organización multilista por profesión y categoría. 131
Figura No. 8.3 Organización de datos de lista invertida (dos índices). 133
Figura No. 8.4 Organización multilista restringida por grupo y categoría. 135
Figura No. 8.5 Estructura de un archivo organizado en forma particionada
celular. 136
Figura No. 8.6 Adición de un registro en las listas ligadas de profesión y
categoría. 140
viii
PROGRAMAS.
ix
TABLAS.
x
CAPITULO 1
Dispositivos de
almacenamiento
externo.
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Página : 1
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Página : 2
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Página : 3
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
1.- Alta densidad de datos: Un carrete común de cinta de 10½ plg. de diámetro.
Tiene una longitud de 2400 pies. Y puede grabar 800,1600, 2400, 3200,
4000, 4800, 5600 y hasta 6400 bytes en cada pulgada dependiendo de la
unidad de cinta que utilice, por lo tanto, si se graban 6400 caracteres en
una pulgada de cinta y si la cinta tiene una longitud de 28800 pulgadas
entonces la capacidad máxima de la cinta será de 184,320,00 bytes.
2.- Bajo costo y facilidad de manejo.- Un carrete de 10½ pulgada cuesta menos
de 20 dólares. Y dado que el carrete es compacto y pesa menos de 1 kg. y
medio, ocupa muy poco espacio de almacenamiento y es fácil de manejar.
Página : 4
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Recomendaciones Generales.
Ambiente de uso
1. Nunca tocar la superficie o los bordes de las cintas magnéticas.
“Un tambor magnético era como una pila de CD (pero claro de material
ferromagnético) con una fila de lectores a su lado, estas pequeñas agujas se
encontraban a la pequeñísima distancia de 0.001 pulgadas por lo cual si se movían
de una forma no debida o por el simple hecho de la expansión de los materiales por
el calor esta separación ya no era la misma por lo que este dispositivo era inservible.
Página : 5
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
La forma como se hacia una lectura o escritura era con los componentes del
tambor, por ejemplo, en el sector 8, pista 3; su tiempo de acceso era tomado en
revoluciones por minuto (se alcanzo hasta 8000 rpm) y el número de bits que era
capaz de almacenar se medía según sus características físicas como lo son el
diámetro del tambor, su altura, etc. técnicamente se usó máximo a 1200 bps”. [i-1].
Para grabar datos en un soporte físico más o menos perdurable se usan dos
tecnologías en los discos. La magnética se basa en la propiedad magnética de
algunos materiales y otros fenómenos magnéticos, mientras que la óptica utiliza las
propiedades del láser y su alta precisión para leer o escribir los datos.
Página : 6
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
“Los discos ópticos, además de ser medios removibles con capacidad para
almacenar masivamente datos en pequeños espacios -por lo menos diez veces más
que un disco rígido de igual tamaño- son portables y seguros en la conservación de
los datos (que también permanecen si se corta la energía eléctrica). El hecho de ser
portables deviene del hecho de que son removibles de la unidad”. [i-3]
Los discos ópticos presentan una capa interna protegida, donde se guardan
los bits mediante distintas tecnologías, siendo que en todas ellas dichos bits se leen
por un rayo láser incidente. Este, al ser reflejado, permite detectar variaciones
microscópicas de propiedades óptico-reflectivas ocurridas como consecuencia de la
grabación realizada en la escritura. Un sistema óptico con lentes encamina el haz
luminoso, y lo enfoca como un punto en la capa del disco que almacena los datos.
La Figura No. 1.7 muestra el mecanismo de lectura / escritura de un disco compacto.
Página : 7
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
DISKETTES
Página : 8
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Estos discos fueron popularizados por la Macintosh de Apple, y hoy en día son
estándares en la industria de la computación.
Las unidades de diskettes son compatibles "hacia atrás"; es decir, que en una
unidad de 3,5" de alta densidad que almacena 1.44 MB, puede usar discos de 720
Kb o de 1,44 MB, pero en una de doble densidad, más antigua, sólo se pueden usar
diskettes de 720 Kb.
Para ver más claramente las diferencias entre los dos tipos de diskettes y sus
capacidades, se muestra la Tabla No. 1.1.
5,25" DS/HD 1,2 MB Dos caras, alta densidad. Desfasado pero útil
3,5" DS/DD 720 Kb Dos caras, doble densidad. Desfasado pero muy común
Los diskettes tienen fama de ser unos dispositivos muy poco fiables en
cuanto al almacenaje a largo plazo de la información; y en efecto, lo son. Les afecta
todo lo imaginable: campos magnéticos, calor, frío, humedad, golpes o polvo.
Hace unos días verifiqué unos 20 diskettes de diferentes marcas que fueron
grabados por una computadora 486 los cuales estaban almacenados en una caja.
Casi la mitad no funcionaba, porque no se cuidaron como es debido.
DISCO DURO
Página : 9
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Para poder utilizar el disco duro, tiene que pasar por una etapa de
configuración, la cual es dada por el formateo del disco duro, en el cual se hacen las
siguientes tares: se le marcan las pistas y sectores al disco, se le define la zona de
directorio, se crean la FAT (File Allocation Table) y el registro de arranque y,
eventualmente, se le graban los archivos del sistema operativo para el arranque del
sistema. Existen dos tipos de formateo: el de bajo nivel y el lógico.
El formateo de bajo nivel es un proceso físico que divide las pistas circulares
en un número específico de sectores con capacidad para 528 bytes cada uno, de los
cuales 512 son para datos y 16 para control del sistema. El inicio de cada sector se
indica mediante un código magnético de dirección, a continuación, sigue un código
para encabezamiento del sector (Id), que contiene los números del cilindro, la cabeza
y el sector respectivo. Los datos de información se graban en la porción central de
Página : 10
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Se manejan varios conceptos para identificar sus partes físicas, los cuales se
describen a continuación :
Página : 11
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Página : 12
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
La Zona de Datos : Es la parte del disco duro en la que se almacena los datos de un
archivo. Esta zona depende en casi su totalidad de las
interrelaciones entre las estructuras de datos que forman el
sistema de archivos del Ms-Dos, y del camino que se lleva
desde la FAT hacia los diferentes sectores de un archivo.
Procesos de grabación
Proceso de Codificación
Página : 13
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Existen varias cosas que usted puede realizar para prevenir que la computadora
le devuelve mensajes de error molestos. A continuación se muestra una lista de
programas diferentes disponibles para asegurarse de que la unidad de disco duro se
mantenga saludable y funcionando a plena capacidad.
Página : 14
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Si experimenta problemas con los archivos, tal vez quiera averiguar si existen
daños en el disco. ScanDisk de Windows Millenium verifica los archivos y las
carpetas para encontrar errores de datos y también puede verificar la
superficie física del disco. Para ejecutar ScanDisk, haga doble click en el
ícono de Mi Pc., en la caja de diálogo que aparece se ubica en el ícono de
disco duro y haga clic derecho y baje la barra iluminada hasta la opción
Propiedades; ahí dar clic izquierdo, luego aparece otra caja de dialogo, y ahí
te colocas en la pestaña llamada herramientas y dar clic a la opción de
Utilidad de ScanDisk. Existen varios programas de detección y limpieza de
virus que están disponibles para usted. Simplemente hay que pedirlos del
distribuidor local de software para computadoras.
4.- Respaldos
VENTAJAS.
Página : 15
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
DESVENTAJAS.
UNIDADES ZIP.
Las unidades ZIP, por las capacidades de los diskette, por su fiabilidad, y por
su velocidad de transferencia están a mitad de camino entre las unidades de diskette
y las de disco duro, aunque más próximas a esta última. Así, su velocidad de giro
es del orden de 3000 r.p.m, lo cual redunda en una mayor velocidad de transferencia.
Página : 16
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
Estos discos son la respuesta a la cada vez más común desesperación del
usuario que va a grabar su trabajo en un diskette y se encuentra con que supera los
temidos 1.44 Mb. No importa, meta un SuperDisk, que aparenta ser un disquete de
3.5" algo más grueso, y ya tiene 120 MB a su disposición.
La unidad se vende con conexión IDE para la versión interna o bien puerto
paralelo (el de impresora) para la externa, que, aunque parece menos pensada para
viajes accidentados que el Zip, permite conectarla a cualquier computadora sin
mayores problemas. Además, acaba de ser presentada una versión USB que hace
la instalación aún más sencilla. Si la BIOS de la tarjeta madre lo permite (lo cual
sólo ocurre con todas las tarjetas madre desde Pentium III) puede configurar la
versión IDE incluso como unidad de arranque, con lo que no necesitará para nada la
unidad de diskette de 3.5 pulgadas.
Su mayor "handicap" reside en haber dejado al Zip como única opción durante
demasiado tiempo, pero la compatibilidad con los disquetes de 3,5" y sus 20 Mb
extra parece que están cambiando esta situación. Si va a comprar una computadora
nueva, le compensará pedir que le instalen un SuperDisk en vez de la unidad de
diskette de 3,5". La decisión entre Zip y SuperDisk es muy difícil, incluso cuestan
prácticamente lo mismo. La figura No. 1.12 muestra la unidad SuperdDisk y su
disco para almacenar información.
Página : 17
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
• Pros: alta seguridad de los datos, portabilidad, bajo precio de los discos, fácil
manejo
• Contras: inversión inicial, poca implantación.
Una vez instalada la unidad, se maneja como si fuera un disco duro más
(sin necesidad de ningún programa o accesorio). Existen discos y lectores-
grabadores de 128, 230, 540, 640 MB y 1,3 Gb, pero en la actualidad sólo son
recomendables los de 640 Mb y 1,3 Gb, que además permiten leer y escribir en los
discos de menor capacidad.
Página : 18
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
nuevos modelos con tecnología LIMDOW (también conocida simplemente como OW,
por OverWrite) en los que se puede alcanzar más de 1,5 MB/s en escritura.
UNIDAD JAZZ
Por otro lado, el Jazz tiene las mismas características portátiles que su
hermano zip, pero a diferencia de este, tiene la rapidez y capacidad para cargar
aplicaciones, permitir el desarrollo de multimedia, hacer el resguardo de la
Página : 19
DISPOSITIVOS DE ALMACENAMIENTO EXTERNO
computadora en 10 min., guarda hasta 8 hrs. de música con calidad de CD, 2 hrs. de
película o 150 fotografías de color, etc.
Página : 20
CAPITULO 2
Definiciones y
Conceptos
DEFINICIONES Y CONCEPTOS
Página : 22
DEFINICIONES Y CONCEPTOS
Al manejar algunos campos como llaves, éstos pueden ser de dos tipos :
Llave primaria.
Página : 23
DEFINICIONES Y CONCEPTOS
Llave secundaria.
Es, en un archivo multillave (de varios campos llave), cualquier llave
exceptuando la primaria.
La figura No. 2.3 nos muestra el esquema de una base de datos, en la cual se
manejan varios archivos llamados tablas (Empleado, Depto_Ads y Tipos_emp) que
se encuentran vinculados por campos llave (Cve_dep y Tipo_emp) y que entre todos
forman la base de datos.
Página : 24
DEFINICIONES Y CONCEPTOS
• Corrientes de texto.
• Corrientes binarias.
Página : 25
DEFINICIONES Y CONCEPTOS
Figura No. 2.4 Separadores entre registros y fin de archivo de una corriente de texto.
Página : 26
DEFINICIONES Y CONCEPTOS
Comparando las dos tipos de corrientes (de texto y binarias), el flujo de texto
ya quedó obsoleto y los lenguajes de programación Orientados a Objetos, los
Lenguajes Visuales y los Lenguajes Orientados a eventos utilizan el flujo binario
porque optimiza el uso del espacio y además no utiliza mucho tiempo en
conversiones Texto-Binario-Texto.
Página : 27
DEFINICIONES Y CONCEPTOS
Los tres flujos anteriores son considerados como clases para la creación de
objetos tipo archivo de datos.
Página : 28
DEFINICIONES Y CONCEPTOS
La clase tipo ifstream contiene varias funciones miembro. Entre las más
comunes tenemos las que se muestran en la figura No. 2.9.
Las acciones que lleva a cabo cada una de las funciones miembro de la clase
ifstream se enumeran a continuación :
La clase tipo ofstream contiene varias funciones miembro. Entre las más
utilizadas tenemos las que se muestran en la figura No. 2.10.
Página : 29
DEFINICIONES Y CONCEPTOS
Las acciones que lleva a cabo cada una de las funciones miembro de la clase
ofstream se enumeran a continuación :
Las acciones que lleva a cabo cada una de las funciones miembro de la clase
fstream se enumeran a continuación :
Página : 31
DEFINICIONES Y CONCEPTOS
Por su estructura
Con tipo.- Son aquellos que presentan un formato basado en una estructura
especifica, la cual puede ser incluso variable. Son los más utilizados en
los sistemas de información.
Sin tipo.- Son archivos que son procesados por bloques de lectura y/o
escritura. No tienen un formato determinado, y su representación puede ser
o no binaria. El tamaño de los bloques es ajustable.
Página : 32
DEFINICIONES Y CONCEPTOS
Página : 34
DEFINICIONES Y CONCEPTOS
Organización de Archivos.
Página : 35
DEFINICIONES Y CONCEPTOS
Un archivo puede accesarse por un programa que se ejecuta por lotes (en
modo batch) o por un programa que se ejecuta interactivamente. Y en función del
acceso se elige la organización de archivos mas apropiada.
Página : 36
CAPITULO 3
Archivos
Secuenciales
ARCHIVOS SECUENCIALES
Figura No. 3.1 Registros grabados en forma secuencial (Uno detrás de otro).
Los archivos secuenciales tienen algunas características que hay que tener
en cuenta :
2. Para leer una zona concreta del archivo hay que avanzar siempre, si la zona
está antes de la zona actual de lectura, será necesario "rebobinar" o regresar
el puntero de lectura del archivo.
3. Los archivos sólo se pueden abrir para lectura o para escritura, nunca de los
dos modos a la vez.
El caso de stdin, que suele ser el teclado. Un programa sólo podrá abrir
ese archivo como de lectura, y sólo podrá leer los caracteres a medida que estén
disponibles y en el mismo orden en que fueron tecleados.
Página : 38
ARCHIVOS SECUENCIALES
Página : 39
ARCHIVOS SECUENCIALES
registro de datos que será utilizada a lo largo de éste capítulo para ejemplificar todas
las operaciones en un archivo organizado en forma secuencial.
Página : 40
ARCHIVOS SECUENCIALES
/* ==========================================================
Clase para definir objetos tipo : Registro de Empleado.
===========================================================*/
class empleado {
private:
int clave; // Datos Miembro : clave (llave)
char nombre[30]; // nombre
float sdia; // sueldo diario
int dias; // dias trabajados
public:
empleado(); // FUNCIONES MIEMBRO
Desplegar(int iL);
PedirDatos();
Modifica();
Consultas();
Datos_Constantes();
~empleado() {};
};
empleado::empleado()
{
dias = clave = 0;
strcpy(nombre," \0");
sdia = 0.0;
}
empleado::PedirDatos()
{
clrscr();
gotoxy(10,5); cout<<"ALTAS DE UN REGISTRO A UN ARCHIVO SECUENCIAL.";
Datos_Constantes();
gotoxy(46,10); cin>>clave;
fflush(stdin);
gotoxy(46,12); gets(nombre);
fflush(stdin);
gotoxy(46,14); cin>>sdia;
fflush(stdin);
gotoxy(46,16); cin>>dias;
fflush(stdin);
return 0;
}
Página : 41
ARCHIVOS SECUENCIALES
empleado::Modifica()
{
clrscr();
char nomm[30], diass[3],sdiaa[10];
gotoxy(10,5);
cout<<"MODIFICACION A UN REGISTRO A UN ARCHIVO SECUENCIAL.";
Datos_Constantes();
gotoxy(48,12);gets(nomm);
fflush(stdin);
gotoxy(48,14);gets(diass);
fflush(stdin);
gotoxy(48,16);gets(sdiaa);
fflush(stdin);
if (diass[0] != '\x0') dias = atoi(diass);
if (sdiaa[0] != '\x0') sdia = atof(sdiaa);
if (nomm[0] != '\x0')
{ strcpy(nombre," ");
strcpy(nombre,nomm);
}
return 0;
empleado::Consultas()
{
gotoxy(10,5);
cout<<"CONSULTAS DE UN REGISTRO EN UN ARCHIVO SECUENCIAL.";
Datos_Constantes();
gotoxy(46,10); cout<<clave;
gotoxy(46,12); cout<<nombre;
gotoxy(46,14); cout<<sdia;
gotoxy(46,16); cout<<dias;
gotoxy(50,22); cout<<"<Return> para continuar";
getchar();
return 0;
}
empleado::Datos_Constantes()
{
gotoxy(20,10); cout<<"Clave del empleado : " << clave;
gotoxy(20,12); cout<<"Nombre del empleado : " << nombre;
gotoxy(20,14); cout<<"Sueldo diario : " << sdia;
gotoxy(20,16); cout<<"No. de Dias trabajados : " << dias;
return 0;
}
Página : 42
ARCHIVOS SECUENCIALES
Una vez que se tiene la clase, se pueden crear instancias u objetos de la clase
empleado. Cada objeto tendrá internamente y en forma ordenada los cuatro
campos y las siete funciones miembro definidas en el programa No. 3.1.
Pueden existir varios archivos .hpp en una aplicación debido a que en cada
archivo de cabecera se desarrolló posiblemente otras acciones complementarias del
sistema de información. Pueden incluso existir varios .cpp, pero solo uno de ellos
tendrá la función main () y será quien defina el orden de ejecución. La figura No. 3.2
muestra en forma esquemática la forma de unir varios archivos de cabecera y un
solo .cpp para crear una aplicación.
Figura No. 3.4 Encadenar varios archivos de clases para crear una aplicación.
Página : 43
ARCHIVOS SECUENCIALES
Un archivo puede accesarse por un programa que se ejecuta por lotes (en
modo batch) o por un programa que se ejecuta interactivamente. Con el modo de
acceso por lotes, las transacciones generalmente pueden ordenarse para mejorar el
acceso al archivo maestro, mientras que con accesos interactivos las transacciones
se procesan a medida que llegan. Con el modo de acceso por lotes el desempeño
es normalmente medido por el número de transacciones procesadas en el periodo.
Con el acceso interactivo, el desempeño también es medido por el tiempo de
respuesta a las transacciones individuales.
CREACION.
ACTUALIZACION.
1.- Altas de nuevos registros al archivo de datos. Por ejemplo cuando entra a
trabajar un nuevo empleado, también se tiene que dar de alta en el archivo
maestro de nómina para que pueda generarse en la próxima quincena su recibo
de pago.
Página : 44
ARCHIVOS SECUENCIALES
El procedimiento para realizar una alta de acuerdo a la figura No. 3.5, consiste
en lo siguiente :
1.- Crear un objeto tipo ofstream (El del archivo donde se grabarán los nuevos
registros).
2.- Crear un objeto tipo registro de datos (Que es el objeto que contendrá los datos
que se van capturando y que se escribirán en el archivo).
3.- Abrir un archivo que se encuentra en algún medio de almacenamiento y ligarlo al
objeto tipo ofstream. En el caso de la figura no. 3.5 se llama nomina.dat.
4.- Se hace una verificación para investigar si se abrió correctamente el archivo de
datos. Si la apertura fue exitosa continuar en el paso 5; en caso contrario se
envía un mensaje de error y dar por terminado el proceso.
5.- Desplegar en el monitor la pantalla de captura en blanco conteniendo :
encabezados, etiquetas que indiquen todos los datos a capturar y los lugares
donde se aceptaran cada uno de los datos.
6.- Teclear todos los datos solicitados en la pantalla de captura y en cada dato pulsar
<return> para pasar al siguiente campo.
7.- Escribir el registro de datos (como objeto) en el archivo (otro objeto), el cual se
adicionará al final del último registro contenido en el archivo.
8.- Deberá existir una pregunta para que el usuario indique si desea capturar otro
registro o no. En caso de indicar que se va a capturar otro registro, se ejecutan
los pasos 5, 6 y 7. En caso contrario se continua con el paso 9.
9.- Cerrar el archivo de datos y terminar el proceso.
En el bloque case 1, del programa No. 3.2 que se muestra en el tema III.4
Ejemplo de una Aplicación, de éste mismo capítulo se codifican los pasos
Página : 45
ARCHIVOS SECUENCIALES
1.- Crear un objeto tipo ofstream que en el caso de la figura No. 3.6 sería el archivo
llamado depaso.dat. y en el cual se grabarán en forma temporal todos los
registros a excepción del que se va a eliminar.
2.- Crear un objeto tipo ifstream que sería el archivo llamado nomina.dat, del cual se
leeran registro por registro desde el primero hasta el final del archivo para
eliminar el registro deseado.
3.- Crear un objeto tipo registro de datos, que servirá para leer registro por registro
del archivo tipo ifstream.
Página : 46
ARCHIVOS SECUENCIALES
Página : 47
ARCHIVOS SECUENCIALES
1.- Crear un objeto tipo ofstream que en el caso de la figura No. 3.6 sería el archivo
llamado depaso.dat. y en el cual se grabarán en forma temporal todos los
registros, incluso el modificado.
2.- Crear un objeto tipo ifstream que sería el archivo llamado nomina.dat, del cual se
leeran registro por registro desde el primero hasta el final del archivo con el fin de
encontrar el que se va a modificar.
3.- Crear un objeto tipo registro de datos, que servirá para leer registro por registro
del archivo tipo ifstream.
4.- Abrir un archivo que se encuentra en algún medio de almacenamiento y ligarlo al
objeto tipo ofstream (que para el ejemplo se llama depaso.dat).
5.- Abrir un archivo que se encuentra en algún medio de almacenamiento y ligarlo al
objeto tipo ifstream (que para el ejemplo se llama nomina.dat).
6.- Se hace una verificación para investigar si se abrieron correctamente los dos
archivos. Si la apertura fue exitosa continuar en el paso 7; en caso contrario
enviar un mensaje de error y dar por terminado el proceso.
7.- En el monitor se pide la clave del empleado (que es la llave de búsqueda) para
buscarla en el archivo de entrada.
8.- Dentro de una estructura de repetición (en el caso del ejemplo se maneja un
while) leer un registro del archivo de entrada , comparar la clave del registro a
modificar con la del registro leído y si son diferentes; grabar dicho registro en el
archivo depaso.dat. En el caso que ambas llaves coincidan, quiere decir que es
el registro que debe modificar por lo que se mostrará en el monitor.
Página : 48
ARCHIVOS SECUENCIALES
RECUPERACIÓN.
Los procesadores de consulta, son programas que traducen las preguntas del
usuario en instrucciones que son usadas directamente para accesar al archivo de
datos. Un software procesador de consultas muy común es el SQL (Structured
Query Languaje).
III.3 Mantenimiento.
Página : 49
ARCHIVOS SECUENCIALES
Se definió un registro de datos que contiene 4 campos que son : Clave del
empleado, su nombre, sueldo diario y días trabajados. La anterior estructura es con
fines didácticos y es la que está establecida en la figura No. 3.1. Se consideró la
clave del empleado como campo llave para poder realizar todas las operaciones
mencionadas en el párrafo anterior.
Página : 50
ARCHIVOS SECUENCIALES
/* ====================================================
PROGRAMA QUE MANIPULA UN ARCHIVO
ORGANIZADO EN FORMA SECUENCIAL.
# include <conio.h>
# include <dos.h>
# include <ctype.h>
# include <stdlib.h>
# include <iostream.h>
# include <fstream.h>
# include <iomanip.h>
# include <string.h>
# include <stdio.h>
# include "C:\NOMINA.HPP"
Página : 51
ARCHIVOS SECUENCIALES
main()
{
int lClave;
int iOp, iJ;
float fSueldo_quin, fDeduc, fSueldoNeto, fIssste;
float fIspt, fTotalQuin, fTotalDeduc, fTotalnNeto;
ifstream ifMaestro; // Objeto tipo archivo de lectura.
ofstream ofMaestro; // Objeto tipo archivo de escritura.
empleado EMP; // Objeto tipo registro empleado.
do {
clrscr();
gotoxy(17,5);cout<<"INSTITUTO TECNOLOGICO DE CHILPANCINGO";
gotoxy(17,6);cout<<"PROGRAMA DE EJEMPLO PARA LA CREACION Y";
gotoxy(18,8);cout<<"MANIPULACION DE ARCHIVOS ORGANIZADOS";
gotoxy(24,9);cout<<"EN FORMA SECUENCIAL.";
gotoxy(26,11); cout<<"MENU PRINCIPAL";
gotoxy(25,14); cout<<"1] ALTAS.";
gotoxy(25,15); cout<<"2] BAJAS.";
gotoxy(25,16); cout<<"3] CONSULTAS.";
gotoxy(25,17); cout<<"4] MODIFICACIONES.";
gotoxy(25,18); cout<<"5] REPORTE. ";
gotoxy(25,19); cout<<"6] SALIR.";
gotoxy(25,21); cout<<"Elige una opcion: ";
cin>>iOp;
switch(iOp) {
Página : 52
ARCHIVOS SECUENCIALES
Página : 53
ARCHIVOS SECUENCIALES
Página : 54
ARCHIVOS SECUENCIALES
iLineas++;
}
impresora<<endl<<endl;
impresora<<" totales.......... $ ";
impresora<<setw(11)<<fTotalQuin;
impresora<<setw(12)<<fTotalDeduc;
impresora<<setw(10)<<fTotalnNeto;
entrada.close();
impresora<<"\f";
impresora.close();
}
break;
}
}while(iOp!=6);
return 0;
}
Página : 55
CAPITULO 4
Archivos
Secuencial-
Indexados
ARCHIVOS SECUENCIAL-INDEXADO
A partir del área de datos del ejemplo de la figura no. 4.1, se crea el área de
índices en donde se manejará una estructura del registro que contenga
exclusivamente dos campos : El campo llave (clave) y la dirección de inicio
(ubicación) de cada registro. La estructura del registro del área de índices queda tal
como se muestra en la figura No. 4.2.
Página : 57
ARCHIVOS SECUENCIAL-INDEXADO
Página : 58
ARCHIVOS SECUENCIAL-INDEXADO
A la hora de construir el archivo de índices hay que tener en cuenta los puntos
que se describen a continuación :
• Cualquier campo del archivo puede servir de base para construir el índice.
• Una combinación de campos de un registro de datos puede servir de base
para construir in índice. Por ejemplo, para obtener un listado ordenado
alfabéticamente, el archivo índice estará formado por dos o más campos a la
vez.
• Cualquier índice puede emplearse tanto para el acceso directo, en función del
campo indexado, como para el acceso secuencial, según la secuencia de
dicho campo.
• Un determinado archivo puede tener asociados varios archivos índices, bien
por un campo llave o por una combinación de ellos. La figura No. 4.5 nos
muestra el caso de un archivo de datos y dos archivos de índices.
• Cuando se modifica el archivo de datos es necesario actualizar todos los
archivos de índices asociados al archivo de datos. Es una tarea laboriosa
porque en todo momento debe haber una correspondencia entre el archivo de
datos y sus archivos de índices.
Página : 59
ARCHIVOS SECUENCIAL-INDEXADO
//=========================================================
// DEFINICION DE LA CLASE TIPO : EMPLEADO.
// PARA MANEJO DE ARCHIVOS ORGANIZADOS EN FORMA
// SECUENCIAL-INDEXADOS.
//=========================================================
class empleado{
private:
int clave; // DATOS MIEMBRO
char nom[30];
float sdia;
int dias;
public:
empleado(); // FUNCIONES MIEMBRO
Desplegar(int iL);
PedirDatos();
Modifica();
Consultas();
Página : 60
ARCHIVOS SECUENCIAL-INDEXADO
Bajas();
imprime();
Datos_Constantes();
~empleado(){};
};
empleado::empleado()
{
dias = clave = 0;
strcpy(nom," \0");
sdia = 0.0;
}
//=========================================================
// DEFINICION DE LA CLASE TIPO : INDICE.
//=========================================================
class Indice {
private :
int clave; // Campo llave.
unsigned int ubicacion; // Campo Ubicación.
public :
Indice(); // Funciones miembro
~Indice() {};
};
Indice::Indice()
{
clave = ubicacion = 0;
}
Una vez que se tiene la clase, se pueden crear instancias u objetos de la clase
empleado y de la clase índice. Los objetos creados con la clase empleado
contendrán los cuatro campos acomodados en el orden definido junto con sus
funciones miembro; por otro lado los objetos creados a partir de la clase índice
contendrán dos campos y sus funciones miembro respectivas.
Página : 61
ARCHIVOS SECUENCIAL-INDEXADO
Figura No. 4.6 Se incluye el archivo .hpp con sus clases para crear el ejecutable.
CREACION.
Página : 62
ARCHIVOS SECUENCIAL-INDEXADO
secuencial y generar el área de índices para poderle hacer todas las operaciones
que se describen más delante de éste mismo documento.
//============================================================
// PROGRAMA DE EJEMPLO PARA CREAR EL ARCHIVO DE INDICES
// DE UN ARCHIVO SECUENCIAL INDEXADO
// Autor : José Luis Hernández Hernández.
//============================================================
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>
#include "indice.hpp"
main()
{
Abrir_Archivos(); // Abre Archivo Secuencial y de Indices.
Leer_Archivo(); // Lee Archivo Secuencial y carga Matriz.
Ordenar_Indices(); // Ordena el Arreglo de Indices.
Grabar_Indices(); // Graba los indices en el archivo.
Cierra_Archivo(); // Cierra los Archivos.
return 0;
}
Abrir_Archivos()
{
ifEmpleado.open("c:\\nomina.dat",ios::in | ios::binary);
if (!ifEmpleado)
{
clrscr();
Página : 63
ARCHIVOS SECUENCIAL-INDEXADO
ofIndice.open("c:\indices.dat",ios::out | ios::binary);
if (!ofIndice)
{
clrscr();
cout << "El Archivo de <INDICES> no pudo abrirse"<<endl;
cout << "Pulsar <Return> para Salir"<<endl;
getchar();
exit (-1);
}
return 0;
}
Leer_Archivo()
{
int Ubicacion = 0;
Reg = 0;
ifEmpleado.read((char *) &EMP, sizeof(EMP));
while(!ifEmpleado.eof())
{
IND[Reg].clave = EMP.clave;
IND[Reg].ubicacion = Ubicacion;
ifEmpleado.read((char *) &EMP, sizeof(EMP));
Reg++; // Incrementa # Registro
Ubicacion = Ubicacion + sizeof (EMP); // Incrementa Ubicaci¢n
}
Reg--; // Para Conocer No. de Registros
return 0;
}
Ordenar_Indices()
{
int i,j; // Indices para manipular matriz
int Aux1,Aux2;
for (i=0 ; i < Reg - 1; i++)
{
for (j = 0; j < Reg - 1; j++)
{
if ( (IND[j].clave) > (IND[j+1].clave))
{
Aux1 = IND[j].clave;
Aux2 = IND[j].ubicacion;
IND[j].clave = IND[j+1].clave;
IND[j].ubicacion = IND[j+1].ubicacion;
IND[j+1].clave = Aux1;
Página : 64
ARCHIVOS SECUENCIAL-INDEXADO
IND[j+1].ubicacion = Aux2;
}
}
}
return 0;
}
Grabar_Indices()
{
int i;
for(i=0; i<= Reg ; i++)
{
ofIndice.write((char *) &IND, sizeof(IND));
cout << IND[i].clave << " " << IND[i].ubicacion << endl;
}
return 0;
}
Cierra_Archivo()
{
ifEmpleado.close();
ofIndice.close();
return 0;
}
Programa No. 4.2 Programa para la creación del área de indices.
ACTUALIZACION.
Página : 65
ARCHIVOS SECUENCIAL-INDEXADO
Caber hacer mención que dicha operación tiene que hacerse a los archivos
donde se encuentra en área de datos y también al área de índice.
Cabe hacer mención que el área de datos es abierta como archivo de entrada
/ salida, debido a que se lee un registro de datos, se corrigen algunos campos y se
vuelve a rescribir en el mismo lugar que ocupa físicamente.
RECUPERACIÓN.
III.3 Mantenimiento.
Página : 66
ARCHIVOS SECUENCIAL-INDEXADO
Se definió un registro de datos que contiene 4 campos que son : Clave del
empleado, su nombre, sueldo diario y días trabajados. La anterior estructura es con
fines didácticos y es la que está establecida en la figura No. 3.1. Se consideró la
clave del empleado como campo llave para poder realizar todas las operaciones
mencionadas en el párrafo anterior.
OPERACIÓN DE ALTAS.
/* ==============================================================
PROGRAMA QUE DA DE ALTAS REGISTROS A UN ARCHIVO INDEXADO
CON LA FILOSOFIA DE LA PROGRAMACION ORIENTADA A OBJETOS.
AUTOR: JOSE LUIS HERNANDEZ HERNANDEZ
===============================================================*/
# include <conio.h>
# include <ctype.h>
# include <stdlib.h>
# include <iostream.h>
# include <fstream.h>
# include <string.h>
# include <stdio.h>
main()
Página : 67
ARCHIVOS SECUENCIAL-INDEXADO
{
clrscr();
char Op = 'n';
empleado EMP; // Crea un objeto Tipo Registro Empleado.
Indices Ind; // Objeto tipo indice..
if (!Arch_Datos)
{
cout << "No se abrio el archivo de datos" << endl;
cout << "<RETURN> para terminar ..." << endl;
getchar();
exit (-1);
}
if (!Arch_Indice)
{
cout << "No se abrio el archivo de indices" << endl;
cout << "<RETURN> para terminar ..." << endl;
getchar();
exit (-1);
}
do{
EMP.limpiar();
EMP.PedirDatos();
Ind.ubicacion = Arch_Datos.tellp();
Ind.clave = EMP.clave;
Arch_Datos.write((char *) &EMP, sizeof(EMP));
Arch_Indice.write((char *) &Ind, sizeof(Ind));
gotoxy(24,20);cout<<"DESEA CAPTURAR OTRO REGISTRO : ";
Op = getchar();
}while(toupper(Op)=='S');
Arch_Datos.close();
Arch_Indice.close();
}
Programa No. 4.3 Programa dar de alta un registro en el area de datos y en el area de indice.
Página : 68
ARCHIVOS SECUENCIAL-INDEXADO
OPERACIÓN DE MODIFICACION.
/* ================================================================
PROGRAMA QUE SIRVE PARA REALIZAR MODIFICACIONES A UN
ARCHIVO ORGANIZADO EN FORMA SECUENCIAL-INDEXADA.
SE UTILIZA LA FILOSOFIA DE LA PROGRAMACION ORIENTADA A OBJETOS
AUTOR : JOSE LUIS HERNANDEZ HERNANDEZ
===============================================================*/
# include <conio.h>
# include <ctype.h>
# include <stdlib.h>
# include <iostream.h>
# include <fstream.h>
# include <string.h>
# include <stdio.h>
# include "INDICE.HPP" // Se incluye el archivo donde se
// encuentra la clase (del registro
// de datos).
main()
{
int Clave; // Clave para pedir por teclado.
empleado EMP; // Crea un objeto Tipo Registro Empleado
Indices IND; // Crea un objeto Tipo Indice.
fstream Archivo_Datos;
fstream Archivo_Indice;
Página : 69
ARCHIVOS SECUENCIAL-INDEXADO
{
Archivo_Datos.seekg(IND.ubicacion);
Archivo_Datos.read((char *) &EMP, sizeof(EMP));
EMP.Desplegar_Registro();
EMP.PedirDatos();
Archivo_Datos.seekg(IND.ubicacion);
Archivo_Datos.write((char *) &EMP, sizeof(EMP));
Archivo_Indice.close();
Archivo_Indice.close();
return 0;
}
Archivo_Indice.read((char *) &IND, sizeof(IND));
}
gotoxy(40,22);
cout << "NO SE ENCONTRO EL REGISTRO BUSCADO ......." << endl;
Archivo_Indice.close();
Archivo_Indice.close();
return 0;
}
Programa No. 4.4 Modificaciones a un registro en el area de datos sin modificar el area de
indice.
Página : 70
CAPITULO 5
Archivos Directos
ARCHIVOS DIRECTOS
Página : 72
ARCHIVOS DIRECTOS
Cuando un archivo directo se establece debe definirse una relación que será
utilizada para obtener una dirección física a través de un valor del campo llave. Esta
relación es llamada función de mapeo (también conocida como transformación KTA
-Key To Address-). Se utiliza la siguiente función de transformación :
Página : 73
ARCHIVOS DIRECTOS
Este método puede producir sinónimos, es decir que el valor octal sea el
mismo. Así por ejemplo las claves : COSA, SACO, CASO y ASCO.
Producen el mismo valor por lo que se debe considerar una área de
desborde para éstos casos.
Página : 74
ARCHIVOS DIRECTOS
archivo más uno y tomar el resto de la división entera como dirección lógica
del registro.
Por ejemplo, el campo llave con el valor 97234 para un archivo de 1,200
posiciones físicas se transformará en la dirección lógica siguiente :
Se toman los primeros cuatro dígitos para formar un valor y los últimos cuatro
dígitos para formar el otro valor; ambos se suman y se obtiene la dirección
lógica donde se almacenará el registro.
1720
+ 7359
-------------
9 0 7 9 Que es la dirección lógica del registro.
Página : 75
ARCHIVOS DIRECTOS
/* ============================================================
CLASE EMPLEADO, QUE SERA UTILIZADA PARA LA
CREACION DE REGISTROS PARA SER UTILIZADOS
EN UN ARCHIVO ORGANIZADO EN FORMA DIRECTA.
AUTOR : JOSE LUIS HERNANDEZ HERNANDEZ
==============================================================*/
class empleado{
private :
int clave; // DATOS MIEMBRO
char nom[30];
float sdia;
int dias;
public :
empleado(); // FUNCIONES MIEMBRO
Pedir_Datos();
int Pedir_Clave();
Modifica();
Consultas();
Datos_Constantes();
~empleado() { };
};
empleado::empleado()
{
dias = clave = 0;
strcpy(nom," \0");
sdia = 0.0;
}
Página : 76
ARCHIVOS DIRECTOS
int empleado::Pedir_Clave()
{
int Cve;
clrscr();
empleado::Pedir_Datos()
{ clrscr();
gotoxy(10,5); cout<<"ALTAS DE UN REGISTRO A UN ARCHIVO DIRECTO.";
Datos_Constantes();
gotoxy(46,10); cout << clave;
fflush(stdin);
gotoxy(46,12); gets(nom);
fflush(stdin);
gotoxy(46,14); cin>>sdia;
fflush(stdin);
gotoxy(46,16); cin>>dias;
fflush(stdin);
return 0;
}
empleado::Modifica()
{ clrscr();
char nomm[30], diass[3],sdiaa[10];
gotoxy(10,5);
cout<<"MODIFICACION A UN REGISTRO DE UN ARCHIVO DIRECTO.";
Datos_Constantes();
gotoxy(46,10); cout<< clave;
gotoxy(46,12); cout<< nom;
gotoxy(46,14); cout<< sdia;
gotoxy(46,16); cout<< dias;
gotoxy(48,12); gets(nomm);
fflush(stdin);
gotoxy(48,14); gets(sdiaa);
fflush(stdin);
gotoxy(48,16); gets(diass);
fflush(stdin);
if (diass[0] != '\x0') dias = atoi(diass);
if (sdiaa[0] != '\x0') sdia = atof(sdiaa);
if (nomm[0] != '\x0')
{ strcpy(nom," ");
strcpy(nom,nomm);
}
return 0;
}
Página : 77
ARCHIVOS DIRECTOS
empleado::Consultas()
{
gotoxy(10,5);
cout<<"CONSULTAS DE UN REGISTRO EN UN ARCHIVO DIRECTO.";
Datos_Constantes();
gotoxy(46,10); cout<< clave;
gotoxy(46,12); cout<< nom;
gotoxy(46,14); cout<< sdia;
gotoxy(46,16); cout<< dias;
gotoxy(50,22); cout<<"<Return> para continuar";
getchar();
return 0;
}
empleado::Datos_Constantes()
{
gotoxy(20,10); cout<<"Clave del empleado : ";
gotoxy(20,12); cout<<"Nombre del empleado : ";
gotoxy(20,14); cout<<"Sueldo diario : ";
gotoxy(20,16); cout<<"No. de Dias trabajados : ";
return 0;
}
Programa no. 5.1 Codificación de la clase empleado para usarla en Archivos Directos.
Los archivos organizados en forma directa son los ideales para utilizarlos en
sistemas de información que tienen accesos interactivos o en tiempo real. Lo
anterior es debido a que no importa la cantidad de registros que tenga el archivo de
datos. Las altas, bajas, modificaciones o consultas serán rapidísimas porque el
acceso lo hace en forma directa sin pasar por ningún registro previo.
Página : 78
ARCHIVOS DIRECTOS
ACTUALIZACION.
2.- Altas.- Para insertar elementos en archivos directos se utilizan técnicas como
son las técnicas de cálculo de direcciones, en éstas técnicas tienen lugar las
llamadas "coalisiones" que no son mas que la repetición de una localidad al
momento de almacenar un dato. Las colisiones no pueden ser eliminadas, lo
mas que se puede hacer es tratar de minimizarlas y para ello existen distintos
métodos que se describieron anteriormente.
Página : 79
ARCHIVOS DIRECTOS
RECUPERACIÓN.
Página : 80
ARCHIVOS DIRECTOS
IV.3 Mantenimiento.
Se definió un registro de datos que contiene 4 campos que son : Clave del
empleado, su nombre, sueldo diario y días trabajados. La anterior estructura es con
fines didácticos y es la que está establecida desde la figura No. 3.1 de éste
documento.
Página : 81
ARCHIVOS DIRECTOS
//============================================================
// PROGRAMA DE EJEMPLO PARA CREAR EL ESQUELETO DE UN
// ARCHIVO DIRECTO.
//
// Autor : José Luis Hernández Hernández.
//============================================================
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>
#include <dos.h>
#include "emplea.hpp"
main()
{
Abrir_Archivo(); // Abre Archivo Secuencial y de Indices.
Grabar_Registro(); // Graba Registros en blanco.
Cierra_Archivo(); // Cierra el Archivo.
return 0;
}
Abrir_Archivo()
{
ofDirecto.open("c:\\directo.dat",ios::out | ios::binary);
if (!ofDirecto)
{
clrscr();
cout << "El Archivo <DIRECTO> no pudo abrirse"<<endl;
cout << "Pulsar <Return> para Salir"<<endl;
getchar();
exit (-1);
}
return 0;
}
Página : 82
ARCHIVOS DIRECTOS
Grabar_Registro()
{
int i, Reg;
clrscr();
gotoxy(10,8);
cout << "CREACION DE UN ARCHIVO DIRECTO";
gotoxy(10,12);
cout << "CANTIDAD DE REGISTROS QUE TENDRA EL ARCHIVO DIRECTO : ";
cin >> Reg;
for(i=0; i<= Reg ; i++)
{
ofDirecto.write((char *) &EMP, sizeof(EMP));
gotoxy(20,18); cout << "Registro Creado : " << i;
delay(100);
}
return 0;
}
Cierra_Archivo()
{
ofDirecto.close();
gotoxy(30,22);
cout << "ARCHIVO DIRECTO CREADO EXITOSAMENTE.";
return 0;
}
//============================================================
// PROGRAMA DE EJEMPLO PARA DAR ALTAS DE REGISTROS
// A UN ARCHIVO DIRECTO.
// Autor : José Luis Hernández Hernández.
//============================================================
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>
#include <dos.h>
#include "emplea.hpp"
Página : 83
ARCHIVOS DIRECTOS
main()
{
Abrir_Archivo(); // Abre Archivo Directo.
Alta_Registro(); // Da de alta un registro en forma Directa.
Cierra_Archivo(); // Cierra el Archivo.
return 0;
}
Abrir_Archivo()
{
ofDirecto.open("c:\\directo.dat",ios::in | ios::out |ios::ate | ios::binary);
if (!ofDirecto)
{
clrscr();
cout << "El Archivo <DIRECTO> no pudo abrirse"<<endl;
cout << "Pulsar <Return> para Salir"<<endl;
getchar();
exit (-1);
}
return 0;
}
Alta_Registro()
{
int Cve, ubicacion;
Cve = EMP.Pedir_Clave();
EMP.clave = Cve;
int Ubi = Cve * sizeof(EMP); // Hace el cálculo para encontrar
ubicacion = Ubi - sizeof(EMP); // la ubicación lógica en el archivo.
EMP.Pedir_Datos();
ofDirecto.seekp(ubicacion, ios::beg);
ofDirecto.write((char *) &EMP, sizeof(EMP));
return 0;
}
Cierra_Archivo()
{
ofDirecto.close();
gotoxy(30,22); cout << "REGISTRO GRABADO EXITOSAMENTE.";
return 0;
}
Página : 84
ARCHIVOS DIRECTOS
//============================================================
// PROGRAMA DE EJEMPLO PARA DAR BAJAS DE REGISTROS
// A UN ARCHIVO DIRECTO.
// Autor : José Luis Hernández Hernández.
//============================================================
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>
#include <dos.h>
#include "emplea.hpp"
main()
{
Abrir_Archivo(); // Abre Archivo Directo.
Eliminar_Registro(); // Eliminar un registro en forma Directa.
Cierra_Archivo(); // Cierra el Archivo.
return 0;
}
Abrir_Archivo()
{
ofDirecto.open("c:\\directo.dat",ios::in | ios::out |ios::ate | ios::binary);
if (!ofDirecto)
{
clrscr();
cout << "El Archivo <DIRECTO> no pudo abrirse"<<endl;
cout << "Pulsar <Return> para Salir"<<endl;
getchar();
exit (-1);
}
return 0;
}
Página : 85
ARCHIVOS DIRECTOS
Eliminar_Registro()
{
int Cve, ubicacion;
Cve = EMP.Pedir_Clave();
int Ubi = Cve * sizeof(EMP);
ubicacion = Ubi - sizeof(EMP);
ofDirecto.seekp(ubicacion, ios::beg);
ofDirecto.write((char *) &EMP, sizeof(EMP));
return 0;
}
Cierra_Archivo()
{
ofDirecto.close();
gotoxy(30,22); cout << "REGISTRO ELIMINADO EXITOSAMENTE.";
return 0;
}
//=================================================================
// PROGRAMA DE EJEMPLO PARA HACER MODIFICACIONES A REGISTROS
// A UN ARCHIVO DIRECTO.
// Autor : José Luis Hernández Hernández.
//=================================================================
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>
#include <dos.h>
#include "emplea.hpp"
Página : 86
ARCHIVOS DIRECTOS
main()
{
Abrir_Archivo(); // Abre Archivo Directo.
Modificar_Registro(); // Modificar un registro en forma Directa.
Cierra_Archivo(); // Cierra el Archivo.
return 0;
}
Abrir_Archivo()
{
ofDirecto.open("c:\\directo.dat",ios::in | ios::out |ios::ate | ios::binary);
if (!ofDirecto)
{
clrscr();
cout << "El Archivo <DIRECTO> no pudo abrirse"<<endl;
cout << "Pulsar <Return> para Salir"<<endl;
getchar();
exit (-1);
}
return 0;
}
Modificar_Registro()
{
int Cve, ubicacion;
Cve = EMP.Pedir_Clave();
int Ubi = Cve * sizeof(EMP);
ubicacion = Ubi - sizeof(EMP);
ofDirecto.seekp(ubicacion, ios::beg); // Coloca el puntero en la ubicación lógica
ofDirecto.read((char *) &EMP, sizeof(EMP)); // Lee el registro.
EMP.Modifica(); // Cambia los campos.
ofDirecto.seekp(ubicacion, ios::beg); // Regresa el Puntero.
ofDirecto.write((char *) &EMP, sizeof(EMP)); // Reescribe en registro.
return 0;
}
Cierra_Archivo()
{
ofDirecto.close();
gotoxy(30,22);
cout << "REGISTRO MODIFICADO EXITOSAMENTE.";
return 0;
}
Página : 87
CAPITULO 6
Correspondencia
entre la llave y la
dirección física
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
DIRECCIONAMIENTO DIRECTO.
Página : 89
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Página : 90
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
DIRECCIONAMIENTO INDIRECTO.
Página : 91
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Método de árbol – B+
Página : 92
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
VI.2.1 Directa.
Con éste otro método, cada pista del paquete está dividida en
sectores, como se ilustra en la figura No. 6.4. Cada sector es un
área de almacenamiento para un número fijo de registros. Una
dirección del registro es simplemente su número de sector. Dado
un número de sector, el controlador del disco puede determinar
Página : 93
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Página : 94
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Página : 95
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Figura No. 6.5 Formación del Número de control de un alumno del Tecnológico.
Página : 96
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
VI.2.2 Asociación.
Página : 97
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Figura 6.7 Asociación cuando existen 2 áreas de índices y una área de datos.
Página : 98
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
De acuerdo a la figura No. 6.7, el área de datos está asociado con una área de
índice por la clave de la persona y con otra área de índice por el nombre de la
persona. Con cualquiera de los dos datos (clave y nombre) es posible accesar al
registro respectivo que se encuentra en el área de datos.
La forma del esqueleto que se crea puede apreciarse en la figura No. 6.8 y
que considera un área del 10% para posibles colisiones.
Figura No. 6.8 Esqueleto de un archivo relativo que considera una área para colisiones.
Página : 99
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
En algunas ocasiones puede crearse una rutina personal para crear los
número aleatorios; aunque el resultado serán números pseudoaleatorios.
TRUNCAMIENTO.
Una vez que se obtuvo un resultado, se toma la cantidad de dígitos que tendrá
la dirección relativa objetiva empezando de derecha a izquierda y los dígitos de
mayor valor son truncados para de esa forma obtener la dirección relativa.
68 654 321
• A continuación se toman los tres valores obtenidos y se colocan uno abajo del
otro, ajustandolos de izquierda a derecha y sumandose de la forma siguiente :
68
+ 654
321
1655
Página : 100
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
SELECCIÓN.
ANÁLISIS DE FRECUENCIAS.
Finalmente, se toman las columnas con mayor variación y tantas como dígitos
se requieren. Se aplica un factor de ajuste para reducir el porcentaje de colisiones.
Página : 101
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Este método consiste en dividir una llave dada entre un numero primo
seleccionado con anterioridad, y finalmente utilizar el resultado de la operación como
una dirección relativa.
Página : 102
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
La figura No. 6.10 nos muestra como obtener la ubicación física utilizando la
técnica de división por número primo, considerando el valor 5003 como número
primo.
Figura No. 6.10 Ubicación fisica de un registro con la división por número primo.
CAMBIO DE BASE.
Por ejemplo supongase que se desea generar las direcciones físicas entre 0 y
99 y se considera que se cambiará la base 10 a base 8, tal como se muestra en la
figura No. 6.11.
Página : 103
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
MULTIPLICACIÓN.
CUADRADO.
La técnica por medio del cuadrado consiste en tomar la llave del registro y
elevarla al cuadrado, después se extraen algunos dígitos especificados de la mitad
del resultado para constituir la dirección relativa.
Página : 104
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
La figura No. 6.13 ilustra el uso de la técnica del cuadrado para llaves que
tienen 9 digitos y que se extraen 4 digitos del centro para tomarlo como ubicación
física del registro.
Figura No. 6.13 Uso del cuadrado para obtener la dirección física.
Para elegir alguna de las ocho formas, se deben de considerar dos puntos que
son muy importantes :
Página : 105
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
BYTES J O S E L U I S
74 + 79 + 83 + 69 + 32 + 76 + 85 + 73 + 83 = 654
Página : 106
CORRESPONDENCIA ENTRE LA LLAVE Y LA DIRECCIÓN FÍSICA
Página : 107
CAPITULO 7
Otros métodos de
organización de
archivos y
busquedas de
economías.
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Página : 109
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Página : 110
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Página : 111
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
están en memoria RAM y cuales en disco, sus direcciones reales, etc; crece y
provoca mucha `sobrecarga' (overhead). Por otro lado, si las páginas son muy
grandes, el overhead disminuye pero entonces puede ocurrir que se desperdicie
memoria en procesos pequeños.
Figura No. 7.3 Páginas de memoria compartidas por uno o más procesos.
Página : 112
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Como se observa en la figura 7.4, una dirección virtual `v' = (b,d) está formada
por un número de página virtual `b' y un desplazamiento `d'. Por ejemplo, si el
sistema ofrece un espacio de direcciones virtuales de 64 kbytes, con páginas de 4
kbytes y la memoria RAM sólo es de 32 kbytes, entonces se tienen 16 páginas
virtuales y 8 reales. La tabla de direcciones virtuales contiene 16 entradas, una por
cada página virtual. En cada entrada, o registro de la tabla de direcciones virtuales
se almacenan varios datos: si la página está en disco o en memoria, quién es el
dueño de la página, si la página ha sido modificada o es de lectura nada mas, etc.
Pero el dato que nos interesa ahora es el número de página real que le corresponde
a la página virtual. Obviamente, de las 16 virtuales, sólo ocho tendrán un valor de
control que dice que la página está cargada en memoria RAM, así como la dirección
real de la página, denotada en la figura 7.4 como b' . Por ejemplo, supóngase que
para la página virtual número 14 la tabla dice que, efectivamente está cargada y es la
página real 2 (dirección de memoria 8192). Una vez encontrada la página real, se le
suma el desplazamiento, que es la dirección que se desea dentro de la página
buscada ( b' + d ).
Página : 113
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Página : 114
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Al ocurrir el fallo de página, el sistema operativo debe elegir una página para
retirarla de la memoria y usar el espacio para la página que se necesita para
desbloquear el sistema y que el hardware pueda seguir trabajando. Si la página por
eliminar de la memoria fue modificada, se debe volver a escribir al disco para
mantener la información actualizada; de lo contrario, si la página no fue modificada
no es necesario rescribir la información a disco y la página que se carga simplemente
se escribe sobre la página que se va a borrar de la memoria. La figura 7.5 muestra
gráficamente un intercambio de páginas entre la memoria principal y el disco
(memoria secundaria).
Figura No. 7.5 Eliminación de la memoria principal una página que no está en uso y se
reemplaza por otra página que se requiere.
Página : 115
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Página : 116
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Página : 117
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Cada uno de los descriptores del segmento contiene la longitud del segmento
(de 0 a 16 páginas), bits de protección que indican si el segmento se puede leer o
escribir y un apuntador a la tabla de páginas. Cuando el Sistema Operativo da inicio
a un proceso carga el número de proceso de 4 bits y los 6 bits de alto orden (posic.
Más significativas) de la dirección virtual de 22 bits y los combina en un número de
10 bits que se usa como índice en la tabla de segmentos y para localizar el descriptor
del segmento relevante. Luego verifica los bits de protección en el descriptor. Si el
acceso está permitido la MMU verifica el número de página que se extrajo de la
dirección virtual respecto al campo de longitud del segmento para ver si el segmento
es suficientemente grande. Si lo es el número de página se utiliza como índice en
la tabla de páginas, cuya dirección se proporciona en el descriptor del segmento.
Una vez que se halla el número del frame, éste se combina con el desplazamiento
para acceder a la memoria física.
Dos o más procesos pueden compartir un segmento sin más que hacer que
sus descriptores de segmentos apunten a la misma tabla de páginas. Cualquier
variación hecha a las páginas de este segmento por algún proceso se hace
automáticamente visible para los otros.
Página : 118
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Problemas de la segmentación
Ventajas:
Sistemas de Archivos
Página : 119
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Página : 120
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
CASOS DE INSERCIÓN :
Figura No. 7.8 Archivo VSAM luego de una inserción en un intervalo no lleno.
Página : 121
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Como el intervalo está lleno y la inserción debe hacerse allí, se dice que dicho
intervalo desbordó por lo cual debe ser dividido en dos intervalos semi-llenos. Esta
fisión puede presentar dos casos suplementarios, ellos son:
Este caso se muestra en la Figura No. 7.9, con la inserción del registro con
clave 29. Siguiendo los mismos pasos que en el primer caso, el intervalo
donde este registro debe ser insertado es el mismo intervalo anterior.
Al no haber un intervalo libre en el área, el intervalo que desborde tendrá que ser
dividido y dicha fisión hará que el área desborde a su vez, teniéndose que fisionar
el área también. La fisión de un área se realiza de igual manera que la de los
intervalos. La inserción de los registros de claves 27 y 28 consecutivamente
hacen que el área 1 desborde, creándose una nueva área que es la número 2 y
se puede apreciar en la figura No. 7.10.
Página : 122
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Ventajas:
Desventajas:
Página : 123
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
así como secuencias de vídeo reproducidas con una calidad muy superior a la
ofrecida por una tarjeta gráfica que no utilice ningún sistema de compresión.
2.- La segunda es la de los métodos de uso más general, por los que se les puede
incluir en paquetes de software de uso general, en el hardware o en
microprogramas. Muchas firmas especializadas ofrecen
comercialmente paquetes de software para reducir el tamaño de los
archivos.
Página : 124
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Página : 125
OTROS MÉTODOS DE ORGANIZACIÓN DE ARCHIVOS Y BUSQUEDAS DE ECONOMÍAS
Página : 126
CAPITULO 8
Acceso Multi-
llaves
ACCESO MULTI-LLAVES
En los últimos años ha existido mucho interés en los sistemas de archivos que
guardan múltiples tipos de datos tales como multimedia, imágenes, sonido y vídeo.
En dichas aplicaciones es muy conveniente implementar un sistema de archivos que
pueda manejar múltiples llaves de acceso.
• La organización multilista.
• La inversión.
Página : 128
ACCESO MULTI-LLAVES
lenguaje pueden establecer una interfase directa con este manejo de archivos, o
pueden generar llamadas a estas rutinas de manejo.
Página : 129
ACCESO MULTI-LLAVES
Página : 130
ACCESO MULTI-LLAVES
Página : 131
ACCESO MULTI-LLAVES
Desde el punto de vista común, el uso del término inversión implica que los
valores de los datos indexados han sido sacados del registro de datos y residen
solamente en el correspondiente índice de inversión.
En los archivos de listas múltiples con listas de longitud controlada, ésta puede
ir desde un eslabón por lista hasta una longitud suficiente para incluir todos los ítems.
En el primer caso hablamos de una lista invertida, en ésta hay una entrada de índice
de cada clave, para cada registro.
De esta manera, se requiere un único acceso a los datos para cada registro
que es la respuesta a una consulta. Suponiendo que es posible examinar
rápidamente los índices secundarios, la organización de lista invertida da la
respuesta más rápida a las consultas en tiempo real, porque no hay lista que seguir.
En cambio, los índices pueden resultar tan extensos (habrá que almacenarlos en
dispositivos secundarios) que su propia organización llega a constituir un problema.
Página : 132
ACCESO MULTI-LLAVES
Página : 133
ACCESO MULTI-LLAVES
Por cada campo llave, puede haber una o varias listas ligadas dependiendo la
restricción que se le haya impuesto a cada una de las listas ligadas de los índices.
Página : 134
ACCESO MULTI-LLAVES
Página : 135
ACCESO MULTI-LLAVES
Página : 136
ACCESO MULTI-LLAVES
1. Los índices para ver qué zonas del hardware contienen el atributo “Negro” y el
atributo “muñeca”. Si observamos la Figura No. 8.5 nos damos cuenta
que la zona 4 no contiene el atributo muñeca, y las zonas 1,3,5 no tienen
el atributo “negro”. Por lo tanto, solo hay que explorar la zona 2, pero sólo
tiene dos registros con el atributo “negro”.
2. Por lo tanto solo se examinará los registros que contienen el atributo negro para
ver si hay muñecas negras.
Otra versión de las multilistas celulares o particionada celular, son las listas
invertidas celulares en paralelo en las cuales las posiciones de las celdas podrán
seleccionarse de forma que dos o más de ellas puedan explorarse en paralelo, con el
fin de reducir los tiempos de respuesta del sistema.
Página : 137
ACCESO MULTI-LLAVES
Las celdas a que se refieren los índices son cilindros, varios de los cuales
pueden ser explorados en paralelo. Cada cilindro posee un índice propio para
acelerar la búsqueda dentro de ese cilindro y para que no sea necesario leer todas
las pistas de éste.
Página : 138
ACCESO MULTI-LLAVES
Página : 139
ACCESO MULTI-LLAVES
Figura No. 8.6 Adición de un registro en las listas ligadas de profesión y categoría.
Página : 140
ACCESO MULTI-LLAVES
Página : 141
CAPITULO 9
Evaluación
General de
Sistemas de
Archivos
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Página : 143
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
• Cumplir con las necesidades de gestión de datos y con los requisitos del
usuario, que incluye el almacenamiento de datos y la capacidad de ejecutar
las operaciones cotidianas.
• Garantizar, en la medida de lo posible, que los datos en el archivo sean
válidos.
• Optimizar el rendimiento, ambos desde el punto de vista del sistema en
términos de productividad global, y como punto de vista del usuario en
tiempos de respuesta.
• Para proveer soporte de E/S para una variedad de tipos de dispositivos de
almacenamiento.
• Para minimizar o eliminar la posibilidad de perdida o destrucción de datos.
• Para proveer un conjunto estándar de rutinas de E/S.
• Para proveer soporte de E/S para múltiples usuarios, en caso de sistemas
multiusuarios.
Página : 144
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Este capítulo tiene como fin evaluar en forma general un sistema de archivos;
pero como para ello se requiere contar con un sistema de archivos real y no se
cuenta, lo que se hizo fue tomar datos ficticios. A dichos datos ficticios se les
aplicaron ciertas operaciones aritméticas y ciertas consideraciones; para finalmente
obtener estimaciones del uso de un sistema de archivos tales como : análisis de los
beneficios del sistema, necesidades de almacenamiento y una comparación entre
costo-beneficio.
Página : 145
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Hay que tener en mente que generalmente habrá que hacer las estimaciones
más de una vez. Suele hacerse un conjunto de estimaciones en las primeras etapas
de un proyecto, pero pueden requerirse muchas veces, a medida que los usuarios y
la administración exploran las diferentes posibilidades de combinaciones. Un
ejemplo obvio de esto es el posible sacrificio de funcionalidad a cambio de tiempo y
viceversa (por ejemplo, el administrador del proyecto puede decir al usuario: "Estoy
prácticamente seguro de que podemos entregarle el sistema para el 1 de enero si no
metemos las funciones X, Y y Z"; otro ejemplo es el de la relación inversa entre
personas y tiempo (por ejemplo, el usuario puede decirle al administrador del
proyecto, "Si tuviera tres programadores más, podría terminar el proyecto a tiempo".
Podría tomar varias iteraciones que el equipo del proyecto, la administración y la
comunidad usuaria lleguen a un acuerdo aceptable.
Desafortunadamente es muy difícil hacer una estimación real del uso del
sistema de archivos y lo que se propone hacer es la aplicación de programas
sintéticos para emular el trabajo real de procesamiento de un sistema de cómputo.
Página : 146
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Beneficios tácticos
Página : 147
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Página : 148
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Debido a que el fin es hacer la estimación del uso del sistema de archivos
en un sistema de información, se tiene que investigar los datos que se van a
almacenar en los archivos, por lo que se hace necesario hacer las preguntas
siguientes :
• Cuando se crea un archivo nuevo. ¿Se asigna de una sola vez el máximo
espacio que necesite?
• El espacio se asigna a un archivo en forma de una o más unidades contiguas
que se llaman secciones. Un tamaño de una sección puede variar desde un
único bloque a un archivo entero. ¿Que tamaño de sección debería usarse
para asignar archivos?
• ¿Qué tipos de estructura de datos o tabla se usaran para guardar constancia
de las secciones asignadas a un archivo?.
Página : 149
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Tabla No. 9.1 Concentrado para conocer la cantidad de espacio de almacenamiento secundario
requerido.
Cabe hacer mención que los nombres de los archivos y los datos que se
manejan en la Tabla No. 9.1, son ficticios y únicamente se utilizan para
ejemplificar y obtener las necesidades de almacenamiento de un sistema de
información.
Una vez que se conoce la cantidad de bytes que ocuparán los archivos de
datos, se hace un cálculo del 10 % adicional para los índices de los archivos
Indexados y multillave, obteniéndose los datos que se muestran en la tabla No. 9.2.
Una vez que se obtienen los datos, se hace una estimación de un 50 % para
contener los programas de la aplicación, se consideran 900 megabytes para el
Sistema Operativo y dos megabytes para un software antivirus que será
actualizado mensualmente o antes si es necesario, obteniéndose el total que se
muestra en la Tabla No. 9.3.
Página : 150
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
De los datos plasmados en las Tablas No. 9.1 al 9.4 se deduce que el disco
duro como medio de almacenamiento requerido para éste pequeño caso de estudio,
debe considerarse de al menos 3 Gigabytes al iniciar operaciones y al año debe
tener una capacidad para almacenar 8 gigabytes y de esa forma se hace el cálculo
para los años posteriores.
Una buena práctica es adquirir un disco duro con una capacidad suficiente
para que funcione correctamente en al menos 3 años y posteriormente se verá la
posibilidad de crecimiento o escalamiento de la computadora según sea el caso.
Página : 151
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
ANÁLISIS DE COSTOS
Página : 152
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
Costos operacionales
Página : 153
EVALUACIÓN GENERAL DEL SISTEMA DE ARCHIVOS
computadora principal centralizada que ya está instalada estos costos pueden estar
incluidos en el costo global del hardware. Sin embargo, si se está desarrollando un
sistema completamente nuevo que tendrá su propio local de operaciones, éste
podría ser un gasto importante.
Así, probablemente tendrá que demostrar los costos y beneficios que del
sistema a lo largo de cierto periodo de tiempo. Existen cuatro métodos comunes
para hacer comparar los costos contra los beneficios. Dichos métodos se enumeran
a continuación :
• Flujo de efectivo.
• Rendimientos de inversiones (en ingles, ROI).
• Tasa interna de rendimiento (IRR).
• Valor neto actual (VNA).
.
Aplicando los cuatro métodos comunes, se podrá hacer la comparación de los
costos con los beneficios y en ese momento se podrá evaluar si el sistema de
archivos vino a resolver un problema a bajo costo o si su utilización salió mas cara
que como venía operando.
Página : 154
BIBLIOGRAFIA
Página : 155
[t11] Fundamentos de Programación.
Luis Joyanes Aguilar, Luis Rodríguez Bahena y Matilde Fernández Azuela.
Mc. Graw Hill.
[i-1] http://www.lafacu.com/apuntes/informatica/organizacion_de_computadoras/default.htm
[i-2] http://www.itlp.edu.mx/publica/tutoriales/admonarch/index.htm
[i-3] http://www.info-ab.uclm.es/labelec/solar/Discos/33cdrom.htm
[i-4] http://www.domotica.net/ir'www.monografias.com/trabajos/perifericos/perifericos.shtml
[i-5] http://www.inf.udec.cl/~sistcomp/c5.html
[i-6] http://www.lafacu.com/apuntes/informatica/Los_archivos_II/default.htm
[i-7] http://www.uap.edu.pe/Fac/02/trabajos/02119/archivos.htm
[i-8] http://www.intel.com
Página : 156
GLOSARIO DE TERMINOS.
Bloque.- Es una colección de registros contiguos registrados como una sola unidad;
algunas veces es llamado registro físico.
Colisión.- Situación que ocurre cuando dos valores de llaves diferentes se mapean a
la misma dirección física.
Página : 157
Direccionamiento por Cilindro.- Es una técnica para el direccionamiento de los
registros de datos sobre un disco duro, donde una dirección de registro es
su número de cilindro, numero de superficie y número de registro.
Indice de inversión.- Es un índice que contiene todos los valores que la llave
primaria o secundaria tiene en el archivo de datos y apuntadores a todos
los registros de datos que tienen los valores correspondientes.
Ms.- milisegundos.
Pista.- Es un área sobre la superficie de un disco duro, puede ser leída sin el
reposicionamiento de la cabeza de lectura/escritura.
Sector.- Es la parte de una pista sobre el disco duro que puede ser accesada por las
cabezas de lectura/escritura durante el desplazamiento rotacional
predeterminado del dispositivo.
Página : 158