Cache
ক্যাশ
CPU-র কাছে বসানো একটা ছোট, দ্রুত SRAM array যেটা main memory-র একটা অংশের কপি ধরে রাখে — locality of reference exploit করে গড় access time কমায়।
কোনো নতুন প্রযুক্তি না — একই [[sram]] cell, শুধু ছোট আকারে CPU-র কাছাকাছি বসানো। “ক্যাশিং” নিজেই কোনো বিশেষ hardware trick না, বরং একটা প্যাটার্ন — বড়-ধীর storage-এর সামনে ছোট-দ্রুত storage বসিয়ে সাম্প্রতিক/ঘনঘন-ব্যবহৃত subset রাখা।
কেন কাজ করে: [[locality-of-reference]]। যদি access সত্যিই random হতো, cache কোনো সুবিধা দিত না — প্রতিটা access-ই miss হতো।
Address কীভাবে map হয়: tag + index + offset বিভাজন। Direct-mapped
(index সরাসরি এক line নির্ধারণ করে, সস্তা কিন্তু conflict-prone),
fully-associative (যেকোনো line, কিন্তু সব line সমান্তরাল তুলনা করতে হয় —
N line-এ N-টা comparator), set-associative (N-way — মাঝামাঝি,
বাস্তবে সবচেয়ে বেশি ব্যবহৃত)। Direct-mapped আসলে 1-way, fully-associative
আসলে N-way যেখানে N = মোট line সংখ্যা — তিনটা একই spectrum-এর বিন্দু।
32-বিট address, 4KB cache, 64B line (direct-mapped):
tag(20) | index(6) | offset(6) → 20+6+6 = 32 ✓
দুইটা নীতিগত সিদ্ধান্ত যা cache-এর behavior ঠিক করে: set পূর্ণ হলে কে বিদায় হবে (replacement policy — LRU, FIFO, random), আর write কখন memory-তে পৌঁছাবে (write-through বনাম write-back)।
Performance-এর সংক্ষিপ্তসার এক সূত্রে: AMAT = hit_time + miss_rate × miss_penalty — miss penalty বিশাল বলে (L1 ~4 cycle বনাম DRAM
~200 cycle) miss rate-এর সামান্য পরিবর্তনও গড় গতিতে বড় প্রভাব ফেলে।