Anda di halaman 1dari 6

Memory Management

Memori utama (RAM) adalah sumber daya penting yang harus dikelola dengan sangat hati-hati.
Sementara rata-rata komputer rumahan saat ini memiliki memori 10.000 kali lebih banyak
daripada IBM 7094, komputer terbesar di dunia pada awal 1960-an, program menjadi lebih besar
lebih cepat daripada memori. Mengutip Hukum Parkinson, '' Program diperluas untuk mengisi
memori yang tersedia untuk menampungnya.''
3.1 TANPA RINGKASAN MEMORI
Abstraksi memori yang paling sederhana adalah tidak memiliki abstraksi sama sekali. Komputer
mainframe awal (sebelum 1960), komputer mini awal (sebelum 1970), dan komputer pribadi awal
(sebelum 1980) tidak memiliki abstraksi memori. Setiap program hanya melihat memori fisik.
Ketika sebuah program mengeksekusi instruksi seperti
MOV REGISTER1,1000 komputer baru saja memindahkan isi lokasi memori fisik 1000 ke
REGISTER1. Dengan demikian, model memori yang disajikan kepada pemrogram hanyalah
memori fisik, satu set alamat dari 0 hingga maksimum, setiap alamat sesuai dengan sel yang
berisi sejumlah bit, biasanya delapan. Dalam kondisi ini, tidak mungkin memiliki dua program
yang berjalan di memori pada saat yang bersamaan. Jika program pertama menulis nilai baru ke,
katakanlah, lokasi 2000, ini akan menghapus nilai apa pun yang disimpan oleh program kedua di
sana. Tidak ada yang akan berhasil dan kedua program akan segera crash. Bahkan dengan model
memori yang hanya berupa memori fisik, beberapa opsi dimungkinkan. Sistem operasi mungkin
berada di bagian bawah memori dalam RAM (Random Access Memory). Model pertama
sebelumnya digunakan pada mainframe dan minicomputer tetapi sudah jarang digunakan lagi.
Model kedua digunakan pada beberapa komputer genggam dan sistem tertanam. Model ketiga
digunakan oleh komputer pribadi awal (misalnya, menjalankan MSDOS), di mana bagian dari
sistem dalam ROM disebut BIOS (Basic Input Output System). Model (a) dan (c) memiliki
kelemahan yaitu bug dalam program pengguna dapat menghapus sistem operasi, mungkin dengan
hasil yang membawa malapetaka. Ketika sistem diatur dengan cara ini, umumnya hanya satu
proses pada satu waktu yang dapat berjalan. Segera setelah pengguna mengetik perintah, sistem
operasi menyalin program yang diminta dari disk ke memori dan menjalankannya. Ketika proses
selesai, sistem operasi menampilkan karakter prompt dan menunggu perintah baru pengguna.
Ketika sistem operasi menerima perintah, itu memuat program baru ke dalam memori, menimpa
yang pertama.
Salah satu cara untuk mendapatkan paralelisme dalam sistem tanpa abstraksi memori adalah
memprogram dengan banyak utas. Karena semua utas dalam suatu proses seharusnya melihat
gambar memori yang sama, fakta bahwa mereka dipaksa untuk tidak menjadi masalah. Meskipun
ide ini berhasil, penggunaannya terbatas karena apa yang sering diinginkan orang adalah program
yang tidak terkait dijalankan pada saat yang sama, sesuatu yang tidak disediakan oleh abstraksi
utas. Selain itu, sistem apa pun yang sangat primitif sehingga tidak memberikan abstraksi memori
tidak mungkin menyediakan abstraksi utas.
Menjalankan Banyak Program Tanpa Abstraksi Memori
Namun, bahkan tanpa abstraksi memori, dimungkinkan untuk menjalankan beberapa program
secara bersamaan. Yang harus dilakukan oleh sistem operasi adalah menyimpan seluruh isi
memori ke dalam file disk, lalu memasukkan dan menjalankan program berikutnya. Selama
hanya ada satu program pada satu waktu dalam memori, tidak ada konflik. Dengan penambahan
beberapa perangkat keras khusus, dimungkinkan untuk menjalankan beberapa program secara
bersamaan, bahkan tanpa bertukar. Model awal IBM 360 memecahkan masalah sebagai berikut.
Memori dibagi menjadi blok 2-KB dan masing-masing diberi kunci perlindungan 4-bit yang
disimpan di register khusus di dalam CPU. Sebuah mesin dengan memori 1-MB hanya
membutuhkan 512 register 4-bit ini untuk total 256 byte penyimpanan kunci. PSW (Program
Status Word) juga berisi kunci 4-bit. Perangkat keras 360 menjebak setiap upaya oleh proses yang
sedang berjalan untuk mengakses memori dengan kode perlindungan yang berbeda dari kunci
PSW. Karena hanya sistem operasi yang dapat mengubah kunci perlindungan, proses pengguna
dicegah untuk saling mengganggu dan dengan sistem operasi itu sendiri. Namun demikian, solusi
ini memiliki kelemahan utama, memiliki dua program, masing-masing berukuran 16 KB.
Setelah program dimuat, mereka dapat dijalankan. Karena mereka memiliki kunci memori yang
berbeda, tidak satu pun dapat merusak yang lain. Tetapi masalahnya adalah sifat yang berbeda.
Ketika program pertama dimulai, ia mengeksekusi instruksi JMP 24, yang melompat ke instruksi,
seperti yang diharapkan. Program ini berfungsi normal. Namun, setelah program pertama berjalan
cukup lama, sistem operasi dapat memutuskan untuk menjalankan program kedua, yang telah
dimuat di atas yang pertama, di alamat 16.384. Instruksi pertama yang dieksekusi adalah JMP 28,
yang melompat ke instruksi ADD di program pertama, alih-alih instruksi CMP yang seharusnya
dilompati. Program kemungkinan besar akan macet dalam waktu kurang dari 1 detik. Masalah inti
di sini adalah bahwa kedua program sama-sama merujuk pada memori fisik absolut.
MOV REGISTER1,28 yang memindahkan angka 28 ke REGISTER1 tidak boleh direlokasi.
Loader memerlukan beberapa cara untuk mengetahui apa itu alamat dan apa itu konstanta.
Akhirnya, seperti yang kami tunjukkan di Bab. 1, sejarah cenderung berulang di dunia komputer.
Sementara pengalamatan langsung memori fisik hanyalah memori yang jauh pada mainframe,
minicomputer, komputer desktop, notebook, dan smartphone, kurangnya abstraksi memori masih
umum di sistem embedded dan smart card. Perangkat seperti radio, mesin cuci, dan oven
microwave semuanya penuh dengan perangkat lunak (dalam ROM) akhir-akhir ini, dan dalam
banyak kasus perangkat lunak tersebut menangani memori absolut. Ini berfungsi karena semua
program sudah diketahui sebelumnya dan pengguna tidak bebas menjalankan perangkat lunak
mereka sendiri di pemanggang roti mereka. Sementara sistem tertanam kelas atas (seperti
smartphone) memiliki sistem operasi yang rumit, yang lebih sederhana tidak. Dalam beberapa
kasus, ada sistem operasi, tetapi hanya perpustakaan yang terhubung dengan program aplikasi
dan menyediakan panggilan sistem untuk melakukan I/O dan tugas umum lainnya. Sistem operasi
e-Cos adalah contoh umum dari sistem operasi sebagai perpustakaan.
3.2 ABSTRAKSI MEMORI: RUANG ALAMAT
Secara keseluruhan, mengekspos memori fisik ke proses memiliki beberapa kelemahan utama.
Pertama, jika program pengguna dapat menangani setiap byte memori, mereka dapat dengan
mudah membuang sistem operasi, sengaja atau tidak sengaja, membuat sistem berhenti bekerja
(kecuali ada perangkat keras khusus seperti skema kunci dan kunci IBM 360). Masalah ini ada
bahkan jika hanya satu program pengguna (aplikasi) yang berjalan. Kedua, dengan model ini,
sulit untuk menjalankan beberapa program sekaligus (bergiliran, jika hanya ada satu CPU). Pada
komputer pribadi, adalah umum untuk membuka beberapa program sekaligus (pengolah kata,
program email, browser Web), salah satunya memiliki fokus saat ini, tetapi yang lain diaktifkan
kembali dengan mengklik mouse. Karena situasi ini sulit dicapai ketika tidak ada abstraksi dari
memori fisik, sesuatu harus dilakukan.
3.2.1 Pengertian Ruang Alamat
Dua masalah harus dipecahkan untuk memungkinkan beberapa aplikasi berada di memori pada
saat yang sama tanpa mengganggu satu sama lain: perlindungan dan relokasi. Kami melihat
solusi primitif untuk solusi pertama yang digunakan pada IBM 360: memberi label potongan
memori dengan kunci perlindungan dan membandingkan kunci proses eksekusi dengan kunci
setiap kata memori yang diambil. Namun, pendekatan ini dengan sendirinya tidak menyelesaikan
masalah terakhir, meskipun dapat diselesaikan dengan merelokasi program saat dimuat, tetapi ini
adalah solusi yang lambat dan rumit. Solusi yang lebih baik adalah menciptakan abstraksi baru
untuk memori: ruang alamat. Sama seperti konsep proses yang menciptakan semacam CPU
abstrak untuk menjalankan program, ruang alamat menciptakan semacam memori abstrak untuk
program tempat tinggal. Ruang alamat adalah kumpulan alamat yang dapat digunakan suatu
proses untuk mengalamati memori. Setiap proses memiliki ruang alamatnya sendiri, tidak
tergantung pada proses lainnya (kecuali dalam beberapa keadaan khusus di mana proses ingin
berbagi ruang alamatnya). Konsep ruang alamat sangat umum dan terjadi dalam banyak konteks.
Pertimbangkan nomor telepon. Di Amerika Serikat dan banyak negara lain, nomor telepon lokal
biasanya berupa nomor 7 digit. Ruang alamat untuk nomor telepon dengan demikian berjalan dari
0.000.000 hingga 9.999.999, meskipun beberapa nomor, seperti yang dimulai dengan 000 tidak
digunakan. Dengan pertumbuhan smartphone, modem, dan mesin faks, ruang ini menjadi terlalu
kecil, dalam hal ini lebih banyak digit harus digunakan. Ruang alamat untuk port I/O pada x86
berjalan dari 0 hingga 16383. Alamat IPv4 adalah nomor 32-bit, jadi ruang alamatnya berjalan dari
0 hingga 232 1 (sekali lagi, dengan beberapa nomor yang dicadangkan). Spasi alamat tidak harus
numerik. Kumpulan domain Internet .com juga merupakan ruang alamat. Ruang alamat ini terdiri
dari semua string dengan panjang 2 hingga 63 karakter yang dapat dibuat menggunakan huruf,
angka, dan tanda hubung, diikuti oleh .com.
Register Basis dan Batas
Solusi sederhana ini menggunakan versi relokasi dinamis yang sangat sederhana. Apa yang
dilakukannya adalah memetakan ruang alamat setiap proses ke bagian memori fisik yang berbeda
dengan cara yang sederhana. Solusi klasik, yang digunakan pada mesin mulai dari CDC 6600
(superkomputer pertama di dunia) hingga Intel 8088 (jantung dari IBM PC asli), adalah untuk
melengkapi setiap CPU dengan dua register perangkat keras khusus, biasanya disebut basis dan
membatasi register. Ketika register ini digunakan,
program dimuat ke lokasi memori berurutan di mana pun ada ruang dan tanpa relokasi selama
pemuatan. Ketika suatu proses dijalankan, register dasar dimuat dengan alamat fisik tempat
programnya dimulai di memori dan register batas dimuat dengan panjang program. Nilai dasar
dan batas yang akan dimuat ke dalam register perangkat keras ini ketika program pertama
dijalankan adalah 0 dan 16.384 masing-masing. Nilai yang digunakan saat program kedua
dijalankan berturut-turut adalah 16.384 dan 32.768. Jika program 16-KB ketiga dimuat langsung di
atas yang kedua dan dijalankan, register dasar dan batas akan menjadi 32.768 dan 16.384. Setiap
kali suatu proses mereferensikan memori, baik untuk mengambil instruksi atau membaca atau
menulis kata data, perangkat keras CPU secara otomatis menambahkan nilai dasar ke alamat yang
dihasilkan oleh proses sebelum mengirim alamat keluar pada bus memori. Secara bersamaan, ia
memeriksa apakah alamat yang ditawarkan sama dengan atau lebih besar dari nilai dalam register
batas, dalam hal ini kesalahan dihasilkan dan akses dibatalkan.
instruksi JMP 28, tetapi perangkat keras memperlakukannya seolah-olah
JMP 16412 sehingga mendarat di instruksi CMP seperti yang diharapkan. Register dasar dan
register batas dilindungi sedemikian rupa sehingga hanya sistem operasi yang dapat
memodifikasinya. Ini adalah kasus pada CDC 6600, tetapi tidak pada Intel 8088, yang bahkan
tidak memiliki register batas. Itu memang memiliki beberapa register dasar, memungkinkan teks
dan data program, misalnya, untuk dipindahkan secara independen, tetapi tidak menawarkan
perlindungan dari referensi memori di luar jangkauan. Kerugian dari relokasi menggunakan
register basis dan limit adalah perlunya melakukan penambahan dan perbandingan pada setiap
referensi memori. Perbandingan dapat dilakukan dengan cepat, tetapi penambahan menjadi
lambat karena waktu rambat-bawaan kecuali jika digunakan rangkaian tambahan khusus.
3.2.2 Bertukar
Jika memori fisik komputer cukup besar untuk menampung semua proses, skema yang dijelaskan
sejauh ini kurang lebih bisa. Namun dalam praktiknya, jumlah total RAM yang dibutuhkan oleh
semua proses seringkali jauh lebih banyak daripada yang dapat ditampung dalam memori. Pada
sistem Windows, OS X, atau Linux biasa, kira-kira 50–100
proses atau lebih dapat dimulai segera setelah komputer di-boot. Misalnya, ketika aplikasi
Windows diinstal, sering kali mengeluarkan perintah sehingga pada boot sistem berikutnya,
proses akan dimulai yang tidak melakukan apa pun kecuali memeriksa pembaruan pada aplikasi.
Proses seperti itu dapat dengan mudah menempati memori 5-10 MB. Proses latar belakang
lainnya memeriksa email masuk, koneksi jaringan masuk, dan banyak hal lainnya. Dan semua ini
sebelum program pengguna pertama dimulai. Program aplikasi pengguna yang serius saat ini,
seperti Photoshop, dapat dengan mudah membutuhkan 500 MB hanya untuk boot dan banyak
gigabyte setelah mereka mulai memproses data. Akibatnya, menyimpan semua proses dalam
memori sepanjang waktu membutuhkan sejumlah besar memori dan tidak dapat dilakukan jika
memori tidak mencukupi. Dua pendekatan umum untuk menangani kelebihan memori telah
dikembangkan selama bertahun-tahun. Strategi paling sederhana, yang disebut swapping, terdiri
dari memasukkan setiap proses secara keseluruhan, menjalankannya sebentar, lalu
meletakkannya kembali di disk. Proses idle sebagian besar disimpan di disk, sehingga tidak
memakan memori apa pun saat tidak berjalan (walaupun beberapa dari mereka bangun secara
berkala untuk melakukan pekerjaannya, lalu tidur lagi). Strategi lain, yang disebut memori virtual,
memungkinkan program untuk berjalan bahkan ketika mereka hanya sebagian di memori utama.
Saat swapping menciptakan banyak lubang di memori, dimungkinkan untuk menggabungkan
semuanya menjadi satu lubang besar dengan memindahkan semua proses ke bawah sejauh
mungkin. Teknik ini dikenal sebagai pemadatan memori. Biasanya tidak dilakukan karena
membutuhkan banyak waktu CPU. Misalnya, pada mesin 16 GB yang dapat menyalin 8 byte
dalam 8 nsec, dibutuhkan sekitar 16 detik untuk memadatkan semua memori. Poin penting yang
perlu diperhatikan adalah berapa banyak memori yang harus dialokasikan untuk suatu proses saat
proses tersebut dibuat atau ditukar. Jika proses dibuat dengan ukuran tetap yang tidak pernah
berubah, maka alokasinya sederhana: sistem operasi mengalokasikan dengan tepat apa yang
dibutuhkan , tidak lebih dan tidak kurang.
Jika diharapkan bahwa sebagian besar proses akan tumbuh saat berjalan, mungkin ide yang baik
untuk mengalokasikan sedikit memori ekstra setiap kali suatu proses ditukar atau dipindahkan,
untuk mengurangi overhead yang terkait dengan proses pemindahan atau pertukaran yang tidak
lagi sesuai dengan prosesnya. memori yang dialokasikan. Namun, saat menukar proses ke disk,
hanya memori yang benar-benar digunakan yang harus ditukar; itu boros untuk menukar memori
ekstra juga.
Jika proses dapat memiliki dua segmen yang berkembang—misalnya, segmen data yang
digunakan sebagai tumpukan untuk variabel yang dialokasikan dan dirilis secara dinamis dan
segmen tumpukan untuk variabel lokal normal dan alamat pengirim—pengaturan alternatif
menyarankan dirinya sendiri.
3.2.3 Mengelola Memori Gratis
Ketika memori ditetapkan secara dinamis, sistem operasi harus mengelolanya. Secara umum, ada
dua cara untuk melacak penggunaan memori.
Manajemen Memori dengan Bitmap
Dengan bitmap, memori dibagi menjadi unit alokasi sekecil beberapa kata dan sebesar beberapa
kilobyte. Sesuai dengan setiap unit alokasi adalah bit dalam bitmap, yaitu 0 jika unit bebas dan 1
jika ditempati (atau sebaliknya). Memori dan bitmap yang sesuai Ukuran unit alokasi merupakan
masalah desain yang penting. Semakin kecil unit alokasi, semakin besar bitmap. Namun, bahkan
dengan unit alokasi sekecil 4 byte, memori 32 bit hanya akan membutuhkan 1 bit peta. Memori
32n bit akan menggunakan n bit peta, sehingga bitmap hanya akan memakan 1/32 memori. Jika
unit alokasi dipilih besar, bitmap akan lebih kecil, tetapi memori yang cukup besar dapat terbuang
di unit terakhir dari proses jika ukuran proses bukan kelipatan tepat dari unit alokasi. Bitmap
menyediakan cara sederhana untuk melacak kata-kata memori dalam jumlah memori yang tetap
karena ukuran bitmap hanya bergantung pada ukuran memori dan ukuran unit alokasi. Masalah
utama adalah bahwa ketika telah diputuskan untuk membawa proses k-unit ke dalam memori,
manajer memori harus mencari bitmap untuk menemukan run dari k 0 bit berturut-turut di peta.
Mencari bitmap untuk run dengan panjang tertentu adalah operasi yang lambat (karena run
mungkin melintasi batas kata di peta).
Manajemen Memori dengan Daftar Tertaut
Cara lain untuk melacak memori adalah dengan memelihara daftar tertaut dari segmen memori
yang dialokasikan dan bebas, di mana segmen berisi proses atau lubang kosong di antara dua
proses. Setiap entri dalam daftar menentukan lubang (H) atau proses (P), alamat di mana itu
dimulai, panjangnya, dan penunjuk ke item berikutnya. Dalam contoh ini, daftar segmen
disimpan diurutkan berdasarkan alamat. Penyortiran dengan cara ini memiliki keuntungan bahwa
ketika suatu proses dihentikan atau ditukar, memperbarui daftar menjadi mudah. Proses terminasi
biasanya memiliki dua tetangga (kecuali jika berada di bagian paling atas atau paling bawah dari
memori).
Ketika proses dan lubang disimpan pada daftar yang diurutkan berdasarkan alamat, beberapa
algoritma dapat digunakan untuk mengalokasikan memori untuk proses yang dibuat (atau proses
yang ada ditukar dari disk). Manajer memori memindai daftar segmen sampai menemukan lubang
yang cukup besar. Lubang tersebut kemudian dipecah menjadi dua bagian, satu untuk proses dan
satu untuk memori yang tidak digunakan, kecuali dalam kasus kecocokan yang tidak mungkin
secara statistik. First fit adalah algoritma yang cepat karena pencariannya sesedikit mungkin.
Variasi kecil dari kecocokan pertama adalah kecocokan berikutnya. Ini bekerja dengan cara yang
sama seperti fit pertama, kecuali bahwa ia melacak di mana ia berada setiap kali ia menemukan
lubang yang cocok. Simulasi oleh Bays (1977) menunjukkan bahwa kecocokan berikutnya
memberikan kinerja yang sedikit lebih buruk daripada kecocokan pertama.
Algoritma lain yang terkenal dan banyak digunakan adalah yang paling cocok. Paling cocok
mencari seluruh daftar, dari awal sampai akhir, dan mengambil lubang terkecil yang memadai.
Daripada memecah lubang besar yang mungkin diperlukan nanti, best fit mencoba menemukan
lubang yang mendekati ukuran sebenarnya yang dibutuhkan, agar sesuai dengan permintaan dan
lubang yang tersedia. Jika blok ukuran 2 diperlukan, fit pertama akan mengalokasikan lubang di 5,
tetapi paling cocok akan mengalokasikan lubang di 18. Best fit lebih lambat dari fit pertama
karena harus mencari seluruh daftar setiap kali dipanggil.

Anda mungkin juga menyukai