saat itu, sistem harus memeriksa apakah ada proses dalam antrian yang dapat dimasukkan ke dalam ruang memori yang baru terbentuk tersebut. Isu utama dari alokasi penyimpanan dinamis adalah
bagaimana memenuhi permintaan proses berukuran n dengan kumpulan lubang-lubang yang tersedia. Ada beberapa solusi untuk masalah ini:
1. First Fit. Memory manager akan mencari sepanjang daftar yang berisi besarnya ukuran memori
yang dibutuhkan oleh proses dalam antrian beserta ukuran memori yang tersedia pada saat itu. Setelah menemukan lubang yang cukup besar ruang memori dengan ukuran lebih besar dari
ukuran yang dibutuhkan oleh proses bersangkutan, lubang itu lalu dipecah menjadi 2 bagian. Satu bagian untuk proses tersebut dan bagian lain digunakan untuk memori yang tak terpakai,
kecuali tentu saja jika memang ukuran ruang memori tersebut sama besar dengan yang dibutuhkan oleh proses. First fit ini merupakan algoritma yang bekerja dengan cepat karena
proses pencariannya dilakukan sesedikit mungkin
2. Next Fit. Algoritma ini hampir sama persis dengan first fit, kecuali next fit meneruskan proses
pencarian terhadap lubang yang cukup besar untuk sebuah proses mulai dari lubang sebelumnya yang telah sesuai dengan proses sebelumnya. Pendek kata, algoritma ini tidak memulai pencarian
dari awal. Gambar di bawah ini mengilustrasikan sebuah contoh yang membedakan antara first fit dan next fit. Jika blok berukuran 2 dibutuhkan maka first fit akan memilih lubang pada alamat 5,
namun next fit akan memilih lubang pada 18.
Gambar 2.4. Bagian Memori dengan 5 Proses dan 3 Lubang
3. Best Fit. Best fit mencari dari keseluruhan daftar kecuali jika daftar tersebut telah terurut
berdasarkan ukuran, dan memilih lubang terkecil yang cukup untuk menampung proses yang bersangkutan. Daripada harus memecah sebuah lubang besar, yang mungkin saja dapat lebih
bermanfaat nantinya, best fit mencari lubang dengan ukuran yang hampir sama dengan yang dibutuhkan oleh proses. Strategi ini menghasilkan sisa lubang terkecil. Kekurangan best fit jika
dibandingkan dengan first fit adalah lebih lambat karena harus mencari ke seluruh tabel tiap kali dipanggil. Berdasarkan gambar diatas jika blok berukuran 2 dibutuhkan maka berdasarkan best
fit akan memilih lubang pada alamat 18 yaitu lubang terkecil yang cukup menampung permintaan proses tersebut.
4. Worst Fit. Worst fit akan mencari lubang terbesar. Sebagaimana best fit kita harus mencari dari
keseluruhan daftar kecuali jika daftar tersebut telah terurut berdasarkan ukuran. Strategi ini menghasilkan sisa lubang terbesar. Berdasarkan gambar diatas jika blok berukuran 2 dibutuhkan
maka berdasarkan worst fit akan memilih lubang pada alamat 28 yaitu lubang terbesar yang cukup menampung permintaan proses tersebut.
2.5. Fragmentasi
Fragmentasi merupakan fenomena munculnya lubang-lubang ruang memori kosong yang tidak cukup besar untuk menampung permintaan alokasi memori dari proses. Fragmentasi terdiri dari dua
jenis:
1. Fragmentasi Eksternal. Dalam kasus first fit dan juga best fit sebagaimana yang telah
dijelaskan di atas, pada saat proses dimasukkan atau dipindahkan dari memori, ruang memori yang tidak terpakai akan dipecah menjadi bagian yang kecil sisa dari alokasi sebuah proses pada
13
sebuah ruang memori. Eksternal fragmentasi terjadi apabila jumlah keseluruhan memori bebas yang tersedia cukup untuk menampung permintaan ruang memori dari sebuah proses, namun dari
ruang memori kosong tersebut terpisah-pisah sehingga proses tidak dapat menggunakannya. Hal ini sering terjadi pada alokasi penyimpanan yang dinamis. Sebagai contoh kita lihat contoh
berikut ini: Sebuah proses meminta ruang memori sebesar 9 KB namun memori telah dipartisi menjadi blok-blok dengan ukuran masing-masing 4 KB. Maka proses tersebut akan mendapatkan
bagiannya berupa 2 buah blok dengan kapasitas masing-masing 4 KB dan kapasitas tambahan sebesar 1 KB dari sebuah blok lain. Oleh karena masing-masing blok memiliki ukuran 4 KB dan
ada sebuah blok yang hanya digunakan sebesar 1 KB maka blok ini masih akan memiliki sisa kapasitas sebesar 3 KB. Sisa tersebut dapat digunakan untuk menampung proses lain yang
membutuhkannya atau jika ia terletak berurutan dengan sebuah blok kosong lain maka ia dapat digabungkan membentuk blok bebas yang lebih besar. Analisis statistik terhadap first fit
menyatakan bahwa walaupun dengan optimisasi, sejumlah N blok yang dialokasikan maka setengahnya akan terbuang atau tidak berguna karena fragmentasi yang menyebabkan lebih dari
setengah memori tidak dapat digunakan. Peristiwa ini disebut dengan 50-percent rule aturan 50 persen. Masalah fragmentasi eksternal ini dapat diatasi dengan melakukan penghalaman,
segmentasi 2 hal ini akan dijelaskan secara detail pada bab lain serta compaction pemadatan. Tujuan dari pemadatan adalah untuk mengatur ruang memori yang kosong agar terletak di posisi
yang berurutan sehingga dapat membentuk sebuah ruang memori kosong yang besar. Ruang kosong itu pada akhirnya diharapkan dapat menampung proses lain yang membutuhkan alokasi
memori.
2. Fragmentasi Internal. Fragmentasi internal terjadi ketika kapasitas memori yang diberikan ke
sebuah proses melebihi besarnya permintaan yang diajukan oleh proses. Selisih antara besarnya memori yang dialokasikan dengan besarnya permintaan proses disebut fragmentasi internal
memori yang ada di dalam sebuah partisi namun tidak digunakan. Hal ini sering terjadi pada partisi tetap karena besar lubang yang disediakan akan selalu tetap, berbeda halnya dengan sistem
partisi dinamis yang memungkinkan suatu proses untuk diberikan alokasi memori sebesar yang ia butuhkan. Contoh solusi atas kasus diatas dengan fragmentasi internal adalah proses tersebut
akan dialokasikan 3 buah blok yang masing-masing berukuran 4 KB sehingga ia akan mendapatkan jatah sebesar 12 KB, sisa 3 KB yang ada akan tetap menjadi miliknya walaupun ia
tidak menggunakannya.
2.6. Berbagi Memori
Berbagi halaman atau berbagi memori merupakan salah satu teknik yang dapat digunakan untuk menghemat pengalokasian memori. Keuntungan yang dapat diperoleh dari teknik berbagi halaman
ini adalah suatu kode dapat digunakan secara bersama-sama. Hal ini sangatlah penting dalam kondisi berbagi waktu time-sharing environment. Bayangkan jika sebuah sistem harus menangani
40 pengguna. Masing-masing dari pengguna tersebut menggunakan sebuah text editor. Jika text editor tersebut terdiri dari 150 KB kode dan 50 KB data maka ruang memori yang dibutuhkan
adalah 8000 KB. Jika text editor tersebut adalah kode reentrant programming routine yang dapat digunakan oleh banyak program secara simultan maka ia dapat digunakan secara bersama-sama
oleh beberapa program dapat dibagi. Ilustrasi berbagi halaman ini dapat dilihat pada gambar berikut ini:
Gambar 2.5. Contoh Berbagi Halaman
14
Kode reentrant dapat dieksekusi oleh 2 atau lebih proses dalam waktu yang bersamaan. Tiap-tiap proses tersebut memiliki salinan dari register dan tempat penyimpanan data untuk memperoleh data
proses yang akan dieksekusi. Oleh karena itu 2 proses berbeda akan memiliki data yang berbeda pula.
Dalam berbagi halaman, hanya satu salinan dari editor yang akan disimpan dalam memori. Tiap halaman tabel pengguna akan memetakan editornya masing-masing ke alamat fisik yang sama
namun halaman data mereka akan dipetakan ke alamat fisik yang berbeda-beda. Sehingga untuk kasus 40 pengguna diatas, kita hanya butuh satu buah salinan dari editor 150 KB serta 40 salinan
masing-masing sebesar 50 KB. Maka jumlah ruang memori yang dibutuhkan adalah 2.150 KB yang jauh lebih sedikit dibandingkan dengan 8.000 KB jika tidak menggunakan teknik berbagi memori.
Program-program lain yang dapat dilakukan pembagian memori contohnya kompilator, window systems, run-time libraries, sistem basis data dan lain-lain.
2.7. Rangkuman
Memori merupakan salah satu sumber daya yang penting dalam pengeksekusian sebuah proses. Agar suatu proses dapat dieksekusi, ia harus terletak di dalam memori sebelum CPU mengambil
instruksi-instruksi pada alamat yang ditunjuk oleh program counter.
Swapping menukarkan sebuah proses keluar dari memori untuk sementara waktu ke sebuah penyimpanan sementara biasanya berupa sebuah fast disk dengan kapasitas yang dapat menampung
semua salinan dari semua gambaran memori serta menyediakan akses langsung ke gambaran tersebut dengan sebuah proses lain yang sedang membutuhkan sejumlah alokasi memori untuk
dieksekusi. Swapping roll out, roll in menggunakan algoritma berbasis prioritas dimana ketika proses dengan prioritas lebih tinggi tiba maka memory manager akan mengeluarkan proses dengan
prioritas yang lebih rendah serta memasukkan proses dengan prioritas yang lebih tinggi tersebut.
Pemetaan memori memetakan alamat logis yang dihasilkan CPU ke alamat fisik yang nantinya akan dibawa ke memori pada saat akan dieksekusi.Pada pemetaan memori ini terdapat limit register yang
terdiri dari rentang nilai alamat logis range of logical address. Dengan adanya limit register dan register relokasi, tiap alamat logis haruslah lebih kecil dari limit register. Proses pemetaan dilakukan
oleh MMU Memory Management Unit dengan menjumlahkan nilai register relokasi ke alamat logis
15