Altifigence Academy

19 / 24 · Concepto

Mantén la contabilidad de transacciones durante el vaciado y el reinicio

Separa la cancelación de la entrega y alinea el estado de validez con las colas esperadas.

La cancelación es un evento de diseño explícito

El reinicio devuelve el control a un estado conocido; el vaciado cancela trabajo pendiente especificado. Borrar solo los datos es insuficiente. Si valid permanece a nivel alto, cero puede convertirse en una transacción falsa. Los bits antiguos con valid a cero son inofensivos. Borra el estado de pertenencia adecuado: full en un búfer de una posición, count y punteros en una FIFO, o el estado FSM y la validez del resultado.

Nuestro contrato síncrono de un único reloj excluye la aceptación y la entrega en un flanco de reinicio en ambos extremos y cancela todo el trabajo pendiente allí. Reiniciar solo un extremo mientras el otro cuenta valid antiguo como entrega incumple ese acuerdo. Documenta el alcance del reinicio y la política de disponibilidad. Las entradas nuevas tras el reinicio pertenecen a un nuevo intervalo de transacciones.

Eventoaccepteddeliveredcanceledoutstanding
Aceptar A,B,C3003
Entregar A3102
Cancelar B,C por vaciado3120
Aceptar D4121
Entregar D4220

Con cancelación, usa accepted-delivered-canceled=outstanding. Cancela cada transacción no entregada exactamente una vez. La cola de referencia también debe retirar el trabajo cancelado y comprobar que no entra ningún resultado antiguo en el nuevo intervalo.

Una solicitud de memoria externa puede sobrevivir a un vaciado interno. Distingue las respuestas tardías mediante un identificador de generación o espera a que terminen las solicitudes antiguas antes de reiniciar. Reutilizar demasiado pronto un campo pequeño de generación puede confundir una respuesta antigua con una actual. Nuestro proyecto final no tiene respuestas externas retardadas y solo cancela búferes internos.

Un vaciado selectivo puede conservar trabajo anterior a una bifurcación y retirar las operaciones más recientes del camino equivocado. Eso requiere reglas definidas de orden y confirmación. El trabajo no válido no debe actualizar el almacenamiento ni participar en el reenvío. Prueba el reinicio con el sistema vacío, detenido, lleno y durante posibles transferencias simultáneas. El reinicio inicial por sí solo no ejercita la cancelación del trabajo pendiente.

Inténtalo tú

Acepta cinco, entrega dos y después cancela los tres restantes por vaciado. A continuación, acepta dos y entrega uno. Calcula los acumulados accepted, delivered, canceled y outstanding.

Leer la explicación

Accepted=7, delivered=3, canceled=3, outstanding=1. La contabilidad es 7-3-3=1. Los elementos cancelados no son entregas correctas.

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.