Pixelaula.
Procesos e hilos · Lección 3 de 5

Procesos que conversan

Cada proceso vive en su propia memoria. Para cooperar comparten una zona o se envían mensajes. Al terminar sabrás conectarlos con pipes.

⏱ 25–35 min▶ Video de 90 s🧪 Laboratorio con 4 misiones
00 · En 90 segundos

Primero, la idea completa

Mira el video entero o salta a la parte que quieras repasar. Después, cada idea tiene su propia escena para tocarla.

    01 · Cooperar

    Los procesos no se ven entre sí

    Por diseño, cada proceso tiene su propia memoria y ninguno puede leer la de otro. Eso los protege, pero a veces necesitan cooperar: un proceso descarga datos y otro los procesa; un comando filtra lo que otro produce. Para eso existe la comunicación entre procesos (IPC), con dos modelos fundamentales:

    • Memoria compartida: los procesos acuerdan una región de memoria que ambos pueden leer y escribir.
    • Paso de mensajes: los procesos se envían mensajes a través del sistema operativo.
    02 · Memoria compartida

    Productor y consumidor

    En la memoria compartida, los procesos levantan la restricción normal y comparten una zona, que suele crear uno de ellos. El sistema operativo no la controla: los procesos son responsables de no pisarse.

    El caso típico es el productor-consumidor: uno produce información y otro la consume. Se resuelve con un búfer circular en la memoria compartida: el productor escribe en la posición in y avanza; el consumidor lee de out y avanza. Si el búfer está lleno, el productor espera; si está vacío, el consumidor espera.

    Escena 1

    Un búfer circular de 6 casillas en memoria compartida. Produce y consume a tu ritmo.

    03 · Paso de mensajes

    send() y receive()

    El paso de mensajes no necesita memoria compartida, por eso sirve incluso entre computadoras distintas. Se basa en dos operaciones, send(mensaje) y receive(mensaje), sobre un enlace de comunicación. Hay tres decisiones de diseño:

    • Directa o indirecta. En la directa, cada proceso nombra al otro. En la indirecta, los mensajes van a un buzón (o puerto) al que los procesos se suscriben; el buzón puede ser del proceso o del sistema operativo.
    • Sincronización. Un send bloqueante espera a que el mensaje se reciba; uno no bloqueante lo envía y sigue. Un receive bloqueante espera hasta que llegue un mensaje; uno no bloqueante devuelve un mensaje o nada.
    • Capacidad del búfer. Cero: el emisor espera hasta que el receptor tome el mensaje (una cita). Acotada: caben n mensajes; con el búfer lleno, el emisor espera. Ilimitada: el emisor nunca espera.
    Escena 2

    Un productor rápido y un consumidor lento intercambian 6 mensajes. Elige la capacidad del búfer y mira quién espera a quién.

    04 · Pipes

    Tuberías, con y sin nombre

    Los pipes fueron de los primeros mecanismos de IPC en Unix, y siguen en todas partes.

    • Pipes ordinarios: comunican en un solo sentido (para ir y volver hacen falta dos). Requieren una relación padre-hijo, así que solo funcionan dentro de una misma computadora. En la terminal se crean con |: en ls | grep txt, la salida de uno es la entrada del otro.
    • Pipes con nombre (FIFO): permiten comunicación bidireccional, no exigen parentesco, pueden usarlos muchos procesos y siguen existiendo cuando los procesos terminan, porque aparecen como un archivo. Se crean con mkfifo.
    05 · Predice

    Antes de leer la respuesta

    Truco para tu laboratorio
    Cambia la capacidad del pipe con el botón de arriba antes de lanzar los procesos: cada pipe se crea con la capacidad que esté elegida en ese momento.
    Laboratorio

    Tu turno: pipes y búferes

    La terminal ahora permite conectar procesos. productor | consumidor los une con un pipe; mkfifo nombre crea un pipe con nombre que pueden usar ./escritor nombre y ./oyente nombre, sin ser parientes. Arriba ves el búfer de cada pipe.

    Repaso

    Comprueba lo que entendiste

    Cada respuesta incorrecta explica por qué parece correcta y en qué falla.