Cache

**Cache** dalam sains komputer, adalah pengumpulan salinan data kepada nilai asal yang disimpan di tempat lain atau dikira terdahulu. Apabila data tersimpan di cache, ia boleh digunakan di masa hadapan dengan menggunakan salinan cache dan bukannya dengan menggunakan atau mengira semula data asal, dengan itu mengurangkan masa capaian. Ini membantu mempercepatkan pengiraan.

Cache terbukti amat berkesan dalam kebanyakan pengiraan komputer, kerana pola capaian dalam komputer biasa biasanya mempunyai rujukan tempatan (*locality of reference*). Terdapat beberapa jenis tempatan, tetapi kita mungkin maksudkan bahawa data yang sama digunakan beberapa kali, dengan capaian yang singkat, atau data yang berhampiran dicapai dalam masa yang pendek.

## Operasi

Cache adalah himpunan kemasukan. Setiap kemasukan mempunyai datum, iaitu salinan kepada datum dalam storan sokongan lain. Setiap kemasukan turut mempunyai tag, yang menyatakan identiti datum dalam storan penyokong yang mana adalah salinan kemasukan.

Apabila pelanggan cache (CPU, pelayar web, sistem operasi) ingin mencapai datum yang dianggap terdapat dalam storan sokongan, ia memeriksa cache dahulu. Jika kemasukan dijumpai dengan tag yang padan dengan datum yang diperlukan, datum dalam kemasukan itu digunakan. Situasi ini dikenali sebagai jumpaan cache **cache hit**. Jadi sebagai contoh, perisian pelayar web mungkin memeriksa cache tempatannya di cakera untuk melihat sama ada ia mempunyai salinan tempatan laman web pada URL tertentu. Dalam contoh ini, URL adalah tag, dan kandungan laman web adalah datum tersebut.

Situasi lain, apabila cache diperiksa dan tidak mengandungi datum yang diperlukan, ia dikenali sebagai **cache miss**. Datum diambil dari storan sokongan semasa pengendalian tidak tepat *cache miss* biasanya diletak ke dalam cache, sedia untuk capaian berikutnya. Sekiranya cache mempunyai simpanan terhad, ia mungkin perlu menyingkir kemasukan lain bagi memberi ruang. Sains Heuristic digunakan bagi menentukan kemasukan mana perlu disingkir yang dikenali sebagai **polisi gantian**. Satu polisi gantian, LRU, menggantikan kemasukan yang paling kurang digunakan.

Apabila datum ditulis kepada cache, ia mesti pada suatu masa perlu juga disalin kepada storan simpanan. Tempoh penyalinan ini dikawal oleh apa yang dikenali sebagai **polisi menulis**. Dalam cache **sentiasa-tulis** - (*write-through*), setiap penulisan pada cache menyebabkan penulisan pada storan simpanan juga. Pilihan lain, dalam penulisan cache **kembali-tulis** - (*write-back*) tidak disalin serta merta pada ingatan. Sabaliknya, cache menjejak lokasi di mana telah ditulis semula (lokasi ini ditanda **kotor**). Data pada lokasi ini ditulis semula pada ingatan utama apabila data disingkir dari cache. Dengan itu, miss dalam cache tulis semula seringkali memerlukan dua capaian ingatan untuk diservis.

Penulisan-semula data boleh dimulakan oleh polisi lain juga. Pelanggan mungkin membuat banyak perubahan kepada datum di cache, dan memberitahu cache dengan jelas untuk kembali-tulis datum.

Data dalam ingatan utama yang di cache mungkin ditukar oleh entiti lain, dalam kes ini salinan cache menjadi lapuk atau usang. Pilihan lain, apabila pelanggan mengemaskini data di cache, salinan data dalam cache lain menjadi lapuk. Protokol komunikasi antara pengurus cache yang mengekalkan data konsistent dikenali sebagai protokol koherensi cache-(*cache coherency*)

## Aplikasi

### Cache CPU

Ingatan kecil pada atau dekat cip CPU boleh dipercepatkan berbanding ingatan utama yang lebih besar. Kebanyakan CPU semenjak 1980an menggunakan satu atau lebih cache, dan CPU kegunaan umum moden di dalam komputer peribadi mungkin mempunyai sebanyak setengah dozen, setiap satu khusus untuk bahagian masalah berlainan bagi melaksanakan perisian.

### Cache cakera

Cakera keras secara sejarahnya seringkali disekalikan dengan komputer benam untuk protokol kawalan dan antaramuka. Semenjak lewat 1980an, hampir setiap cakera dijual mempunyai komputer benam dan sama ada antaramuka ATA - (*Advanced Technology Attachment*), SCSI, atau FC - (*Fibre Channel*). Komputer benam biasanya mempunyai ingatan kecil yang digunakan bagi menyimpan bit yang datang dan pergi dari piring cakera (*disk platter*).

Cache cakera (*disk buffer*) berbeza secara fizikal dan digunakan dengan cara berlainan dari *cache muka* yang biasa digunakan oleh sistem operasi dalam ingatan utama komputer. Cache cakera dikawal oleh komputer benam pemancu cakera, dan cache muka dikawal oleh komputer di mana cakera itu diletakkan. Cache cakera biasanya agak kecil, 2 hingga 8 MB, dan cache muka biasanya kesemua ingatan fizikal yang tidak digunakan, yang mana dalam komputer 2005 antara 20 dan 2000 MB. Sementara data dalam cache muka diguna semula beberapa kali, data dalam cache cakera biasanya tidak dibunakan semula. Dari segi ini, frasa cache cakera dan cache cache adalah tidak tepat (*misnomers*), dan ingatan komputer dalam lebih tepat dipanggil cache cakera.

Cache cakera mempunyai pelbagai kegunaan:

* Baca depan / baca belakang (*readahead / readbehind*): Bila membaca daripada cakera, lengan cakera akan menggerakkan kepala baca/tulis (*read/write head*) ke laluan yang dikehendaki, dan mula mengambil bit-bit berkaitan. Biasanya, sektor pertama yang dibaca bukan merupakan yang dikehendaki, tetapi sektor sebelumnya. Komputer benam cakera selalunya turut mengambil sektor-sektor ini (sebelum dan selepas) kalau-kalau ia akan diminta oleh sistem pengendalian (O/S) nanti.

* Penyelarasan kelajuan (*speed matching*): Kelajuan antara muka I/O selalunya tidak dapat membandingi kelajuan bit-bit dipindahkan dari/ke piring cakera. Jadi cache cakera digunakan supaya kedua-dua antara muka I/O dan kepada baca/tulis cakera dapat berfungsi pada kelajuan maksimum.

* Pemecutan penulisan (*write acceleration*): Komputer benam cakera mungkin memberi isyarat kepada komputer utama bahawa penulisan cakera telah siap selepas menerimanya, walaupun data tersebut sebenarnya belum ditulis. Isyarat ini membolehkan komputer utama meneruskan kerjanya. Namun perkara ini agak bahaya kerana jika komputer kehilangan kuasa sebelum data ditulis kekal dalam cakera, data tersebut akan hilang dari cache cakera, dan akan terdapat kesilapan dalam sistem fail. Pemecutan penulisan adalah satu aspek kontroversi, jadi ia biasanya boleh dimatikan oleh pengguna. Untuk sesetengah cakera, masa bahaya ini boleh menjadi panjang jika terdapat banyak permintaan (*request*) baru. Jadi, aspek ini amat jarang digunakan dalam pelayan pangkalan data (*database server*) atau mesin lain yang mementingkan integriti dan ketepatan data.

* Perbarisan arahan (*command queueing*): Cakera SATA terbaru dan kebanyakan cakera SCSI boleh menerima pelbagai arahan semasa menjalankan sesuatu arahan. Arahan-arahan ini disimpan oleh komputer benam cakera sehinggalah ia dijalankan. Sekiranya arahan bacaan diterima untuk destinasi yang akan ditulis, maka data yang belum ditulis (sedang beratur) itu akan dikembalikan. Apa yang membezakan aspek ini dengan pemecutan penulisan ialah sistem pengendalian komputer utama diberitahu bial sebenarnya sesuatu data itu ditulis ke cakera (media magnet). Jadi O/S boleh menyusun kembali jadual penulisan supaya sistem fail adalah konsisten.

### Cache lain
Cache CPU biasanya dikendalikan sepenuhnya oleh perkakasan. Cache lain pula dikendalikan oleh pelbagai perisian. Cache ingatan utama selalunya dikendalikan oleh kernel atau sistem fail OS. Cache BIND (DNS) pula menyimpan pemetaan nama domain kepada alamat IP.

Operasi sentiasa-tulis (*write-through*) adalah biasa di dalam keadaan rangkaian kurang stabil (seperti LAN ethernet), disebabkan oleh kerumitan protokol koherensi (*coherency protocol*) yang diperlukan untuk berbilang cache kembali-tulis (*write-back*) apabila sistem komunikasi tidak boleh diharapkan. Sebagai contoh, cache laman web dan cache sistem fail rangkaian sebelah-pelanggan biasanya cuma boleh dibaca (*read-only*) atau sentiasa-tulis supaya protokol rangkaian mudah dan boleh dipercayai.

Cache laman web yang baru dilayari ada disimpan dalam pelayar web anda. Sesetengah pelayar telah diset untuk menggunakan cache proksi luar, satu program pelayan yang harus dilalui semua permintaan web supaya ia boleh menyimpan laman yang selalu dikunjungi pengguna di sesuatu organisasi. Kebanyakan pembekal khidmat Internet (ISP) turut menggunakan cache proksi untuk menjimatkan lebar jalur.

Enjin gelintar Google menyimpan satu salinan setiap laman yang dilihatnya di web. Salinan cache ini digunakan oleh perisian mengindeks Google, dan juga diberikan kepada pengguna, kalau-kalau laman asal tidak dapat diperolehi. Jika anda menekan pautan "Disimpan sementara" pada keputusan carian, anda dapat melihat laman tersebut seperti yang dilihat oleh Google pada masa ia mengindeksnya.

Ccache merupakan satu program yang menyimpan salinan hasil (*output*) sesuatu penyusunan atau kiraan, untuk mempercepatkan lagi penyusunan kali kedua.

## Lihat juga
* Algoritma cache
* Cache CPU
* Cache web

## Pautan [[luar]]
* Rekaan Cache pada Sistem Komputer
* "An Asynchronous Avoidance-Based Cache Consistency Algorithm for Client Caching DBMSs" oleh M. Tamer Özsu, Kaladhar Voruganti, Ronald C. Unrau
* "A Unified Algorithm for Cache Replacement and Consistency in Web Proxy Servers" oleh Junho Shim, Peter Scheuermann, Radek Vingralek