jueves, 1 de diciembre de 2011

practica policia


55. Disponemos de un disco duro de 20 GB de capacidad. Hay establecida sobre él, una única partición que contiene un sistema de ficheros del tipo FAT32 en el que cada agrupamiento (cluster) consta de 16 sectores de 512 bytes cada uno. ¿Cuántos sectores del disco se necesitarán para almacenar cada copia la FAT? Razona tu respuesta.

En primer lugar se calcula lo que ocupa la FAT, que es el tama˜no del enlace

(32 bits) por el n´umero de entradas de la tabla que, a su vez, es el tama˜no del

disco dividido por el tama˜no del agrupamiento y que en este problema son

20GB/(16 512bytes) = 20 217 entradas. Luego la tabla ocupa 20 217 32bits = 20 219bytes.

Si se divide lo que ocupa la tabla por el tama˜no del agrupamiento se obtiene

el n´umero de agrupamientos que ocupa la tabla: 20 219/(16 512) = 20 26 = 1280agrupamientos, que multiplicado por 16, que es el n´umero de

sectores por agrupamiento, se obtiene el n´umero total de sectores que es

20480.

56. La policía ha arrestado al sospechoso de un delito. Al analizar el contenido de su ordenador piensan que pueden inculparle pues el contenido del mismo

es el siguiente:

En un sistema de archivos FAT, los bloques se asignan como una lista enlazada

que finaliza con la posici´on fin de lista EOF. Es posible recuperar

datos utilizando los enlaces partiendo desde esa posici´on EOF hacia atr´as.

La reconstrucci´on de la lista de bloques ser´a:

14 15 12 13 10 11 EOF

La informaci´on de esa lista de bloques ser´a:

sigan buscando yo no he sido EOF



Número De bloque de datos

Contenido

10

he

11

sido

12

yo

13

no

14

sigan

15

buscando

Como experto informático, pides consultar el contenido de la FAT, que es el siguiente:

Número de entrada en la FAT

Contenido

10

11

11

EOF

12

13

13

10

14

15

15

12

¿Apoyarías la opinión de la policía? Razona tu respuesta.

No estoy deacuerdo

Respuestas



#include

#include

#include

#include

#include

#include

#define MAX 10

#define FIN -1

int buffer[MAX];

sem t huecos, elementos;

int generar dato (void) { return random() %256;} int numero aleatorio(void) { return random() %100;}

void productor (void p) {

int pos productor= 0;

int num, dato, n;

n= numero aleatorio();

printf ("Productor con %d datos\n", n);

for(num= 0; num< n; num++) { dato= generar dato();

sem wait (&huecos);

buffer[pos productor]= dato;

pos productor= (pos productor+ 1) %MAX;

sem post (&elementos);

}sem wait (&huecos);

buffer[pos productor]= FIN;

sem post (&elementos);

pthread exit (NULL);

}

void consumidor(void p){

int pos consumidor= 0, dato;

bool continuar= true;

while (continuar) { sem wait (&elementos);

dato= buffer[pos consumidor];

sem post (&huecos);

if (dato== FIN)

continuar= false;

else { printf ("Numero aleatorio: %d\n", dato);

pos consumidor= (pos consumidor+1) %MAX;

}

}

pthread exit (NULL);

int main (int argc, char argv[]) {

pthread t hiloproductor, hiloconsumidor;

sem init (&elementos, 0, 0);

sem init (&huecos, 0, MAX);

pthread create (&hiloproductor, NULL, productor, NULL);

pthread create (&hiloconsumidor, NULL, consumidor, NULL);

pthread join (hiloproductor, NULL);

pthread join (hiloconsumidor, NULL);

sem destroy (&huecos);

sem destroy (&elementos);

return 0;

}

No hay comentarios:

Publicar un comentario