Altifigence Academy

19 / 24 · Konsep

Pertahankan pencatatan transaksi saat pengosongan dan reset

Pisahkan pembatalan dari pengiriman dan selaraskan status valid dengan antrean yang diharapkan.

Pembatalan merupakan peristiwa desain yang eksplisit

Reset mengembalikan kendali ke keadaan yang diketahui; pengosongan membatalkan pekerjaan tertentu yang belum selesai. Mengosongkan data saja tidak cukup. Jika valid tetap tinggi, nol dapat menjadi transaksi palsu. Bit data lama dengan valid nol tidak berbahaya. Kosongkan keadaan kepemilikan yang sesuai: full dalam penyangga satu slot, count dan penunjuk dalam FIFO, atau keadaan FSM dan valid hasil.

Kontrak sinkron satu clock kita mengecualikan penerimaan dan pengiriman pada tepi reset di kedua ujung serta membatalkan seluruh pekerjaan yang belum selesai pada tepi itu. Mereset hanya satu ujung sementara ujung lain menghitung valid lama sebagai pengiriman melanggar kesepakatan tersebut. Dokumentasikan cakupan reset dan kebijakan kesiapan. Masukan baru setelah reset termasuk interval transaksi baru.

Peristiwaaccepteddeliveredcanceledoutstanding
Terima A,B,C3003
Kirim A3102
Batalkan B,C3120
Terima D4121
Kirim D4220

Dengan pembatalan, gunakan accepted-delivered-canceled=outstanding. Batalkan setiap transaksi yang belum dikirim tepat sekali. Antrean acuan juga harus menghapus pekerjaan yang dibatalkan, sambil memeriksa bahwa tidak ada hasil usang masuk ke interval baru.

Permintaan memori eksternal dapat bertahan melewati pengosongan internal. Bedakan respons terlambat menggunakan pengenal generasi, atau tunggu permintaan lama selesai sebelum memulai kembali. Menggunakan ulang bidang generasi kecil terlalu cepat dapat membuat respons lama tertukar dengan respons saat ini. Proyek akhir kita tidak memiliki respons eksternal tertunda dan hanya membatalkan penyangga internal.

Pengosongan selektif dapat mempertahankan pekerjaan yang lebih lama daripada suatu percabangan sambil menghapus operasi lebih muda pada jalur salah. Ini memerlukan aturan urutan dan commit yang ditetapkan. Pekerjaan tidak valid tidak boleh memperbarui penyimpanan atau ikut dalam penerusan. Uji reset saat kosong, tertunda, penuh, dan selama kemungkinan transfer serentak. Reset awal saja tidak menguji pembatalan pekerjaan yang belum selesai.

Coba sendiri

Terima lima, kirim dua, lalu batalkan tiga sisanya. Berikutnya terima dua dan kirim satu. Cari jumlah kumulatif accepted, delivered, canceled, dan outstanding.

Baca penjelasan

Accepted=7, delivered=3, canceled=3, outstanding=1. Pencatatannya adalah 7-3-3=1. Item yang dibatalkan bukan pengiriman yang berhasil.

Pilihan berlaku di peramban ini. Ubah kapan saja di bagian bawah halaman.