Ini sangat rumit sehingga sangat sulit untuk mulai menjelaskan, jadi saya hanya akan menyebutkan beberapa cara dasar program dapat bekerja.
Cara pertama dan paling jelas yang juga sering paling lambat adalah bekerja langsung dengan file pada disk. Pada dasarnya setiap blok pada disk memiliki alamat logisnya sendiri dan aplikasi dapat langsung bekerja dengan data pada disk tersebut. Jadi jika saya merancang editor teks sederhana, saya dapat memuat layar teks ke dalam memori video dari disk dan menulis perubahan apa pun langsung ke disk segera setelah dibuat. Jenis pendekatan ini (sejauh yang saya tahu) hampir tidak pernah digunakan hari ini karena banyak kerugiannya. Masalah pertama dengan itu adalah bahwa disk sangat lambat jika dibandingkan dengan RAM bahwa CPU akan menghabiskan seluruh waktunya menunggu disk untuk menyelesaikan menjaga dengan data. Sisi baiknya adalah kita hampir tidak menggunakan RAM, karena semua data dari disk dapat ditransfer langsung ke RAM dalam kartu video. Di atas semua itu,
Selanjutnya kita memiliki (sayangnya) solusi umum dan paling jelas untuk masalah akses disk yang lambat: Kami hanya akan menyalin seluruh file ke RAM dan bekerja salinan RAM. Setelah selesai, kami akan menyinkronkan versi RAM dengan versi pada disk dan menyelesaikan masalah. Sistem operasi modern membuat ini relatif mudah karena pemrogram aplikasi dapat menggunakan layanan yang disediakan oleh OS untuk memperbarui file tanpa terlalu memikirkan bagaimana hal itu benar-benar dilakukan. Kelebihan utama dari pendekatan ini adalah kecepatan. RAM (dibandingkan dengan disk) sangat cepat dan disk umumnya bekerja lebih baik ketika jumlah data yang lebih besar perlu ditransfer. Lebih jauh lagi, pendekatan ini membiarkan disk tersedia untuk digunakan aplikasi lain dan Anda dapat mengedit file saat aplikasi lain bekerja dengan disk. Kelemahannya adalah diasumsikan bahwa seluruh file dapat dimuat ke dalam RAM dalam jumlah waktu yang wajar dan bahwa file tersebut akan meninggalkan ruang yang cukup untuk tugas-tugas lain dalam RAM. Terkadang ini tidak benar. Sebagai contoh, saya pernah harus membuka file teks ~ 3,5 GiB dan ternyata sebagian besar aplikasi berasumsi bahwa file teks akan masuk dalam RAM.
Pendekatan selanjutnya yang secara umum digunakan ketika kita bekerja dengan aplikasi yang mengharapkan file besar adalah memuat sebagian file ke dalam RAM dan bekerja dengannya. Setelah selesai, kami akan menyimpan bagian itu ke disk dan membaca bagian selanjutnya. Bagaimana tepatnya ini bekerja tergantung pada struktur file itu sendiri.
Dalam beberapa jenis file, Anda dapat menemukan indeks di awal file yang dapat Anda muat ke dalam RAM dan menggunakannya untuk menentukan nanti alamat logis dari bagian file yang menarik. Dalam beberapa jenis file lain, Anda mungkin perlu mencari seluruh file untuk bagian yang memiliki data yang Anda butuhkan dan kemudian hanya memuat bagian file tersebut ke dalam RAM.
Pendekatan ini juga menyediakan ruang untuk optimisasi pintar seperti memungkinkan pengeditan bagian file sementara bagian lain sedang dimuat ke dalam RAM di latar belakang untuk meminimalkan waktu tunggu yang diperlukan untuk membuka file dan sebagainya.
Jadi dalam contoh file video, beberapa data tentang format itu sendiri akan dikodekan pada awal denda dan kemudian, program yang memainkan file hanya perlu memiliki memori bagian file yang saat ini sedang diputar. Agar pemutaran lebih lancar, program juga akan menyimpan bagian dari file yang belum diputar ke dalam RAM. Biasanya tidak mudah untuk menentukan dengan tepat berapa lama waktu yang diperlukan untuk disk untuk mengakses data. Misalnya karena fragmentasi, sebagian file mungkin di awal disk sementara sebagian mungkin di akhir disk. Juga pada saat yang sama saat video diputar, aplikasi lain mungkin mencoba untuk menulis data dalam jumlah besar ke disk. Karena pemutar video sudah memiliki beberapa buffer dalam RAM, pemutaran harus dilanjutkan tanpa gangguan yang terlihat.
Pendekatan ini memiliki kelebihan menggunakan lebih sedikit RAM daripada sebelumnya dan pada saat yang sama cukup cepat untuk penggunaan yang diprediksi oleh programmer. Kelemahannya adalah Anda mengandalkan programmer untuk memprediksi bagian mana dari file yang akan umum digunakan dan bagaimana dan kadang-kadang pola penggunaan yang diharapkan bisa berbeda dari pola penggunaan nyata. Kelemahan lainnya adalah dibutuhkan upaya untuk secara tepat menentukan bagian mana dari file yang perlu di RAM dan seberapa besar bagian itu perlu. Jika bagian itu terlalu kecil, Anda tidak mendapatkan kecepatan yang cukup dan jika bagian itu terlalu besar, Anda mengambil memonopoli RAM.
Jadi, untuk merangkum 3 opsi yang saya jelaskan: Yang pertama adalah anak-anak di sekolah dasar yang menggarisbawahi setiap huruf yang dilihatnya dengan pensil sambil berjuang membaca sepatah kata pun.
Yang kedua akan mencetak seluruh teks pada satu halaman dan jika halaman sebesar dinding, maka kita mungkin mengalami beberapa masalah.
Pilihan ketiga adalah seperti membaca dari buku. Anda membuka buku di halaman tertentu dan tepat di sebelahnya Anda memiliki halaman lain terbuka! Saat Anda selesai membaca keduanya, Anda beralih ke pasangan berikutnya.
Perhatikan bahwa dalam jawaban ini saya belum membahas banyak tentang cache yang tak terhitung jumlahnya dan lapisan abstraksi yang ada di komputer modern antara disk, RAM dan prosesor. Misalnya dalam situasi dunia nyata, jika Anda memiliki satu program yang sedang melakukan akses disk berat dan program lain yang mencoba menyimpan file kecil, file tersebut dapat disimpan di suatu tempat dalam RAM dalam cache hingga disk memiliki cukup waktu luang untuk menulisnya. . Disk itu sendiri memiliki cache internal yang dimenangkan dan mungkin menyimpan file di sana untuk beberapa waktu sebelum menulisnya ke disk. Juga ketika membaca, OS itu sendiri dapat memuat ke dalam RAM lebih banyak blok disk daripada aplikasi yang diminta karena (dengan benar atau tidak) meramalkan bahwa aplikasi mungkin membutuhkannya segera. Hal yang sama berlaku untuk cache disk juga. Maka mungkin ternyata disk tidak