1 00:00:00,000 --> 00:00:12,759 hola a todos he creído conveniente hacer este vídeo sobre los ficheros por entender un poquito 2 00:00:12,759 --> 00:00:20,399 cómo es cuáles son los distintos tipos de ficheros que hay y sobre todo cómo podemos acceder a sus 3 00:00:20,399 --> 00:00:29,280 registros dentro de la unidad 1 una gran parte de toda ella habla sobre los ficheros los ficheros 4 00:00:29,280 --> 00:00:38,140 van a ser muy importantes para entender todo lo que va a ser toda la asignatura. 5 00:00:38,679 --> 00:00:44,179 Hay que decir que los ficheros fue el comienzo de cómo poder almacenar la información 6 00:00:44,179 --> 00:00:48,539 y se comenzó a través de este tipo de elementos. 7 00:00:49,920 --> 00:00:57,460 Los ficheros, tenemos que hablar que, lógicamente, cuando tú almacenas un fichero, 8 00:00:57,460 --> 00:01:02,200 una serie de registros, es decir, pues que un registro va a estar compuesto de una serie 9 00:01:02,200 --> 00:01:09,680 de campos y tenemos que saber cómo almacenarlos y también, muy importante, saber cómo acceder 10 00:01:09,680 --> 00:01:12,980 a ellos, cómo borrarlos, cómo insertarlos, cómo modificarlos. 11 00:01:14,599 --> 00:01:21,060 Aquí tenemos un dibujo en el que nos habla pues de tanto el acceso secuencial como el 12 00:01:21,060 --> 00:01:21,599 aleatorio. 13 00:01:22,140 --> 00:01:27,060 El acceso secuencial sería el ir recorriendo cada uno de los registros en el fichero, de 14 00:01:27,060 --> 00:01:34,980 De tal manera que si queremos llegar al registro número 7, tenemos que haber pasado por el 6, por el 5, por el 4, etc. 15 00:01:35,480 --> 00:01:41,200 En cambio, en un acceso aleatorio, si nosotros podemos ir directamente al registro número 2, 16 00:01:41,200 --> 00:01:51,579 luego del registro número 1 podemos ir al registro número 2, del registro número 3, lo hace de manera aleatoria. 17 00:01:51,579 --> 00:02:09,099 Los dispositivos de almacenamiento podemos diferenciarlos en dos, en los secuenciales, están basados a través de un acceso secuencial, como puede ser una cinta magnética, el acceso secuencial, veis aquí, ese sería el camino que tiene que seguir uno para recorrer cada uno de los registros. 18 00:02:09,099 --> 00:02:20,259 Mientras que otros serían los hidrocelables, que serían como puede ser el disco duro en el que el acceso directo se hace a través de los segmentos individuales del mismo. 19 00:02:20,259 --> 00:02:39,639 Ese sería un tipo de acceso aleatorio. En cuanto a los tipos de acceso a cada uno de los registros del fichero, podemos tener distintos tipos. El secuencial, que lo acabo de nombrar anteriormente, para llegar al registro N antes de haber que pasar por el N-1, el N-2, etc. 20 00:02:40,020 --> 00:02:49,639 El directo, que sería por acceso por clave, en el que tendríamos un acceso aleatorio, en el que iríamos a una determinada posición sin tener que haber recorrido todos los anteriores. 21 00:02:50,060 --> 00:02:58,840 El indexado, en el que nos vamos a ayudar con una serie de tablas en el que, como veremos posteriormente, establecemos la conexión entre clave y dirección. 22 00:02:59,699 --> 00:03:03,680 Y el dinámico, que sería una mezcla de acceso directo e indexado. 23 00:03:03,680 --> 00:03:08,300 Los tipos de ficheros, la organización va a depender de tres cosas 24 00:03:08,300 --> 00:03:10,020 Una, del proceso que va a soportar 25 00:03:10,020 --> 00:03:15,319 ¿Por qué? Porque eso va a condicionar esas características que tenga el propio fichero 26 00:03:15,319 --> 00:03:19,180 Va a condicionar cómo se van a almacenar y cómo se van a recuperar los datos 27 00:03:19,180 --> 00:03:26,840 Una segunda dependencia sería la de la forma de acceso 28 00:03:26,840 --> 00:03:29,740 La acabamos de ver, secuencial, aleatorio, mixto 29 00:03:29,740 --> 00:03:31,900 Y por último el soporte de almacenamiento 30 00:03:31,900 --> 00:03:45,560 que puede ser con su bien secuencial, como pasaba con las cintas magnéticas, o archivos de acceso directo, como pueden ser con los discos duros, SSDs o incluso los sistemas mixtos que pueden aparecer en las bases de datos relacionales o distribuidas. 31 00:03:47,639 --> 00:03:56,659 Con respecto a la primera organización sería la secuencial. En la secuencial los registros están grabados en posiciones continuas, ya lo he dicho. 32 00:03:56,659 --> 00:04:07,520 Aquí, ¿qué va a suceder? Que el orden físico, o sea, las direcciones de memoria, donde está cada uno de ellos, se va a corresponder con el orden lógico, 33 00:04:07,740 --> 00:04:13,740 lo que son las claves que le hemos puesto a cada una de las direcciones de memoria, donde va a estar ubicado el dato. 34 00:04:14,960 --> 00:04:21,120 ¿Qué ventajas tienen? Pues que si queremos recorrer bloques contiguos, pues en la secuencia es muy rápido. 35 00:04:21,959 --> 00:04:45,480 Todo lo contrario, si tuviéramos que acceder a determinados registros en el que tendríamos que recorrer toda la secuencia de manera que, con una pérdida de tiempo, lógicamente, para llegar al punto donde nosotros queremos llegar, el secuencial será sólo útil para el caso de que queramos recorrer un bloque de manera contigua. 36 00:04:45,480 --> 00:04:52,040 y aceptan registros de cualquier longitud. 37 00:04:52,740 --> 00:04:56,180 En cambio, los inconvenientes es que, claro, en una organización secuencial 38 00:04:56,180 --> 00:04:58,339 solo lo vamos a poder hacer de manera secuencial. 39 00:04:59,019 --> 00:05:02,240 La inserción solo es al final, la eliminación va a ser un borrado lógico, 40 00:05:02,240 --> 00:05:07,720 lo que quiere decir que la dirección de memoria sigue ahí, 41 00:05:07,819 --> 00:05:12,139 lo que pasa es que en el borrado lógico no hay ninguna clave que referencie esa dirección de memoria, 42 00:05:12,439 --> 00:05:15,279 entonces no se va a reducir el contenido. 43 00:05:15,480 --> 00:05:37,319 Y por último, ¿qué va a requerir? Una reorganización periódica para que esos huecos que se van generando no nos dificulte o porque cuando acabamos de hacer un recorrido de registros de manera secuencial vamos a tener que también incluir en ese recorrido aquellos borrados lógicos que hayamos efectuado. 44 00:05:40,269 --> 00:05:43,410 Dentro de la secuencial vamos a tener varios tipos de secuencial. 45 00:05:43,589 --> 00:05:44,910 Uno sería la encadenada. 46 00:05:44,990 --> 00:05:52,410 Encadenada ya está diciendo que va a haber una cadena que va a establecer una relación entre la secuencia lógica con la física. 47 00:05:52,750 --> 00:05:55,810 Y eso se va a realizar a través de un elemento que van a ser los punteros. 48 00:05:56,189 --> 00:06:00,329 Por tanto, la secuencia lógica y la secuencia física ahora son diferentes. 49 00:06:00,850 --> 00:06:01,209 ¿Por qué? 50 00:06:01,209 --> 00:06:12,149 Vamos a tener las direcciones de memoria en distintas posiciones y para establecer una conexión entre todas ellas lo vamos a hacer a través de punteros. 51 00:06:12,149 --> 00:06:24,990 La inserción va a ser al final, los punteros mantienen un orden lógico, la eliminación va a ser igual que anteriormente, con un orden lógico y va a requerir de soportes direccionales. 52 00:06:25,990 --> 00:06:30,870 Esto se va a utilizar de manera muy frecuente en los sistemas operativos. 53 00:06:32,519 --> 00:06:41,279 Aquí tenemos un ejemplo de un recorrido en el que vamos a recorrer, en la búsqueda de una determinada clave, vamos a recorrer cada uno de los registros. 54 00:06:41,279 --> 00:06:54,959 Si veis aquí, el fichero de registros está formado por tres campos, que sea clave, que sería la parte lógica, el dato que va a contener, el puntero, y esto va a hacer referencia a una dirección de memoria. 55 00:06:54,959 --> 00:07:02,980 Entonces, lo que ocurre es que todos los registros van a estar ordenados lógicamente por las claves, pero almacenados físicamente dispersos en diferentes direcciones. 56 00:07:03,439 --> 00:07:10,420 Entonces, la parte lógica y la física van a estar encadenadas, entre comillas, a través de un elemento que es el puntero. 57 00:07:10,420 --> 00:07:17,079 Por tanto, si nosotros queremos encontrar la clave 205, empezando por la dirección 0, 58 00:07:17,860 --> 00:07:22,220 estaría relacionado con el puntero 4, que direcciona a qué. 59 00:07:22,560 --> 00:07:27,779 Este puntero nos va a decir cuál va a ser la siguiente dirección de memoria. 60 00:07:28,300 --> 00:07:36,519 Por tanto, nos va a llevar a la dirección de memoria 4, y eso que conlleva que es el registro donde la clave es el número 1, 61 00:07:36,519 --> 00:07:46,259 Y contiene el dato E. Este a su vez, en este registro, el tercer campo, puntero, nos direcciona a la siguiente dirección de memoria que sería la 1. 62 00:07:46,699 --> 00:07:53,439 Entonces esto que nos va a llevar, nos va a llevar pues a el registro donde la clave es la clave 2 con el contenido de datos B. 63 00:07:54,040 --> 00:07:59,379 Si veis, va encadenando las direcciones de memoria a través de los punteros. 64 00:08:00,120 --> 00:08:09,860 Este a su vez tiene el puntero 7, seguimos buscando porque no hemos llegado todavía a la clave 205, que es la que nos interesa, y nos llevaría a la dirección 7. 65 00:08:09,860 --> 00:08:17,160 Esta dirección 7 estaría asociada a la clave 3 con un dato contenido que sería h. 66 00:08:17,819 --> 00:08:23,120 A su vez, el tercer campo sería la dirección 2, en el puntero 2 que apunta a la siguiente dirección. 67 00:08:23,600 --> 00:08:28,060 Esto nos llevaría a la clave 68 con el contenido c. 68 00:08:28,060 --> 00:08:30,639 este tiene asociado en este registro 69 00:08:30,639 --> 00:08:32,399 el tercer campo sería el puntero 3 70 00:08:32,399 --> 00:08:34,320 que nos direcciona a la posición 3 71 00:08:34,320 --> 00:08:36,799 con lo cual nos llevaría a la clave 89 72 00:08:36,799 --> 00:08:38,200 con el contenido D 73 00:08:38,200 --> 00:08:40,820 este tiene asociado el puntero 5 74 00:08:40,820 --> 00:08:42,480 que nos direccionaría a la siguiente dirección 75 00:08:42,480 --> 00:08:43,899 que sería la dirección 5 76 00:08:43,899 --> 00:08:45,980 si veis como va encadenando 77 00:08:45,980 --> 00:08:48,659 cada una de las claves 78 00:08:48,659 --> 00:08:51,620 la va encadenando a través de los punteros 79 00:08:51,620 --> 00:08:52,980 está estableciendo 80 00:08:52,980 --> 00:08:55,320 ese desorden de direcciones 81 00:08:55,320 --> 00:08:57,279 físico 82 00:08:57,279 --> 00:09:00,879 y las está relacionando con el orden lógico. 83 00:09:01,799 --> 00:09:09,379 Ese puntero 5 nos lleva a la dirección 5, que sería la clave 138 y con su contenido F, 84 00:09:09,879 --> 00:09:14,980 que tiene asociado el puntero 6, que nos direcciona a la siguiente dirección, que sería la 6. 85 00:09:15,419 --> 00:09:23,700 Esa 6 contiene la clave 198 con el contenido G y tendría el puntero número 8 asociado como tercer campo. 86 00:09:23,700 --> 00:09:33,100 Nos llevaría a la dirección 8 y esa dirección 8 al final haría que encontráramos la clave 205 que es la que andábamos buscando. 87 00:09:33,519 --> 00:09:42,519 Si veis, va recorriendo a través de los punteros y estableciendo dicha relación entre la parte lógica y la parte física. 88 00:09:43,179 --> 00:10:02,370 Por tanto, tiene un campo adicional en el registro, que sería el propio puntero, tiene una longitud física y posición definida, apunta al siguiente, aquí en este caso o ejemplo, sería que apuntaba al siguiente registro lógico, pero podría ser también al anterior. 89 00:10:02,809 --> 00:10:05,950 Permite representar el fichero como lista encadenada. 90 00:10:06,809 --> 00:10:13,269 Si nos fijamos es como si fuera una cadena mediada a través del elemento puntero. 91 00:10:13,909 --> 00:10:17,870 Y sin puntero, lógicamente, los registros estarían desordenados físicamente. 92 00:10:21,240 --> 00:10:24,840 La secuencia física es el orden en el que los registros están grabados en memoria. 93 00:10:25,240 --> 00:10:26,759 El 0, el 1, el 2... 94 00:10:26,759 --> 00:10:30,179 Y la secuencia lógica sería el orden en el que sigue el sistema con los punteros. 95 00:10:30,720 --> 00:10:33,240 El primer registro lógico puede estar al final físicamente. 96 00:10:33,240 --> 00:10:42,789 Con respecto al acceso, el sistema operativo guarda un puntero inicial al primer registro lógico. 97 00:10:43,110 --> 00:10:55,590 La lectura y la escritura se sigue, pues se sigue el puntero del registro actual, el recorrido termina en un puntero nulo y es eficaz lógicamente para recorridos secuenciales completos. 98 00:10:55,590 --> 00:10:59,340 con respecto a la inserción 99 00:10:59,340 --> 00:11:01,840 si nosotros tenemos que tener un nuevo registro 100 00:11:01,840 --> 00:11:03,340 como por ejemplo el que aparece aquí 101 00:11:03,340 --> 00:11:05,940 entre el 68 y el 89 quiere meter un registro 102 00:11:05,940 --> 00:11:07,320 pues se va a añadir al final 103 00:11:07,320 --> 00:11:09,759 el puntero de 68 104 00:11:09,759 --> 00:11:11,279 ahora va a apuntar al nuevo 105 00:11:11,279 --> 00:11:14,100 y el nuevo es el que va a apuntar al 89 106 00:11:14,100 --> 00:11:17,100 con ello haríamos la propia inserción 107 00:11:17,100 --> 00:11:19,620 en cuanto a la eliminación 108 00:11:19,620 --> 00:11:20,659 sería un bordado lógico 109 00:11:20,659 --> 00:11:23,639 eso quiere decir que el tamaño físico no se va a reducir 110 00:11:23,639 --> 00:11:25,840 lo único que acaba de cambiar es el puntero 111 00:11:25,840 --> 00:11:33,299 se va a saltar al siguiente esto que es el hecho de que sea un borrado lógico tiene una ventaja 112 00:11:33,299 --> 00:11:38,559 que es rápido no requiere reordenar pero el inconveniente es que el fichero puede contener 113 00:11:38,559 --> 00:11:46,220 huecos cada vez que lo recorramos va a recorrer vamos a tener que como el borrado es lógico y no 114 00:11:46,220 --> 00:11:51,860 es físico pues tenemos que ese hueco va a estar ahí va a estar ahí aunque no esté relacionado 115 00:11:51,860 --> 00:11:55,960 a través de los punteros, pero no se reduce el tamaño de la memoria. 116 00:11:57,700 --> 00:12:01,559 En cuanto a la actualización, no habría que implicar al puntero para nada, sería 117 00:12:01,559 --> 00:12:04,720 reescribir los datos del registro y ya está, el puntero no cambia. 118 00:12:08,340 --> 00:12:11,740 La siguiente que podemos hablar, hemos hablado de la secuencia, hemos hablado de la secuencia 119 00:12:11,740 --> 00:12:15,559 del encadenado, ahora vamos a hablar de la secuencia del indexado. Vamos a introducir 120 00:12:15,559 --> 00:12:20,340 un nuevo elemento, vamos a introducir un elemento y eliminamos otro elemento que era el anterior 121 00:12:20,340 --> 00:12:30,120 el puntero desaparece y ahora tenemos en cuenta un índice, como si fuera un índice que consta de una serie de registros 122 00:12:30,120 --> 00:12:35,370 que van a tener dos campos, una clave y su dirección relativa. 123 00:12:35,730 --> 00:12:41,870 Esa dirección o clave va a direccionar a la primera dirección de cada bloque. 124 00:12:42,509 --> 00:12:48,769 Es ideal para grandes volúmenes de datos y permite localizar más rápidamente un registro sin tener que recorrer todo el fichero. 125 00:12:48,769 --> 00:13:16,059 Ahora vamos a tener varias estructuras dentro del fichero, un área primaria donde están los registros almacenados en orden secuencial por clave, ahora veremos un caso y veremos cómo lo recorre, y el área de índices que son las parejas clave y dirección de bloque y se consulta primero para localizar registros en el área primaria, o sea que del área de índices iríamos al área primaria. 126 00:13:16,059 --> 00:13:25,500 Si se tienen que almacenar registros nuevos, pasaríamos a la tercera área, que sería la de Overflow, cuando no caben en el bloqueo original. 127 00:13:27,970 --> 00:13:29,669 ¿Cuál sería el funcionamiento del índice? 128 00:13:30,409 --> 00:13:33,210 Es un acceso rápido gracias a una tabla de índices. 129 00:13:33,389 --> 00:13:40,230 Entonces el índice no guarda el registro completo, solo va a guardar esa pareja, la clave y la dirección. 130 00:13:40,710 --> 00:13:41,370 ¿Cuál será el proceso? 131 00:13:41,809 --> 00:13:47,710 Buscar la clave en el índice, esa nos llevará a una dirección de bloque, a la primera dirección de bloque. 132 00:13:47,889 --> 00:13:57,070 en el área primaria y luego en el área primaria una vez que encontramos la primera dirección del bloque.