Mecanismos de Comunicación y Gestión 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 4,57 KB

Tuberías (Pipes): Comunicación entre Procesos

Una tubería o pipe es una estructura de datos implementada en el núcleo del sistema operativo (SO) para facilitar la comunicación entre los espacios de direcciones de distintos procesos. Aunque cada proceso tiene su propia zona de memoria asignada para evitar interferencias, en ocasiones se hace necesaria cierta comunicación entre ellos.

Cuando un proceso crea una tubería, el mandato fork() permite que sus procesos hijos hereden esta tubería. Dados dos procesos, se establece un flujo de datos unidireccional a través de la tubería, y los datos se consumen en el orden en que se hayan creado (FIFO - First In, First Out).

Una tubería posee dos extremos: un extremo de escritura, que introduce los datos en la tubería, y un extremo de lectura, que los extrae.

Para conectar la salida estándar de un proceso con la entrada estándar de otro, es necesario primero crear una tubería que los enlace. Posteriormente, se redirecciona la salida estándar del primer proceso al extremo de escritura de la tubería, y la entrada estándar del segundo proceso al extremo de lectura de la misma.

Redirección de Entrada/Salida en la Shell

Cuando se ejecuta un programa desde la línea de comandos de la Shell, esta tiene inicialmente asociados tres descriptores de ficheros que están conectados a la terminal de trabajo:

  • El descriptor de fichero 0 (stdin) se corresponde con la entrada estándar: el teclado, el cual está abierto para la lectura.
  • El descriptor de fichero 1 (stdout) se corresponde con la salida estándar: la pantalla, abierto para escritura.
  • El descriptor de fichero 2 (stderr) se corresponde con la salida de errores: la salida por pantalla, abierto para escritura.

La Shell permite redireccionar estos descriptores mediante los siguientes símbolos: <, >, >> y 2>.

Normalmente, un comando o fichero ejecutable muestra el resultado de su ejecución por la salida estándar. Por ejemplo, el comando ls muestra por pantalla el contenido del directorio actual.

Redirección de Salida Estándar (stdout)

Comenzaremos con la redirección de la salida estándar (stdout), que es el método por el cual un programa transmite información al usuario.

El símbolo > redirecciona el resultado de una instrucción a un fichero. (Ejemplo: cat España > pais).

Redirección de Entrada Estándar (stdin)

También es posible redireccionar la entrada estándar (stdin) utilizando el carácter <. Este mecanismo permite al usuario proporcionar información a los programas para que la procesen. (Ejemplo: wc < fich).

Optimización de E/S y Gestión de Memoria

Acceso Directo a Memoria (DMA)

El propio controlador del dispositivo incorpora un componente llamado DMA (Direct Memory Access), que se encarga de transferir datos desde y hacia la memoria sin intervención directa de la CPU.

La CPU interviene únicamente al principio y al final de la operación (al inicio para la petición de lectura/escritura y al final para confirmar su finalización). No se trata de un paralelismo completo, ya que la CPU y el controlador compiten por el uso del bus del sistema cuando necesitan transferir datos. El DMA suele aprovechar los intervalos del ciclo de reloj de la CPU en los que esta no está activa.

Uso de Búferes

Un búfer es un espacio de almacenamiento temporal donde los datos permanecen hasta que son utilizados. Su uso se justifica por la diferencia de velocidades entre los dispositivos y la CPU, permitiendo que un dispositivo coloque datos para que otro los lea posteriormente. Además, acelera las transferencias de datos en las operaciones de E/S.

Los búferes se pueden implementar en distintos niveles:

  • En el espacio de usuario.
  • En el espacio del núcleo.
  • En el propio manejador (driver).
  • En el controlador por hardware.

Entradas relacionadas: