Aquest test esta pensat per que us avalueu. Totes son preguntes de conceptes previs que se suposa que ja teniu. Las preguntes estan orientades a sistemes Linux i arquitectures i386. D'aqui uns dies us donarem les sol.lucions. Hem agrupat les preguntes per temes:S.O, arquitectura i programacio en C. SO: Mecanismes d’entrada al sistema (excepcions/interrupcions/crides a sistema). Gestió de processos (estructures de dades/algoritmes/polítiques de planificació/canvi de context/crides a sistema relacionades). Gestió de entrada/sortida (Dispositius/canals/crides a sistema relacionades). ----------------------------------------------------------------------- *Si ejecutamos la siguiente llamada a sistema en un programa C write(1,"HOLA\n",10); () Escribiremos hasta el \n () Escribiremos 10 bytes () No lo se *El codigo del la interrupcion de reloj, normalmente, se ejecuta () En modo usuario () En modo sistema () No lo se *Donde y cuando se realiza principalmente la planificacion de procesos en un S.O? () Cada x tics en la interrupcion de reloj () Cada tic en la interrupcion de reloj () Cuando se hace el fork () No lo se *Cual es la idea de la "independencia de dispositivos"? () Desacoplar el API y la funcionalidad de la entrada/salida que ven los procesos de las caracteristicas especificas de los dispositivos () Diferenciar los dispositivos entre ellos () QUe un proceso no moleste a otro al acceder a los dispositivos () No lo se *En las politicas por prioridades () Si no ponemos algun recalculo de prioridades algun proceso podria quedarse encolado de forma indefinida () Aunque no haya recalculo se garantiza que los procesos siempre se llegan a ejecutar () No lo se *La sintaxis de las llamadas a sistema relacionadas con entrada/salida () Dependen del dispositivo () No dependen del dispositivo () No lo se *Que es un PCB? () Es la estructura de datos que define un proceso () Es la estructura de datos de gestiona los procesos activos del sistema () No lo se *Que es un proceso en estado READY? () Es un proceso que esta preparado para ser seleccionado por el planificador () Es un proceso que esta esperando una entrada/salida () Es un proceso preparado para ser ejecutado pero que no se ejecuta porque tiene poca prioridad () No lo se *Que es un proceso ZOMBIE () Un proceso que ha terminado su ejecucion debido a un error () Un proceso que ha terminado su ejecucion debudo a una excepcion () Un proceso que ha terminado su ejecucion y cuyo estado de finalizacion aun no ha sido consultado por su padre () No lo se *Que es el planificador de procesos () Es el codigo de sistema encargado de decidir si es necesario cambiar de contexto y aplicar la politica de planificacion () Es el codigo que decide cuando termina una aplicacion () No lo se *Que es el proceso idle? () Es un proceso de usuario que cada segundo genera una interrupcion de reloj para ver si hay algun proceso mas prioritario y cambiar de contexto () Es un proceso o thread de sistema que tiene la minima prioridad () Es un proceso de usuario de poca prioridad () No lo se *El codigo de las librerias de sistema... () Se ejecuta en modo usuario () Se ejecuta en modo sistema () Depende de la llamada a sistema () No lo se *Normalmente, el codigo del S.O. de gestion de una llamada a sistema () Tiene un punto de entrada en comun () Tiene un punto de entrada para cada llamada a sistema () No lo se *Que se entiende por "quantum" () Es es tiempo que se le asigna a un proceso antes de provocar un cambio de contexto () Es el tiempo que pasa entre dos interrupciones de reloj () No lo se *Que se entiende por "tic de reloj" () Es es tiempo que se le asigna a un proceso antes de provocar un cambio de contexto () Es el tiempo que pasa entre dos interrupciones de reloj () No lo se *Si tenemos memoria virtual como sistema de gestion de memoria () Tenemos que tener cargadas en memoria todas las paginas de un proceso () Tendremos cargadas en memoria las paginas que necesitamos () Tendremos solo 1 pagina de codigo, 1 pagina de datos y 1 pagina para pila () No lo se *Si tenemos memoria virtual como sistema de gestion de memoria () Dos procesos podrian compartir memoria () Dos procesos no pueden compartir memoria () No lo se *Por defecto () Los canales 0 y 1 son (respectivamente) la entrada y salida estandard () Los canales 0 y 1 son (respectivamente) la salida y entrada estandard () No lo se *La llamada a sistema write devuelve cero () Cuando hay un error () Cuando ha escrito 0 bytes () Cuando esta al final del fichero () Nunca () No lo se *La llamada a sistema read devuelve cero () Cuando hay un error () Cuando ha leido 0 bytes () Nunca () No lo se *Si queremos escribir un buffer de caracteres, que es mas eficiente, () Hacer un bucle donde en cada iteracion ejecutamos 1 write de 1 bytes () Hacer un write pasando la direccion de inicio del buffer () No lo se *En un programa de usuario, como sabemos el error exacto que se ha producido en una llamada a sistema? () Mirando el valor de retorno de la llamada () Consultando la variable errno () El sistema escribe un mensaje por pantalla () No lo se *Como podemos escribir por pantalla desde codigo del sistema? () Con un printf () Con un write () Con un printk () No lo se *Una llamada a sistema write implica ... () Un cambio de modo real a modo protegido () Un cambio de modo usuario a modo sistema () No implica ningun cambio de modo () No lo se *Si un proceso hace un fork de otro proceso () Los dos procesos comparten el codigo y los datos () Los dos procesos comparten los datos pero el codigo se copia () Los dos procesos comparten el codigo pero los datos se copian () No lo se EC2: Arquitectura ----------------------------------------------------------------------- *QUe diferencia hay respecto al registro esp al hacer estas dos instrucciones? addl $4,%esp o popl %eax () Ninguna () Que la primera modifica esp y la segunda no () QUe la primera suma 4 al esp y la segunda resta 4 al esp () No lo se *Cuando se pasa un caracter a una funcion como parametro, el compilador reserva en la pila espacio para () 1 byte () 2 bytes () 4 bytes () No lo se *Cuales son los unicos registros que el compilador salva y restaura en una subrutina si los modifica ? () ebx,esi,edi () eax,ecx, edx () ds,es,sp () No lo se *Cuando el compilador genera codigo para una subrutina, cuales son los registros que asume que si el codigo llamador utiliza ya se encargara el de salvarlos? () ebx,esi,edi () eax,ecx,edx () ds,es,sp () No lo se *El resultado de una subrutina se devuelve () En la pila () En el registro eax () No lo se *Cuando se genera una interrupcion () Primero se pasa a modo protegido y luego se pasa a ejecutar el codigo de sistema () Primero se salta al codigo de sistema y antes de la primera instruccion se pasa a modo protegido () Depende de la interrupcion () El paso a modo protegido y el salto a codigo de sistema se hacen de forma atomica () No lo se *Que son los registros de segmento? () Son los registros que puntan a la pila de sistema () Son los registros que definen los segmentos de memoria () Son registros privilegiados que solo se pueden modificar desde modo sistema () No lo se *Que se entiende por paginacion () Es una forma de gestionar la memoria () Es una forma de gestionar el disco () No lo se *Para hacer un cambio de pila, sin cambiar de modo de ejecucion ni de proceso () Siempre hay que cambiar el ss y el esp () Con cambiar uno de los dos es suficiente () No lo se *Que diferencia hay entre las intrucciones ret y iret? () Ninguna, son equivalentes () ret retorna de una subrutina y iret retorna de una entrada al sistema () iret retorna de una subrutina y ret retorna de una entrada al sistema () No lo se *Para que sirve el EOI? () Para indicar que una llamada al sistema ha finalizado () Para desinhibir las interrupciones () Para indicar al controlador de interrupciones que una interrupcion ya ha sido tratada () No lo se PROGRAMACION C/MAKEFILES ----------------------------------------------------------------------- *Que hace la opcion -I del compilador de C () Define el directorio donde estan los ficheros include () Define el nombre de los ficheros include que hay que usar () No lo se *Que hace la opcion -O2 del compilador de C () Define el nivel de optimizacion a 2 () Define el nombre de la salida de la compilacion () No lo se *Si definimos la siguiente variable en un programa C char *buffer; () Tenemos definido un vector de tamaño infinito () tenemos definido un puntero a caracter sin inicializar () Definimos un puntero a caracter y ya se encarga el compilador de reservar espacio para el () No lo se *Si A y B estan declarados como "int * A,*B;", que pasa si hacemos la siguiente asignacion *A=&B; () Asignamos a la posicion de memoria que apunta A la direccion de la variable B () Asignamos a A la direccion de B () Asignamos a A lo apuntado por B () No lo se *Si declaramos la variable A como "char *A", y inmediatamente hacemos read(0,A,100) () Leemos 100 bytes del canal 0 y lo guardamos en la direccion apuntada por A () Leemos 100 bytes del canal 0 y lo guardamos en la direccion apuntada por A, Como A no esta inicializado podria pasar cualquier cosa () Leemos 100 bytes del canal 0 y lo guardamos en la direccion apuntada por A, Como A no esta inicializado, el compilador reservara espacio para que no falle () No lo se *En un programa en C, si ejecutamos la siguiente llamada a funcion: F(a,b,c) () Los parametros se ponen en la pila de derecha a izquierda () Los parametros se ponen en la pila de izquierda a derecha () Los parametros se ponen en registros () No lo se *En un programa C, los vectores y matrices se pasan a las funciones () Por valor () Por referencia () Depende del tamaño () No lo se *Cuando recibimos un mensaje de "Undefined symbol", quien nos lo da () El compilador () El linkador () El makefile () No lo se *Cuando recibimos un warning indicandonos que no hemos indicado el prototipo de una funcion () Es porque no hemos linkado con los ficheros adecuados () Es porque no hemos definido la cabecera pero no importa porque el compilador la define bien () Es porque la funcion no tiene definida la cabecera () No lo se *Si s es un puntero a un struct que contiene un campo c, como podemos acceder a este campo? () (*s)->c () s->c () s.c () No lo se