Examen final de USO (12-1-2011) Revisión: 18-01-11. D6-221: de 11.00-12.00 y de 16.00-17.00 Notas: 17-01-11 Nom i cognoms:..................................................................................................................................... Qüestions de teoria (2.5 punts) Contesteu justificadament, però sense excedir-vos de l'espai disponible, les següents preguntes. 1. Què vol dir que una instrucció del llenguatge màquina sigui privilegiada? Indica tres instruccions del llenguatge màquina que siguin privilegiades. 2. Què entenem per “Independència de dispositius”? 3. Què vol dir que una crida al sistema sigui bloquejant? 4. El tercer paràmetre de la crida al sistema read de Unix indica el nombre de bytes que demanem llegir. És possible que el resultat indiqui que s'han llegit menys caràcters que els demanats?, i més caràcters? En cas afirmatiu, poseu un exemple. 5. Si utilitzem un pendrive i el volem extreure del port USB, perquè és aconsellable indicar al SO que el volem extreure? 6. Quins són els objectius d'una organització de discos en RAID-5? 7. L'operador & del llenguatge C aplicat a una variable ens retorna la direcció de memòria on s'emmagatzema la variable. Ara bé, aquesta adreça és lògica o física? Examen final de USO (12-1-2011) Revisión: 18-01-11. D6-221: de 11.00-12.00 y de 16.00-17.00 Notas: 17-01-11 Qüestions de laboratori (2.5 punts) Contesteu justificadament, però sense excedir-vos de l'espai disponible, les següents preguntes. Podeu assumir que les següents preguntes fan referència a l'entorn de treball Linux (ubuntu) utilitzat a les classes de laboratori de l'assignatura. 1. Al directori actual hi ha el fitxer executable file. L'invoques però apareix el missatge d'error Command not found. A què es degut? Digues dues formes d'arreglar el problema. 2. tee és un filtre present a les distribucions Linux. Us adjuntem un fragment de la seva ajuda. user@host:~$ tee ­­help Usage: tee [OPTION]... [FILE]... Copy standard input to each FILE, and also to standard output. ... A partir d'aquesta descripció, indiqueu què fa la línia de comandes següent: ls ­l | tee file1 | grep ^dr | tee file2 | grep ^drwr > file3 3. Escriu una línia de comandes que mati tots els teus processos que estan executant la comada firefox. Observació: no és possible utilitzar la comanda killall. 4. Quines diferències hi ha entre un hardlink i un softlink? Com ens mostra cada tipus d'enllaç la comanda ls? 5. Què podem trobar al directori /proc? 6. Suposa que la implementació d'un servidor www crea un procés fill cada cop que rep una petició http. En aquest escenari, seria problemàtic que la implementació no invoqués mai la crida al sistema wait? En cas afirmatiu, quin problema podria causar. 7. Com s'interpreta el missatge d'error Segmentation fault? Que faries per corregir-lo? Examen final de USO (12-1-2011) Revisión: 18-01-11. D6-221: de 11.00-12.00 y de 16.00-17.00 Shellscript (1 punt) 1. Indiqueu justificadament quina és la funció del següent shellscript. 2. Volem eliminar les 3 línies marcades en negreta. Com caldria modificar la resta de línies existents del shellscript tot mantenint la funcionalitat global del shellscript? Notas: 17-01-11 #!/bin/bash for p in `ps aux | tr ­s ' ' | cut ­d' ' ­f2` do if test $p != PID then if test $1 ­lt $p then if test $2 ­gt $p then kill ­9 $p fi fi fi done Com a referència, a continuació es mostra un exemple del format de sortida de la comanda ps aux user@host:~$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 2884 1788 ? Ss 08:45 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S 08:45 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 08:45 0:01 [ksoftirqd/0] ... Examen final de USO (12-1-2011) Revisión: 18-01-11. D6-221: de 11.00-12.00 y de 16.00-17.00 Notas: 17-01-11 Examen final de USO (12-1-2011) Revisión: 18-01-11. D6-221: de 11.00-12.00 y de 16.00-17.00 Notas: 17-01-11 Nom i cognoms:..................................................................................................................................... Analizar código (2 puntos) Sabiendo que programa.c es el código fuente en lenguaje C para UNIX del ejecutable programa, explica cuál será el resultado que se obtiene tras ejecutar: _$ ./programa 4 Hello World Añade a tú respuesta el dibujo del Diagrama de Procesos generado durante la ejecución del anterior comando. Completa para ello el diagrama de la siguiente hoja donde debes indicar la relación Padre Hijo y para cada proceso escribir qué mensaje imprime y/o qué programa ejecuta (valores tras : ) /* programa.c */ char *arg[3]={"date","who","pwd"}; int i,j=2; void escribe(char *s) { write(1,s,strlen(s)); if(!fork()) execlp(arg[i],arg[i],NULL); wait(NULL); } int main(int argc, char *argv[]) { if(argc==4){ for(i=0;i<(atoi(argv[1])/j);i++) if(i%2==0){ if(!fork()){ escribe(argv[i+j]); exit(0); } wait(NULL); } else{ if(!fork()){ escribe(argv[i+j]); exit(0); } wait(NULL); write(1,argv[i+j­1],strlen(argv[i+j­1])); write(1,argv[i+j],strlen(argv[i+j])); execlp(argv[i­1],argv[i­1],NULL); } } if(argc==1) execlp(arg[j],arg[j],NULL); return 0; } Examen final de USO (12-1-2011) Revisión: 18-01-11. D6-221: de 11.00-12.00 y de 16.00-17.00 Explicación: Notas: 17-01-11 Examen final de USO (12-1-2011) Revisión: 18-01-11. D6-221: de 11.00-12.00 y de 16.00-17.00 Diagrama de Procesos: P : Notas: 17-01-11 Examen final de USO (12-1-2011) Revisión: 18-01-11. D6-221: de 11.00-12.00 y de 16.00-17.00 Notas: 17-01-11 Escribir código (2 puntos) Escribe un programa en lenguaje C para UNIX a cuyo ejecutable llamaremos lnopat El programa lnopat, tras recibir como parámetros un patron y un nombre de fichero, muestra por pantalla el número de líneas de fichero que no contienen el patron. A continuación tienes indicado cómo sería la sintaxis de lnopat y un ejemplo de su funcionamiento: sintaxis: lnopat patron file ejemplo(1): _$ lnopat main file.c 44 (1) Suponemos que file.c tiene 45 líneas y que el patrón main sólo aparece en 1 de ellas En el diseño del programa lnopat.c debes cumplir lo siguiente: solo puedes utilizar el ejecutable de un comando llamado nopat y debes invocarlo usando la llamada al sistema execvp El anterior comando nopat, únicamente tiene la siguiente funcionalidad: _$ nopat patron file muestra por la salida estándar todas las líneas de file que no contienen patron Examen final de USO (12-1-2011) Revisión: 18-01-11. D6-221: de 11.00-12.00 y de 16.00-17.00 Notas: 17-01-11