Optimización del Rendimiento de E/S en Sistemas Operativos

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 19,45 KB

TRATAMIENTO DE OPERACIONES DE E/S POR EL S.O.

SW NIVEL DE USUARIOSW INDEPENDIENTE DE DISPOSITIVODRIVER DE DISPOSITIVOGESTIÓN DE INTERRUPCIONESHARDWARE
Está relacionado con la gestión de las solicitudes de E/S. Aquí se realizan tareas como hacer llamadas a E/S, aplicar formato a la E/S y poner en cola las operaciones.En este nivel se manejan tareas como el nombramiento, la protección, el bloqueo, el uso de búferes y la asignación de recursos.Los controladores se encargan de establecer los registros del dispositivo y verificar su estado. Permiten que el sistema operativo interactúe directamente con los dispositivos físicos.La gestión de interrupciones despierta al controlador cuando se completa una operación de E/S.Aunque no es parte directa del sistema operativo, el hardware también está involucrado en las operaciones de E/S. En este nivel, se realizan las operaciones físicas de E/S, como transferir datos entre dispositivos y la memoria.

¿Por qué se necesita la tabla de procesos en un sistema de tiempo compartido? ¿Se necesita también en los sistemas de computadora personal en los que sólo existe un proceso, y ese proceso ocupa toda la máquina hasta que termina?

La tabla de procesos es necesaria para almacenar el estado de un proceso que está actualmente suspendido, ya sea en estado de listo (ready) o bloqueado (block). Sin embargo, no es necesario en un sistema de un solo proceso, ya que este proceso único nunca se suspende.


Caché de bloques del sistema de archivos. ¿Qué similitudes hay entre la gestión de la caché de bloques y la gestión de páginas de memoria?

Cuando un sistema de archivos necesita acceder a un bloque de datos en la memoria, primero verifica si ese bloque ya se encuentra en la caché de bloques para acceder directamente desde esta, evitando así el tiempo asociado con la lectura desde la memoria principal. Si el bloque no está en la caché, se lee de la memoria principal y se almacena en la caché para un acceso futuro.

La caché de bloques guarda temporalmente los datos más usados para acelerar su acceso, de forma similar a cómo la memoria RAM guarda las páginas más utilizadas para acelerar el acceso a los datos en un sistema. Ambos ayudan a mejorar el rendimiento al reducir el tiempo de acceso a los datos.


¿Cuáles son las cuatro funciones que realiza la tarea reloj?

  1. SET_ALARM (Configurar alarma): Establece una hora específica para que el reloj emita una alarma o una señal de aviso. También se utiliza como temporizador de vigilancia (watchdog timer).
  2. GET_TIME (Obtener la hora): Proporciona la hora actual como el número de segundos transcurridos desde las 12:00 a.m. del día 1/1/1970.
  3. SET_TIME (Configurar la hora): Establece el tiempo real. Es útil cuando se necesita sincronizar el reloj.
  4. CLOCK_TICK (Tic del reloj): Es el mensaje que se envía al driver del reloj cada vez que se produce una interrupción de reloj.

Explica las tareas de interrupción de reloj de su driver.

Cuando se produce una interrupción de reloj (por ejemplo, cada vez que se alcanza un determinado intervalo de tiempo), se realizan estas tareas importantes mediante el mensaje CLOCK_TICK:

  1. El tiempo del reloj se actualiza para asegurarse de que el sistema tenga la hora correcta.
  2. Se revisa si es momento de ejecutar la próxima señal o rutina del watchdog.
  3. Se asigna tiempo de procesamiento (tick) a uno de los programas que se están ejecutando.
  4. Se verifica si el programa que está corriendo ya usó su tiempo asignado (quantum).

Explica el esqueleto de lo que ocurre en el nivel más bajo del sistema operativo cuando ocurre una interrupción.

  1. Interrupción: El hardware detecta una interrupción.
  2. Guardado de estado: El hardware guarda el estado actual del procesador (contador de programa y los registros) en la pila del kernel.
  3. Cambio de contexto: El hardware carga el nuevo contador de programa del vector de interrupciones.
  4. Rutina de servicio de interrupción: Se ejecuta la rutina de servicio de interrupción correspondiente.
  5. Planificación de procesos: El planificador del S.O. decide qué proceso debe ejecutarse a continuación, dependiendo de la política de planificación.
  6. Retorno al código de ensamblador: Después de que se completa la interrupción, el control regresa al código de ensamblador para continuar con la ejecución.
  7. Inicio del nuevo proceso: Finalmente, el proceso seleccionado por el planificador se inicia y el control se transfiere al nuevo proceso.

¿Qué significa que la CPU está trabajando en modo Kernel ó en modo usuario? Desarrolla un ejemplo.

Cuando la CPU está en modo kernel, tiene acceso completo a todos los recursos del sistema y puede ejecutar cualquier instrucción. En modo usuario, las aplicaciones solo pueden ejecutar un conjunto limitado de instrucciones y no pueden acceder directamente al hardware. El sistema operativo actúa como intermediario, gestionando los recursos y garantizando la seguridad del sistema.

Por ejemplo, al leer un archivo en el disco, el sistema operativo inicia la operación en modo kernel para acceder directamente al hardware del disco y realizar la lectura. Después, el S.O. devuelve los datos al programa de usuario en modo usuario para su procesamiento. Esta transición entre modos asegura que las operaciones críticas de E/S se realicen de manera segura y que las aplicaciones de usuario no tengan acceso directo al hardware del sistema.


Proceso SHELL

El Shell es un programa que proporciona una interfaz entre el usuario y el S.O. que permite ejecutar comandos y programas. Es el encargado de crear, controlar y terminar procesos solicitados desde la línea de comandos.

while (TRUE) {
    read_command(command, parameters);
    if (fork() != 0) {
        wait(&status);
    } else {
        execve(command, parameters, 0);
    }
}

Implementar las operaciones de un semáforo en un S.O.

Las operaciones de semáforo se pueden implementar mediante el uso de instrucciones atómicas, mientras que el S.O. deshabilita las interrupciones durante estas operaciones para garantizar su correcta ejecución. Esto quiere decir que el S.O. no puede quitar el control al proceso hasta que se termine de ejecutar. Las operaciones son UP (V) y DOWN (P), equivalentes a operación de señal y espera.

  • UP:
    • Comprueba si el valor del semáforo > 0.
    • SI: incrementa una unidad el valor.
    • NO:
      • Ningún proceso dormido: pone a 1 el valor.
      • Algún proceso dormido: lo despierta (mantiene valor 0).
  • DOWN:
    • Comprueba si el valor del semáforo > 0.
    • SI: decrementa una unidad el valor.
    • NO: el proceso duerme (bloquea).

E/S es el de convertir acciones asíncronas en síncronas. Objetivo y mecanismo.

El objetivo de la conversión hace que las operaciones que sean activadas por interrupciones aparezcan como bloqueadas desde el sistema. Siempre que se produzca un comando E/S y se espere una interrupción tendremos un proceso bloqueado. Cuando se produzca la interrupción se desbloquea el proceso previamente bloqueado.

Los mecanismos utilizados son:

  • Semáforo UP: para bloquear procesos hasta que se complete la operación E/S.
  • Variable condición – monitor SIGNAL: permite al proceso esperar a cumplir una condición.
  • Mensaje SEND: mensaje que recibe un proceso de otro proceso para avisar del cumplimiento de la operación E/S.

“Sección Crítica”. Definición y objetivo.

Las secciones críticas son las partes del programa donde se accede a las zonas compartidas. El objetivo es evitar condiciones de carrera, consiguiendo que no coincidan dos procesos a la vez dentro de sus regiones críticas. Para lograr esto, se implementa la exclusión mutua, asegurando que solo un proceso pueda entrar en la sección crítica a la vez, mientras que otros esperan su turno para acceder a ella. Esto se logra mediante el uso de técnicas de sincronización, como semáforos, que permiten a los procesos coordinar su acceso a las secciones críticas.


Explica con ejemplo: Condición de Carrera. Sección Crítica.

Una condición de carrera es una situación donde dos o más procesos acceden a una zona compartida y el resultado final depende de quién y cuándo se haga con el acceso. Las secciones críticas son partes del programa donde se accede a las zonas compartidas.

En el ejemplo del Print Spooler, dos procesos, A y B, compiten por acceder a las variables compartidas "siguiente celda libre" (in) para almacenar el nombre de archivos a imprimir. Si ambos procesos intentan acceder y actualizar estas variables simultáneamente, puede producirse una condición de carrera. Por ejemplo, si el proceso A interrumpe al B antes de que pueda almacenar el nombre de su archivo, el proceso A podría sobrescribir la acción del B.

Para resolver este problema, se utiliza el concepto de sección crítica, donde se implementa un mecanismo de exclusión mutua para garantizar que solo un proceso pueda acceder a las variables compartidas en un momento dado, evitando así problemas en el proceso de impresión.


En un S.O. con arquitectura Cliente/Servidor, ¿Crees que tendría sentido implementar un planificador en clases de prioridad? Criterios de planificación que aplicaría a los distintos niveles.

En un entorno cliente/servidor donde múltiples procesos pueden estar ejecutándose a la vez para atender las solicitudes de los clientes, la implementación de un planificador en clases de prioridad podría ayudar a garantizar que ciertos procesos sean atendidos de manera preferente sobre otros.

Para los distintos niveles del sistema operativo se pueden aplicar diferentes criterios de planificación:

  • Nivel 0 (núcleo del S.O.): aquí se ejecutan tareas del S.O. y se puede utilizar el criterio de planificación basado en prioridades estáticas. Las tareas críticas del sistema como la gestión de memoria y de operaciones de E/S podrían tener la prioridad más alta.
  • Nivel 1 (servicios del sistema operativo): aquí se ejecutan los servicios que son utilizados por los programas de los clientes, como el sistema de archivos. La planificación podría basarse en la prioridad de los procesos y necesidades de usuario.
  • Nivel 2 (programas de usuario): aquí se ejecutan las aplicaciones de usuario y se puede utilizar la planificación basada en la prioridad asignada por el usuario o en la importancia de las tareas.

Las tareas de los niveles 0 y 1 nunca son suspendidas, mientras que las correspondientes al nivel 2 (usuario) utilizan el algoritmo de round robin.


¿Qué es una instrucción tipo TRAP? ¿Cómo se utiliza en la implementación de las llamadas a sistema? ¿Qué características del tratamiento de esta instrucción se relaciona con lo que es un sistema Operativo? Explica el proceso que se desencadena cuando la CPU ejecuta una instrucción TRAP.

Una instrucción tipo TRAP es una instrucción que se utiliza para generar una interrupción en el programa que se utiliza para cambiar el modo de privilegios de ejecución.

En la implementación de las llamadas al sistema, TRAP cambia el modo de ejecución de usuario al modo kernel, por ejemplo, cuando un programa necesita realizar una operación que requiere privilegios, como leer o escribir en dispositivos, donde el sistema operativo tiene acceso total a los recursos del sistema.

  1. La CPU detecta que se ha ejecutado una instrucción TRAP y cambia del modo de usuario al modo kernel.
  2. Antes de transferir el control al sistema operativo, la CPU guarda el estado actual del programa en el registro, asegurando que el programa pueda continuar su ejecución una vez que se complete la llamada al sistema.
  3. La CPU transfiere el control a la rutina de servicio asociada con la instrucción TRAP específica y se ejecuta la operación solicitada por el programa de usuario.
  4. Una vez que se completa el servicio del sistema, el sistema operativo restaura el estado del programa guardado previamente y devuelve el control a la instrucción siguiente a la instrucción TRAP en el programa de usuario.

Relación alarm y el driver reloj. Implementación?

Cuando se programa una señal de alarma, el sistema operativo configura el driver del reloj para generar una interrupción en un momento específico. Cuando ese momento llega, el driver del reloj genera una interrupción que alerta al sistema operativo para ejecutar la rutina asociada con la señal de alarma.

Un ejemplo es el planificador de disco. Este planificador es responsable de decidir el orden en que se realizan las operaciones de lectura y escritura en el disco. En la implementación del kernel del disco, hay una función de reloj que se utiliza para medir el tiempo de espera durante las operaciones de E/S. Cuando se inicia una operación de lectura o escritura, el driver del disco puede requerir esperar cierto tiempo antes de que la operación se complete.


En un acceso a la información contenida en un fichero que se encuentra en un disco, explica las tareas que debe realizar el driver del disco.

Las tareas que debe realizar el driver del disco durante la operación de lectura o escritura de datos incluyen:

  • La configuración de los registros de DMA (Acceso Directo a Memoria).
  • Activación del motor del disco.
  • Posicionamiento del brazo del disco en el cilindro correcto.
  • Lectura o escritura de datos.
  • El inicio de un temporizador de vigilancia (watchdog timer) para garantizar que la operación se complete dentro de un tiempo predeterminado.

S.O. que utiliza semáforos para sincronizar procesos. ¿Qué operaciones habrá que realizar en la tabla de procesos cuando un proceso se bloquea?

Cuando un proceso se bloquea en una llamada al sistema operativo, se deben realizar las siguientes operaciones en la tabla de procesos:

  1. Bloqueo del proceso: El proceso se coloca en un estado de espera (bloqueado) debido a que no puede realizar la operación deseada. En términos de semáforos, esto se logra mediante la operación DOWN.
  2. Desbloqueo del proceso: Cuando finaliza la llamada al sistema operativo o se cumple alguna condición, el proceso se desbloquea. Esto se logra mediante la operación UP.

En cuanto a cómo decide el planificador cuál es el siguiente proceso a ejecutar, esto depende del algoritmo de planificación utilizado por el sistema operativo, por ejemplo, round robin, planificación por prioridad o predeterminado.


Muestre cómo pueden implementarse los semáforos contadores (es decir, semáforos que pueden contener un valor arbitrario) utilizando sólo semáforos binarios e instrucciones de máquina ordinarias.

Asociados con cada semáforo de conteo hay dos semáforos binarios: M, utilizado para la exclusión mutua, y B, utilizado para el bloqueo. Además, cada semáforo de conteo está asociado con un contador que mantiene la cantidad de incrementos menos la cantidad de decrementos, y una lista de procesos bloqueados en ese semáforo. Para implementar la operación "down" (disminución), un proceso primero obtiene acceso exclusivo a los semáforos, el contador y la lista al realizar un "down" en M. Luego, decrementa el contador. Si el contador es igual o mayor que cero, simplemente realiza un "up" en M y sale. Si M es negativo, el proceso se coloca en la lista de procesos bloqueados. Luego se realiza un "up" en M y un "down" en B para bloquear el proceso. Para implementar la operación "up" (incremento), primero se realiza un "down" en M para obtener la exclusión mutua, y luego se incrementa el contador. Si el contador es mayor que cero, nadie estaba bloqueado, por lo que solo es necesario realizar un "up" en M. Sin embargo, si el contador es ahora negativo o cero, algún proceso debe eliminarse de la lista. Finalmente, se realiza un "up" en B y luego en M en ese orden.


ENTER_REGION y LEAVE_REGION

Cuando P0 llama a la función enter_region, se encuentra en la sección crítica, pero es interrumpido por el planificador antes de poder ejecutar la instrucción CMP REGISTER, #0. Luego, P1 llama a enter_region, ejecuta TSL REGISTER, LOCK, LOCK se establece en 1, permitiendo a P1 entrar en la región crítica. Sin embargo, como LOCK ya está establecido en 1, P1 queda atrapado en el bucle de enter_region hasta que LOCK se establezca en 0 por parte de P0 cuando abandone la región crítica.

La secuencia de acceso a la sección crítica sería:

  1. P0 accede a la sección crítica y establece el ‘LOCK’ a 1.
  2. La CPU le pasa el control al P1 e intenta acceder a la sección crítica, pero se bloquea en el bucle enter_region debido a que LOCK está establecido en 1.
  3. Hasta que P0 no abandone la sección crítica, LOCK no se establecerá en 0 por la función leave_region.
  4. Cuando P0 abandone la sección crítica, P1, que estaba bloqueado en el bucle, podrá acceder a ella.

Esta solución utiliza la técnica de espera activa para lograr la exclusión mutua. Es ineficiente ya que hace que la CPU esté ocupada verificando la accesibilidad de la región crítica.

Además, no cumple con las condiciones:

  1. Ningún proceso fuera de la sección crítica podrá bloquear otros procesos.
  2. Ningún proceso esperará indefinidamente para entrar en su sección crítica.

Entradas relacionadas: