Anda di halaman 1dari 4

SISTEMAS OPERATIVOS - CUESTIONES

28 de Junio de 2016

Nombre __________________________________________________________ DNI _________________

Apellidos _____________________________________________________________ Grupo _________

Cuestin 1. (1 punto) Considera un sistema de ficheros tipo ext-3. Traduce la informacin de este sistema de Ficheros
a uno de tipo FAT. Los bloques son de 32 B.

a) Escribe el contenido de la tabla FAT y del directorio raz.


b) Qu tamao tiene la tabla FAT si el espacio para datos en disco es de 512 B?

i-nodo 2 4 7 8 9 10 11 16
enlaces 4 3 2 1 1 1 1 2
Tipo D F
Directo 2 4 5 10 15 9
Directo null null null 6 12 8 null null
Indirecto null null null null null 7 null null
Tabla de nodos-i

1 2 3 4 7
. 2 . 4 . 16 . 18
.. 2 .. 2 .. .. 19
home 4 estudiante 16 Examen.odt 8
usr 7 tmp.txt 11 Notas.txt 9
Solucion.odt 10
Lista de bloques relevantes (los bloques que no aparecen aqu contienen datos o estn vacos)

Cuestin 2. (1 punto) Hilos: contesta a las preguntas sobre el siguiente cdigo, razonando tu respuesta.:

void *trabajo(void *arg); void *trabajo(void *arg)


int variable_global = 0; {
int i = 0;
pthread_t tid[3]; //tid es el identificador de hilo (threadID) pthread_t id = pthread_self();

int main(void) for(i=0; i<9; i++)


{ {
int i = 0; variable_global++;
int err;
if(pthread_equal(id,tid[0]))
while(i < 3) sleep(1);
{ else
err = pthread_create(&(tid[i]), NULL, trabajo, NULL); if(pthread_equal(id,tid[1]))
if (err != 0) sleep(2);
printf("\nError al crear el hilo :[%d]", strerror(err)); else
else sleep(3);
printf("\n Hilo creado!\n"); }
i++; }
}
(void) pthread_join(tid[0], NULL);
(void) pthread_join(tid[1], NULL);
(void) pthread_join(tid[2], NULL);
return 0;
}

1
a) Cuntos hilos se crean?
b) Cuntas veces se ejecuta cada hilo?
c) Cul es el valor final de variable_global?
d) Qu cambiara de las respuestas anteriores si no hubiramos escrito los pthread_join?

Cuestin 3. (1 punto) Contestar a las siguientes preguntas sobre diferentes formas de planificar la ejecucin de este
conjunto de tareas.

Tarea Llegada Prioridad CPU E/S CPU E/S


T1 0 1 5 2
T2 1 2 7 2 4 1
T3 2 2 4 1 6 2
T4 0 3 8 1 3
T5 4 3 3 5 2 2

a) Cul ser la ltima tarea en ejecutarse si se aplica JSF no expropiativo? Qu productividad se consigue?

b) Cul sera el tiempo total de ejecucin con Round Robin y q=3? Qu productividad se consigue?

c) Qu tarea se estar ejecutando en el ciclo 12 si se aplica un algoritmo expropiativo basado en prioridad que tome
como tarea ms prioritaria la de menor nmero en el campo Prioridad?

Cuestin 4. (1 punto) Un programador ha escrito el siguiente cdigo para resolver un problema tipo lector/escritor..
Contestar a las siguientes preguntas:

a) Cuntos lectores puede haber simultneamente?


b) Cuantos escritores puede haber simultneamente?
c) Modificar le cdigo para que solamente pueda haber un escritor o 3 lectores simultneos.

int dato = 5; void* Lector(void *arg) {


while(1){
void *Lector(void *arg); printf("%d\n", dato);
void *Escritor(void *arg); }
}
pthread_mutex_t cerrojo;
void* Escritor(void *arg){
main(int argc, char *argv[]) { while(1){
pthread_t th1, th2, th3, th4; pthread_mutex_lock(&cerrojo);
dato = dato + 2;
pthread_mutex_init (&cerrojo,NULL); pthread_mutex_unlock(&cerrojo);
}
pthread_create(&th1, NULL, Lector, NULL); }
pthread_create(&th2, NULL, Escritor, NULL);
pthread_create(&th3, NULL, Lector, NULL);
pthread_create(&th4, NULL, Escritor, NULL);

pthread_join(th1, NULL); pthread_join(th2, NULL);


pthread_join(th3, NULL); pthread_join(th4, NULL);

pthread_mutex_destroy(&cerrojo);

exit(0);
}

2
Cuestin 5. (1 punto) Un proceso en UNIX ejecuta el siguiente cdigo:
int main(void) if (PIDhijo == 0)
{ {
pid_t PIDhijo; int j;
pid_t soy, papa; int numB=0;
for (j = 0; j < 14; j++)
int child_status; {
int var= 7; var=var+1;
}
soy=getpid(); /* PID del proceso, antes de ser padre */ while((c=getc(archivo1))!=EOF)
{
archivo1=fopen("prueba.txt","r"); numB = numB+1;

PIDhijo = fork(); }
exit(0);
if (PIDhijo == -1) /* no se pudo realizar le fork, no hay }
proceso hijo */ else
{ {
int j;
fprintf(stderr, "can't fork, error %d\n", errno); int numB=0;
exit(EXIT_FAILURE); for (j = 0; j < 6; j++)
} {
var=var+1;
soy = getpid(); }
while((c=getc(archivo1))!=EOF)
papa = getppid(); {
numB = numB+1;
}
wait(&child_status);

if (fclose(archivo1)!=0)

printf("Error al cerrar fichero prueba");

exit(0);
}
return 0;
}

Contesta las siguientes preguntas:


a) Qu valor tiene la variable var antes de que se ejecute el fork() ?
b) Qu valor tiene la variable var del padre y la del hijo despus de ejecutarse el fork()?
c) Qu valor tiene la variable var del padre y del hijo cuando termine de ejecutarse el padre?
d) Rellenar las siguientes tablas (tabla de descripcin de archivos, tabla de archivos intermedia y tabla de nodos-v)
e) Qu valor tiene la variable numB del padre y del hijo despus de ejecutarse el padre?

3
TDDA padre
0 230 TFA (intermedia)
1 564 Pos L/E num nodo-i permisos cont. refs.
2 28 ...
3 12 12 57
4 13
5 14
...
TDDA hijo
0 230 Tabla nodos-v
1 564 Nodo-v Contador
2 28 ...
3 Info nodo-57
4 ...
5

Cuestin 6. (1 punto) Dada la siguiente secuencia de referencias a direcciones de memoria virtual generadas por un
slo programa en un sistema con paginacin pura:
0x3A0, 0x4B8, 0x210, 0x320, 0x40C, 0x6F8, 0x504, 0x122, 0x22C, 0x43A, 0x380, 0x6D2, 0x502

a) Obtn la cadena de referencias (secuencia de nmeros de pgina generadas por el programa),


suponiendo un tamao de pgina de 256 Bytes..

b) Determina razonadamente el nmero de fallos de pgina usando como estrategia de sustitucin el


algoritmo del reloj, suponiendo que hay cuatro marcos de pgina disponibles para el programa y que estn
inicialmente vacos.

REF. 0x3A0 0x4B8 0x210 0x320 0x40C 0x6F8 0x504 0x122 0x22C 0x43A 0x380 0x6D2 0x502

#pag

m0

m1

m2

m3

Anda mungkin juga menyukai