Story Transcript
Práctica PCTOOLS • Ejercicio 1 * Crear una etiqueta para el disco rotulada con los tres primeros caracteres del primer apellido de cada uno de los miembros del grupo. Lo primero que tenemos que hacer en este ejercicio es crear la etiqueta de volumen; para ello nos situamos en el directorio raíz y escribimos el nombre de la etiqueta en la parte de los valores de código ASCII (columna de la derecha). Este nombre consta de las tres primeras iniciales de cada uno de los apellidos de los componentes del grupo, Hernández y Álvarez, "HERALV". A continuación le asignamos la característica de etiqueta de volumen en el byte de atributo (Desplazamiento 0BH) para ello vamos a la Tabla 4 de la página 8 de la documentación de la presente práctica, donde nos dice el valor de cada bit para cada uno de los atributos. Como queremos que sea Etiqueta de Volumen del disco, la ristra de bits debe ser la siguiente: 00001000. Los dos primeros bits siempre tienen asignado el valor cero, ya que no se utilizan; el siguiente bit asigna la característica de fichero, en nuestro caso está a cero porque no presenta ese rasgo. El siguiente bit, el cuarto, asigna la característica de subdirectorio, en este caso también está a cero; el quinto bit es el que nos interesa, ya que es el que asigna la característica de etiqueta de volumen, por lo que tiene que estar con valor 1. El sexto bit es el que designa el atributo de Sistema, que lo hace especial por necesitarlos el sistema operativo. El último bit es el que determina la característica de Sólo Lectura, lo que hace que no se permita la modificación de su contenido, o lo que es lo mismo, que está protegido contra escritura. Una vez que tenemos la ristra de bits con los valores que queremos asignar al byte del atributo, lo pasamos a código hexadecimal utilizando por ejemplo la calculadora de Windows 98 en formato científico, por rapidez y seguridad en la conversión, ya que si lo hiciéramos manualmente mediante las operaciones de cambio de código, correríamos el riesgo de equivocarnos en algún número y estropear el ejercicio.
Finalmente, dicho resultado hexadecimal lo debemos colocar en su desplazamiento correspondiente, que es el 0BH. En este caso hay que señalar que no se utiliza el Principio de Almacenamiento Inverso, ya que sólo es un byte y este principio se aplica cuando se pretende almacenar más de un byte. • Ejercicio 2 * Crear un fichero con el mismo nombre que la etiqueta del disco y extensión TXT. El fichero ha de ajustarse a los siguientes requerimientos: • Atributos: Fichero, oculto y Sólo Lectura. • Hora: La hora en la que creáis el fichero. • Fecha: La fecha en la que creáis el fichero. • Secuencia de clusters para el fichero: 9B0H, 9A0H, A00H. • Tamaño: 768 bytes. • Contenido: • 1er Sector: Escribir el siguiente texto: Asignatura: Introducción a los Computadores.
1
Práctica 1: Formato de los Discos bajo DOS. Convocatoria de Febrero. Rellenar hasta el final del sector (hasta 512 caracteres) con el carácter ., excepto el último byte del sector, que debe contener el carácter #. • 2º Sector: Escribir los nombres, los teléfonos y las poblaciones de procedencia de los componentes del grupo en líneas diferentes. Rellenar hasta el final del sector (hasta 512 caracteres) con espacios en blanco, excepto el último byte del sector, que debe contener el carácter | . 3) 3 er Sector: Escribir el nombre del fichero.
En este segundo ejercicio hay que crear un fichero con el mismo nombre que la etiqueta de volumen, siguiendo las mismas pautas que para la etiqueta de volumen, solo que en esta ocasión, en vez de asignar la característica de etiqueta de volumen, cambiamos el valor del desplazamiento 0BH para que sea un fichero "oculto" y de "sólo lectura", siendo la ristra de bits la siguiente: 00100011 , que pasado a hexadecimal es el número 23H. Después tenemos que asignar al fichero su correspondiente fecha y hora, para ello nos vamos al desplazamiento 16H para la hora y 18H para la fecha. Para asignarle la hora hay que aplicar la siguiente fórmula, La hora en la que creamos el documento son las 17:25, por lo que la fórmula quedará de la siguiente manera: hora = (17*2048) + (25*32) + (24/2), dando 35.628. un número en decimal por lo que deberemos pasarlo a hexadecimal, dando 8B2Ch, y ahora teniendo en cuenta el Principio de Almacenamiento Inverso, le damos la vuelta, quedando del siguiente modo: 2C8Bh. Para la fecha se realiza lo mismo sólo que con la siguiente fórmula: Análogamente, la fecha del documento es 21−11−98, siendo la fórmula así: Fecha = ((1998−1980)*512) + (11*32) + 21, y da como resultado 9589 en decimal, que en hexadecimal sería 2575H, y aplicando el Principio de Almacenamiento Inverso queda 75 25, que es como lo escribimos en el desplazamiento 18H, que es el que le corresponde.
Lo siguiente que queremos hacer es asignar al fichero un cluster de inicio, que es donde nos indica el comienzo del cluster de datos del fichero. Para ello nos dirigimos a la dirección del directorio raíz que tiene reservado para esa característica, que es 1AH. Allí escribimos el primer cluster que nos señala el ejercicio, 9B0H, que se trata de un valor en hexadecimal; seguidamente para saber a qué número de cluster del área de datos corresponde este cluster inicial, lo pasamos a decimal y nos trasladamos hacia ese cluster. Para ello debemos pulsar la tecla F2, y aparece un menú que nos muestra los distintos sectores a los que podemos desplazarnos, entre los que podemos elegir el sector de arranque, la FAT, el directorio raíz, el primer cluster del área de datos o la última opción en la que puedes saltar a un determinado cluster de datos, siendo ésta nuestra actual elección. Pulsamos la tecla C para seleccionarla, y una vez hecho esto, nos pide el número del cluster al que queremos ir. Este número es el 2480, que resulta de pasar 9B0H a decimal. Una vez situados en 2
esa posición, escribimos el texto correspondiente en la columna de texto ASCII de la pantalla de edición del PCTOOLS. A continuación debemos indicarle cuál es el siguiente cluster donde debe guardar los datos, y esta indicación se realiza en la FAT. Para ello cogemos el primer cluster en decimal (2480) y lo multiplicamos por 1,5; esto se debe a que la FAT de un disco de 3 1/2 es de 12 bits (FAT 12), al contrario que los discos duros actuales, que suelen ser tener una FAT de 16 o 32 bits. La FAT 12 quiere decir que cada entrada de la tabla de la FAT consta de 12 bits, que corresponde a cada uno de los clusters del disco. Una vez multiplicado por 1,5 nos da un resultado de 3720 en decimal. Este número es la posición de la FAT (dirección de la entrada correspondiente a un cluster) donde debemos colocar el siguiente cluster de datos. El valor 3720 se pasa a hexadecimal, con el fin de localizar con mayor facilidad la entrada de la FAT, ya que cada pantalla que aparece cuando entramos al modo de edición de PCTOOLS, se compone de 256 bytes (medio cluster), y por tanto, cada vez que avancemos a la siguiente pantalla de datos (mediante la tecla AvPág) aumentaría el siguiente valor hexadecimal correspondiente al tercer dígito del desplazamiento, de tal forma que por cada conjunto de 256 bytes podríamos contar (teniendo en cuenta el tercer dígito hexadecimal del desplazamiento) 0, 1, 2, 3, 4, 5.....A, B, C, y así hasta llegar a nuestro destino. Ésta sería una forma más cómoda de acceder a una determinada posición de la FAT, sin correr el riesgo de equivocarnos al contar con el método en decimal.
El número 3720 pasado a hexadecimal da E88H. Ahora buscaríamos esa posición en la FAT referente a ese desplazamiento, y desde ese lugar, escribiríamos la dirección del siguiente cluster del área de datos (9A0h) donde continúa el contenido del fichero, basándonos en el siguiente criterio: si el número del cluster actual es par (que es nuestro caso, al ser 2480), al multiplicarlo por 1,5 nos dará un número exacto y positivo (3720), que pasaremos seguidamente a hexadecimal para conocer el desplazamiento en el que se debe colocar el valor del próximo cluster de datos del fichero, con lo que ya conocemos la posición para la entrada de la FAT referente al siguiente cluster de datos de su contenido. Se escribe el valor del siguiente cluster de la secuencia del fichero, pero de forma invertida, aplicando la orden big−endian (Principio de Almacenamiento Inverso), donde el byte más a la derecha es el más significativo. Entonces el valor quedaría como A0 09. Si el cluster actual hubiera sido impar, al hacer la operación nos daría un resultado con decimales, y tendría que truncarse, eliminando su parte decimal. Posteriormente, cogemos el valor del siguiente cluster de la secuencia indicada en el enunciado del ejercicio (9A0), y lo pasamos a código decimal para conocer su valor (2464) y desplazarnos hasta ese lugar para escribir el texto que debe contener. Se opera igual que antes, multiplicando por 1,5 y situándonos en desplazamiento adecuado, en el cual se escribirá la dirección del segmento de datos relativo al siguiente cluster; se escribe A00, pero teniendo en cuenta el principio anterior, o sea, que quedaría 00 0A. De esta forma, se llega al final de la secuencia, donde escribiremos como último valor, la marca de fin de fichero en la posición correspondiente de la FAT, tras haber efectuado las operaciones de producto (último cluster x 1,5) y localizado el desplazamiento. Esta marca, si el último cluster fuera par, se debería escribir como FF 0F, pero en caso de que fuera impar, sería de la forma F0 FF, lo cual es evidente, si tenemos en cuenta la explicación del ejercicio 7, en el cual se habla de la búsqueda del número del cluster de datos, una vez que partimos ya de los datos escritos en la FAT, lo que sería el proceso inverso. Lo último que debemos hacer es asignar un espacio al fichero, para ello, volvemos al directorio raíz y en el desplazamiento 1CH escribimos el espacio que queremos que contenga el archivo, que en este caso es 768, pasándolo de decimal a hexadecimal, teniendo en cuenta también el principio de almacenamiento inverso. • • Ejercicio 3 * Ejecuta el comando DIR para comprobar que el fichero del ejercicio anterior ha sido creado con 3
normalidad. Ejecuta el comando TYPE nombre_fichero para ver su contenido. Si no se muestra por pantalla el contenido de los tres sectores, modificar lo que sea necesario para poder ver hasta el nombre del fichero incluido en el último sector. Verificar que las modificaciones han surtido el efecto deseado ejecutando de nuevo TYPE nombre_fichero. En este ejercicio 3 ejecutamos el comando DIR con el parámetro /a para que nos muestre el archivo que hemos creado, ya que éste está oculto, y con este parámetro lo podemos hacer visible. A continuación ejecutamos el comando TYPE para ver el contenido del fichero, pero no nos muestra la totalidad del documento. Esto se debe a que el contenido del fichero ocupa más de los 768 bytes que le asignamos en el ejercicio anterior, por lo que tenemos que cambiar las dos palabras del desplazamiento 1CH (que son las que asignan el espacio que ocupa un fichero) por otras, que le asignen un espacio mayor. En nuestro caso, hemos usado tres clusters para el fichero, cada uno ocupa 512 bytes, por lo que la extensión de nuestro fichero es de 512 x 3, o sea, 1536 bytes. Esta cantidad la pasamos a hexadecimal, dando 600h, almacenándola siempre sin olvidar el Principio de Almacenamiento Inverso y la escribimos en el desplazamiento correspondiente del fichero que hemos creado en el directorio raíz, con lo que le asignamos mas espacio. Si no hiciéramos esto, al ejecutar el comando TYPE sólo nos mostraría hasta 768 bytes, o sea, tan solo un parte del documento, como ocurría al inicio de este ejercicio. Una vez hecho esto, al volver a ejecutar el comando TYPE, podemos observar que nos muestra la totalidad del documento. • Ejercicio 4: * Borrar el fichero del disco directamente, es decir, sin usar comandos del DOS; comprobar que realmente ha sido borrado, y que se ha recuperado el espacio libre (ejecutando el comando DIR); y posteriormente recuperarlo. Si lo que queremos hacer es borrar un fichero, debemos saber cómo lo hace el DOS. Lo que hace este sistema operativo es buscar el fichero que quiere borrar y una vez localizado, lo que hace es borrarle la primera letra del nombre del archivo y sustituirla por el símbolo Õ en ASCII, que es representado en hexadecimal por E5h, quedando el fichero oficialmente borrado.
Pero con esto lo único que se hace es que no se muestre el fichero cuando se pida la visualización de su entrada en el directorio, ya que los datos y las entradas de la FAT siguen estando ahí. MS−DOS no borra la información del Sector de Datos, pero sí las entradas de la FAT, ya que eso sería poco eficiente. Al borrar las entradas de la FAT, éstas quedan a cero, indicando con esto que los clusters a los que se refieren esas entradas están libres, y cuando se deben usar, simplemente se sobreescriben. Una vez hecho todo esto, el archivo está borrado y el espacio queda libre para ser usado. Ejecutamos el comando DIR para comprobar que el fichero ha sido borrado y que el espacio queda libre; como así ha sido, la mitad del ejercicio queda hecha. Cuando queremos recuperar el archivo lo que debemos hacer es todo lo contrario de lo que hicimos para borrarlo. Primero volvemos a escribir la primera letra del archivo, en nuestro caso se repone la letra H de HERALV, y a continuación se restauran las entradas la FAT, dejándolo todo como estaba antes de borrar el archivo.
4
• Ejercicio 5: * Crear un directorio con el mismo nombre que la etiqueta del disco. El directorio ha de ajustarse a los siguientes requerimientos: • Atributos: Directorio. • Hora: Una hora mas que la hora de creación del fichero del ejercicio 2. • Fecha: Un día mas que el día de creación del fichero del ejercicio 2. • Secuencia de clusters para el directorio: 3F3h. • Contenido: • Fichero: Frase.txt • Atributos: Fichero. • Hora: La misma hora que el directorio. • • Fecha: La misma fecha que el directorio. • Secuencia de clusters para el fichero: 111h, 112h. • Tamaño: Debe permitir visualizar hasta el último carácter de la extensión del fichero. • Contenido: • 1er Sector: Escribir el siguiente texto: A menudo se aprende más con la práctica de las cosas que con su estudio y aplicación (Marco Tulio Cicerón. Escritor romano) − 2º Sector: Escribir el nombre del fichero. En el presente ejercicio 5, lo que debemos hacer es crear un directorio con el archivo Frase.txt en su interior. La creación de un directorio no difiere mucho de la de un fichero, por lo que muchos pasos serán idénticos. Lo primero que debemos hacer es dirigirnos al directorio raíz del disco. Una vez allí escribimos en la parte de los valores ASCII el nombre del directorio que deseamos crear y en el desplazamiento 0Bh se le asigna la característica de directorio con la siguiente ristra de bits: 00010000, guiándonos por la tabla de la página 8 de los apuntes de la práctica 1. Esta se almacena en hexadecimal siendo su valor 10h. A continuación se le debe poner la hora, guiándonos por la siguiente fórmula que aparece en la página 8 de la teoría de la práctica 1. La hora que queremos asignarle es la siguiente: 17:25:00, exactamente una hora más que la que posee el fichero del ejercicio anterior.
La fórmula quedaría de la siguiente manera: (17*2048) + (25*32) + (00/2), que en total da un resultado de 37664 en decimal. Este valor hay que pasarlo a hexadecimal para poder almacenarlo, dando 9320h, que es lo que escribimos, no sin antes aplicar el Principio de Almacenamiento Inverso por el que le damos la vuelta a los bytes, con lo que quedaría almacenado en el directorio raíz 2093h, siendo esto lo que escribimos. Lo siguiente es indicarle la fecha de creación del directorio, para la que debemos usar la fórmula que aparece junto con la de la hora en la página 8 de la teoría de esta práctica:
5
La fecha que nos pide el ejercicio es 22 de agosto de 1998; sustituyendo datos, la fórmula quedaría así: fecha = ((1998−1980)*512) + (11*32) + 22. El valor decimal que resulta una vez resueltos los cálculos es 9590, que en hexadecimal es 2576, almacenándose 7625h por el ya mencionado Principio de Almacenamiento Inverso. Antes de entrar en la secuencia de clusters de directorio hay que decir que el desplazamiento 1Ch, que corresponde al espacio ocupado por el archivo (en este caso directorio), se encuentra a cero, ya que un directorio no ocupa espacio. La secuencia de clusters que especifica el ejercicio es 3F3h. Este cluster se almacena en el desplazamiento correspondiente al número de cluster inicial (1Ah), teniendo en cuenta el Principio de Almacenamiento Inverso, por lo que se escribe F303h. A un subdirectorio, se le deben poner dos entradas especiales en él, una para entrar en él y otra para salir. Estas entradas especiales se colocan en el sector de datos, donde indique el cluster de inicio. En nuestro caso es 03F3h, número que pasamos a hexadecimal, dando 1011. Éste es el cluster donde debemos poner dichas entradas y todos los archivos que queramos que estén dentro del directorio. Pulsamos F2, luego C e introducimos el número 1011, para ir a ese cluster. Una vez allí, ponemos las dos entradas del directorio, que consisten en otros dos directorios llamados . y ... A estos dos directorios, también hay que asignarles sus respectivas fechas y horas, con la condición de que sean las mismas que las del directorio que hemos creado. La creación de las fechas y horas es exactamente la misma que para la del directorio, con idénticos datos.
Como último paso para concluir la creación del directorio, debemos indicar en la FAT, donde acaba el directorio. Para ello tomamos el cluster donde se encuentran 3F3h, que es el que nos han dado en el ejercicio; éste pasado a decimal daba 1011, pero como queremos saber su posición en la FAT, lo que hacemos es multiplicar por 1.5, por ser una tabla de 12 bits. El resultado es 1516,5; hay que señalar que 1011 es impar, por lo que al multiplicar por 1,5 el resultado no es exacto, y entonces a la marca de fin de fichero habrá que quitarle una cifra de la derecha. Lo que se debe buscar en la FAT es la posición 1516 y una vez hecho, se almacena la marca de fin de fichero, FFFh. Ahora teniendo en cuenta que había que quitarle un cifra por la derecha y el Principio de Almacenamiento Inverso, lo que se almacena es F0FFh. −−>[Author:JHG]
Lo siguiente que se debe hacer en este ejercicio es crear un archivo llamado Frase.txt. Normalmente para crear un fichero nos deberíamos dirigir al directorio raíz, pero este caso es diferente ya que queremos que el fichero se encuentre dentro del directorio que hemos creado. Para hacerlo así debemos crear el fichero en el cluster del sector de datos donde hemos creado las entradas especiales del directorio, las entradas . y ... Por lo demás su creación es idéntica a la de un fichero normal. Primero se escribe su nombre en la sección de los valores ASCII, y como su nombre no llega hasta los ocho caracteres que debe ocupar cualquier nombre (ya sea fichero, directorio, o etiqueta de volumen), se rellena con espacios en blanco. A continuación se coloca la extensión TXT y en el desplazamiento 0Bh, donde se designan los atributos de fichero, se coloca el valor hexadecimal 20h, que corresponde a la siguiente ristra de bits: 00100000, que asigna el valor de fichero normal y corriente, sin ningún atributo especial.
6
A continuación hay que colocar la hora y la fecha del fichero, y como son la misma que la del directorio, no es necesario realizar los cálculos, sino que nos limitaremos a copiarlas. La hora que se pide es 18:25, y por tanto se coloca en el desplazamiento 16h el valor 2093h, siempre en hexadecimal. Seguidamente en el desplazamiento 18h, se coloca la fecha 22−11−1998, almacenándose en hexadecimal 7625h. Ahora debemos seguir la secuencia de clusters del fichero. El primer cluster y el que debemos colocar en el emplazamiento del cluster inicial (1Ah) es 111h, con lo que quedaría almacenado de la siguiente manera 1101h. Para almacenar los datos del primer sector que nos pide el ejercicio, debemos buscar el cluster al que hace referencia, para ello cogemos 111h y lo pasamos a decimal, cuyo resultado es 273. Pulsamos F2, luego C y escribimos ese cluster para dirigirnos a él. Una vez allí, escribimos en la parte de los valores ASCII el texto correspondiente. Señalamos que introducimos un retorno de carro introduciendo 0D 0A en la parte de valores en hexadecimal donde se quiera introducir dicho salto. Una vez escrito el texto, nos debemos dirigir a la FAT para apuntar la dirección del siguiente cluster, para lo que hacemos lo siguiente: cogemos el valor decimal 273 y lo multiplicamos por 1,5 dando 409,5, es decir, un valor inexacto, algo que tendremos en cuenta más adelante. De momento lo truncamos, quitándole el decimal y quedándonos con el 409, que es el que buscamos en la FAT y una vez localizado lo que hacemos allí es almacenar el siguiente cluster que nos facilita el ejercicio, el 112h. Aquí tenemos en cuenta que antes nos ha dado un valor con decimales, por lo que habrá que quitarle la cifra más próxima a la derecha. Entonces, teniendo en cuenta esto y el Principio de Almacenamiento Inverso, quedaría así: 2011h.
Ahora debemos almacenar los datos del segundo sector. Cogemos 112h y lo convertimos a decimal para saber a que cluster se refiere y así poder almacenar los datos que nos pide el ejercicio. Resulta 274, pulsamos F2, luego C y escribimos dicho número para ir a ese cluster. Allí escribimos los datos que nos pide el ejercicio, en este caso el nombre del fichero. Lo último que queda por hacer es indicar que acaba el fichero. Para ello debemos coger el valor decimal del cluster 112h, es decir 274 y multiplicarlo por 1,5. El resultado es 411, que además es exacto, cosa que habrá que tener en cuenta. Nos dirigimos a la FAT, (pulsando F2, y luego F) y buscamos la posición 411. Allí tenemos que colocar la marca de fin de fichero. Antes de colocarla, debemos tener en cuenta que el valor 411 era exacto por lo que a la marca de fin de fichero hay que quitarle un cifra a la izquierda; además hay que aplicar el Principio de Almacenamiento Inverso, por lo que la marca de fin de fichero que se almacena es FF0Fh. • Ejercicio 6: * Dada la siguiente entrada de directorio Entrada situada en el directorio raíz de a: 50 52 4F 42 4C 45 4D 41
54 58 54
20 00 ... 00 EC 5C
51 25
14 00
25 03 00 00
* Determinar el nombre y extensión del fichero, atributos, fecha, hora, cluster de inicio y tamaño. • Indicar cuál de los siguientes fragmentos de FAT podría corresponder al disquete que contiene este fichero y determinar la secuencia completa de clusters del fichero. Razonar la respuesta: A)
7
C) En el primer apartado lo que se debe hacer es introducir los valores de la entrada que nos suministra el ejercicio en el directorio raíz del disco, exactamente en la parte de los valores hexadecimales, con lo que automá−ticamente irán apareciendo sus valores en código ASCII en la columna de la derecha. Una vez escrito todo esto, guardamos los cambios, salimos del PCTOOLS y vamos al DOS, donde ejecutamos el comando DIR. MS−DOS nos muestra que hemos creado un fichero llamado PROBLEMA.TXT, creado el 17−10−98 a las 11:39 y que ocupa 805 bytes, además no tiene ninguna característica especial como oculto, de sistema, o solo lectura, es decir, un fichero normal y corriente. El siguiente apartado se debe resolver de la misma manera como se ha resuelto el anterior, calculando la secuencia de clusters. En el apartado anterior se muestra que el cluster inicial es 0014, ya que este número invertido (por el Principio de Almacenamiento Inverso) es el que se encuentra en el desplazamiento 1Ah, que es el que muestra el cluster inicial. Tomamos el valor hexadecimal 0014h y lo pasamos a decimal para ver a que cluster de datos se refiere, dando como resultado 20, valor decimal. Lo siguiente es saber cual es el valor de la FAT, para lo que multiplicamos 20 por 1,5, cuyo resultado es 30. Buscamos esta posición en las tres FAT que hay en el ejercicio y en las tres se indica que en esa posición hay escrita una entrada, que es la siguiente que se debe buscar.
Tomamos la entrada que hay escrita que es 1E00h. Esta entrada en hexadecimal, la pasamos a decimal, aunque el cluster al que haga referencia no nos importe, y la multiplicamos por 1,5, con lo que nos envía a la FAT, exactamente a la posición 45. Una vez que buscamos esta posición en la FAT, ya podemos eliminar el fragmento A de los tres que no daba el ejercicio, ya que este tiene almacenada la siguiente entrada en la posición 46 y no en la 45 como los fragmentos B y C, además de que debe almacenarse en la posición 45, ya que así nos lo indica la entrada anterior. A continuación cogemos la entrada escrita en la posición 45 de la FAT, la cual es 0019h. Pasamos este dato a decimal y lo multiplicamos por 1,5, dando como resultado 37,5. Nos quedamos con que este valor es inexacto, ya que va ha ser el que condicione elegir uno de los dos fragmentos de la FAT que quedan. De momento lo que hacemos es truncar el número quitándole el decimal y buscándolo en la FAT. Buscamos esta posición y comprobamos que en la posición 37 de las dos FAT que quedan están escritas con la marca de fin de fichero, pero nos quedamos con la FAT B por lo siguiente: La posición que hemos buscado, la 37, era inexacta, daba decimales, por lo que a la marca de fin de fichero hay que quitarle un F a la derecha quedando así FFF0, y aplicando el Principio de Almacenamiento Inverso, la marca que se tiene que escribir F0FF, que la que hay escrita en la FAT B. • Ejercicio 7 * Copiar un fichero de más de 5 KB en la unidad A y especificar toda la información que el DOS le ha asignado al fichero. Detallar la cadena de clusters asignados al fichero y explicar cómo se recorre tal cadena. En primer lugar, copiamos el fichero de más de 5 KB. mediante la siguiente instrucción de transferencia del DOS, cuya sintaxis indicamos a continuación, que hace uso del comando interno (incluido en el 8
COMMAND.COM) COPY: COPY nombre_fichero A:\ En nuestro caso, la instrucción sería de la siguiente manera: COPY GOTA.WAV A:\
El DOS asigna una serie de informaciones al fichero; parte de esta información se sitúa en el directorio raíz (Root), distribuida en diversos campos, y cada uno de ellos contiene un determinado número de bytes, o bien un campo consta de una palabra (2 bytes o 16 bits) o un solo byte (como es el caso del atributo). Empezando por el Directorio Raíz tenemos la siguiente información para el fichero gota.wav. Si nos vamos desplazando a lo largo de los bytes que componen la entrada del fichero gota.wav, podremos conocer las características pertenecientes al fichero en cuestión, que son las siguientes: la información sobre su nombre y extensión (gota.wav), su(s) posible(s) atributo(s), que en este caso solamente es el de Fichero; su hora y fecha de última modificación (en este orden se visualiza) que son, respectivamente, 20:01 (A0 20) y 15−05−98 (24 AF); su número de cluster inicial (2) y el tamaño que ocupa el fichero (16 4C), que en decimal son 5708 bytes. Nos trasladamos a otra posición del disquete, al Área de Datos, y nos situamos en el cluster núm. 2 (primer cluster de la zona de datos), ya que es ahí donde comienzan los datos del fichero gota.wav. Puesto que el tamaño del fichero sabemos que es de 5708 bytes y cada cluster está formado por un conjunto de 512 bytes (o caracteres), esto significa que dicho fichero está ocupando 5708/512, que son 12 clusters. En último lugar, esta vez nos ubicamos en la zona de la FAT (Fat Allocation Table o Tabla de Asignación de Archivos). Si lo que queremos es ir recorriendo la secuencia de clusters del fichero, que previamente sabemos que van del cluster 02 al 13 (por encontrarse de forma contigua), tenemos que localizar la entrada de la FAT correspondiente a un determinado cluster. Para ello, tenemos que ir multiplicando por 1,5 el número del cluster actual con el fin de que nos dé como resultado el número del byte en el que comienza la entrada de la FAT en la que se refleja en una palabra de tamaño (2 bytes o 16 bits) y de forma implícita, el número del cluster inicial (si es el primero) o el siguiente, que enlazará con una determinada posición del área de datos, en el que se halla el próximo cluster que buscamos.
Teniendo en cuenta el criterio que mencionamos en el Ejercicio 2, referente al valor par o impar que puede poseer el número del cluster del que partimos, si empezamos por ejemplo desde el cluster núm. 2, que es par (el principio del fichero), una vez efectuado el producto indicado y pasado a formato hexadecimal, invertiremos la palabra ubicada en la dirección de memoria (offset o desplazamiento), excluyendo el dígito más a la izquierda, con el fin de leer adecuadamente el número del cluster, expresado en 4 dígitos hexadecimales, que finalmente convertimos a decimal para inmediatamente desplazarnos al cluster calculado y poder comprobar cómo aparece en pantalla los datos relativos al contenido del fichero que esperábamos. Se procede de forma análoga con los demás clusters de la secuencia. Luego la operación del ejemplo descrito sería: 2 x 1,5 = 3 (3H). En el desplazamiento 3H observamos el contenido de los dos bytes (la palabra en la que reside el contenido implícito del cluster siguiente con el que enlaza la FAT), que es 03 40. Dándole la vuelta, teniendo en cuenta como siempre el Principio de 9
Almacenamiento Inverso, nos quedaría 40 03; de los cuatro dígitos hexadeci−males para nosotros son significativos los tres últimos, es decir, descartamos el primero, que es el que se encuentra más a la izquierda. Pasamos el valor 003 a decimal, que es 3, y ya tenemos el verdadero valor (en decimal) del siguiente cluster de la secuencia. De esta forma, es fácil desplazarse por el contenido de un fichero sin perdernos. A continuación exponemos un recuadro ilustrativo referente al ejemplo. • Ejercicio 8 * Si ejecutamos el comando FORMAT A: sobre un disquete de 3½ de alta densidad. ¿Cuál es el número máximo de archivos de 3075 bytes que se pueden almacenar en él? Razonar la respuesta.
Como tenemos que averiguar el número máximo de ficheros de 3075 bytes que es posible almacenar en el citado disquete, y sabemos por la estructura del sector de arranque (Tabla 2 − Bloque de Parámetros del BIOS) que el desplazamiento 11H del Sector de Arranque (Boot) nos informa sobre el número máximo de entradas que puede contener el directorio raíz (224 en un disquete de 3½ de alta densidad; aparece el valor E0 00 (una palabra), que invertido (00E0) y pasado a hexadecimal nos da como resultado (224)), entonces la solución sería crear un subdirectorio, pues sabemos por la documentación que, al contrario del directorio raíz, un subdirectorio no presenta límite fijo de entradas de ficheros y el DOS lo interpreta como un fichero más, que puede almacenarse en cualquier posición no dañada del área de datos. Para ello, crearíamos el subdirectorio con la instrucción MD nombre_directorio y accederíamos a él mediante la sentencia CD; se trataría, como mera comprobación, de copiar ficheros del mismo tamaño (con distinto nombre siempre para no reemplazar el existente) hasta saturar el disquete. Eso se hace con el fin de que quepan tantos ficheros de ese tamaño como pueda contener el disquete en su capacidad de 1.457.664 bytes. Pero hay que darse cuenta que los ficheros se almacenan en clusters, y que cada cluster consume un espacio de 512 bytes. Si dividimos el tamaño del fichero, 3075, entre la capacidad de un cluster, 512 bytes, obtenemos los clusters que consume el fichero. La operación sería: 3075 / 512 = 6,0058..., y como llega a completar 6 clusters y empieza a consumir una porción muy pequeña del séptimo, el fichero de 3075 bytes ocupa, por tanto, 7 clusters. Ahora tenemos que averiguar cuántos clusters es posible almacenar en el área de datos. Para ello, debemos saber primero que un disco tiene 2880 sectores en total. Si le restamos 19 que hay que descontar del Boot (Sector de Arranque), la FAT, y el Root (Directorio Raíz ), quedan disponibles 2848 clusters para el segmento de datos. Como curiosidad, señalamos que en el desplazamiento 0DH del Boot aparece el valor de 1 sector por cluster (01). Luego el ejercicio quedaría resuelto si realizamos la operación: 2848 / 7 = 406,8571428571, o sea 406 archivos. (en este caso sí tenemos que coger la parte entera del resultado, como es evidente) Luego la cantidad máxima de ficheros de 3075 bytes que puede contener el disquete de 3½ y alta densidad es de: 406 archivos. 8 1 Fecha = ((año−1980)*512) + (mes*32) + día Path=A: 10
Absolute sector 0000019, System ROOT Displacement −−−−−−−−−−−−−−−−− Hex codes−−−−−−−−−−−−−−−−−−−− ASCII value 0000(0000) 48 45 52 41 4C 56 20 20 20 20 20 08 00 00 00 00 HERALV 0016(0010) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Hora = (hora*2048) + (minutos*32) + (segundos/2) PC Tools Deluxe R4.21 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−Disk View/Edit Service−−−−−−−−−−−−−−−−−−−−−−−−−−−− Path=A: Absolute sector 0000019, System ROOT Displacement −−−−−−−−−−−−−−−−− Hex codes−−−−−−−−−−−−−−−−−−−− ASCII value 0000(0000) 48 45 52 41 4C 56 20 20 20 20 20 08 00 00 00 00 HERALV 0016(0010) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0032(0020) 48 45 52 41 4C 56 20 20 54 58 54 23 00 00 00 00 HERALV TXT# 0048(0030) 00 00 7C 25 00 00 2C 8B 75 25 B0 09 00 06 00 00 |% ,ïu%_ 0096(0060) 41 67 00 6F 00 74 00 61 00 2E 00 0F 00 92 77 00 Ag o t a . ¤ Æw 0112(0070) 61 00 76 00 00 00 FF FF FF FF 00 00 FF FF FF FF a v 0128(0080) 47 4F 54 41 20 20 20 20 57 41 56 20 00 35 B1 64 GOTA WAV 5_d 0144(0090) 88 25 8C 25 00 00 20 A0 AF 24 02 00 4C 16 00 00 ê%î% á»$ L PC Tools Deluxe R4.21 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−Disk View/Edit Service−−−−−−−−−−−−−−−−−−−−−−−−−−−− Path=A: Absolute sector 0000019, System ROOT Displacement −−−−−−−−−−−−−−−−− Hex codes−−−−−−−−−−−−−−−−−−−− ASCII value 0000(0000) F0 FF FF 03 40 00 05 60 00 07 80 00 09 A0 00 0B - @ ` Ç á 0016(0010) C0 00 0D F0 FF FF 0F 01 11 F0 FF 13 F0 FF 00 00 + - ¤-
11