Sejauh yang saya mengerti paging dan swapping, mereka konsep yang sama sekali berbeda. Sementara swapping berarti, bahwa suatu proses baik sepenuhnya dalam memori fisik atau pada hard drive, dengan bagian paging dari suatu proses dapat dalam memori fisik dan bagian lain dapat pada hard drive.
Tetapi mengapa linux membutuhkan partisi swap? Jika memori fisik penuh, beberapa proses akan di-outsource ke hard drive dan proses baru akan dipetakan dari memori virtual ke memori fisik.
Saya hanya tidak mengerti mengapa orang perlu partisi swap (atau bertukar secara umum)?
Atau ini hanya masalah terminologi dan swap partition == virtual memory
?
linux
memory
operating-systems
virtual-memory
paging
JohnnyFromBF
sumber
sumber
Jawaban:
Ya itu hanya masalah terminologi, dalam banyak kasus partisi swap digunakan sebagai memori virtual.
Alasan sistem UNIX dan seperti UNIX lebih suka partisi swap ke file halaman adalah bahwa mereka dapat bersebelahan yang menghasilkan waktu pencarian yang lebih rendah dibandingkan dengan file halaman yang mungkin terfragmentasi.
sumber
Saya tidak tahu dari mana Anda mendapat anggapan bahwa "bertukar berarti, bahwa suatu proses sepenuhnya dalam memori fisik atau pada hard drive". Makna itu belum digunakan selama beberapa dekade. Mengutip Wikipedia :
Memang, dalam konteks apa pun yang melibatkan Linux (atau sistem unix lainnya), paging dan swapping cukup identik. Keduanya merujuk pada penggunaan memori virtual di mana data halaman dapat disimpan dalam RAM atau pada disk. (Halaman 4kB pada perangkat apa pun yang mungkin Anda temui.) Program menggunakan halaman memori tidak peduli atau bahkan tahu di mana data disimpan, itu hanya terus menggunakan alamat virtual. Kernel mentransfer data antara RAM dan disk dan memperbarui tabel MMU saat berjalan sehingga entri untuk alamat virtual menunjuk ke halaman fisik dalam memori, atau berisi nilai khusus yang menyebabkan prosesor menjalankan beberapa kode kernel yang akan memuat data yang sesuai dari disk.
Paging mengacu pada proses generik ini. Swapping mengacu pada kasus di mana data pada disk berada di area khusus: area swap (partisi swap atau file swap). Paging juga dapat dilakukan antara RAM dan file, dan dalam hal ini biasanya tidak disebut sebagai swapping . Misalnya, ketika Anda menjalankan suatu program, kode harus dimuat ke dalam memori untuk dieksekusi; jika halaman kode perlu diusir dari RAM untuk memberikan ruang bagi hal lain, maka tidak perlu menulis halaman ini ke area swap, karena dapat dimuat kembali dari file program. (Ini dapat dilakukan untuk semua data hanya baca, bukan hanya kode program.)
Jika memori fisik (hampir) penuh, kernel mencari halaman dalam RAM (bukan seluruh proses) yang belum digunakan baru-baru ini. Jika halaman itu mereproduksi konten file disk (ada tabel di kernel untuk menunjukkan ini), halaman tersebut dapat direklamasi. Jika tidak, halaman tersebut ditulis untuk ditukar, kemudian direklamasi. Baik kernel memperbarui entri dalam tabel memori virtual proses (yang menjadi tabel MMU saat proses dijalankan) untuk menandainya sebagai tidak dalam RAM dan kemudian dapat menggunakan kembali halaman fisik untuk sesuatu yang lain (program yang berbeda, atau halaman lain dari program yang sama).
sumber
Fasilitas paging / memori virtual memungkinkan kernel "memvirtualisasi" memori ke proses userspace. Kernel dapat mengambil halaman dari memori fisik, dan mengaturnya melalui paging sehingga tampak bersebelahan dengan proses userspace.
Batas dapat ditetapkan pada memori proses userspace dan jika proses melampaui itu "kesalahan halaman" terjadi, yang menyebabkan pengecualian CPU yang memantul kembali ke kernel. Ini mencegah program userspace dari mengacaukan memori yang dialokasikan ke kernel atau program lain, tanpa izin kernel.
Biasanya program userspace meminta kernel untuk memperpanjang batas ini melalui antarmuka yang terdefinisi dengan baik (disebut dengan fungsi C
malloc()
danfree()
misalnya.). Kernel bertanggung jawab untuk melacak berapa banyak dan memori apa yang dialokasikan oleh suatu program.Mekanisme "kesalahan halaman" ini juga dapat membuat kernel menukar halaman yang coba diakses oleh proses dengan satu dari disk, jika kernel dapat kelebihan memori (dan Windows dan Linux mendukung ini) maka mengapa disebut swapping. Jika akses memori memang tidak valid (yaitu proses mencoba mengakses memori yang tidak diminta terlebih dahulu) maka biasanya proses tersebut akan dimatikan dengan SIGSEGV.
Jadi "swapping" adalah fitur tambahan (di Linux Anda benar-benar dapat menonaktifkannya sepenuhnya jika Anda mau) yang tergantung pada memori virtual / paging, tetapi tidak diperlukan hanya karena CPU memiliki memori / paging virtual. Konsepnya tidak sama tetapi swapping tergantung pada paging / memori virtual yang ada.
Juga, setelah lebih dekat membaca pertanyaan Anda, "paging" kadang-kadang digunakan sebagai sinonim untuk "swapping" - tetapi saya belum pernah mendengar tentang "swapping" yang berarti memori seluruh proses ditukar vs "paging" yang berarti hanya sebagian dari itu ditukar.
"Memori virtual" adalah memori fisik, hanya "dipetakan ulang." Perangkat keras MMU tidak dapat langsung memetakan ke perangkat penyimpanan apa pun. MMU dapat melempar kesalahan yang memberitahu kernel suatu proses mencoba mengakses memori yang seharusnya tidak - dan kernel dapat menggunakan mekanisme ini untuk melihat bahwa suatu proses menginginkan sesuatu dari disk yang ia pikir ada di memori dan kemudian melakukan " menukar". Intinya adalah sistem operasi yang memutuskan untuk menyimpan halaman ke disk sehingga dapat menggunakan halaman tersebut untuk proses lain, bukan perangkat keras.
sumber
Secara umum partisi swap tidak sama dengan memori virtual.
Proses dapat membutuhkan lebih banyak memori daripada memori fisik yang sebenarnya, sehingga pengembang OS memutuskan untuk mengasumsikan ada lebih banyak memori dalam sistem yang disebut "memori virtual".
Memori virtual ini pada dasarnya adalah memori fisik dan bagian dari disk. Bagian disk ini disebut "swap" di Linux.
Pengembang juga mengusulkan agar penggunaan bagian dari memori virtual yang terletak pada hard disk harus serendah mungkin. Demi itu, semua memori virtual dibagi menjadi bagian-bagian kecil yang disebut "halaman". Banyak halaman yang digunakan dalam kecepatan rendah, halaman-halaman ini harus ditulis ke bagian memori virtual pada hard disk. Operasi ini disebut "swap out". OS harus melacak halaman mana yang tidak ada dalam memori fisik untuk menemukannya saat diperlukan. Kesalahan halaman terjadi ketika suatu program ingin menulis / membaca bagian dari memori yang ditukar.
Untuk menjawab pertanyaan Anda: Linux membutuhkan partisi swap untuk menukar beberapa halaman memori dan Anda dapat melihat statistik penggunaan memori virtual dengan
vmstat
:Kolom 'swap' menunjukkan swap out dan dalam statistik. Juga tautan ini menjelaskan kehabisan memori virtual dan penggunaannya
vmstat
.sumber