Memori Cache

Umumnya, memori yang lebih murah bersifat lebih lambat dari pada memori yang lebih mahal, kecuali terhadap CPU yang paling lambat. Kinerja sistem akan terganggu apabila peralatan yang cepat harus menunggu sistem memori mengakses data. Peralatan tersebut bisa berupa peralatan I/O atau CPU, dan sistem memori bisa berupa memori utama atau peralatan eksternal. Karena pemakai komputer nampaknya selalu menginginkan memori yang lebih besar, maka para perancang komputer harus secara seksama mempertimbangkan keseimbangan daya jual antara biaya memori dan kinerjanya. Salah satu cara untuk mengurangi degradasi kinerja yang diakibatkan oleh memori yang larnbat adalah dengan menggabungkan memori cache ke dalam sistem. Memori cache adalah buffer kecepatan tinggi yang digunakan untuk menyimpan data yang diakses pada saat itu dan data yang berdekatan dalam memori utama. Dengan memasukkan memori cache antara peralatan cepat dan sistem memori yang lebih lambat, perancang dapat memberikan sistem memori yang cepat.

Beberapa cache bisa terlihat dalam arsitektur hardware mengaturnya dengan tanpa kontrol software. Cache yang lain, khususnya yang ada dalam sistem RISC, merupakan bagian terpadu dari arsitektur: set instruksi mencakup instruksi yang digunakan untuk tidak memberlakukan entri cache tertentu, untuk memuat dan mengeluarkan isi cache, dan untuk mencegah cache melakukan pemetaan jangkauan alamat tertentu.

Kegunaan cache terjadi karena adanya sifat program secara umum, yakni program cenderung mengakses data dan kode yang baru saja diakses atau ditempatkan di dekat lokasi memori. Kecenderungan ini disebut principle of locality of reference. Sebabnya adalah:

  • Program cenderung menjalankan instruksi secara urut dan dengan demikian instruksi tersebut mestinya berada di dekat lokasi memori.
  • Program biasanya mempunyai loop (simpul) untuk tempat menjalankan kelompok instruksi yang berdekatan secara berulang-ulang.
  • Kebanyakan compiler menyimpan array dalam blok lokasi memori yang bersebelahan, dan program seringkali mengakses elemen array secara urut. Dengan demikian, akses array cenderung terlokalisasi.
  • Compiler biasanya menempatkan item data yang tidak berhubungan di dalam segmen data. Oleh karenanya akses ke data yang tidak berhubungan ini juga cenderung terlokalisasi dalam segmen. Hal ini khususnya berlaku untuk variabel lokal dalam stack.

Setiap cache terdiri dari sejumlah cache entries (entri cache), dan setiap entri cache terdiri atas dua bagian, yakni beberapa memori cache dan address tag (tag alamat). Memori cache biasanya merupakan SRAM berkecepatan tinggi, dan data yang ia simpan mungkin merupakan kopi dari data memori utama yang terpilih pada saat itu atau mungkin data yang baru disinipun yang belum berada di dalam memori. Tag menunjukkan alamat fisik data yang ada dalam memori utama dan mungkin beberapa informasi validitas.

Cara kerja cache adalah sederhana. Kapan saja CPU mengawali akses memori, sistem penyimpanan akan mengirimkan alamat fisik ke cache. Cache membandingkan alamat fisik tersebut dengan semua tag alarnatnya untuk mengetahui apakah ia menyimpan kopi dari sebuah data. Jika operasinya adalah akses baca dan cache menyimpan data biasa maka cache akan membaca data yang diminta tersebut dari RAM kecepatan tinggi miliknya dan mengantarkan data tersebut ke CPU. Hal ini disebut cache hit, dan ia biasanya jauh lebih cepat dari pada membaca nilai yang sama secara langsung dari memori utama. Jika cache tidak menyimpan data, maka akan terjadi cache miss, dan cache akan menyampaikan alamat ke sistem memori utama untuk membaca data. Apabila data datang dari memori utama maka baik CPU mapun cache akan menerima kopinya. Cache tersebut kemudian menyimpan kopinya dengan diberi tag alamat yang tepat. SementaraCPU menjalankan instruksi atau memproses data, cache secara bersamaan membaca data tambahan dari sel memori utama yang berdekatan dan menyimpan data tersebut dengan diberi tag alamat di dalam memori berkecepatan tinggi.

Ada dua sebab mengapa cache bekerja dengan begitu baik. Pertama, karena cache beroperasi secara paralel dengan CPU, maka word tambahan yang ia muatkan setelah terjadi cache miss tidak akan mengganggu kinerja CPU. Data baru ini segera bisa digunakan oleh CPU pada kecepatan cache tersebut. Kedua, karena adanya prinsip lokalitas referensi, maka CPU kemungkinan besar akan segera meminta (request) data baru tersebut. Kecepatan cache hit untuk memori cache yang baru biasanya melarnpaui 90%.

Jika terdapat cache, maka kecepatan memori yang narnpak adalah rata-rata dari kecepatan cache dan kecepatan memori utama. Misalkan delay memori adalah 100 ns, delay cache adalah 30 ns, dan cache hit terjadi 90% dari waktu. Maka kecepatan memori utama yang nyata adalah (0,9 X 30) + (0,1 X 100) atau 0,37 ns.

Ada dua hal yang berbeda dapat terjadi selama operasi tulis. Jika lokasi yang sedang ditulis di dalam memori mempunyai tampilan dalam cache, maka cache hit akan terjadi dan cache mengupdate kopi nilainya. Cache mungkin juga menyarnpaikan data ke memori utama untuk update immediate, atau ia mungkin akan menunggu selama beberapa waktu sebelum menyarnpaikan data tersebut. Cache yang menyarnpaikan data dengan segera disebut write-throughcache; cache yang menyimpan data disebut write-back cache, dan write-back ini disebut posted write. Sebagai contoh, cache write-back mungkin menunggu sarnpai ia perlu menulis seluruh blok data sebelum mengirirnkannyake memoriutama. Dirty cell adalah sel dalam memori utama yang mempunyai tampilan updated dalam cache, namun cache-nya itu sendiri belum diupdate; mungkin ia menunggu posted write.

Jika lokasi yang ditulis dalam memori tidak mempunyai tampilan (image) dalam cache, maka cache dapat melakukan salah satu dari beberapa hal. Beberapa cache, yang disebut write-aroundcaches, hanya mengirirnkan data ke memori dan tidak melakukan apa-apa kecuali itu. Sebagai gantinya, apabila ada blok dalam cache untuk data yang tidak mempunyai dirty cell, maka cache mungkin akan menyimpan data disitu. Ia mungkin kemudian akan menyampaikan write (jika ia merupakan cache write-back) atau mengirimkan data ke memori (jika ia merupakan cache write through). Untuk cache write-back, jika lokasi untuk data berada dalam dirty blok, maka cache dapat menggunakandua strategiyang sarna, namun sekarang ia harus menulis dirty blok ke memori sebelum ia dapat menyimpan data yang baru.

Memori cache meningkatkan kinerja sistem karena kecepatannya lebih cepat dari pada memori dari memori utama, dan kegunaannya meningkat dengan rasio kecepatan CPU terhadap kecepatan memori utama. Sebagai contoh, chip CPU mikroprosesor yang beroperasi pada 25 MHz akan jauh lebih cepat dari pada DRAM yang mempunyai teknologi 1990 yang lebih murah. Bersarnaan dengan adanya permintaan memori utama yang sangat besar, memori cache memberikan rasio yang seimbang antara biaya dan kinerja, walaupun ia menggunakan SRAM berkecepatan tinggi yang mahal. Beberapa pabrik pembuat chip sekarang memproduksi unit kontrol cache yang menyeluruh pada chip tunggal, dan beberapa mikroprosesor, seperti 80486 dari Intel, menyertakan memori cache pada chip yang sama.