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.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
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.
| Evento | accepted | delivered | canceled | outstanding |
|---|---|---|---|---|
| Aceptar A,B,C | 3 | 0 | 0 | 3 |
| Entregar A | 3 | 1 | 0 | 2 |
| Cancelar B,C por vaciado | 3 | 1 | 2 | 0 |
| Aceptar D | 4 | 1 | 2 | 1 |
| Entregar D | 4 | 2 | 2 | 0 |
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.