Altifigence Academy

17 / 24 · Konsep

FIFO kosong, penuh, dan transfer serentak

Pisahkan okupansi dari penunjuk dan tentukan perilaku push/pop pada batas.

Antrean mempertahankan urutan penerimaan

FIFO mengirim item yang diterima paling awal terlebih dahulu. Penunjuk bacanya menunjukkan entri tertua dan penunjuk tulisnya menunjukkan lokasi penyimpanan berikutnya. Kesamaan penunjuk saja tidak dapat membedakan kosong dari penuh, sehingga desain ini menyimpan penghitung okupansi. Untuk kedalaman empat, penunjuk membutuhkan dua bit, tetapi count membutuhkan tiga bit untuk mewakili nol hingga empat. Simpan tag bersama data.

FIFO berregister kita tidak langsung melewatkan masukan saat antrean kosong. Output-valid adalah count>0 dan pop adalah output-valid AND output-ready. Input-ready adalah count<depth OR pop, sehingga penggantian dimungkinkan ketika antrean penuh sekaligus mengirim item terdepannya. Push adalah input-valid AND input-ready. Count berikutnya adalah count+push-pop. Dua penugasan terpisah yang menaikkan dan menurunkan count dapat salah menangani transfer serentak; gunakan satu pembaruan gabungan atau kasus eksplisit.

count lamaKondisipushpopcount baru
0Ada masukan dan penerima siap101
1Ada masukan dan penerima siap111
4Ada masukan dan penerima tertunda004
4Ada masukan dan penerima siap114

Antrean kosong tidak dapat melakukan pop hanya karena penerima siap. Masukan barunya pertama kali ditransfer pada tepi berikutnya. Antrean penuh [A,B,C,D] yang sekaligus mengirim A dan menerima E menjadi [B,C,D,E], tetap penuh. Verifikasi perilaku memori yang mendasarinya saat membaca dan menulis posisi fisik yang sama.

Amati okupansi, penambahan, dan pengambilan antrean

FIFO empat slot. Awalnya kosong; pointer baca dan tulis bernilai 0. Terima pop ketika tidak kosong. Terima push jika ada ruang atau pop diterima pada tepi yang sama.

Kedalaman berpangkat dua berputar secara alami dalam bit penunjuk. Kedalaman tiga memerlukan transisi eksplisit dari posisi dua ke nol. Uji perputaran, pengambilan item terakhir, dan penggantian saat penuh secara terpisah.

Antrean kosong berkedalaman empat hanya menampung empat item selama penundaan penerima lima siklus. Masukan kelima harus menunggu. Sumber yang tidak dapat ditunda membutuhkan kapasitas lebih besar atau kebijakan kehilangan yang ditetapkan. Tidak ada FIFO berhingga yang memperbaiki konsumsi yang selalu lebih lambat. Periksa 0≤count≤depth, accepted-delivered=count, dan urutan tag; jumlah saja tidak mengungkap perubahan urutan.

Coba sendiri

Untuk kedalaman dua dan antrean [tag3,tag4], masukan tag5 ditawarkan dengan out-ready=1. Cari push, pop, count berikutnya, dan antrean berikutnya. Apakah tag5 langsung di-pop jika antrean kosong?

Baca penjelasan

Pop=1 membuat input-ready tinggi meskipun okupansi penuh, sehingga push=1. Count berikutnya tetap dua dan antreannya [tag4,tag5]. Antrean kosong memiliki out-valid=0, sehingga tag5 disimpan dan tidak dapat di-pop hingga tepi berikutnya.

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