Bagaimana aplikasi (dan OS) menangani file yang sangat besar?


4

Misalnya, saya punya file video yang 11,8 Gb, tetapi memori RAM saya hanya 2 Gb. Bagaimana VLC (atau perangkat lunak lain) menanganinya? Bagaimana mereka memuatnya ke dalam memori? Saya menggunakan alat VMMap (dari sysinternals) untuk melihat memori, dan saya melihat:

Pribadi 160000K

Bekerja mengatur 100000K

Jelas, itu jauh kurang dari 11,8 Gb -Jadi bagaimana itu bisa terjadi?

Pertanyaan ini bukan hanya tentang video. Saya ingin tahu bagaimana Komputer, secara umum, menangani file yang sangat besar.

Jawaban:


4

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


Terima kasih atas penjelasan detailnya. Saya punya sedikit keraguan, jika mengatakan perangkat lunak menangani video dengan cara seperti membaca buku. Apakah ini seperti pengembang harus melakukan banyak optimasi untuk memastikan ketika pengguna melompat halaman (lompatan bagian dari video) pemain masih memutar video dengan lancar.
Pengembang Sheldon

@Developer Sheldon Yah, saya belum melakukan pengembangan pemutar video (belum!), Jadi saya tidak yakin berapa banyak optimasi sebenarnya dilakukan. Saya tahu bahwa beberapa pemain akan "buffer" bagian dari file dalam RAM, seolah-olah itu adalah aliran jaringan, membuat lompatan dalam area itu lebih mudah. Namun, jika pengguna mencoba untuk melompat keluar dari area itu, data harus dimuat dari disk, menciptakan masalah kinerja. Dari apa yang saya alami, pengembang tidak mencoba mengoptimalkan untuk situasi itu, dan memungkinkan pemutaran menjadi berombak, sampai buffer baru telah dibuat.
AndrejaKo

1

Ketika Anda membaca buku, Anda tidak ingat setiap kata. Anda ingat detail penting yang relevan dengan sisa cerita. Jika Anda perlu mengingat lebih detail, Anda dapat membalik kembali dan membaca halaman lagi. Anda menemukan halaman dengan mencari nomor halaman dalam indeks atau konten.

Ketika komputer memutar video, komputer itu membaca data video sekian detik sehingga memiliki cukup data untuk mulai diproses. Itu mulai menghasilkan bingkai video dan mengantriya untuk ditampilkan di monitor. Ia lupa data video setelah memprosesnya karena tidak lagi diperlukan. Ini memuat lebih banyak data video di tempatnya. Setelah bingkai video ditampilkan, itu juga dilupakan karena tidak lagi diperlukan. Jika pengguna memundurkan video, komputer memundurkan ke titik yang sesuai dalam file dan mengulangi proses membaca data video dan menghasilkan dan mengantri bingkai video.

Untuk format file lainnya, komputer akan bertindak dengan cara yang sama. Itu hanya akan membaca dan memproses bagian dari file yang saat ini diminta.


1
It will only read and process the part of the file that is currently requested.Sayangnya, tidak selalu demikian. Beberapa program mungkin berasumsi bahwa seluruh file akan masuk ke dalam RAM dan mencoba memuatnya secara keseluruhan. Waktu yang menyenangkan terjadi jika tidak bisa.
AndrejaKo

1
Tentu, tapi itu mungkin program yang salah untuk pekerjaan itu. Ketika saya mengatakan "komputer", saya seharusnya mengatakan "sebuah program yang dirancang untuk membaca file besar".
Hand-E-Food
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.