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. Sesuai dengan itu, operasi penulisan menulis data file ke cache file sistem daripada ke disk secara langsung, dan jenis cache ini disebut sebagai cache write-back. Penembolokan dikelola per objek file.
Penembolokan terjadi di bawah arahan manajer cache , yang beroperasi secara 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 dibebaskan—ini disebut sebagai pembilasan cache. Kebijakan menunda penulisan data ke file dan menyimpannya di cache sampai cache dibersihkan 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 penyimpanan sementara data file ini diilustrasikan dalam gambar berikut.
Seperti yang digambarkan oleh panah solid pada gambar sebelumnya, wilayah data 256 KB dibaca ke dalam "slot" cache (celah cache) 256 KB di ruang alamat dalam sistem ketika pertama kali diminta oleh pengelola cache selama operasi baca file. Proses mode pengguna kemudian menyalin data di slot ini ke ruang alamat miliknya sendiri. Ketika proses telah menyelesaikan akses datanya, data yang diubah ditulis kembali ke slot yang sama di cache sistem, seperti ditunjukkan oleh anak panah putus-putus antara ruang alamat proses dan cache sistem. Ketika pengelola cache telah menentukan bahwa data tidak akan lagi diperlukan untuk periode waktu tertentu, pengelola cache tersebut menulis data yang diubah kembali ke file pada disk, sebagaimana ditunjukkan oleh panah putus-putus antara cache sistem dan disk.
Jumlah peningkatan performa I/O yang ditawarkan oleh penyimpanan sementara data file tergantung pada ukuran blok data file yang sedang dibaca atau ditulis. Ketika blok besar data file dibaca dan ditulis, kemungkinan besar bahwa pembacaan dan penulisan disk 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, penyimpanan sementara dapat dimatikan. Ini dilakukan pada saat file dibuka dengan meneruskan FILE_FLAG_NO_BUFFERING sebagai nilai untuk parameter dwFlagsAndAttributesCreateFile. Saat caching dinonaktifkan, semua operasi baca dan tulis langsung mengakses disk fisik. Namun, metadata file mungkin masih di-cache. Untuk menghapus metadata ke disk, gunakan fungsiFlushFileBuffers.
Frekuensi di mana pembilasan terjadi adalah pertimbangan penting yang menyeimbangkan performa sistem dengan keandalan sistem. Jika sistem membersihkan cache terlalu sering, jumlah operasi tulis besar yang dihasilkan akan menurunkan performa sistem secara signifikan. Jika sistem tidak cukup sering dibersihkan, maka kemungkinan lebih besar bahwa memori sistem akan habis oleh cache, atau kegagalan sistem tiba-tiba (seperti hilangnya daya ke komputer) akan terjadi sebelum flush. Dalam instans terakhir, data yang di-cache akan hilang.
Setiap detik, untuk memastikan bahwa jumlah pembilasan yang tepat terjadi, manajer cache memicu proses yang disebut lazy writer. Proses penulis malas mengantri seperdelapan halaman yang belum diperbarui 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 tersebut akan diantrekan. 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 ditulis ke disk; Windows menyediakan kemampuan ini melalui penyimpanan write-through. Proses memungkinkan penyimpanan cache write-through untuk operasi I/O tertentu dengan meneruskan bendera FILE_FLAG_WRITE_THROUGH dalam pemanggilannya ke CreateFile. Dengan penyimpanan sementara write-through diaktifkan, data masih ditulis ke dalam cache, tetapi manajer cache segera menulis data ke disk daripada menimbulkan penundaan dengan menggunakan penulis tunda. 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 pada disk, file harus dibilas atau dibuka dengan FILE_FLAG_WRITE_THROUGH.