Buffer Cache — storage blocklari yoki I/O bufferlarini memoryda saqlab, block qurilmaga takroriy murojaatni kamaytiradigan cache tushunchasi. Zamonaviy ayrim kernelda u page cache bilan birlashtirilgan.
Tarixiy ajratish
Tarixiy Unix dizaynida buffer cache block-device bufferlarini, page cache esa file sahifalarini saqlagan. Ikki cache ayni ma’lumot nusxasini tutib coherency va xotira sarfi muammosini yaratgan.
Buffer tuzilishi
Buffer descriptor device, block number, state, lock va data page’ga reference saqlaydi. Filesystem metadata yoki raw block I/O uchun buffer abstraction hali qo‘llanishi mumkin.
Write siyosati
Read-ahead, delayed write va buffer merging device I/Oni kamaytiradi. Write ordering journal va filesystem consistencyga bog‘liq; cache acknowledgement durability emas.
Block va page
Block hajmi page hajmidan kichik yoki katta bo‘lishi mumkin. Bir page ichidagi bir nechta buffer state’i alohida yuritiladi. Error faqat tegishli blockni invalid qilishi mumkin.
Atama ko‘lami
“Buffer cache” atamasi database yoki application buffer pooliga ham ishlatiladi. Qaysi qatlam nazarda tutilgani aniqlanadi; OS page cache va DB buffer cache bir xil emas.
Sinov
Test block invalidation, metadata write ordering, I/O error, concurrent lookup va memory reclaimni qamraydi. Cache state device hotplugda tozalanadi.
Amaliy nazorat
Buffer Cache bilan ishlaydigan tizim block buffer, metadata state va device keyni aniq lifecycle va version bilan yuritadi. Pointer, mapping, navbat yoki exception holati boshqa qatlamga uzatilganda ownership hamda permission shartlari yo‘qolmaydi. Debug rejimda manzil, obyekt identifikatori va state transition qayd etiladi; production log ASLR, maxfiy ma’lumot va raw pointerlarni ochib yubormaydigan shaklga keltiriladi. Eskirgan handle yoki metadata reuse qilinmasligi uchun generation, build-id yoxud reference hisobidan foydalaniladi.
Muhim xavf — ikki cache coherency yoki write ordering. Bunday vaziyatda tizim taxmin bilan davom etmaydi: access fault, aniq error, konservativ fallback yoki nazoratli cleanup qo‘llanadi. Signal/fault kelgan nuqta har doim asl buzilish joyi emas; allocation, mapping va oxirgi ownership amallari trace’i tashxisga yordam beradi. Parallel accessda lock, atomic ordering va lifetime birgalikda tekshiriladi. Timeout yoki null check memory safetyning o‘rnini bosa olmaydi.
Sifat nazorati I/O error va reclaim stressi orqali bajariladi. Sinovlar normal holat bilan birga nol uzunlik, page boundary, alignment, juda katta offset, concurrent close/free, permission o‘zgarishi va platforma farqlarini qamraydi. Correctness avval etalon hamda invariant bilan tekshiriladi, keyin page fault, cache miss, contention, latency yoki xotira sarfi o‘lchanadi. Sanitizer, fault injection va malformed-input fuzzing topgan minimal holat doimiy regressiya testiga aylantiriladi.
Klassik Unix dizaynida buffer cache disk bloklarini, page cache esa fayl sahifalarini saqlagan; bir xil ma’lumot ikki joyda turishi mumkin edi. Zamonaviy yadrolar ko‘pincha unified cache modelidan foydalanadi, lekin block-device metadata va I/O requestlarni boshqaruvchi buffer tushunchalari saqlanib qoladi. Shu sabab “buffer cache hajmi” metrikasini platforma hujjatisiz page cache bilan tenglashtirish to‘g‘ri emas. Diagnostika paytida filesystem cache, qurilma write cache’i va ilovaning user-space bufferi alohida qatlam sifatida ko‘riladi. Har bir qatlamning flush buyrug‘i va durability kafolati turlicha bo‘ladi.
Bog‘liq tushunchalar
block device, page cache, buffer, writeback, filesystem metadata, cache coherency