Apa itu memori virtual?

27

Saya sedang memeriksa catatan saya untuk 'Memori Virtual' dan definisi dalam buku teks saya adalah:

Proses mengalokasikan bagian penyimpanan sekunder untuk bertindak sebagai bagian dari memori utama

Dimana seperti kata Wikipedia :

Memori virtual adalah teknik sistem komputer yang memberikan program aplikasi kesan bahwa ia memiliki memori kerja yang bersebelahan (ruang alamat)

dan (Wikipedia juga mengatakan)

Perhatikan bahwa "memori virtual" lebih dari sekadar "menggunakan ruang disk untuk menambah ukuran memori fisik"

Adakah yang bisa menawarkan klarifikasi mana yang benar?

Yacoby
sumber
Saya percaya catatan dari Wikipedia melibatkan beberapa kualifikasi tentang apa yang digunakan dalam hal hal-hal yang berdekatan.
JB King
Pertanyaan ini mungkin akan mendapatkan jawaban yang lebih baik pada SO.
Kapten Segfault
2
Jangan bingung apa memori virtual dengan bagaimana itu digunakan. Kalimat 1 Wikipedia mendefinisikan apa itu. Buku Anda sedang berbicara tentang bagaimana biasanya digunakan. Begitu orang berbicara tentang "halaman" mereka berbicara tentang implementasi spesifik dari memori virtual.
Tony Lee
2
Buku teks Anda salah besar. Ada banyak mesin dengan memori virtual dan tidak ada penyimpanan sekunder sama sekali. Demikian pula, pernah ada banyak mesin yang dapat menggunakan penyimpanan sekunder sebagai bagian dari memori utama tetapi tidak mendukung memori virtual. "Memori virtual" adalah sesuatu yang bukan memori tetapi diakses seperti memori. Buku teks Anda mendefinisikan swapping atau paging.
David Schwartz
1
Buku teks mendefinisikannya sepenuhnya salah, penyimpanan sekunder bukan bagian dari definisi. Dan bahkan pernyataan Wikipedia tentang "lebih dari ruang disk" menyesatkan, karena mungkin tidak melibatkan disk sama sekali - pernyataan itu terdengar seperti "memperluas memori ke disk" plus sesuatu yang lain.
Kelvin

Jawaban:

41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

Memori virtual adalah lapisan abstraksi yang disediakan untuk setiap proses. Komputer memiliki, katakanlah, 2GB RAM fisik, ditangani dari 0 hingga 2G. Suatu proses mungkin melihat ruang alamat 4GB, yang sepenuhnya dimiliki oleh dirinya sendiri. Pemetaan dari alamat virtual ke alamat fisik ditangani oleh unit manajemen memori, yang dikelola oleh sistem operasi. Biasanya ini dilakukan dalam "halaman" 4KB.

Ini memberikan beberapa fitur:

  1. Suatu proses tidak dapat melihat memori dalam proses lain (kecuali OS menginginkannya!)
  2. Memori di alamat virtual yang diberikan mungkin tidak berada di alamat fisik yang sama
  3. Memori di alamat virtual bisa "paged out" ke disk, dan kemudian "paged in" ketika diakses lagi.

Buku teks Anda mendefinisikan memori virtual (salah) hanya sebagai # 3.

Bahkan tanpa bertukar, Anda perlu mewaspadai memori virtual jika Anda menulis driver perangkat untuk perangkat yang melakukan DMA (akses memori langsung). Kode driver Anda berjalan pada CPU, yang berarti akses memorinya melalui MMU (virtual). Perangkat mungkin tidak tidak pergi melalui MMU, sehingga melihat alamat fisik baku. Jadi sebagai penulis driver Anda perlu memastikan:

  1. Setiap alamat memori mentah yang Anda berikan ke perangkat keras adalah fisik, bukan virtual.
  2. Blok memori besar (multi halaman) yang Anda kirim secara fisik bersebelahan. Array 8K mungkin hampir bersebelahan (melalui MMU) tetapi dua halaman terpisah secara fisik. Jika Anda meminta perangkat untuk menulis 8K data ke alamat fisik yang sesuai dengan awal array itu, itu akan menulis 4K pertama di mana Anda harapkan, tetapi 4K kedua akan merusak sebagian memori di suatu tempat. :-(
Kapten Segfault
sumber
4

Saya akan mencoba memulai dengan lambat, dan kemudian menyatukan ini untuk Anda. Seperti ini:

Memori virtual, seperti yang biasa digunakan, mengacu pada "paging". Seperti namanya, paging seperti notepad manusia.

Ketika Anda menghitung jumlah sederhana, atau mempelajari informasi sederhana, Anda melakukan semuanya di kepala Anda: Anda hanya memuat semua informasi, memprosesnya, dan mendapatkan jawabannya. Ini seperti komputer yang memuat file dari hard drive - itu memuat program atau gambar atau informasi lain yang diperlukan untuk bekerja ke dalam "memori nyata" (atau "memori fisik") dan bekerja padanya dengan "otak" itu ( prosesornya).

Namun, ketika Anda mempelajari informasi yang rumit, atau bekerja dengan jumlah yang kompleks, Anda mungkin tidak dapat memasukkan semua itu di kepala Anda sekaligus. Anda menjadi bingung, mulai melambat, gagal menyimpan semuanya di sana sekaligus, dan harus melupakan sesuatu untuk mengingat hal lain.

Solusi manusia adalah menggunakan notepad. Kami mencatat pada halaman-halaman semua hal yang tidak dapat kami ingat sekaligus, tetapi merujuk mereka saat melakukan penjumlahan. Kami mungkin tidak dapat mengingat daftar besar angka penjualan untuk bulan itu, tetapi kami dapat melihat halaman-halamannya, mendapatkan informasi sedikit demi sedikit, dan memproses setiap bit. Ini seperti komputer "paging" memorinya - menulis halaman yang penuh dengan informasi, dan memasukkannya ke dalam "memori virtual" untuk referensi di kemudian hari, dan menyadari bahwa ia membutuhkan sebuah halaman, dan memuat kembali halaman itu dari memori virtual ke memori nyata. Di linux dan unix, tempat di mana halaman-halaman ini disimpan secara harfiah disebut "pagefile", dan halaman-halaman data dalam memori secara harfiah disebut "halaman". Sistem yang berbeda memiliki nama yang berbeda untuk hal-hal ini, tetapi konsep umumnya hampir sama.

Jadi sungguh, paging sangat sederhana. Semua halaman informasi tidak sesuai dengan memori, sehingga beberapa halaman dimasukkan ke dalam disk, dan dimuat lagi nanti.

Sekarang, yang menjadi lebih rumit adalah bahwa, sistem modern menampilkan pemetaan memori dan perlindungan memori, yang semuanya biasanya ditangani oleh sistem perangkat keras yang sama di komputer: unit manajemen memori, atau MMU.

Dalam komputer multitasking (modern), yang dapat menjalankan banyak program sekaligus, dan fitur perlindungan memori, setiap program biasanya dipisahkan dari program lain yang berjalan pada sistem yang sama. Dengan cara ini, satu program tidak dapat mengubah program lain hanya dengan mengakses memorinya - MMU secara fisik memisahkan ruang alamat satu program dari yang lain. Dengan kata lain, program pengguna tidak melihat program pengguna lain atau bahkan program lain. Mereka tidak melihat "memori nyata" - mereka melihat "memori virtual" mereka sendiri.

Sekarang, konsep isolasi memori dan konsep pagefile ini adalah dua hal yang berbeda secara konseptual, yang mungkin mengapa Anda bingung. Namun, kuncinya adalah keduanya bekerja menggunakan MMU - unit manajemen memori, yang membagi memori menjadi halaman, dan memetakan halaman ke ruang alamat virtual.

Jadi, ketika sebuah program meminta memori pada "alamat memori" tertentu, apa yang sebenarnya terjadi adalah bahwa halaman memori untuk program itu dan alamatnya yang sesuai ("ruang alamat" program) dicari, dan halaman yang sesuai dengan blok memori ditemukan. Halaman itu dapat dimuat di suatu tempat dalam memori nyata, dalam hal ini program tersebut diberi akses, atau, itu dapat dipindahkan ke disk. Jika paged keluar, maka hal itu memicu "kesalahan halaman" - disk diakses, dan halaman dimuat ke dalam memori. Jadi program ini bekerja bahkan ketika tidak ada cukup memori, tetapi berjalan lambat, jika harus menggunakan disk untuk apa yang biasanya menjadi akses memori yang sangat cepat.

Sekarang, jika tidak ada cukup ruang untuk memuat halaman itu ke dalam memori, maka Anda memiliki masalah. Dalam hal ini, beberapa halaman LAIN yang sudah ada dalam memori harus "ditukar" ke disk, sehingga halaman program pertama dapat dimuat. Atau, mereka mungkin sama-sama halaman dari program yang sama. Anda melihat ini kadang-kadang dalam program grafis, misalnya, pada sistem yang sarat muatan, ketika bagian dari gambar dimuat perlahan dan digambar dengan cepat, maka bagian selanjutnya dimuat dengan sama lambat dan digambar dengan cepat, dan ketika Anda kembali bekerja dengan yang pertama sebagian lagi lambat. Itu karena mereka sedang dimuat untuk dikerjakan, lalu ditukar lagi, sehingga hal lain dapat dikerjakan. Jelas, ini adalah cara yang sangat lambat untuk bekerja, dan yang benar-benar Anda butuhkan adalah memori yang NYATA.

Lee B
sumber
Saya 100% tidak setuju dengan jawaban ini. Jika "memori virtual" mengacu pada paging, maka sistem yang tidak halaman (katakanlah, yang tanpa swap atau file halaman diaktifkan) tidak dapat mendukung memori virtual. Tapi itu jelas gila.
David Schwartz
@ Davidvidchwartz - Saya awalnya memiliki reaksi yang mirip dengan Anda, tetapi dalam membaca jawabannya secara lebih rinci, saya tidak berpikir itu sangat buruk. Pertimbangkan Wikipedia / memori virtual / Paged mengatakan, "Hampir semua implementasi memori virtual membagi ruang alamat virtual ke dalam halaman, blok alamat memori virtual yang berdekatan". Artinya, "paging", dalam arti luas, tidak memerlukan file halaman , tetapi merujuk pada pemetaan alamat virtual menjadi alamat fisik.
ToolmakerSteve
1
Hmm, di sisi lain, Lee mengatakan "Semua halaman informasi tidak sesuai dengan memori, jadi beberapa halaman diletakkan di disk, dan dimuat lagi nanti.", Jadi David benar: jawaban ini melewatkan fakta penting bahwa paging adalah bukan hanya tentang paging ke disk . Di sisi positifnya, Lee tidak menyebutkan manfaat lain dari memori virtual (isolasi memori). Jika jawaban ini disusun ulang untuk tidak membingungkan "memetakan halaman memori virtual" dengan "paging ke disk", itu akan lebih bermanfaat.
ToolmakerSteve
@ToolmakerSteve Masalahnya adalah bahwa ini adalah kesalahpahaman yang sangat umum dan apa pun yang memperkuat kesalahpahaman itu, IMO, adalah hal yang buruk. Sangat buruk di sini ketika jawaban ini mencoba menjelaskan konsep yang sangat mendasar dalam masalah yang sangat sederhana - ada yang paling penting untuk tidak meletakkan dasar berdasarkan kesalahpahaman umum!
David Schwartz
@ Davidvidchwartz - Saya setuju. Anda benar, dia tidak mendefinisikan "memori virtual", dia mendefinisikan "bagaimana file halaman bekerja". Pada awalnya saya berpikir bahwa masalahnya hanyalah Lee gagal membedakan antara "paging = memetakan halaman memori dari virtual ke fisik" versus "file halaman = memetakan halaman ke disk", tetapi setelah membaca kembali, dia benar-benar hanya berbicara tentang pemetaan ke disk. (Seperti yang dapat kita lihat, dari kutipan buku teks, dari semua jawaban lain kecuali dari Kapten, dan dari pencarian google, percampuran dari dua konsep ini sangat luas. Saya yakin saya bersalah karenanya.)
ToolmakerSteve
0

Saya tahu sudah terlambat .... tetapi saya pikir itu masih berguna.

  • Semuanya benar berdasarkan sudut pandang yang berbeda.
  • Memori virtual adalah teknik manajemen memori sedangkan memori swap adalah area pada disk drive. Memori swap umumnya disebut sebagai ruang swap. Swap space mengacu pada bagian dari memori virtual yang dicadangkan sebagai lokasi penyimpanan sementara. Swap space digunakan ketika RAM yang tersedia tidak dapat memenuhi kebutuhan memori sistem
  • Anda dapat merujuk ke tautan di bawah ini untuk lebih jelasnya
sivaramaraju
sumber
-2

Nah jika kita mengerti kata virtual, saya pikir kita bisa mengerti bagaimana kaitannya dengan memori.

"Virtual" sebagaimana didefinisikan di Dictionary.com: "disimulasikan sementara atau diperluas oleh perangkat lunak komputer: disk virtual dalam RAM; memori virtual pada hard disk."

Dalam kasus Memori Virtual, sistem mensimulasikan memori sistem dengan menggunakan sumber daya memori yang lebih lambat (yaitu hard drive, thumb drive dll.) Ketika diperlukan memori tambahan, sistem akan menukar data dalam memori sistem yang tidak diperlukan ke hard drive atau sumber daya yang Anda siapkan. Ini membebaskan memori sistem sehingga aplikasi Anda dapat melanjutkan tugas yang sedang dilakukannya.

Swapping adalah proses berkelanjutan dan dengan demikian jika Anda meningkatkan memori Anda, Anda akan melihat peningkatan kinerja karena sistem seharusnya tidak memerlukan swapping untuk memperlambat memori sebagai offten.

Bakteri
sumber
-2

Memori virtual adalah fitur sistem operasi (OS) yang memungkinkan komputer untuk mengkompensasi kekurangan memori fisik dengan mentransfer sementara halaman data dari memori akses acak (RAM) ke penyimpanan disk.

Artinya seperti cermin atau memori sampel yang digunakan dalam mesin virtual atau kotak virtual untuk mencoba sistem Operasi tanpa memformat komputer.

Eric Buenaventura
sumber
Tidak, itu paging.
David Schwartz
-4

Memori Virtual adalah blok Hard Drive Anda yang digunakan sistem sebagai file paging selain RAM fisik.

Itu menjadi rumit, dan kadang-kadang lambat, karena Windows TIDAK mendefrag bagian hard drive Anda.

2 tips terbaik yang bisa saya tawarkan: 1) Virt Mem harus diatur min dan maks di sekitar 1,5X Memori fisik Anda. ex. 2GB RAM = Virt 3070MB. 2) Saat defragging, matikan file paging Anda. Defrag 2x, dan reset ke nomor semula. Ini memberikan irisan drive yang bersih dan akan meningkatkan kecepatan file paging.

Anarkie
sumber
1
Itu tidak sepenuhnya benar - manajer memori modern memvirtualisasikan SEMUA memori sistem. Inilah yang memungkinkan pemisahan proses - setiap proses hanya dapat menyentuh ingatannya sendiri. Manajer memori bertanggung jawab untuk memetakan halaman virtual ini ke penyimpanan nyata, dan secara opsional ke disk tetap.
Anthony Giorgio
1
"Windows TIDAK mendefrag bagian hard drive Anda." cukup jalankan pagefile.sys, reboot, defrag disk dan aktifkan kembali paging, voilá, pagefile yang segar dan contigeous! Namun, PageDefrag Sysinternals melakukan pekerjaan yang lebih baik karena juga akan menempatkan pagefile di awal drive / partisi untuk kinerja yang lebih baik.
1
Jika jawaban ini benar, maka sistem Windows tanpa file halaman yang dikonfigurasi tidak dapat memberikan dukungan memori virtual. Tapi ini jelas salah. Sistem seperti itu masih bisa, misalnya, memetakan file ke dalam ruang alamat proses yang melebihi RAM fisik, yang merupakan contoh dari memori virtual.
David Schwartz