Resumen
- Una conexión de Click declara un camino posible para entregar paquetes; no es una traza y no identifica por sí sola al extremo que inicia la transferencia.
- En push, el origen activa el trabajo hacia delante. En pull, el destino solicita hacia atrás y el paquete devuelto sigue avanzando. La
Queueexplícita une esas dos cadencias. - El grafo ofrece una superficie común legible, mientras que puertos, inicialización, ocupación, elecciones del scheduler y recibos del dispositivo conservan su evidencia independiente.
La pregunta que la flecha no contestaba
La arquitectura de Click reemplaza una gran ruta monolítica por elementos pequeños. Leer una interfaz, comprobar la cabecera, consultar una tabla, clasificar, contar, encolar y transmitir pueden ser módulos distintos. El usuario los conecta en un grafo dirigido.
El artículo de ACM Transactions on Computer Systems, firmado por Eddie Kohler, Robert Morris, Benjie Chen, John Jannotti y M. Frans Kaashoek, define las aristas como posibles caminos de entrega. Esa formulación impide leer el esquema como una película de lo ocurrido. También deja abierta una cuestión más sutil: el paquete puede viajar hacia B aunque la petición que lo pone en movimiento haya comenzado en B.
Click responde mediante los tipos de puerto. La dirección geométrica conserva el movimiento del dato. Push o pull determina el dueño del primer acto. Cuando un informe fusiona ambas cosas, termina atribuyendo una pausa, una elección o una pérdida al módulo equivocado.
Cuando la llegada gobierna
Una tarjeta recibe un paquete sin que el resto del grafo lo haya pedido. El elemento de entrada inicia entonces push y llama al siguiente módulo. El control acompaña al paquete. Cada elemento puede procesarlo y transferirlo de nuevo hasta que una cola lo guarde, un consumidor lo use o alguna regla lo descarte.
El origen decide cuándo empieza esa entrega, pero no manda sobre todos los resultados posteriores. Un clasificador puede desviar el paquete; una validación puede rechazarlo; una cola limitada puede no admitirlo. El contador de recepción no demuestra que la interfaz de salida lo transmitió.
La cadena probatoria debe conservar el evento de entrada, la identidad de la configuración, la rama elegida y el resultado de las fronteras relevantes. Correlacionar cifras agregadas después no puede recuperar una identidad que el sistema nunca guardó.
Cuando la capacidad gobierna
En la salida ocurre lo contrario. El hardware solicita trabajo cuando está preparado para enviar. El elemento de destino inicia pull, y la llamada avanza contra la dirección del paquete hasta encontrar un elemento capaz de devolver uno o indicar que no hay ninguno.
La tesis de Kohler dibuja esta secuencia con una frase que cambia la lectura del grafo: el control va hacia delante durante push y hacia atrás durante pull, mientras el paquete siempre avanza. Una sola flecha puede albergar dos cronologías de control.
Así se puede componer un scheduler. Varias entradas pull alimentan una salida pull. Ante la petición del destino, el scheduler selecciona una entrada y pregunta. Su posición identifica dónde vive la elección. No demuestra qué entrada ganó en un instante, qué política estaba activa ni si otra cola llevaba demasiado tiempo esperando.
La Queue guarda la diferencia
El ejemplo básico coloca Queue entre una región push y otra pull. Los paquetes de recepción entran empujados y quedan en orden FIFO. Cuando el transmisor está listo, tira de la salida y recibe el primero disponible.
La cola no es una decoración del diagrama. Declara que la producción y el consumo tienen relojes distintos, y que un componente concreto asume el intervalo. Capacidad, longitud y pérdidas dejan de esconderse en el interior de una función enorme.
Pero una aceptación en memoria no equivale a persistencia tras una caída. Tampoco prueba que el scheduler escogerá esa cola, que el hardware emitirá el paquete o que el receptor lo validará. Del mismo modo, un dequeue solo certifica que salió de esa estructura. Cada salto posterior necesita su propio recibo.
FIFO tampoco garantiza justicia del conjunto. Puede haber colas múltiples, pérdidas anteriores, notificaciones, lotes y prioridades. Lo explícito permite preguntar con precisión; no autoriza una respuesta global automática.
Rechazar una promesa incoherente
En ejecución, un puerto es push, pull o agnóstico. Push se conecta con push; pull con pull. Un emparejamiento directo push–pull es ilegal. El puerto agnóstico adopta el comportamiento compatible con su vecino.
La regla es pequeña y verificable. Los autores de elementos no necesitan someter cada composición a un árbitro permanente, pero sí compartir el significado de la llamada. Si un extremo promete entregar sin solicitud y el otro solo sabe solicitar, la inicialización puede declarar inválida la conexión.
Eso no convierte el archivo de texto en realidad operativa. La descripción de SMP Click explica una secuencia: analizar el fichero, crear el router, intentar inicializarlo y, únicamente si funciona, instalarlo e iniciar el tráfico. El commit, el diagrama y el parseo son recibos anteriores al datapath activo.
El optimizador cambia la forma de la prueba
Los componentes finos mejoran la composición pero añaden cruces. Kohler, Morris y Chen aplicaron técnicas de compilador a configuraciones completas. Las herramientas de Click también especializan clasificadores, eliminan código muerto, reducen llamadas virtuales, verifican alineación y combinan definiciones.
Después de transformar, una arista lógica no tiene por qué corresponder a una llamada virtual concreta. Para investigar hacen falta el grafo escrito, cada transformación, la salida generada, el build y la instancia instalada. El primero explica las responsabilidades; los demás prueban qué adoptó la máquina.
Perder esa genealogía produce dos ficciones. Una toma el esquema original como traza literal. La otra presenta el binario optimizado como una caja sin relación con el contrato legible. La primacía del código en funcionamiento no elimina la especificación: exige demostrar el puente entre ambas.
Una obra con más de un extremo
El perfil oficial de Harvard incluye Click entre los proyectos de Kohler. Su nombre encabeza el artículo de revista y la tesis profundiza en la arquitectura. La lista de autores evita, sin embargo, el relato del inventor solitario: Morris, Chen, Jannotti y Kaashoek comparten el trabajo central; Massimiliano Poletto aparece en el informe sobre el lenguaje; el repositorio conserva muchas contribuciones posteriores.
La atribución precisa coincide con la tesis técnica. Un sistema compuesto no se entiende borrando sus fronteras. El aporte de Kohler se aprecia mejor en la claridad con que Click separó trayecto, iniciativa, almacenamiento, selección y ejecución.
Fuentes
- Eddie Kohler — perfil oficial de Harvard
- Publicaciones oficiales de Eddie Kohler
- The Click Modular Router — PDF de autores en TOCS
- The Click Modular Router — tesis de MIT
- Programming Language Techniques for Modular Router Configurations
- Programming Language Optimizations for Modular Router Configurations
- Flexible Control of Parallelism in a Multiprocessor PC Router
- Click for Measurement
- Repositorio oficial de Click
- Heng Lu — Running-Code Primacy
- Heng Lu — Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
Informe para miembros
Contexto ampliado del perfil
Inicia sesión con el nivel de membresía adecuado para desbloquear el informe completo y las notas de las fuentes.
Solo para Strategic Circle
Strategic Circle
Abierto a todos los lectores. Desbloquea informes de perfil después de unirte e iniciar sesión.
Únete a Strategic CircleSolo para Leadership Alliance
Leadership Alliance
Para propietarios y directivos cualificados de activos de propiedad intelectual; inicia sesión para desbloquear los informes de la alianza.
Unirse a Leadership Alliance
