GNU/Linux >> Belajar Linux >  >> Linux

Manajemen Memori Linux – Memori Virtual dan Halaman Permintaan

Manajemen memori adalah salah satu aktivitas paling kompleks yang dilakukan oleh kernel Linux. Ini memiliki berbagai konsep/masalah yang terkait dengannya.

Artikel ini adalah bagian dari seri ikhtisar kernel UNIX kami yang sedang berjalan.

Dalam artikel seri kernel sebelumnya, kita telah membahas tentang gambaran umum proses UNIX, dan Kernel Masuk Kembali.

Dalam artikel ini kita akan mencoba menyentuh basis memori virtual dan paging permintaan karena ini adalah beberapa konsep penting yang terkait dengan manajemen memori.

Memori Virtual

Konsep memori virtual adalah salah satu aspek yang sangat kuat dari manajemen memori. Sejak era awal komputer kebutuhan memori lebih dari memori fisik yang ada telah dirasakan. Selama bertahun-tahun, banyak solusi yang digunakan untuk mengatasi masalah ini dan yang paling berhasil adalah konsep memori virtual.

Memori virtual membuat sistem Anda tampak seolah-olah memiliki lebih banyak memori daripada yang sebenarnya. Ini mungkin terdengar menarik dan mungkin mendorong seseorang untuk bertanya bagaimana ini mungkin. Jadi, mari kita pahami konsepnya.

  • Untuk memulai, pertama-tama kita harus memahami bahwa memori virtual adalah lapisan alamat memori yang dipetakan ke alamat fisik.
  • Dalam model memori virtual, ketika prosesor mengeksekusi instruksi program, prosesor membaca instruksi dari memori virtual dan mengeksekusinya.
  • Tetapi sebelum mengeksekusi instruksi, terlebih dahulu mengubah alamat memori virtual menjadi alamat fisik.
  • Konversi ini dilakukan berdasarkan pemetaan alamat virtual ke alamat fisik yang dilakukan berdasarkan informasi pemetaan yang terdapat dalam tabel halaman (yang dikelola oleh OS).

Memori virtual dan fisik dibagi menjadi potongan panjang tetap yang dikenal sebagai halaman. Dalam model halaman ini, alamat virtual dapat dibagi menjadi dua bagian :

  • Offset (12 bit terendah)
  • Nomor bingkai halaman virtual (sisa bit)

Setiap kali prosesor menemukan alamat virtual, itu mengekstrak nomor bingkai halaman virtual darinya. Kemudian menerjemahkan nomor bingkai halaman virtual ini menjadi nomor bingkai halaman fisik dan bagian offset membantunya menuju ke alamat yang tepat di halaman fisik. Terjemahan alamat ini dilakukan melalui tabel halaman.

Secara teoritis kita dapat menganggap tabel halaman berisi informasi berikut:

  • Bendera yang menjelaskan apakah entri valid atau tidak
  • Nomor bingkai halaman fisik seperti yang dijelaskan oleh entri ini
  • Mengakses informasi terkait halaman (seperti hanya baca, baca-tulis, dll.)

Tabel halaman diakses melalui nomor bingkai halaman virtual menggunakannya sebagai offset untuk entri dalam tabel halaman. Misalnya, nomor bingkai halaman virtual '2' menunjuk ke entri '1' di tabel halaman (nomor entri dimulai dengan '0').

Pada gambar di bawah, VPFN adalah singkatan dari Virtual page frame number, dan PFN menunjukkan nomor frame halaman fisik.

Mungkin terjadi bahwa prosesor pergi ke entri tabel halaman proses dengan nomor bingkai halaman virtual dan menemukan entri sebagai tidak valid. Dalam hal ini adalah tanggung jawab prosesor untuk meneruskan kontrol ke kernel dan memintanya untuk memperbaiki masalah. Prosesor yang berbeda melewati kontrol dengan cara yang berbeda tetapi fenomena ini dikenal sebagai 'kesalahan halaman'. Tetapi jika entri itu valid maka prosesor mengambil nomor bingkai halaman fisik, mengalikan dengan ukuran halaman untuk mendapatkan alamat dasar halaman fisik dan kemudian menambahkan offset untuk mendapatkan alamat fisik yang tepat.

Jadi sekarang kita memahami bahwa melalui konsep memori virtual, setiap proses berpikir bahwa ia memiliki semua rentang alamat virtual yang tersedia dan karenanya konsep ini membuat sistem tampak seolah-olah memiliki lebih banyak memori fisik daripada yang sebenarnya tersedia.

Paging Permintaan

Pada bagian sebelumnya kita mempelajari bahwa jika prosesor masuk ke tabel halaman proses dengan nomor bingkai halaman virtual yang tidak ada entri dalam tabel, maka dua kasus muncul.

  1. Ada proses yang mencoba mengakses alamat memori yang tidak valid
  2. Halaman fisik yang sesuai dengan alamat virtual tidak dimuat ke memori fisik

Dari kedua kasus di atas, kasus 1 adalah kasus dimana proses mencoba ke alamat memori yang tidak diperbolehkan. Dalam hal ini kesalahan halaman dibuat dan kernel menghentikan proses.

Sedangkan pada kasus '2', seperti yang telah dijelaskan, halaman fisik yang sesuai dengan alamat virtual belum dimuat ke dalam memori fisik. Dalam hal ini juga kesalahan halaman dihasilkan dan kernel kemudian mencoba membawa halaman memori yang diperlukan ke memori fisik dari hard disk.

Karena operasi membawa halaman dari hard disk ke memori fisik memakan waktu sehingga saat ini terjadi peralihan konteks antara proses dan beberapa proses lainnya dibawa ke eksekusi. Sementara halaman dari proses sebelumnya dibawa ke memori fisik dan tabel halaman diperbarui dan kemudian proses ini dibawa kembali ke eksekusi lagi dari instruksi yang sama yang menyebabkan 'page fault'.

Ini dikenal sebagai permintaan paging di mana semua halaman memori yang terkait dengan suatu proses tidak ada dalam memori fisik pada waktu tertentu. Ini menghemat memori fisik agar tidak tersumbat dengan halaman memori yang tidak diperlukan, sementara bila perlu halaman ini dapat dibawa ke memori fisik melalui kesalahan halaman (seperti yang dijelaskan di atas).


Linux
  1. Perintah Linux:menjelajahi memori virtual dengan vmstat

  2. Cara Menghapus Buffer Memori dan Cache di Linux

  3. Quickemu – Jalankan Mesin Virtual Windows, macOS, dan Linux

  1. Pemantauan dan manajemen memori

  2. Manajemen Memori Linux – Swapping, Cache dan Shared VM

  3. Perbedaan antara halaman virtual dan bingkai halaman?

  1. Apakah mungkin untuk mengalokasikan memori virtual dalam jumlah besar di linux?

  2. Apa itu memori tinggi dan memori rendah di Linux?

  3. Memori tidak aktif Linux