ASO 2019
|
|
Título del Test:
![]() ASO 2019 Descripción: Examenes ASO convocatorias 2019 |



| Comentarios |
|---|
NO HAY REGISTROS |
|
¿Cuál es la secuencia de llamadas al sistema cuando se ejecuta la siguiente línea de órdenes en simplesh?: “echo 123456 | hd -b 2”. fork( exec ( echo ) ) => fork( hd ). fork( exec ( echo ) ) => fork( exec ( hd ) ). Para tratar los errores de las funciones de biblioteca: No se puede usar perror() en ningún caso. Se puede usar perror() sólo si se actualiza errno. ¿Cómo se implementaría 2>&1 con dup(int oldfd)?: close(STDERR_FILENO); dup(STDOUT_FILENO);. close(STDOUT_FILENO); dup(STDERR_FILENO);. Un proceso zombie: No consume recursos del sistema operativo. Ocupa una entrada de la tabla de procesos del sistema operativo. En el planificador clásico de Linux, el llamado O(1), los hilos ascienden y descienden en las colas de prioridad siguiendo la siguiente política: Se usa la diferencia entre el tiempo que ha estado bloqueado y ejecutándose hasta el momento para decidir si asciende o desciende. Cuando se bloquea un hilo, sube o baja en las colas dependiendo del dispositivo que estaba esperando. Por ejemplo si está esperando una tecla subiría la prioridad para proporcionarle al usuario sensación de respuesta rápida. Los extents en ext4, permiten: Que los ficheros puedan tener un mayor tamaño. Describir grupos de bloques de datos contiguos. En xv6 la memoria se gestiona por paginación pura, para lo cual tiene que anular el uso de los segmentos. Como en la arquitectura x86 esto no se puede hacer, la forma de conseguirlo es: Crear un único segmento para el modo usuario y un único segmento para el modo núcleo, cada uno de ellos comenzando en la posición 0 y 4GB de tamaño. Crear dos segmentos (código y datos) para el modo usuario y otros dos para el modo núcleo, cada uno comenzando en la posición 0 y con 4GB de tamaño. Una llamada a la función de biblioteca malloc(): No realiza necesariamente una llamada al sistema sbrk(). Implica siempre una llamada al sistema sbrk(). La función de biblioteca fflush(): Escribe el contenido del buffer del kernel en disco. Escribe el contenido del buffer de todos los streams de stdio en disco. ¿Cuál sería el offset del fichero f tras la ejecución del siguiente fragmento de código asumiendo que las llamadas al sistema nunca fallan?: “fd=open("f", O_RDWR); read(fd, b, 1); if (!fork()) read(fd, b, 1); else wait(NULL);”. 2. 0,1ó 2. En contenedores: El contenedor equivaldría al programa y la imagen al proceso. El contenedor equivaldría al proceso y la imagen al programa. ¿Cuál es el resultado de la siguiente línea de órdenes en simplesh?: “exit > salida”. Se crea salida y simplesh finaliza su ejecución. simplesh termina su ejecución y, por tanto, no se crea salida. Con respecto a la virtualización: Un hipervisor de nivel 1 se ejecuta directamente sobre el hardware mientras que un hipervisor de nivel 2 se ejecuta sobre otro S.O. Un hipervisor de nivel 2 se ejecuta directamente sobre el hardware mientras que un hipervisor de nivel 1 se ejecuta sobre otro S.O. En la gestión de memoria de Windows las páginas en estado commited que no están mapeadas a un fichero: Usan un fichero de páginas cuando son expulsadas a disco. No pueden expulsarse de memoria porque no tienen un soporte donde almacenarlas. En Linux el algoritmo de reserva de memoria se compone de tres mecanismos: Page allocator y slab allocator para gestionar la memoria física y vmalloc para la reserva de direcciones virtuales. Conjunto de trabajo, algoritmo de recuperación de páginas y pdflush para grabar páginas sucias. El reciente soporte de virtualización de los procesadores: Permite saber si se está ejecutando en modo núcleo mirando el registro cs. Añade un nivel de ejecución con prioridad-1. ¿Cuántos procesos resultarían de la ejecución del siguiente fragmento de código asumiendo que fork() nunca falla?: “fork() && fork(); fork() && fork();”. 8. 9. Indica cuál de las siguientes frases describe correctamente el funcionamiento del cambio de procesos en xv6. Cuandoaunproceso se le quita la CPU, el núcleo cambia el contexto a un hilo del núcleo que hace de planificador. Este hilo se despierta, se encarga de seleccionar el proceso que recibirá la CPU y finalmente hacer un nuevo cambio de contexto para activarlo. Cuando a un proceso se le quita la CPU, el núcleo llama a una función planificadora que devuelve el proceso al que debe asignársela. Para ello se llama a una función del núcleo que se encarga de intercambiar el contexto del proceso actual con el del proceso que indica el planificador. Indica cuál es el mecanismo usado en xv6 para que el núcleo consiga acceder a la memoria física. Antes de acceder a la memoria física, desactiva la MMU con lo que las direcciones de memoria dejan de ser virtuales y la vuelve a activar al terminar. La tabla de páginas de cada proceso tiene mapeada toda la memoria física. Si un proceso ignora una señal S, cuya acción por defecto es TERM, recibe la señal N veces y, a continuación, restaura la acción por defecto para S: La ejecución del proceso se interrumpirá. La ejecución del proceso no se verá afectada. ¿Cuántos procesos resultarían de la ejecución del siguiente fragmento de código asumiendo que fork() nunca falla? : “fork() || fork(); fork() || fork();”. 8. 9. Si un proceso crea hijos de manera ininterrumpida pero no llama nunca a wait(): Se crearían procesos huérfanos. Se crearían procesos zombies. En Linux, múltiples procesos pueden usar el código de una biblioteca compartida mediante: Un fichero mapeado en memoria privado. Un fichero mapeado en memoria compartido. ¿Cómo se implementaría 2>&1 con dup2(int oldfd, int newfd)?: dup2(STDOUT_FILENO, STDERR_FILENO);. dup2(STDERR_FILENO, STDOUT_FILENO);. La llamada al sistema sync(): Escribe el contenido del buffer del kernel en disco. Escribe el contenido del buffer de todos los streams de stdio en disco. Si tecleamos CTRL+C: Se envía una señal SIGQUIT al proceso en primer plano. Se envía una señal SIGINT al proceso en primer plano. La arquitectura x86 permite dispositivos mapeados a memoria. Verdadero, ya que no dispone de instrucciones especiales de E/S. Verdadero, pero el modo preferido es a través de direcciones especializadas de E/S. El número de nodo-i de un fichero se encuentra: Sólo en el directorio que lo contiene. En todos los directorios que lo referencian. En el proceso de arranque: Una vez pasado a modo protegido, el S.O. puede seguir utilizando los servicios de la BIOS o implementar sus propios drivers de dispositivo. En modo UEFI es posible que el S.O. arranque directamente en modo protegido. En relación con los procesos en Windows en cierto que: Un proceso debe tener al menos un hilo. Las fibras no se manejan a nivel de usuario. En el algoritmo de reemplazo de páginas de Linux, una página marcada como intercambiable: Puede ser reclamada de forma inmediata. Debe escribirse en disco antes de poder ser reclamada. Todas las direcciones almacenadas en la tabla de páginas son: Direcciones físicas. Direcciones virtuales. El algoritmo de asignación de memoria denominado buddy o de colegas: Solamente puede proporcionar un bloque de memoria de tamaño potencia de 2. Se utiliza para gestionar el espacio de memoria virtual de un proceso, proporcionando grandes bloques de memoria que se encargará de gestionar malloc. El IRP en Windows: Se utiliza para guardar la información que necesita cada elemento de la pila de drivers para servir la petición. No permite operaciones que utilicen el DMA. Con respecto a la MFT de un sistema de ficheros NTFS: La misma MFT es un fichero, así que tiene asociada una entrada en la MFT. No permite ficheros dispersos (ficheros con huecos que no contienen datos almacenados). En el sistema de ficheros ext2: En caso de un corte eléctrico inesperado, el sistema de ficheros no puede quedar inconsistente, puesto que utiliza una bitácora. El acceso a directorios con una enorme cantidad de ficheros puede ser ineficiente debido a que las entradas en el directorio se mantienen formando una lista ligada. Con respecto a la traducción de binarios en la virtualización: A pesar de usar un hipervisor con una CPU que ofrece soporte para virtualización, la técnica de traducción de binarios sigue siendo una opción para mejorar el rendimiento. La paravirtualización se basa en la técnica de traducción de binarios. ¿Cuál es la secuencia de llamadas al sistema cuando se ejecuta la siguiente línea de órdenes en simplesh?: “echo echo 1 | src”. fork ( exec ( echo ) ) => fork ( fork ( exec ( echo ) ) ). fork ( fork ( exec ( echo ) ) ) => fork ( exec ( echo ) ). ¿Cuál es el resultado de la siguiente línea de órdenes en simplesh?: “exit &”. simplesh finaliza su ejecución. simplesh no finaliza su ejecución. El IRP en Windows : Se utiliza para guardar la información que necesita cada elemento de la pila de drivers para servir la petición. No permite operaciones que utilicen el DMA. El código independiente de la posición (PIC)... sólo tiene sentido cuando no tenemos memoria virtual, ya que la memoria virtual permite que todos los procesos tengan su espacio de direcciones de memoria separado que comienza por 0. tambiéntiene sentido con memoria virtual, ya que puede que haya un mismo código en diferentes rangos de direcciones virtuales de dos procesos y en ese caso, el código PIC facilita su ejecución sin problemas. Dado un proceso cuyo PID es 5, ¿qué sucedería si ejecutásemos signal-s SIGSEGV 5?: Nada pues sólo el kernel puede enviar la señal SIGSEGV. En el caso de que la haya capturado, el proceso podría continuar su ejecución con normalidad. El uso de máquinas virtuales... obliga a que su sistema operativo anfitrión tiene que ser siempre más moderno que el sistema operativo huésped. nos permite instalar sistemas operativos antiguos no soportados ya por el hardware actual. Indica cuál de las siguientes estructuras no se encuentra en el descriptor de un proceso en Linux: Tabla de ficheros abiertos. La tabla de señales capturadas, ignoradas o bloqueadas. El kernel de Linux... mantiene un mapa de la memoria principal en el que se guarda la información sobre el uso de la memoria física. la información sobre el uso de la memoria física se guarda en la propia entrada de la tabla de páginas correspondiente a la página virtual asociada a cada marco físico. Si un proceso intenta acceder a una página de memoria violando su tipo de protección: El proceso recibe una señal SIGSEGV del kernel. El proceso recibe una señal SIGQUIT del kernel. ¿Cuál es la secuencia de llamadas al sistema cuando se ejecuta la siguiente línea de órdenes en simplesh?: “echo (cd) | src”. fork( exec ( echo ) ) => fork( fork ( fork ( cd ) ) ). fork( exec ( echo ) ) => fork( fork ( fork ( fork ( cd ) ) ) ). En Linux, ¿qué sucede si proceso bloqueado o suspendido recibe una señal?. Cambia su estado a ready. No sucede nada porque un proceso bloqueado o suspendido ignora por defecto todas las señales. ¿Cuántos procesos resultarían de la ejecución del siguiente fragmento de código asumiendo que fork() nunca falla? : “fork() || fork() || fork() || fork();”. 4. 5. ext4 y NTFS: El primero soporta ficheros con agujeros, pero no el segundo. Ambos soportan ficheros con agujeros. En la MFT del sistema de ficheros NTFS... Los bloques que componen un fichero se almacenan siempre que se puede como se cuencias de pares (comienzo, longitud). Tiene el inconveniente de que no admite que los ficheros tengan huecos de espacio sin asignar, así que un fichero siempre ocupa en disco como mínimo lo mismo que indica su tamaño. ¿Cuál es el resultado de la siguiente línea de órdenes en simplesh?: “echo 1 | exit”. No se imprime nada y simplesh finaliza su ejecución. No se imprime nada y simplesh continúa su ejecución. Un hipervisor tipo 1... es el único software ejecutándose en el modo más privilegiado. aunque se ejecuta en el modo más privilegiado, comparte ese modo con un sistema operativo anfitrión que es el que se encarga de dar soporte a las máquinas virtuales creadas. ¿Cuál es la forma correcta de redigir la salida estándar de error a un fichero?: echo mensaje > fichero 2>&1. echo mensaje 2>&1 > fichero. En Linux el demonio pdflush... se despierta periódicamente para escribir los marcos de página modificados más antiguos. se encarga de reclamar páginas hasta que consigue quedarse con un número suficiente de marcos libres disponibles. Si un proceso redirige su salida estándar a un fichero y después realiza una llamada a fork(), el proceso hijo: Escribe en la consola cada vez que usa printf(). Escribe en el fichero cada vez que usa printf(). En el sistema de ficheros de xv6... Cada entrada de directorio contiene el nombre del fichero o directorio de un máximo de 14 bytes, el nodo-i asociado y todos los permisos de acceso (rwx) para usuario, grupo y otros. Existe una estructura llamada dinode y otra denominada inode, donde la primera contiene la versión del nodo-i que se guarda en disco, y la segunda es una versión ampliada que se mantiene en memoria. El antiguo planificador de Linux denominado O(1): Cuandounatarease bloquea antes de que acabe su quantum, al desbloquearse vuelve a la cola activa en la que se encontraba con lo que le falta de quantum por consumir. Cuando una tarea se bloquea antes de que acabe su quantum, al desbloquearse vuelve a la cola activa en la que se encontraba con un nuevo quantum completo como premio por haber hecho E/S. En Windows encontramos: Jobs que contienen procesos, que a su vez pueden contener hilos, que a su vez pueden contener fibras. Procesos que contienen jobs, que pueden crear hilos o fibras según les interese por temas de rendimiento. Si dentro de una función se llama a alloca() pero no a free(): Se genera siempre una fuga de memoria. Se libera la memoria tras llamar a return. |





