loading...
Saturday, March 07, 2009

March 07, 2009
                                                                                                     Swap dan Alokasi Memori
Swapping
Sebuah proses harus berada di dalam memori untuk dapat dieksekusi. Sebuah proses, bagaimanapun juga, dapat di- swap sementara keluar memori ke sebuah penyimpanan sementara , dan kemudian dibawa masuk lagi ke memori untuk melanjutkan pengeksekusian. Sebagai contoh, asumsikan sebuah multiprogramming environment , dengan penjadualan algoritma penjadualan CPU round-robin . Ketika kuantum habis, pengatur memori akan mulai men- swap proses yang telah selesai, dan memasukkan proses yang lain ke dalam memori yang sudah bebas. Sementara di saat yang bersamaan, penjadual CPU akan mengalokasikan waktu untuk proses lain di dalam memori. Ketika waktu kuantum setiap proses sudah habis, proses tersebut akan di- swap dengan proses lain. Idealnya, manajer memori , dapat melakukan swapping proses-proses tersebut dengan cukup cepat sehingga beberapa proses akan selalu berada di dalam memori dan siap untuk dieksekusi saat penjadual CPU hendak menjadwal CPU. Lama kuantum pun harus cukup besar sehingga jumlah komputasi yang dilakukan selama terjadi swap cukup masuk akal.
Variasi dari kebijakan swapping ini, digunakan untuk algoritma penjadualan berbasis prioritas. Jika proses dengan prioritas lebih tinggi tiba dan meminta layanan, manajer memori dapat men- swap keluar proses-proses yang prioritasnya rendah, sehingga proses-proses yang prioritasnya lebih tinggi tersebut dapat dieksekusi. Setelah proses-proses yang memiliki prioritas lebih tinggi tersebut selesai dieksekusi, proses-proses dengan prioritas rendah dapat di- swap kembali ke dalam memori dan dilanjutkan eksekusinya. Cara ini disebut juga dengan metode roll out, roll in . 
Pada umumnya, proses yang telah di- swap keluar akan di- swap kembali menempati ruang memori yang sama dengan yang ditempatinya sebelum proses tersebut keluar dari memori. Pembatasan ini dinyatakan menurut metode pemberian alamat. Apabila pemberian alamat dilakukan pada saat waktu pembuatan atau waktu pemanggilan , maka proses tersebut tidak dapat dipindahkan ke lokasi memori lain. Tetapi apabila pemberian alamat dilakukan pada saat waktu eksekusi , maka proses tersebut dapat di- swap kembali ke dalam ruang memori yang berbeda, karena alamat fisiknya dihitung pada saat pengeksekusian .
Swapping membutuhkan sebuah penyimpanan sementara . Penyimpanan sementara pada umumnya adalah sebuah fast disk , dan harus cukup untuk menampung salinan dari seluruh gambaran memori untuk semua user , dan harus mendukung akses langsung terhadap gambaran memori tersebut. Sistem mengatur ready queue yang berisikan semua proses yang gambaran memori nya berada di memori dan siap untuk dijalankan. Saat sebuah penjadual CPU ingin menjalankan sebuah proses, ia akan memeriksa apakah proses yang mengantri di ready queue tersebut sudah berada di dalam memori tersebut atau belum. Apabila belum, penjadual CPU akan melakukan swap out terhadap proses-proses yang berada di dalam memori sehingga tersedia tempat untuk memasukkan proses yang hendak dieksekusi tersebut. Setelah itu register dikembalikan seperti semula dan proses yang diinginkan akan dieksekusi.
Waktu pergantian isi dalam sebuah sistem yang melakukan swapping pada umumnya cukup tinggi. Untuk mendapatkan gambaran mengenai waktu pergantian isi , akan diilustrasikan sebuah contoh. Misalkan ada sebuah proses sebesar 1 MB, dan media yang digunakan sebagai penyimpanan sementara adalah sebuah hard disk dengan kecepatan transfer 5 MBps. Waktu yang dibutuhkan untuk mentransfer proses 1 MB tersebut dari atau ke dalam memori adalah:
1000 KB / 5000 KBps = 1/5 detik = 200 milidetik
Apabila diasumsikan head seek tidak dibutuhkan dan rata-rata waktu latensi adalah 8 milidetik, satu proses swapping memakan waktu 208 milidetik. Karena kita harus melakukan proses swapping sebanyak 2 kali, (memasukkan dan mengeluarkan dari memori), maka keseluruhan waktu yang dibutuhkan adalah 416 milidetik.
Untuk penggunaan CPU yang efisien, kita menginginkan waktu eksekusi kita relatif panjang apabila diabndingkan dengan waktu swap kita. Sehingga, misalnya dalam penjuadualan CPU menggunakan metode round robin , kuantum yang kita tetapkan harus lebih besar dari 416 milidetik.
Bagian utama dari waktu swap adalah waktu transfer. Besar waktu transfer berhubungan langsung dengan jumlah memori yang di- swap . Jika kita mempunyai sebuah computer dengan memori utama 128 MB dan sistem operasi memakan tempat 5 MB, besar proses user maksimal adalah 123 MB. Bagaimanapun juga, proses user pada kenyataannya dapat berukuran jauh lebih kecil dari angka tersebut. Bahkan terkadang hanya berukuran 1 MB. Proses sebesar 1 MB dapat di- swap hanya dalam waktu 208 milidetik, jauh lebih cepat dibandingkan men- swap proses sebesar 123 MB yang akan menghabiskan waktu 24.6 detik. Oleh karena itu, sangatlah berguna apabila kita mengetahui dengan baik berapa besar memori yang dipakai oleh proses user , bukan sekedar dengan perkiraan saja. Setelah itu, kita dapat mengurangi besar waktu swap dengan cara hanya men- swap hanya proses-proses yang benar-benar membutuhkannya. Agar metode ini bisa dijalankan dengan efektif, user harus menjaga agar sistem selalu memiliki informasi mengenai perubahan kebutuhan memori. Oleh karena itu, proses yang membutuhkan memori dinamis harus melakukan pemanggilan sistem (permintaan memori dan pelepasan memori) untuk memberikan informasi kepada sistem operasi akan perubahan kebutuhan memori.
Swapping dipengaruhi oleh banyak faktor. Jika kita hendak men- swap suatu proses, kita harus yakin bahwa proses tersebut siap. Hal yang perlu diperhatikan adalah kemungkinan proses tersebut sedang menunggu I/O. Apabila I/O secara asinkron mengakses memori user untuk I/O buffer , maka proses tersebut tidak dapat di- swap . Bayangkan apabila sebuah operasi I/O berada dalam antrian karena peralatan I/O-nya sedang sibuk. Kemudian kita hendak mengeluarkan proses P1 dan memasukkan proses P2. Operasi I/O mungkin akan berusaha untuk memakai memori yang sekarang seharusnya akan ditempati oleh P2. Cara untuk mengatasi masalah ini adalah:
1. Hindari men- swap proses yang sedang menunggu I/O.
2. Lakukan eksekusi operasi I/O hanya di buffer sistem operasi.
Hal tersebut akan menjaga agar transfer antara buffer sistem operasi dan proses memori hanya terjadi saat si proses di- swap in .
Pada masa sekarang ini, proses swapping secara dasar hanya digunakan di sedikit sistem. Hal ini dikarenakan swapping menghabiskan terlalu banyak waktu swap dan memberikan waktu eksekusi yang terlalu kecil sebagai solusi dari manajemen memori. Akan tetapi, banyak sistem yang menggunakan versi modifikasi dari metode swapping ini.
Salah satu sistem operasi yang menggunakan versi modifikasi dari metode swapping ini adalah UNIX. Swapping berada dalam keadaan non-aktif, sampai apabila ada banyak proses yang berjalan yang menggunakan cukup besar memori. Swapping akan berhenti lagi apabila jumlah proses yang berjalan sudah berkurang.
Pada awal pengembangan komputer pribadi, tidak banyak perangkat keras (atau sistem operasi yang memanfaatkan perangkat keras) yang dapat mengimplementasikan memori manajemen yang baik, melainkan digunakan untuk menjalankan banyak proses berukuran besar dengan menggunakan versi modifikasi dari metode swapping . Salah satu contoh yang baik adalah Microsoft Windows 3.1, yang mendukung eksekusi proses berkesinambungan. Apabila suatu proses baru hendak dijalankan dan tidak terdapat cukup memori, proses yang lama perlu dimasukkan ke dalam disk . Sistem operasi ini, bagaimanapun juga, tidak mendukung swapping secara keseluruhan karena yang lebih berperan menentukan kapan proses swapping akan dilakukan adalah user dan bukan penjadual CPU. Proses-proses yang sudah dikeluarkan akan tetap berada di luar memori sampai user memilih proses yang hendak dijalankan. Sistem-sistem operasi Microsoft selanjutnya, seperti misalnya Windows NT, memanfaatkan fitur Unit Manajemen Memori.
Pengalokasian Memori
Contiguous Memory Allocation
Memori utama harus dapat melayani baik sistem operasi maupun proses user. Oleh karena itu kita harus mengalokasikan pembagian memori seefisien mungkin. Salah satunya adalah dengan cara alokasi memori berkesinambungan . Alokasi memori berkesinambungan berarti alamat memori diberikan kepada proses secara berurutan dari kecil ke besar. Keuntungan menggunakan alokasi memori berkesinambungan dibandingkan menggunakan alokasi memori tidak berkesinambungan adalah:
1. Sederhana
2. Cepat
3. Mendukung proteksi memori
Sedangkan kerugian dari menggunakan alokasi memori berkesinambungan adalah apabila tidak semua proses dialokasikan di waktu yang sama, akan menjadi sangat tidak efektif sehingga mempercepat habisnya memori.
Alokasi memori berkesinambungan dapat dilakukan baik menggunakan sistem partisi banyak, maupun menggunakan sistem partisi tunggal. Sistem partisi tunggal berarti alamat memori yang akan dialokasikan untuk proses adalah alamat memori pertama setelah pengalokasian sebelumnya. Sedangkan sistem partisi banyak berarti sistem operasi menyimpan informasi tentang semua bagian memori yang tersedia untuk dapat diisi oleh proses-proses (disebut hole ). Sistem partisi banyak kemudian dibagi lagi menjadi sistem partisi banyak tetap, dan sistem partisi banyak dinamis. Hal yang membedakan keduanya adalah untuk sistem partisi banyak tetap, memori dipartisi menjadi blok-blok yang ukurannya tetap yang ditentukan dari awal. Sedangkan sistem partisi banyak dinamis artinya memori dipartisi menjadi bagian-bagian dengan jumlah dan besar yang tidak tentu. Untuk selanjutnya, kita akan memfokuskan pembahasan pada sistem partisi banyak.
Sistem operasi menyimpan sebuah tabel yang menunjukkan bagian mana dari memori yang memungkinkan untuk menyimpan proses, dan bagian mana yang sudah diisi. Pada intinya, seluruh memori dapat diisi oleh proses user . Saat sebuah proses datang dan membutuhkan memori, CPU akan mencari hole yang cukup besar untuk menampung proses tersebut. Setelah menemukannya, CPU akan mengalokasikan memori sebanyak yang dibutuhkan oleh proses tersebut, dan mempersiapkan sisanya untuk menampung proses-proses yang akan datang kemudian (seandainya ada).
Saat proses memasuki sistem, proses akan dimasukkan ke dalam antrian masukan. Sistem operasi akan menyimpan besar memori yang dibutuhkan oleh setiap proses dan jumlah memori kosong yang tersedia, untuk menentukan proses mana yang dapat diberikan alokasi memori. Setelah sebuah proses mendapat alokasi memori, proses tersebut akan dimasukkan ke dalam memori. Setelah proses tersebut dimatikan, proses tersebut akan melepas memori tempat dia berada, yang mana dapat diisi kembali oleh proses lain dari antrian masukan.
Sistem operasi setiap saat selalu memiliki catatan jumlah memori yang tersedia dan antrian masukan. Sistem operasi dapat mengatur antrian masukan berdasarkan algoritma penjadualan yang digunakan. Memori dialokasikan untuk proses sampai akhirnya kebutuhan memori dari proses selanjutnya tidak dapat dipenuhi (tidak ada hole yang cukup besar untuk menampung proses tersebut). Sistem operasi kemudian dapat menunggu sampai ada blok memori cukup besar yang kosong, atau dapat mencari proses lain di antrian masukan yang kebutuhan memorinya memenuhi jumlah memori yang tersedia.
Pada umumnya, kumpulan hole-hole dalam berbagai ukuran tersebar di seluruh memori sepanjang waktu. Apabila ada proses yang datang, sistem operasi akan mencari hole yang cukup besar untuk menampung memori tersebut. Apabila hole yang tersedia terlalu besar, akan dipecah menjadi 2. Satu bagian akan dialokasikan untuk menerima proses tersebut, sementara bagian lainnya tidak digunakan dan siap menampung proses lain. Setelah proses selesai, proses tersebut akan melepas memori dan mengembalikannya sebagai hole-hole . Apabila ada 2 hole yang kecil yang berdekatan, keduanya akan bergabung untuk membentuk hole yang lebih besar. Pada saat ini, sistem harus memeriksa apakah ada proses yang menunggu yang dapat dimasukkan ke dalam ruang memori yang baru terbentuk tersebut.

Hal ini disebut Permasalahan alokasi penyimpanan dinamis, yakni bagaimana memenuhi permintaan sebesar n dari kumpulan hole-hole yang tersedia. Ada berbagai solusi untuk mengatasi hal ini, yaitu:
1. First fit : Mengalokasikan hole pertama ditemukan yang besarnya mencukupi. Pencarian dimulai dari awal.
2. Best fit : Mengalokasikan hole dengan besar minimum yang mencukupi permintaan.
3. Next fit : Mengalokasikan hole pertama ditemukan yang besarnya mencukupi. Pencarian dimulai dari akhir pencarian sebelumnya.
4. Worst fit : Mengalokasikan hole terbesar yang ada.
Gambar 5-3. 
 
Memilih yang terbaik diantara keempat metode diatas adalah sepenuhnya tergantung kepada user , karena setiap metode memiliki kelebihan dan kekurangan masing-masing. Menggunakan best fit dan worst fit berarti kita harus selalu memulai pencarian hole dari awal, kecuali apabila hole-hole sudah disusun berdasarkan ukuran. Metode worst fit akan menghasilkan sisa hole yang tersbesar, sementara metode best fit akan menghasilkan sisa hole yang terkecil.
Fragmentasi
Fragmentasi adalah munculnya hole-hole yang tidak cukup besar untuk menampung permintaan dari proses. Fragmentasi dapat berupa fragmentasi internal maupun fragmentasi eksternal. Fragmentasi ekstern muncul apabila jumlah keseluruhan memori kosong yang tersedia memang mencukupi untuk menampung permintaan tempat dari proses, tetapi letaknya tidak berkesinambungan atau terpecah menjadi beberapa bagian kecil sehingga proses tidak dapat masuk. Sedangkan fragmentasi intern muncul apabila jumlah memori yang diberikan oleh penjadual CPU untuk ditempati proses lebih besar daripada yang diminta proses karena adanya selisih antara permintaan proses dengan alokasi hole yang sudah ditetapkan.
Algoritma alokasi penyimpanan dinamis manapun yang digunakan, tetap tidak bisa menutup kemungkinan terjadinya fragmentasi. Bahkan hal ini bisa menjadi fatal. Salah satu kondisi terburuk adalah apabila kita memiliki memori terbuang setiap 2 proses. Apabila semua memori terbuang itu digabungkan, bukan tidak mungkin akan cukup untuk menampung sebuah proses. Sebuah contoh statistik menunjukkan bahwa saat menggunakan metode first fit , bahkan setelah dioptimisasi, dari N blok teralokasi, sebanyak 0.5N blok lain akan terbuang karena fragmentasi. Jumlah sebanyak itu berarti kurang lebih setengah dari memori tidak dapat digunakan. Hal ini disebut dengan aturan 50% .
Fragmentasi ekstern dapat diatasi dengan beberapa cara, diantaranya adalah:
1. Compactation , yaitu mengatur kembali isi memori agar memori yang kosong diletakkan bersama di suatu bagian yang besar, sehingga proses dapat masuk ke ruang memori kosong tersebut.
2. Penghalamanan 
3. Segmentasi 
Fragmentasi intern hampir tidak dapat dihindarkan apabila kita menggunakan sistem partisi banyak berukuran tetap, mengingat besar hole yang disediakan selalu tetap





0 comments:

Post a Comment