:(
|
|
Título del Test:![]() :( Descripción: esta es la buena |



| Comentarios |
|---|
NO HAY REGISTROS |
|
El número mayor de un fichero especial asociado a un dispositivo nos permite conocer el driver asociado al dispositivo. Verdadero. Falso. Selecciona las respuestas correctas, entre las siguientes: Un contenedor de aplicaciones lleva su propia IP y usa los servicios del anfitrión. Un contenedor de aplicaciones despliega sus propios servicios de manera totalmente independiente del anfitrión. Un contenedor de aplicaciones es un entorno virtualizado para el despliegue automático de aplicaciones. Un contenedor de aplicaciones es un sistema operativo dedicado a una sola aplicación. Indicar cuáles de los campos siguientes pertenecen al superbloque en disco: Número mayor del dispositivo. Flag de bloqueo del superbloque. Contador de número de bloques libres. Mapa de bits para indicar los inodos libres. Directorio de punto de montaje. Mapa de bits para indicar los bloques libres. Tamaño del sistema de ficheros. Las prioridadres de tiempo real de los procesos de usuario se mueven en el rango [0,99]. Los procesos con política de planificación SCHED_OTHER no son de tiempo real, y sólo pueden ejecutarse cuando no haya ninguno de tiempo real en la cola de elegibles. Verdadero. Falso. La instrucción CPU IRET sirve para: Recuperar la PSW desde la cima de la pila en modo maestro. Recuperar la totalidad de la capa de contexto desde la cima de la pila en modo maestro. Reactivar todas las interrupciones. Desenmascarar todas las interrupciones. Con respecto al tiempo de asignación de la CU a los procesos, la reasignación del campo “counter” se realiza cuando todos los procesos elegibles tienen dicho campo a 0. Al realizar dicha reasignación al valor del campo “priority”, se suma el valor del campo “counter” para los procesos bloqueados, dividiéndolo por 2. El motivo es que de esta forma se beneficia a los procesos que hacen uso extensivo de la CPU. Verdadero. Falso. Indica las respuestas correctas con respecto a la estructura lógica de un sistema de ficheros tipo ext: El bloque 0 lo ocupa el superbloque, el bloque 1 está libre, a partir del bloque 2 empieza la lista de inodos. El bloque 0 lo ocupa el MBR, el bloque 1 está libre y se puede usar como extensión del MBR, en el bloque 2, está el superbloque y a partir del bloque 3 empieza la lista de inodos. Los bloques 0 y 1 están ocupados por el MBR, el bloque 2 lo ocupa el superbloque, a partir del bloque 3 empiezan los bloques de datos. El bloque 0 lo ocupa el MBR, el bloque 1 el superbloque y a partir del bloque 2 empieza la lista de inodos. Indica las respuestas correctas con respecto al algoritmo de sustitución NRU (Not Recently Used): Se utilizan los bits R (Referencia) y P (Presencia). Se utilizan los bits R (Referencia) y Suciedad (M). Se emplean 2 listas, dividiendo las páginas entre referenciadas y no referenciadas. Se emplea un modelo de 4 listas, que se reorganizan cada vez que se ejecuta el algoritmo. Indicar si es verdadero o falso: La rutina alloc_block reserva un bloque en disco que se encontraba libre, y retoma un bloque en memoria para él en el buffer-cache. Verdadero. Falso. Elige las respuestas correctas con respecto a la llamada execve: Crea un nuevo proceso a partir de un fichero ejecutable. Cuando acabe el proceso ejecutado retorna para continuar con el proceso anterior. Asigna los campos EUID, EGID del proceso current en función del valor de ambos bits en el fichero ejecutable. Manipula la pila en modo maestro del proceso actual cambiando la capa de contexto en su cima. Reescribe la imagen de memoria del proceso invocador con una nueva imagen tomada de un fichero ejecutable. Con respecto a la rutina sleep(addr,flag), indica cuáles de las siguientes afirmaciones son ciertas: Sirve para dejar bloqueado un proceso durante el tiempo indicado como argumento. Sirve para bloquear un proceso sobre una cola de espera, indicando el modo de bloque. Admite dos tipos de bloqueo. Deja bloqueado al invocador insertándolo en una cola de espera e invocando al scheduler. Para retornar el valor entero que devuelve una llamada en Linux: Se devuelve utilizando la variable compartida errno como vía de comunicación. Se emplea el registro EAX, escribiendo sobre la pila en modo maestro el valor correspondiente a dicho registro en un campo específico asociado a dicho registro. Se emplea el campo “exit_code” de la task_struct para obtener dicho valor de retorno. Se emplea el registro EAX, escribiendo en él el valor a retomar justo antes de terminar la llamada. La llamada mknod permite crear un fichero especial asociado a dispositivo. Cualquier usuario puede crear uno de estos ficheros, pero sólo el superusuario puede instalar el drives correspondiente incluyéndolo como módulo de carga o como parte del núcleo monolítico. Verdadero. Falso. Indica las afirmaciones correctas con respecto a la llamada creat: Permite crear un fichero nuevo, el cual queda ya abierto para su uso. No permite crear el fichero si este ya existía. Requiere una nueva entrada en la tabla local de fichero, que apunta a una entrada en la tabla global, que también debe ser creada. Esta última apunta al inodo en memoria que ha sido previamente asignado. Con esta llamada sólo el proceso invocador puede acceder al fichero así creado. Permite crear un fichero nuevo, el cual debe ser posteriormente abierto mediante open. Cuando un proceso ejecuta la llamada exit se abortan automáticamente todos sus procesos hijos. Verdadero. Falso. Indica las respuestas correctas con respecto a la ejecución del scheduler: La rutina schedule al finalizar las llamadas, interrupciones y excepciones cuando need_resched es 1. Al finalizar la llamada al sistema exit se invoca a la rutina schedule. Siempre que se bloquee un proceso se invoca a la rutina schedule. La rutina schedule se ejecuta automáticamente al finalizar las interrupciones, llamadas y excepciones. En cualquier punto del código del sistema operativo se puede producir una conmutación de proceso en núcleo 2.0.36. Sabiendo que un bloque de datos ocupa 512 bytes, y que en la tabla de implantación de un inodo tenemos la información siguiente: -10 cursores directos: cursos número i es i+100, desde i=0 a 9. Ejemplo: El cursor 2 es 102. -1 cursos indirecto, con valor 200 -1 cursos doble indirecto, con valor 0 -1 cursos triple indirecto con valor 0 En el bloque 200 tenemos 128 cursores de 4 bytes, con valores i+500, para el cursor i, desde i=0 hasta i=127. Ejemplo, el cursor 2 es 502. SE PIDE: Indicar el número de bloque físico correspondiente al offset 17801. El núcleo monolítico consiste en un único fichero donde están todas las funciones del sistema operativo. Verdadero. Falso. Indicar las respuestas correctas sobre la llamada open: Si no hay inodos libres queda bloqueada hasta que un inodo quede libre. Se comprueba el derecho de apertura indicado mediante el algoritmo permission. La llamada open retorna un valor entero, que es un índice en tabla local de ficheros abiertos. La comprobación de poder acceder al directorio donde se encuentra el fichero que se desea abrir se hace mediante la invocación a la rutina namei. La llamada open termina invocando a iput sobre el inodo del fichero abierto. La anomalía de Belady es un fenómeno que apenas afecta al rendimiento del algoritmo FIFO de sustitución, y por ello este algoritmo de sustitución puede ser utilizado sin problemas en la práctica. Verdadero. Falso. El reconocimiento de una interrupción (eoi): Sirve para obtener exclusión mutua en la ejecución de una interrupción. Es un mecanismo para desactivar un nivel de interrupción. Permite indicar a la controladora de interrupciones que se ha atendido una interrupción. Desenmascara ese nivel de interrupción. La rutina verify_area sirve para comprobar los derechos de ejecución de un proceso sobre un cierto fichero. Verdadero. Falso. Indica las respuestas correctas con respecto a la rutina bread: Sirve para leer un bloque de disco de forma directa, sin usar el buffer-cache. Sirve para leer una página desde disco. Sirve para leer un bloque de disco a través del buffer-cache. En ningún caso se bloquea, en caso de error retorna indicándolo. Indicar si el fragmento de código siguiente es correcto (Verdadero como respuesta) o no (Falso como respuesta): ISR_DISP: TEST(disp); if (error) <Tratar error> else { LEER(disp,c); if (lleno(input_buffer) sem_wait(semaforo_llenos); else { insertar(input_buffer, c); sem_signal(semaforo_libres); } }. Verdadero. Falso. El algoritmo iget se emplea para asignar u obtener un inodo en el cache de inodos. Si no hay inodos libres se queda bloqueado a la espera de uno libre. Verdadero. Falso. Indica la opción correcta con respecto al algoritmo de la segunda oportunidad. Se emplea como algoritmo de sustitución para dar una segunda oportunidad a las páginas que han sido referenciadas recientemente, empleando el bit R para ello. Es un algoritmo de asignación de memoria, que permite mantener en memoria los procesos durante un cierto tiempo, cuando el bit sticky está a 1. Se emplea como algoritmo de sustitución que extiende al algoritmo FIFO utilizando el bit de presencia para dar una segunda oportunidad a las páginas que llevan mucho tiempo en memoria. Se emplea como algoritmo de sustitución, mediante un contador que cuenta el número de veces que ha sido cargada en memoria, se reemplazan sólo las que tengan el contador igual a 1. La rutina getblk es una rutina del buffer-cache que sirve para obtener un buffer del cache, y nunca puede fallar en su ejecución, siempre retornará con éxito un buffer. Verdadero. Falso. Indica las respuestas correctas con respeto a los timers: En el modelo estático de timers sólo tenemos 32 timers, pero podemos pasarles un argumento en su ejecución, como un puntero a una estructura. Para insertar un nuevo timer en la lista cronológica tenemos que ir decrementando el valor del tiempo absoluto con los valores de los nodos que vamos recorriendo y con el valor de la variable jiffies. En el modelo dinámico, en cada ocurrencia de la interrupción del reloj se decrementa en 1 el campo contador del nodo en cabeza de la lista, no es necesario recorrer la lista completa. Cuando llega a 0 se ejecuta el timer. Un timer permite programar la ejecución de una función del kernel en un instante futuro. Un timer permite controlar el número de veces que se produce la interrupción del reloj. El multiprocesamiento con memoria compartida permite mejorar el rendimiento de las aplicaciones multihilo debido a: La capacidad de compartir la memoria en la ejecución de los threads, permitiendo su ejecución simultánea en tiempo real. La presencia de múltiples CPUs disminuye los tiempos de conmutación entre hilos. No hay retrasos por esperas entre hilos, porque no es necesario aplicar el mecanismo de comunicación basado en rendez-vous. La migración de hilos a las diferentes CPUs es muy rápida, debido a la memoria compartida. El bloqueo de un proceso en modo interrumpible permite que éste reciba señales y las atienda mientras ha sido bloqueado, recuperando el estado de bloqueo tras atender la señal. Verdadero. Falso. Nunca debe emplearse el método de escrutinio para programas la rutina write de un driver de un dispositivo de caracteres de E/S. Verdadero. Falso. Indica las respuestas correctas con respecto a los ficheros con imagen en memoria: Los ficheros con imagen en memoria proyectan su contenido o parte de él en el espacio de direccionamiento virtual de los procesos de usuario. Se divide a los ficheros en páginas, para ello es necesario que el tamaño de los ficheros se múltiplo del tamaño de página. En la proyección privada, los cambios realizados se perderán al romper la proyección, y no se volcarán al fichero en disco. Los ficheros con imagen en memoria proyectan parte de su contenido en el espacio de direccionamiento virtual del sistema operativo. Con respecto al diagrama de estados de un proceso en UNIX, una vez que un proceso se encuentra en la cola de elegibles, éste siempre empieza su ejecución desde el modo esclavo del procesador. Verdadero. Falso. Cuando la CPU se detiene con la instrucción halt del procesador, sólo puede restablecerse su ejecución reiniciando la máquina. Verdadero. Falso. Indica las respuestas correctas respecto a las tareas de núcleo en Linux 2.0.36: Se ejecutan por las interrupciones, justo al acabar su ejecución. Se ejecutan al retorno de las interrupciones, llamadas y excepciones, antes que los procesos de usuario, pero despues de otras interrupciones. Contienen actividades temporizadas por los procesos de usuario. Sirven como mecanismo para planificar los procesos de usuario. Sabiendo que un bloque de datos ocupa 512 bytes, y que en la tabla de implantación de un inodo tenemos la información siguiente: -10 cursores directos: cursos número i es i+100, desde i=0 a 9 . Ejemplo: El cursor 2 es 102. -1 cursos indirecto, con valor 200 -1 cursos doble indirecto, con valor 0 -1 cursos triple indirecto con valor 0 En el bloque 200 tenemos 128 cursores de 4 bytes, con valores i+500, para el cursor i, desde i=0 hasta i=127. Ejemplo, el cursor 2 es 502. SE PIDE: Indicar el número de bloque físico correspondiente al offset 12325. Elige las respuestas correctas con respecto a la llamada fork: Reutiliza el mismo mapa de memoria del padre para el hijo (lista de regiones VM), ambos lo comparten hasta que el hijo lo modifique. Actúa copiando la imagen del padre sobre el hijo, que de esa forma tiene una copia idéntica de la memoria del padre. Crea una capa de contexto ficticia sobre la pila en modo maestro del hijo para iniciar su ejecución dentro de la llamada fork. Copia la pila en modo maestro del padre sobre el hijo para que éste puede continuar su ejecución exactamente igual que el padre al finalizar el fork. Crea un proceso copia de su progenitor, retornando 0 para el hijo y el PID del hijo para el padre. Crea un proceso desde la imagen de un ejecutable en disco. Tenemos un fichero con pathname /tmp/x y ejecutamos la orden siguiente: In /tmp/x /home/pepe/x Suponiendo que ambos directorios /tmp y /home/pepe se encuentran en el mismo sistema de ficheros esta orden sería ejecutada correctamente. Si ahora ejecutamos la orden: rm /tmp/x, aún será posible el acceso al fichero a través de /home/pepe/x. Verdadero. Falso. Cuando se ejecuta una ISR, el coste de ejecución de la misma en términos de tiempo de CPU se le carga al proceso actual en ejecución. Verdadero. Falso. Indica las respuestas correctas respecto al cache de páginas: Una escritura parcial sobre una página implica la lectura de la página desde disco si no estaba previamente en el cache. La rutina find_page localiza una página por su número de dispositivo en que se encuentra. La rutina find_page localiza una página por el número de inodo y número de página. Linux 2.0.36 emplea un modelo de tabla hash basado en número de inodo y número de página para repartir las páginas en diferentes listas dinámicas. Tras escribir sobre una página en el cache, se ordena su escritura a disco de forma inmediata. Indicar la respuesta correcta: El offset de los ficheros se representa en la tabla local, de modo cada proceso ve sus propios desplazamientos. El offset de los ficheros va en la tabla de ficheros para que los hijos de un proceso compartan el offset. El offset del fichero se guarda en el directorio donde se encuentra. El offset de los ficheros se indica en el inodo para que todos los procesos vean el mismo offset. Señala los campos que forman parte de un inodo en disco: UID y GID del usuario propietario y grupo propietario, respectivamente. Código de tipo de inodo (fichero, directorio, pipe…). Contador de referencias. Contador de hard links. Flag de bloqueo para exclusión mutua. Número de dispositivos en que se encuentra. Máscara ugo de derechos. Número de inodo. El estado ZOMBIE de un proceso: Es el estado al que llega el proceso cuando ejecuta la llamada al sistema exit. Es el estado resultante de abortar el proceso tras Control-C. Se emplea para que el proceso tenga tiempo de liberar sus propios recursos. Es el estado del proceso cuando se le deja bloqueado durante cierto tiempo. La realización de los perfiles de ejecución no se puede extraer de la ISR del reloj para llevárselo a la tarea de núcleo de reloj. Verdadero. Falso. Cuando se produce una excepción en la ejecución de un proceso en Unix: El proceso con PID igual a la excepción es atacado. El sistema operativo muestra un mensaje de pánico y se detiene. El proceso actual recibe una señal indicando la excepción. Se manda un mensaje al terminal del proceso usuario mostrando: “Segmentation fault”. Elige las respuestas correctas entre las siguientes: El núcleo modular permite la compilación incremental. El núcleo modular facilita respetar el principio de zero-copy. Un sistema paravirtualizado es un kernel que ha sido modificado para poder ser ejecutado de forma eficiente en su virtualización. No debemos implementar un RTOS utilizando un núcleo modular. El núcleo modular es ineficiente porque es complicado detectar errores en el código. En el modelo de núcleo extensible, con hipervisor tipo 1, el hipervisor corre sobre la máquina física directamente. El núcleo modular permite implementar un sistema operativo como un conjunto de tipos abstracto de datos. Elige una respuesta El núcleo monolítico consiste en: Un conjunto de módulos separados que permiten separar la implementación de cada componente. Se compilan para conformar el core del núcleo. Un conjunto de objetos separados junto a un objeto raíz monolítico para iniciar el sistema. Un único fichero que se compila para generar el core del núcleo. Un conjunto de ficheros separados que se compilan para conformar el core del núcleo. La pila de ejecución en modo maestro: Contiene registros de activación y capas de contexto salvaguardadas. Se encuentra en el espacio de direccionamiento virtual del proceso de usuario. Permite la ejecución anidada de interrupciones, incluso de la misma ISR varias veces. Almacena siempre contexto salvaguardados anteriores correspondientes a ejecuciones en modo maestro. Indica las afirmaciones correctas con respecto al modelo arquitectónico de núcleo modular. Se puede organizar el núcleo como un conjunto de objetos que se comunican información mediante el paso de mensajes. No existe ocultación de la información, desde cada módulo es posible acceder a la información implementada en los demás módulos. El núcleo modular facilita la implementación del principio zero-copy. Se divide el núcleo en componentes modulares compiladas por separado, admitiendo la compilación incremental del núcleo. Indica las afirmaciones correctas con respecto a los estados de un proceso en Unix y el diagrama de transición de estados correspondientes. El estado inicial de todo proceso es "preparado para ejecución" (en la cola de elegibles), que se asigna nada más crear su entrada en la tabla de procesos por la llamada fork. Con la excepción del bloqueo por falta de página, un proceso sólo podrá bloquearse cuando ejecuta (el mismo) sea llamada al sistema bloqueante, que lo conduce al estado de bloqueo siempre desde el modo maestro del procesador. Cuando se asigna la CPU a su nuevo proceso, este pasa a considerarse desde ese mismo momento en ejecución en el estado ejecución es modo esclavo. El estado Zombie se emplea para que los procesos que terminan tengan tiempo de escribir en el registro de auditoria su información correspondiente, una vez hecho eso se elimina definitivamente el proceso del sitema. Indica las afirmaciones correctas con respecto a las capas de contexto y su salvaguarda: La salvaguarda de las informaciones de contexto suspendidos mediante el uso de direcciones fijas en memoria asociadas a las diferentes causas de cambio de contexto es una alternativa a la pila de ejecución, que no permite ejecuciones reentrantes. La instrucción IRET sirve para restaurar la PSW desde la pila en modo maestro actual. En la cima de la pila en modo maestro se encuentra la capa de contexto correspondiente al último contexto suspendido, no se apila la capa de contexto del contexto actual. A través del contenido de la última capa de contexto en la pila en modo maestro podemos determinar si la ejecución suspendida lo fue en modo esclavo o modo maestro. Indica las afirmaciones correctas con respecto al código común del tratamiento de llamadas. Los parámetros de la llamada se pasan al sistema operativo desde el proceso de usuario mediante paso de mensajes. Los parámetros de la llamada se pasan al sistema operativo empleando registros generales del procesador. El valor retornado por la llamada se escribe en EAX, de esa forma se pasará con el cambio de contexto desde modo maestro a modo esclavo. Se identifica la llamada invocada mediante el número de interrupción empleado para invocar a la llamada. Indica las afirmaciones correctas con respecto de la llamada fork. Se emplea para crear un nuevo proceso como hijo del invocador, cuya ejecución, se inicia dentro de la llamada y retorna siempre 0 para el nuevo proceso, y el PID del nuevo para el invocador. El nuevo proceso comparte el código y datos del padre en todo momento. Se empieza para crear un nuevo proceso, como hijo del invocador, cuya ejecución se inicia dentro de la llamada y retorna siempre 0, para el nuevo proceso, y el PID del nuevo para el invocador. El nuevo proceso comparte inicialmente el código y datos del padre, aplicándose el principio copy-on-write para duplicar aquellas páginas que uno de los dos escribe. El nuevo proceso inicia su ejecución justo a continuación de la llamada a fork, iniciándose en modo esclavo. Para crear el nuevo proceso se copia todo el contenido de la PCB del padre sobre la nueva estructura PCB creada para el hijo, es decir, el hijo hereda todos los valores de la PCB del padre. Indica las afirmaciones correctas con respecto al algoritmo de sustitución FIFO: Siempre elige como víctima la página que lleva más tiempo sin ser referenciada. Siempre elige como víctima la primera página que tenga entre las de clase 0(no referenciadas y no modificadas). Siempre elige como víctima la página que lleva más tiempo en memoria. Sufre un problema denominado anomalía Belady que imposibilita su aplicación práctica. Indica las afirmaciones correctas con respecto al algoritmo PFF (Page Fault Frecuency) que establece el espacio de trabajo de un proceso. Emplea intervalos de muestreo para obtener el espacio de trabajo quedándose con las páginas referenciadas en cada periodo de muestreo. Se basa en anotar el tiempo transcurrido desde la última falta de página, cuando es muy pequeño se reduce el espacio de trabajo, y cuando es demasiado grande se incrementa. Se basa en anotar el tiempo transcurrido desde la última falta de página, cuando es muy pequeño se incrementa el espacio de trabajo, y cuando es demasiado grande se reduce. Debido al alto número de faltas de página consecutivas que se producen cuando un programa ejecuta un salto largo, en esas situaciones el espacio de trabajo queda sobredimensionado. Indica las afirmaciones correctas con respecto a la proyección de ficheros en memoria: La proyección consiste en poder leer y escribir sobre el fichero empleando un cierto rango de direcciones virtuales del espacio de memoria del procesos, cuyos atributos de protección corresponderán al modo de apertura del fichero. Al realizar la proyección, las llamadas read y write se modifican para que actúen desde la zona de memoria proyectada en el fichero. Con independencia del tipo de proyección, al finalizar ésta, los contenidos del fichero son actualizados con la información de su imagen en memoria. El fichero se leerá o escribirá indirectamente, desde memoria principal, empleando el mecanismo de falta de página para traer sus contenidos a memoria. Indica las afirmaciones correctas con respecto a las tareas de núcleo de Linux. Se trata de código del sistema operativo para ejecutar acciones diferidas en el tiempo, en el instante que se inidique cuando se instancia. Sirve para implementar los timers del sistema, como acciones de muy alta prioridad, que se ejecutan al retorno de llamadas, interrupciones y excepciones. Se trata de kernel threads con la máxima prioridad en el sistema que se planifican por el scheduler, para ocupar la CPU en cuanto sean desbloqueadas. Se trata normalmente de código extraído de interrupciones, que puede ser ejecutado con interrupciones desenmascaradas, pero en absoluta exclusión mutua (no es posible ejecutar simultáneamente 2 tareas de núcleo). Indica las afirmaciones correctas con respecto a los timers en Linux. En el modelo estático se puede definir hasta 32 timers, los cuales no pueden llegar argumentos. El modelo dinámico admite una cantidad ilimitada de timers, ordenados según el instante en que han sido creados. Además, admite un argumento entero o dirección de memoria virtual. El modelo admite una cantidad ilimitada de timers, ordenados según el instante de ejecución. Además, admite un argumento entero o dirección de memoria virtual. Con el modelo dinámico, en cada ocurrencia de la interrupción del reloj basta decrementar en uno el contador del modo en cabeza de la lista, y si es 0 este se ejecuta, así como los consecutivos con ceros. El resto no se ven alterados. Indica las afirmaciones correctas con respecto al cache de páginas: Nos permite conocer la ubicación de las páginas que se encuentran en memoria principal. La rutina findpage (inodo, página), siempre asociará una entrada en el cache para el par (inodo, página), devolviendo su descriptor de página correspondiente. Se implementa mediante una tabla hash, cuyas sublistas van asociadas a valores iguales de la función hash (inodo, página). Cuando una página queda libre, se extrae del cache para poder reutilizar esa entrada. Cuando una página queda libre, se mantiene en el cache, asignando su bit P a 0, de modo que pueda ser fácilmente recuperada si vuelve a ser utilizada por ese proceso. Indica las afirmaciones correctas con respecto al sistema de ficheros. Los directorios se implementan empleando fichero especiales, cuyos contenidos son registros de longitud variable, para dar soporte a ficheros cuyo nombre sea hasta 255 caracteres. Así, las llamadas open. read, write y close también sea aplicables a directorios. El nodo número 1 es la raíz del sistema de ficheros. Dentro del superbloque se guarda la información de implantación de los ficheros, indicándolos bloques de disco que estos ocupan. La rutina namei es la responsable de transformar un pathname en un inodo en memoria, devolviendo la dirección de dicho inodo en el cache de inodos. Debe comprobar el derecho de ejecución en todos los directorios que deba atravesar. Indica afirmaciones correctas de las rutinas alloc_inode y destroy_inode. Son rutinas asociadas al cache de inodos, para asignar y liberar un inodo en la cache de inodos, respectivamente. Son rutinas del superbloque, para asignar y liberar inodos en disco. Se implementan mediante un mapa de bits para conocer los inodos libres en disco. Cuando no hay un indo libre, alloc_inode queda bloqueada hasta que quede uno libre. Cuando no hay un inodo libre, alloc_inode retorna error de forma inmediata. Indicar las afirmaciones correctas con respecto a la llamada read. En la parte genérica se comprueba con verify_area que el proceso invocador tiene derecho de lectura sobre el buffer de usuario. En la parte genérica se comprueba con verify_area que el proceso invocador tiene derechos de escritura sobre el buffer de usuario. La lectura se realiza en unidades de bloques, copiando la información desde el buffer-cache al buffer de usuario en unidades de un bloque cada vez o fracción de ellos cuando corresponda. La lectura se realizan en unidades de página, copiando la información desde el cache de páginas al buffer de usuario en unidades de páginas o fracción de ella cuando corresponda. Indica las afirmaciones correctas con respecto de las E/S: Se emplean los números mayor y menos para identificar el dispositivo. El número mayor es un índice en la tabla global de dispositivos, según su tipo, mientras que el número menor es el número de serie del fabricante. A partir del número mayor podemos determinar el driver correspondiente. El driver implementa código específico para las llamadas open, read, write, close, así como un servicio ioctl que permite vincular ese dispositivo a un fichero para que actúe como interfaz para el usuario. La programación de E/S basada en escrutino se apoya en un algoritmo de espera activo, el cual en el caso particular de las salidas puede optimizarse invocando al schedule mientras espera la finalización de una operación. En la programación de un driver de salida a un dispositivo basada en interrupciones, cuando la interrupción se produce cuando el dispositivo está listo para operar, es necesario desactivar la interrupción si no hay información que entrar al mismo. |





