Write-allocate (jise fetch-on-write bhi kehte hain) ek cache policy hai jo kehti hai: write miss hone par, block ko memory se cache mein laao, PHIR write karo.
Kyunki caches block granularity par operate karte hain, individual bytes par nahi. Cache line ka size typically 64 bytes hota hai. Agar tum sirf 1 byte likh rahe ho, tab bhi cache ko poora block chahiye taaki coherence maintain ho sake aur neighboring addresses ke future reads support ho sakein.
No-allocate (jise write-around ya write-no-allocate bhi kehte hain) ek cache policy hai jo kehti hai: write miss hone par, block ko cache mein laaye bina seedha memory ke next level par likho.
Written data cache ke "around" (usse bachte hue) chala jaata hai.
Socho kya hoga agar write-back + no-allocate use karein:
Address A par write miss hoti hai
No-allocate policy: A ko cache mein mat laao
Write-back policy: Dirty line evict hone par hi memory mein likho
Problem: A par jo write hai usse kaise handle karein? Hum ise cache mein store nahi kar sakte (no-allocate), aur hum ise defer nahi kar sakte (write-back matlab baad mein likhna). Hum majboor ho jaate hain ki seedha memory mein likhein, jo actually write-through behavior hai!
Isliye, write-back consistent rehne ke liye write-allocate zaroori hai.
Streaming Stores: ISA instructions jo no-allocate behavior force karte hain
Cache Pollution: Problem jisme no-allocate help karta hai
Write Combining Buffers: Optimization jo memory access se pehle writes batch karta hai
Dirty Bit: Tracking mechanism jo write-back + write-allocate ke liye zaroori hai
#flashcards/hardware
Write-allocate policy mein write miss par kya hota hai?
Memory se poora block cache mein fetch karo, phir cached block mein write perform karo. Line ko valid mark karo (aur write-back hai to dirty bhi).
No-allocate policy mein write miss par kya hota hai?
Data seedha memory ke next level par likho, bina cache line allocate kiye ya block fetch kiye.
Write-back ko write-allocate kyun chahiye?
Write-back writes ko eviction tak defer karta hai, jiske liye data cache mein hona zaroori hai. Agar write miss par allocate nahi karte, to write defer karne ki jagah nahi hoti, aur immediate memory write karna padta hai (jo write-back se contradict karta hai).
Write-through caches ke liye standard pairing kya hai?
Write-through KISI BHI ke saath pair ho sakti hai — write-allocate ya no-allocate — writes ki expected temporal locality ke hisaab se.
No-allocate kab write-allocate se better hai?
Jab writes ki temporal locality kam ho (streaming writes, one-time initialization, I/O operations). Cache pollution aur fetch bandwidth waste se bachata hai.
Write miss par write-allocate ka main disadvantage kya hai?
Likhne se pehle block fetch karne ke karan zyada latency, aur badhta hua memory read traffic.
Write policies ke context mein cache pollution kya hai?
Jab write-allocate aise blocks cache mein laata hai jo reuse nahi honge, potentially useful data evict ho jaata hai aur cache space waste hota hai.
Non-temporal store instruction kya hota hai?
Ek ISA instruction (jaise x86 ka movnti) jo no-allocate behavior ke saath memory mein likhta hai, pollution se bachne ke liye cache bypass karta hai.
Write-allocate single-byte write ke liye bhi poora block kyun fetch karta hai?
Caches block granularity par operate karte hain. Block ke baaki bytes baad mein access ho sakte hain, isliye cache ko coherence maintain karne aur spatial locality support karne ke liye poora block chahiye.
Write-allocate mein fetch skip karne wala optimization kya hai, aur ise kisse confuse nahi karna chahiye?
Full-line-write optimization (write-validate): agar ek write poori cache line cover kare, to fetch skip karo aur seedha poori cache line overwrite karo. Ise write-combining se confuse mat karo, jo adjacent writes ko memory ko issue karne se pehle bursts mein merge karta hai — yeh ek write-buffering technique hai, fill policy nahi.