1. Kernel meminta memori untuk struktur data dengan berbagai ukuran, beberapa di
antaranya berukuran kurang dari satu halaman. Akibatnya, kernel harus
menggunakan memori secara konservatif dan berusaha meminimalkan
pemborosan karena fragmentasi. Ini sangat penting karena banyak sistem
operasi tidak memasukkan kode kernel atau data ke sistem paging.
2. Halaman yang dialokasikan untuk proses mode pengguna tidak harus berada
dalam memori fisik yang berdekatan. Namun, perangkat keras tertentu
berinteraksi langsung dengan memori fisik—tanpa manfaat antarmuka memori
virtual—dan akibatnya mungkin memerlukan memori yang berada di halaman
yang berdekatan secara fisik.
Di bagian berikut, kami memeriksa dua strategi untuk mengelola memori bebas yang
ditetapkan ke proses kernel: "sistem teman" dan alokasi slab.
256 KB
128 KB 128 KB
AL AR
64 KB 64 KB
BL BR
32 KB 32 KB
CL CR
buddies digunakan untuk memenuhi permintaan 21-KB . Skema ini diilustrasikan pada Gambar
9.26, di mana CL adalah segmen yang dialokasikan untuk permintaan 21-KB .
Keuntungan dari sistem sobat adalah seberapa cepat sobat yang berdekatan dapat
digabungkan untuk membentuk segmen yang lebih besar menggunakan teknik yang dikenal
sebagai penggabungan. Pada Gambar 9.26, misalnya, ketika kernel melepaskan unit CL yang
dialokasikan, sistem dapat menggabungkan CL dan CR menjadi segmen 64-KB. Segmen ini, BL,
pada gilirannya dapat digabungkan dengan BR temannya untuk membentuk segmen 128-KB.
Pada akhirnya, kita dapat berakhir dengan segmen 256-KB asli.
Kelemahan yang jelas dari sistem sobat adalah bahwa pembulatan ke kekuatan tertinggi
berikutnya dari 2 sangat mungkin menyebabkan fragmentasi dalam segmen yang dialokasikan.
Misalnya, permintaan 33 KB hanya dapat dipenuhi dengan segmen 64 KB . Faktanya, kami tidak
dapat menjamin bahwa kurang dari 50 persen unit yang dialokasikan akan terbuang sia-sia karena
fragmentasi internal. Pada bagian berikut, kami mengeksplorasi skema alokasi memori di mana
tidak ada ruang yang hilang karena fragmentasi.
Hubungan antara slab, cache, dan objek ditunjukkan pada Gambar 9.27. Gambar menunjukkan
dua objek kernel berukuran 3 KB dan tiga objek berukuran 7 KB , masing-masing disimpan dalam
cache terpisah.
Machine Translated by Google
438
Bab 9 Memori Virtual
objek kernel cache lempengan
3-KB
objek
halaman yang
berdekatan
secara fisik
Objek 7-KB
Di Linux, slab mungkin berada di salah satu dari tiga kemungkinan status:
1. Tidak ada memori yang terbuang karena fragmentasi. Fragmentasi tidak menjadi
masalah karena setiap struktur data kernel yang unik memiliki cache yang terkait,
dan setiap cache terdiri dari satu atau lebih slab yang dibagi menjadi
Machine Translated by Google
potongan ukuran objek yang diwakili. Jadi, ketika kernel meminta memori untuk
suatu objek, pengalokasi slab mengembalikan jumlah memori yang tepat yang
diperlukan untuk mewakili objek.
2. Permintaan memori dapat dipenuhi dengan cepat. Skema alokasi slab dengan
demikian sangat efektif untuk mengelola memori ketika objek sering dialokasikan
dan tidak dialokasikan, seperti yang sering terjadi dengan permintaan dari kernel.
Tindakan mengalokasikan—dan melepaskan—memori bisa menjadi proses yang
memakan waktu. Namun, objek dibuat terlebih dahulu dan dengan demikian dapat
dengan cepat dialokasikan dari cache. Selanjutnya, ketika kernel telah selesai
dengan suatu objek dan melepaskannya, itu ditandai sebagai bebas dan
dikembalikan ke cache-nya, sehingga membuatnya segera tersedia untuk
permintaan berikutnya dari kernel.
Pengalokasi slab pertama kali muncul di kernel Solaris 2.4. Karena sifatnya untuk
tujuan umum, pengalokasi ini sekarang juga digunakan untuk permintaan memori mode
pengguna tertentu di Solaris. Linux awalnya menggunakan sistem sobat; namun, dimulai
dengan Versi 2.2, kernel Linux mengadopsi pengalokasi slab.
Distribusi Linux terbaru sekarang menyertakan dua pengalokasi memori kernel lainnya—
pengalokasi SLOB dan SLUB . (Linux mengacu pada implementasi slabnya sebagai SLAB.)
Pengalokasi SLOB dirancang untuk sistem dengan jumlah memori terbatas, seperti
sistem tertanam. SLOB (singkatan dari Simple List of Blocks) bekerja dengan
mempertahankan tiga daftar objek: kecil (untuk objek kurang dari 256 byte), sedang
(untuk objek kurang dari 1.024 byte), dan besar (untuk objek kurang dari 1.024 byte).
Permintaan memori dialokasikan dari objek pada daftar berukuran tepat menggunakan
kebijakan first-fit.
Dimulai dengan Versi 2.6.24, pengalokasi SLUB menggantikan SLAB sebagai
pengalokasi default untuk kernel Linux. SLUB mengatasi masalah kinerja dengan alokasi
slab dengan mengurangi banyak overhead yang dibutuhkan oleh pengalokasi SLAB .
Satu perubahan adalah memindahkan metadata yang disimpan dengan setiap slab di
bawah alokasi SLAB ke struktur halaman yang digunakan kernel Linux untuk setiap
halaman. Selain itu, SLUB menghapus antrean per-CPU yang dipertahankan oleh
pengalokasi SLAB untuk objek di setiap cache. Untuk sistem dengan sejumlah besar
prosesor, jumlah memori yang dialokasikan untuk antrian ini tidak signifikan. Dengan
demikian, SLUB memberikan kinerja yang lebih baik karena jumlah prosesor pada suatu
sistem meningkat.
Keputusan utama yang kita buat untuk sistem paging adalah pemilihan algoritme
pengganti dan kebijakan alokasi, yang telah kita bahas sebelumnya dalam bab ini. Ada
banyak pertimbangan lain juga, dan kami membahas beberapa di antaranya di sini.
Properti yang jelas dari paging permintaan murni adalah sejumlah besar kesalahan
halaman yang terjadi saat proses dimulai. Situasi ini hasil dari mencoba untuk
mendapatkan lokalitas awal ke dalam memori. Situasi yang sama mungkin muncul di lain waktu. Untu