Cache, Buffer, Spool

Cache

Cache adalah sebuah daerah memori cepat yang berisi salinan data. Akses ke sebuah salinan yang di- cache lebih efisien daripada akses ke data yang asli. Sebagai contoh, instruksi-instruksi yang baru saja menjalankan proses-proses yang disimpan dalam disk,proses tersebut di- cache ke memori fisikal, dan disalin lagi ke cache primer dan sekunder dari CPU. Perbedaan sebuah buffer dan cache adalah sebuah buffer berisi salinan informasi data yang sudah ada, sedangkan sebuah cache berisi sebuah salinan data pada ruang penyimpanan yang dapat diakses dengan cepat informasi data ada di ruang lainnya.
Caching dan buffering adalah dua fungsi yang berbeda, tetapi kadang-kadang sebuah daerah memori dapat menggunakan kedua fungsi tersebut. Sebagai contoh, untuk menghemat copy semantic dan untuk membuat penjadwalan M/K menjadi efisien, sistem operasi menggunakan memori utama untuk menyimpan data yang ada di dalam disk. Buffer-buffer ini juga digunakan sebagai sebuah cache untuk meningkatkan efisiensi M/K pada berkas yang digunakan secara bersama-sama oleh beberapa aplikasi, atau sedang ditulis atau dibaca berulang-ulang. Ketika kernel menerima permintaan sebuah berkas, pertama-tama kernel mengakses buffer cache untuk melihat apakah daerah berkas tersebut sudah tersedia dalam memori utama. Jika daerah itu ada, disk fisikal M/K dapat dihindari atau tidak dipakai. Penulisan disk juga diakumulasikan ke buffer cache dalam beberapa detik sehingga transfer data yang besar dikumpulkan untuk mengefisienkan penjadwalan penulisan. Strategi penundaan penulisan ini untuk meningkatkan efisiensi M/K akan dibahas pada bagian remote file access.

Buffer

Buffer adalah sebuah daerah memori yang menyimpan data ketika data tersebut ditransfer antara dua perangkat atau antara sebuah perangkat dan sebuah aplikasi. Buffering digunakan karena tiga alasan, antara lain:

Gambar 11.1. Ukuran Transfer Data berbagai Perangkat
Ukuran Transfer Data berbagai Perangkat

  • Untuk mengatasi perbedaan kecepataan antara produsen dan konsumen dari sebuah aliran data .  Sebagai contoh, sebuah berkas diterima melalui sebuah modem dan disimpan ke harddisk. Kita tahu bahwa modem itu ribuan kali lebih lambat daripada harddisk. Sehingga sebuah buffer dibuat pada memori utama untuk menampung jumlah byte yang diterima dari modem. Ketika semua data sudah sampai di buffer, buffer dapat ditulis ke disk dengan operasi tunggal. Karena penulisan ke disk tidak terjadi seketika dan modem masih membutuhkan ruang untuk menyimpan data tambahan yang masuk maka digunakanlah dua buffer. Setelah modem mengisi buffer pertama, penulisan ke disk dilakukan. Modem kemudian mulai mengisi buffer kedua sementara buffer pertama ditulis ke disk. Pada saat modem sudah mengisi buffer kedua, penulisan disk dari buffer pertama seharusnya sudah selesai sehingga modem dapat menggunakan kembali buffer pertama ketika buffer kedua melakukan penulisan ke disk. Metode ini disebut double buffering.
  • Untuk menyesuaikan antara perangkat-perangkat yang mempunyai perbedaan ukuran transfer data .  Perbedaan ukuran transfer data ini sangat umum terjadi pada jaringan komputer dimana buffer digunakan secara luas untuk fragmentasi dan pengaturan kembali pesan-pesan. Pada bagian pengiriman, pesan yang ukurannya besar akan dipecah-pecah menjadi paket-paket kecil (fragmentasi). Paket-paket ini dikirim melalui jaringan, di ruang penerimaan, paket-paket kecil tadi diletakkan dalam buffer untuk disatukan kembali.
  • Untuk mendukung copy semantic pada aplikasi M/K .  Sebuah contoh akan menjelaskan arti dari copy semantic. Misalkan sebuah aplikasi mempunyai buffer data yang ingin dituliskan ke disk. Aplikasi tersebut akan memanggil system call write, lalu menyediakan sebuah pointer ke buffer dan sebuah bilangan bulat (integer) yang menspesifikasikan jumlah byte yang ditulis. Setelah system call tersebut selesai, apa yang terjadi jika aplikasi mengubah isi buffer? Dengan copy semantic, versi data yang ditulis ke disk sama dengan versi data pada saat aplikasi memanggil system call write , tidak tergantung dengan perubahan apapun yang ada pada buffer. Cara sederhana sistem operasi dapat menjamin copy semantic adalah untuk system call write dengan menyalin data aplikasi ke buffer kernel sebelum mengembalikan kontrol ke aplikasi. Penulisan ke disk dilakukan dari buffer kernel sehingga perubahan yang terjadi pada buffer aplikasi tidak mempunyai efek apapun. Menyalin data antara buffer kernel dan buffer aplikasi adalah hal yang umum dalam sistem operasi, kecuali overhead yang ada pada clean semantic. Efek yang sama dapat diperoleh dengan hasil yang lebih efisien dengan penggunaan yang cermat pada pemetaan memori virtual dan perlindungan halaman copy-on-write.

Spool

Spool adalah sebuah buffer yang berisi keluaran untuk sebuah perangkat, seperti sebuah printer dimana aliran data tidak dapat mengalir bersamaan. Walaupun printer hanya dapat melayani satu pekerjaan pada satu waktu, beberapa aplikasi mungkin ingin mencetak keluaran masing-masing secara bersamaan tanpa harus tercampur. Sistem operasi menyelesaikan masalah ini dengan cara meng-intercept semua keluaran tersebut ke printer. Masing-masing keluaran aplikasi tadi di-spool ke disk berkas yang terpisah. Ketika sebuah aplikasi selesai mencetak keluarannya, sistem spooling akan melanjutkan ke antrian berikutnya. Pada beberapa sistem operasi, spooling ditangani oleh sebuah sistem proses daemon yaitu suatu sistem yang terus mengawasi apakah aliran data berjalan lancar. Pada sistem operasi lainnya, spooling ditangani oleh sebuah thread in- kernel. Pada kedua macam penanganan spooling tersebut, sistem operasi menyediakan kontrol antarmuka yang membolehkan user dan sistem administrator untuk membentuk antrian, untuk membuang job yang tidak diinginkan sebelum job tersebut dicetak, untuk menunda pencetakan ketika printer diperbaiki, dan sebagainya.

Gambar 11.2. Spooling
Spooling

Beberapa perangkat, seperti tape drives dan printer tidak dapat mengumpulkan permintaan M/K dari banyak aplikasi secara bersamaan. Cara lain adalah dengan menggunakan akses perangkat secara bersamaan dengan menyediakan fasilitas langsung dengan cara koordinasi. Beberapa sistem operasi (termasuk Virtual Machine System) menyediakan dukungan akses perangkat secara ekslusif dengan mengalokasikan sebuah proses ke perangkat yang menganggur atau idle dan membuang perangkat tersebut jika sudah tidak diperlukan lagi. Sistem operasi lainnya memaksakan sebuah batasan dari penanganan sebuah berkas yang dibuka ke perangkat tersebut. Kebanyakan sistem operasi menyediakan fungsi yang membuat proses-proses untuk menangani koordinat akses eksklusif diantara mereka sendiri. Sebagai contoh, Windows NT menyediakan system call untuk menunggu objek perangkat sampai statusnya tersedia. Dia juga mempunyai sebuah parameter untuk system call open yang mendeklarasikan tipe-tipe akses yang diperbolehkan untuk thread\ lainnya secara bersamaan. Pada sistem ini, penghindaran deadlock diserahkan kepada aplikasi.