Control 1 tgr:……. Fecha:……..

Anuncio
Control 1 tgr:……. Fecha:…….. Nombre:…………………………………………………………………………………………………………. 1) Un sistema de archivos tipo UNIX tiene un tamaño de bloque de 2Kb, i‐nodos con 12 direcciones directas, una indirecta simple, una indirecta doble y una indirecta triple. Utiliza direcciones de bloque de 4 bytes. ¿Qué bloques son necesarios para representar un archivo de 2Mb? Un archivo de 2 MB ocupa en este sistema de archivos 2*1024/2=1024 bloques. Cada bloque de direcciones puede almacenar 2048/4 bytes= 512 bloques. Por tanto se necesitan: 





12 bloques de datos para las direcciones directas Un bloque indirecto simple 512 bloques cuyas direcciones se almacenan en el bloque indirecto simple Un bloque indirecto doble Un bloque indirecto simple cuya dirección se almacena en el bloque anterior 500 bloques cuyas direcciones se almacenan en el bloque indirecto anterior 2) Determinar el número de accesos físicos a disco necesarios, como mínimo, en un sistema UNIX, para ejecutar la siguiente operación: fd = open (“lib/axenda/direccions”, RD_ONLY); suponer que la caché del sistema de archivos está inicialmente vacía y que el inodo de “.” está ya en memoria. Suponiendo que las entradas de directorio necesarias siempre se encuentran en el primer bloque, como mínimo habrá 6 accesos: 1.
2.
3.
4.
5.
6.
Traer el primer bloque del directorio de trabajo para conocer el i‐nodo de ./lib Leer el i‐nodo de ./lib Traer el primer bloque del directorio ./lib para conocer el i‐nodo de axenda Leer el i‐nodo de ./lib/axenda Traer el primer bloque del directorio ./lib/axenda para conocer el i‐nodo de direccions Leer o i‐nodo de ./lib/axenda/direccions Suponiendo además que los diferentes inodos se encuentran en el mismo bloque de la lista de inodos (posible en SF System V), solo sería necesario un acceso a la L.I. en disco (más los 3 al área de datos). 3) En un sistema de archivos UNIX con un tamaño de i‐nodo de 128 bytes, un tamaño de bloque de 1024 bytes y en el que la zona de inodos ocupa 2048 bytes, ¿cuántos bloques ocupa un mapa de bits para representar i‐nodos libres y ocupados? Número total de i‐nodos 1024/128=8 (i‐nodos por bloque) 2048*8=214  214bits  2 bloques 4) En el siguiente código, añadir el código de una función “redireccionar_errores”, para que los mensajes de error generados con la función de librería perror (que envía la información al dispositivo de salida de error estándar) se guarden en disco, en el directorio de trabajo actual, en un fichero con nombre “registro_errores”. En todas las líneas de código indicar si existe una llamada a una función de librería de C o bien una llamada al SO: #include <stdio.h> #include <fcntl.h> main (int argc, char *argv[]) { int fd; redireccionar_errores (); fd = open(argv[1], O_RDONLY); // open es una llamada al SO if (fd == ‐1) { perror("\nerror en open "); // perror es una función de librería de C exit(1); // exit es una llamada al SO } } redireccionar_errores (){ int fd = open(“registro_errores", O_WRONLY | O_APPEND); // open es una llamada al SO close(2); // close es una llamada al SO dup(fd); // dup es una llamada al SO } 
Descargar