Penembolokan File

Secara default, Windows menyimpan data file yang dibaca dari disk dan ditulis ke disk. Ini menyiratkan bahwa operasi baca membaca data file dari area dalam memori sistem yang dikenal sebagai cache file sistem, bukan dari disk fisik. Secara sesuai, operasi tulis menulis data file ke cache file sistem daripada ke disk, dan jenis cache ini disebut sebagai cache write-back. Penembolokan dikelola per objek file.

Penembolokan terjadi di bawah arah manajer cache, yang beroperasi terus menerus saat Windows berjalan. Data file dalam cache file sistem ditulis ke disk pada interval yang ditentukan oleh sistem operasi, dan memori yang sebelumnya digunakan oleh data file tersebut dikosongkan—ini disebut sebagai pembilasan cache. Kebijakan menunda penulisan data ke file dan menyimpannya di cache sampai cache dihapus disebut penulisan malas, dan dipicu oleh manajer cache pada interval waktu yang ditentukan. Waktu di mana blok data file dihapus sebagian berdasarkan jumlah waktu yang telah disimpan dalam cache dan jumlah waktu sejak data terakhir diakses dalam operasi baca. Ini memastikan bahwa data file yang sering dibaca akan tetap dapat diakses dalam cache file sistem untuk jumlah waktu maksimum.

Proses penembolokan data file ini diilustrasikan dalam gambar berikut.

file data caching process

Seperti yang digambarkan oleh panah padat pada gambar sebelumnya, wilayah data 256 KB dibaca ke dalam "slot" cache 256 KB di ruang alamat sistem ketika pertama kali diminta oleh manajer cache selama operasi baca file. Proses mode pengguna kemudian menyalin data di slot ini ke ruang alamatnya sendiri. Ketika proses telah menyelesaikan akses datanya, proses menulis data yang diubah kembali ke slot yang sama di cache sistem, seperti yang ditunjukkan oleh panah putus-putus antara ruang alamat proses dan cache sistem. Ketika manajer cache telah menentukan bahwa data tidak akan lagi diperlukan untuk waktu tertentu, ia menulis data yang diubah kembali ke file pada disk, seperti yang ditunjukkan oleh panah putus-putus antara cache sistem dan disk.

Jumlah peningkatan performa I/O yang ditawarkan penembolokan data file tergantung pada ukuran blok data file yang dibaca atau ditulis. Ketika blok besar data file dibaca dan ditulis, kemungkinan besar disk membaca dan menulis akan diperlukan untuk menyelesaikan operasi I/O. Performa I/O akan semakin terganggu karena lebih banyak operasi I/O semacam ini terjadi.

Dalam situasi ini, penembolokan dapat dimatikan. Ini dilakukan pada saat file dibuka dengan meneruskan FILE_FLAG_NO_BUFFERING sebagai nilai untuk parameter dwFlagsAndAttributes dari CreateFile. Saat penembolokan dinonaktifkan, semua operasi baca dan tulis langsung mengakses disk fisik. Namun, metadata file mungkin masih di-cache. Untuk membersihkan metadata ke disk, gunakan fungsi FlushFileBuffers .

Frekuensi di mana pembilasan terjadi adalah pertimbangan penting yang menyeimbangkan performa sistem dengan keandalan sistem. Jika sistem menyiram cache terlalu sering, jumlah operasi tulis besar yang memerah akan menurunkan performa sistem secara signifikan. Jika sistem tidak cukup sering memerah, maka kemungkinan lebih besar bahwa memori sistem akan habis oleh cache, atau kegagalan sistem mendadak (seperti hilangnya daya ke komputer) akan terjadi sebelum flush. Dalam instans terakhir, data cache akan hilang.

Untuk memastikan bahwa jumlah pembilasan yang tepat terjadi, manajer cache menghasilkan proses setiap detik yang disebut penulis malas. Proses penulis malas mengantre satu perdelapan halaman yang belum dihapus baru-baru ini untuk ditulis ke disk. Ini terus-menerus mengevaluasi kembali jumlah data yang dihapus untuk performa sistem yang optimal, dan jika lebih banyak data perlu ditulis, data perlu diantrekan lebih banyak data. Penulis malas tidak membersihkan file sementara, karena asumsinya adalah bahwa mereka akan dihapus oleh aplikasi atau sistem.

Beberapa aplikasi, seperti perangkat lunak pemeriksaan virus, mengharuskan operasi tulis mereka segera disiram ke disk; Windows menyediakan kemampuan ini melalui penembolokan write-through. Proses memungkinkan penembolokan write-through untuk operasi I/O tertentu dengan meneruskan bendera FILE_FLAG_WRITE_THROUGH ke dalam panggilannya ke CreateFile. Dengan penembolokan write-through diaktifkan, data masih ditulis ke dalam cache, tetapi manajer cache segera menulis data ke disk daripada menimbulkan penundaan dengan menggunakan penulis malas. Proses juga dapat memaksa flush file yang telah dibukanya dengan memanggil fungsi FlushFileBuffers .

Metadata sistem file selalu di-cache. Oleh karena itu, untuk menyimpan perubahan metadata apa pun ke disk, file harus dihapus atau dibuka dengan FILE_FLAG_WRITE_THROUGH.